@paths.design/caws-cli 10.1.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +43 -756
  3. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  4. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  5. package/dist/shell/binding/resolve-binding.js +228 -0
  6. package/dist/shell/binding/resolve-binding.js.map +1 -0
  7. package/dist/shell/binding/types.d.ts +42 -0
  8. package/dist/shell/binding/types.d.ts.map +1 -0
  9. package/dist/shell/binding/types.js +21 -0
  10. package/dist/shell/binding/types.js.map +1 -0
  11. package/dist/shell/commands/claim.d.ts +14 -0
  12. package/dist/shell/commands/claim.d.ts.map +1 -0
  13. package/dist/shell/commands/claim.js +197 -0
  14. package/dist/shell/commands/claim.js.map +1 -0
  15. package/dist/shell/commands/doctor.d.ts +13 -0
  16. package/dist/shell/commands/doctor.d.ts.map +1 -0
  17. package/dist/shell/commands/doctor.js +97 -0
  18. package/dist/shell/commands/doctor.js.map +1 -0
  19. package/dist/shell/commands/evidence.d.ts +28 -0
  20. package/dist/shell/commands/evidence.d.ts.map +1 -0
  21. package/dist/shell/commands/evidence.js +166 -0
  22. package/dist/shell/commands/evidence.js.map +1 -0
  23. package/dist/shell/commands/gates.d.ts +19 -0
  24. package/dist/shell/commands/gates.d.ts.map +1 -0
  25. package/dist/shell/commands/gates.js +181 -0
  26. package/dist/shell/commands/gates.js.map +1 -0
  27. package/dist/shell/commands/init.d.ts +8 -0
  28. package/dist/shell/commands/init.d.ts.map +1 -0
  29. package/dist/shell/commands/init.js +64 -0
  30. package/dist/shell/commands/init.js.map +1 -0
  31. package/dist/shell/commands/scope.d.ts +11 -0
  32. package/dist/shell/commands/scope.d.ts.map +1 -0
  33. package/dist/shell/commands/scope.js +92 -0
  34. package/dist/shell/commands/scope.js.map +1 -0
  35. package/dist/shell/commands/status.d.ts +15 -0
  36. package/dist/shell/commands/status.d.ts.map +1 -0
  37. package/dist/shell/commands/status.js +106 -0
  38. package/dist/shell/commands/status.js.map +1 -0
  39. package/dist/shell/commands/waiver.d.ts +38 -0
  40. package/dist/shell/commands/waiver.d.ts.map +1 -0
  41. package/dist/shell/commands/waiver.js +240 -0
  42. package/dist/shell/commands/waiver.js.map +1 -0
  43. package/dist/shell/gates/disposition.d.ts +23 -0
  44. package/dist/shell/gates/disposition.d.ts.map +1 -0
  45. package/dist/shell/gates/disposition.js +87 -0
  46. package/dist/shell/gates/disposition.js.map +1 -0
  47. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  48. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  49. package/dist/shell/gates/gate-result-contract.js +150 -0
  50. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  51. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  52. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  53. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  54. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  55. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  56. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  57. package/dist/shell/gates/waiver-filter.js +119 -0
  58. package/dist/shell/gates/waiver-filter.js.map +1 -0
  59. package/dist/shell/index.d.ts +50 -0
  60. package/dist/shell/index.d.ts.map +1 -0
  61. package/dist/shell/index.js +73 -0
  62. package/dist/shell/index.js.map +1 -0
  63. package/dist/shell/register.d.ts +11 -0
  64. package/dist/shell/register.d.ts.map +1 -0
  65. package/dist/shell/register.js +274 -0
  66. package/dist/shell/register.js.map +1 -0
  67. package/dist/shell/render/claim.d.ts +22 -0
  68. package/dist/shell/render/claim.d.ts.map +1 -0
  69. package/dist/shell/render/claim.js +75 -0
  70. package/dist/shell/render/claim.js.map +1 -0
  71. package/dist/shell/render/decision.d.ts +15 -0
  72. package/dist/shell/render/decision.d.ts.map +1 -0
  73. package/dist/shell/render/decision.js +66 -0
  74. package/dist/shell/render/decision.js.map +1 -0
  75. package/dist/shell/render/diagnostic.d.ts +19 -0
  76. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  77. package/dist/shell/render/diagnostic.js +76 -0
  78. package/dist/shell/render/diagnostic.js.map +1 -0
  79. package/dist/shell/render/finding.d.ts +15 -0
  80. package/dist/shell/render/finding.d.ts.map +1 -0
  81. package/dist/shell/render/finding.js +57 -0
  82. package/dist/shell/render/finding.js.map +1 -0
  83. package/dist/shell/render/gates.d.ts +3 -0
  84. package/dist/shell/render/gates.d.ts.map +1 -0
  85. package/dist/shell/render/gates.js +56 -0
  86. package/dist/shell/render/gates.js.map +1 -0
  87. package/dist/shell/render/init.d.ts +11 -0
  88. package/dist/shell/render/init.d.ts.map +1 -0
  89. package/dist/shell/render/init.js +32 -0
  90. package/dist/shell/render/init.js.map +1 -0
  91. package/dist/shell/render/status.d.ts +26 -0
  92. package/dist/shell/render/status.d.ts.map +1 -0
  93. package/dist/shell/render/status.js +143 -0
  94. package/dist/shell/render/status.js.map +1 -0
  95. package/dist/shell/render/waiver.d.ts +21 -0
  96. package/dist/shell/render/waiver.d.ts.map +1 -0
  97. package/dist/shell/render/waiver.js +94 -0
  98. package/dist/shell/render/waiver.js.map +1 -0
  99. package/dist/shell/rules.d.ts +37 -0
  100. package/dist/shell/rules.d.ts.map +1 -0
  101. package/dist/shell/rules.js +51 -0
  102. package/dist/shell/rules.js.map +1 -0
  103. package/dist/shell/session/actor.d.ts +14 -0
  104. package/dist/shell/session/actor.d.ts.map +1 -0
  105. package/dist/shell/session/actor.js +34 -0
  106. package/dist/shell/session/actor.js.map +1 -0
  107. package/dist/shell/session/resolve-session.d.ts +5 -0
  108. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  109. package/dist/shell/session/resolve-session.js +239 -0
  110. package/dist/shell/session/resolve-session.js.map +1 -0
  111. package/dist/shell/session/types.d.ts +56 -0
  112. package/dist/shell/session/types.d.ts.map +1 -0
  113. package/dist/shell/session/types.js +15 -0
  114. package/dist/shell/session/types.js.map +1 -0
  115. package/dist/store/agents-store.d.ts +3 -0
  116. package/dist/store/agents-store.d.ts.map +1 -0
  117. package/dist/store/agents-store.js +63 -0
  118. package/dist/store/agents-store.js.map +1 -0
  119. package/dist/store/apply-patch.d.ts +16 -0
  120. package/dist/store/apply-patch.d.ts.map +1 -0
  121. package/dist/store/apply-patch.js +191 -0
  122. package/dist/store/apply-patch.js.map +1 -0
  123. package/dist/store/atomic-write.d.ts +16 -0
  124. package/dist/store/atomic-write.d.ts.map +1 -0
  125. package/dist/store/atomic-write.js +132 -0
  126. package/dist/store/atomic-write.js.map +1 -0
  127. package/dist/store/doctor-snapshot.d.ts +20 -0
  128. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  129. package/dist/store/doctor-snapshot.js +176 -0
  130. package/dist/store/doctor-snapshot.js.map +1 -0
  131. package/dist/store/events-store.d.ts +33 -0
  132. package/dist/store/events-store.d.ts.map +1 -0
  133. package/dist/store/events-store.js +297 -0
  134. package/dist/store/events-store.js.map +1 -0
  135. package/dist/store/index.d.ts +21 -0
  136. package/dist/store/index.d.ts.map +1 -0
  137. package/dist/store/index.js +47 -0
  138. package/dist/store/index.js.map +1 -0
  139. package/dist/store/init-store.d.ts +21 -0
  140. package/dist/store/init-store.d.ts.map +1 -0
  141. package/dist/store/init-store.js +295 -0
  142. package/dist/store/init-store.js.map +1 -0
  143. package/dist/store/json-store.d.ts +3 -0
  144. package/dist/store/json-store.d.ts.map +1 -0
  145. package/dist/store/json-store.js +65 -0
  146. package/dist/store/json-store.js.map +1 -0
  147. package/dist/store/policy-store.d.ts +3 -0
  148. package/dist/store/policy-store.d.ts.map +1 -0
  149. package/dist/store/policy-store.js +65 -0
  150. package/dist/store/policy-store.js.map +1 -0
  151. package/dist/store/repo-root.d.ts +46 -0
  152. package/dist/store/repo-root.d.ts.map +1 -0
  153. package/dist/store/repo-root.js +145 -0
  154. package/dist/store/repo-root.js.map +1 -0
  155. package/dist/store/rules.d.ts +53 -0
  156. package/dist/store/rules.d.ts.map +1 -0
  157. package/dist/store/rules.js +78 -0
  158. package/dist/store/rules.js.map +1 -0
  159. package/dist/store/specs-store.d.ts +3 -0
  160. package/dist/store/specs-store.d.ts.map +1 -0
  161. package/dist/store/specs-store.js +131 -0
  162. package/dist/store/specs-store.js.map +1 -0
  163. package/dist/store/types.d.ts +84 -0
  164. package/dist/store/types.d.ts.map +1 -0
  165. package/dist/store/types.js +14 -0
  166. package/dist/store/types.js.map +1 -0
  167. package/dist/store/waivers-store.d.ts +25 -0
  168. package/dist/store/waivers-store.d.ts.map +1 -0
  169. package/dist/store/waivers-store.js +232 -0
  170. package/dist/store/waivers-store.js.map +1 -0
  171. package/dist/store/worktrees-store.d.ts +3 -0
  172. package/dist/store/worktrees-store.d.ts.map +1 -0
  173. package/dist/store/worktrees-store.js +62 -0
  174. package/dist/store/worktrees-store.js.map +1 -0
  175. package/dist/store/yaml-store.d.ts +9 -0
  176. package/dist/store/yaml-store.d.ts.map +1 -0
  177. package/dist/store/yaml-store.js +121 -0
  178. package/dist/store/yaml-store.js.map +1 -0
  179. package/package.json +15 -13
  180. package/dist/budget-derivation.js +0 -751
  181. package/dist/cicd-optimizer.js +0 -504
  182. package/dist/commands/archive.js +0 -500
  183. package/dist/commands/burnup.js +0 -198
  184. package/dist/commands/diagnose.js +0 -525
  185. package/dist/commands/evaluate.js +0 -314
  186. package/dist/commands/gates.js +0 -149
  187. package/dist/commands/init.js +0 -857
  188. package/dist/commands/iterate.js +0 -417
  189. package/dist/commands/mode.js +0 -269
  190. package/dist/commands/parallel.js +0 -242
  191. package/dist/commands/plan.js +0 -438
  192. package/dist/commands/provenance.js +0 -1143
  193. package/dist/commands/quality-monitor.js +0 -284
  194. package/dist/commands/scope.js +0 -264
  195. package/dist/commands/session.js +0 -312
  196. package/dist/commands/sidecar.js +0 -74
  197. package/dist/commands/specs.js +0 -1448
  198. package/dist/commands/status.js +0 -1151
  199. package/dist/commands/templates.js +0 -237
  200. package/dist/commands/tool.js +0 -136
  201. package/dist/commands/tutorial.js +0 -480
  202. package/dist/commands/validate.js +0 -357
  203. package/dist/commands/verify-acs.js +0 -443
  204. package/dist/commands/waivers.js +0 -599
  205. package/dist/commands/workflow.js +0 -243
  206. package/dist/commands/worktree.js +0 -386
  207. package/dist/config/lite-scope.js +0 -158
  208. package/dist/config/modes.js +0 -347
  209. package/dist/constants/spec-types.js +0 -65
  210. package/dist/gates/budget-limit.js +0 -121
  211. package/dist/gates/feedback.js +0 -260
  212. package/dist/gates/format.js +0 -179
  213. package/dist/gates/god-object.js +0 -117
  214. package/dist/gates/pipeline.js +0 -167
  215. package/dist/gates/scope-boundary.js +0 -93
  216. package/dist/gates/spec-completeness.js +0 -109
  217. package/dist/gates/todo-detection.js +0 -205
  218. package/dist/generators/jest-config-generator.js +0 -242
  219. package/dist/generators/working-spec.js +0 -237
  220. package/dist/minimal-cli.js +0 -88
  221. package/dist/parallel/parallel-manager.js +0 -433
  222. package/dist/policy/PolicyManager.js +0 -465
  223. package/dist/scaffold/claude-hooks.js +0 -443
  224. package/dist/scaffold/cursor-hooks.js +0 -177
  225. package/dist/scaffold/git-hooks.js +0 -928
  226. package/dist/scaffold/index.js +0 -794
  227. package/dist/session/session-manager.js +0 -653
  228. package/dist/sidecars/index.js +0 -33
  229. package/dist/sidecars/listeners.js +0 -40
  230. package/dist/sidecars/provenance-summary.js +0 -238
  231. package/dist/sidecars/quality-gaps.js +0 -258
  232. package/dist/sidecars/schema.js +0 -149
  233. package/dist/sidecars/spec-drift.js +0 -151
  234. package/dist/sidecars/waiver-draft.js +0 -176
  235. package/dist/spec/SpecFileManager.js +0 -419
  236. package/dist/templates/.caws/schemas/policy.schema.json +0 -112
  237. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  238. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  239. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  240. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  241. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  242. package/dist/templates/.caws/tools/README.md +0 -18
  243. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  244. package/dist/templates/.caws/tools-allow.json +0 -331
  245. package/dist/templates/.caws/waivers.yml +0 -19
  246. package/dist/templates/.claude/README.md +0 -190
  247. package/dist/templates/.claude/hooks/audit.sh +0 -121
  248. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  249. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  250. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  251. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  252. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  253. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  254. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  255. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  256. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  257. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  258. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  259. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  260. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  261. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  262. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  263. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  264. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  265. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  266. package/dist/templates/.claude/rules/git-safety.md +0 -26
  267. package/dist/templates/.claude/rules/worktree-isolation.md +0 -83
  268. package/dist/templates/.claude/settings.json +0 -141
  269. package/dist/templates/.cursor/README.md +0 -299
  270. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  271. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  272. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  273. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  274. package/dist/templates/.cursor/hooks/format.sh +0 -38
  275. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  276. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  277. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  278. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  279. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  280. package/dist/templates/.cursor/hooks.json +0 -76
  281. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  282. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  283. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  284. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  285. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  286. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  287. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  288. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  289. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  290. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  291. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  292. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  293. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  294. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  295. package/dist/templates/.cursor/rules/README.md +0 -148
  296. package/dist/templates/.github/copilot-instructions.md +0 -82
  297. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  298. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  299. package/dist/templates/.junie/guidelines.md +0 -73
  300. package/dist/templates/.vscode/launch.json +0 -17
  301. package/dist/templates/.vscode/settings.json +0 -95
  302. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  303. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  304. package/dist/templates/CLAUDE.md +0 -174
  305. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  306. package/dist/templates/OIDC_SETUP.md +0 -300
  307. package/dist/templates/agents.md +0 -145
  308. package/dist/templates/codemod/README.md +0 -1
  309. package/dist/templates/codemod/test.js +0 -93
  310. package/dist/templates/docs/README.md +0 -151
  311. package/dist/templates/scripts/new_feature.sh +0 -80
  312. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  313. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  314. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  315. package/dist/test-analysis.js +0 -786
  316. package/dist/tool-interface.js +0 -314
  317. package/dist/tool-loader.js +0 -303
  318. package/dist/tool-validator.js +0 -393
  319. package/dist/utils/agent-session.js +0 -202
  320. package/dist/utils/async-utils.js +0 -188
  321. package/dist/utils/command-wrapper.js +0 -200
  322. package/dist/utils/event-log.js +0 -584
  323. package/dist/utils/event-renderer.js +0 -521
  324. package/dist/utils/finalization.js +0 -230
  325. package/dist/utils/git-lock.js +0 -119
  326. package/dist/utils/gitignore-updater.js +0 -158
  327. package/dist/utils/ide-detection.js +0 -133
  328. package/dist/utils/lifecycle-events.js +0 -94
  329. package/dist/utils/project-analysis.js +0 -367
  330. package/dist/utils/promise-utils.js +0 -72
  331. package/dist/utils/quality-gates-errors.js +0 -520
  332. package/dist/utils/quality-gates-utils.js +0 -387
  333. package/dist/utils/schema-validator.js +0 -50
  334. package/dist/utils/spec-resolver.js +0 -711
  335. package/dist/utils/typescript-detector.js +0 -369
  336. package/dist/utils/working-state.js +0 -530
  337. package/dist/utils/yaml-validation.js +0 -156
  338. package/dist/validation/spec-validation.js +0 -921
  339. package/dist/waivers-manager.js +0 -732
  340. package/dist/worktree/worktree-manager.js +0 -1374
  341. package/templates/.caws/schemas/policy.schema.json +0 -112
  342. package/templates/.caws/schemas/scope.schema.json +0 -52
  343. package/templates/.caws/schemas/waivers.schema.json +0 -106
  344. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  345. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  346. package/templates/.caws/templates/working-spec.template.yml +0 -80
  347. package/templates/.caws/tools/README.md +0 -18
  348. package/templates/.caws/tools/scope-guard.js +0 -203
  349. package/templates/.caws/tools-allow.json +0 -331
  350. package/templates/.caws/waivers.yml +0 -19
  351. package/templates/.claude/README.md +0 -190
  352. package/templates/.claude/hooks/audit.sh +0 -121
  353. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  354. package/templates/.claude/hooks/classify_command.py +0 -592
  355. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  356. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  357. package/templates/.claude/hooks/naming-check.sh +0 -100
  358. package/templates/.claude/hooks/protected-paths.sh +0 -39
  359. package/templates/.claude/hooks/quality-check.sh +0 -81
  360. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  361. package/templates/.claude/hooks/scope-guard.sh +0 -381
  362. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  363. package/templates/.claude/hooks/session-log.sh +0 -634
  364. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  365. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  366. package/templates/.claude/hooks/test_classify_command.py +0 -370
  367. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  368. package/templates/.claude/hooks/validate-spec.sh +0 -76
  369. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  370. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  371. package/templates/.claude/rules/git-safety.md +0 -26
  372. package/templates/.claude/rules/worktree-isolation.md +0 -83
  373. package/templates/.claude/settings.json +0 -141
  374. package/templates/.cursor/README.md +0 -299
  375. package/templates/.cursor/hooks/audit.sh +0 -55
  376. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  377. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  378. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  379. package/templates/.cursor/hooks/format.sh +0 -38
  380. package/templates/.cursor/hooks/naming-check.sh +0 -64
  381. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  382. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  383. package/templates/.cursor/hooks/session-log.sh +0 -924
  384. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  385. package/templates/.cursor/hooks.json +0 -76
  386. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  387. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  388. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  389. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  390. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  391. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  392. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  393. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  394. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  395. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  396. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  397. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  398. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  399. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  400. package/templates/.cursor/rules/README.md +0 -148
  401. package/templates/.github/copilot-instructions.md +0 -82
  402. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  403. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  404. package/templates/.junie/guidelines.md +0 -73
  405. package/templates/.vscode/launch.json +0 -17
  406. package/templates/.vscode/settings.json +0 -95
  407. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  408. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  409. package/templates/CLAUDE.md +0 -174
  410. package/templates/COMMIT_CONVENTIONS.md +0 -86
  411. package/templates/OIDC_SETUP.md +0 -300
  412. package/templates/agents.md +0 -145
  413. package/templates/codemod/README.md +0 -1
  414. package/templates/codemod/test.js +0 -93
  415. package/templates/docs/README.md +0 -151
  416. package/templates/scripts/new_feature.sh +0 -80
  417. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  418. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  419. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ // `caws doctor` — composition command.
3
+ //
4
+ // Pipeline (no business logic in this file):
5
+ //
6
+ // 1. resolveRepoRoot(cwd) (store)
7
+ // 2. composeDoctorSnapshot(...) (store)
8
+ // 3. inspectProjectState(input) (kernel)
9
+ // 4. render store-load diagnostics (renderer)
10
+ // 5. render doctor findings (renderer)
11
+ // 6. choose exit code (this file)
12
+ //
13
+ // The command does NOT read .caws/ files directly, does NOT walk specs,
14
+ // does NOT invent repair rules, and does NOT re-validate state.
15
+ //
16
+ // Exit codes:
17
+ // 0 = no error-severity findings AND no error-severity store-load
18
+ // diagnostics
19
+ // 1 = any error-severity finding OR any error-severity store-load
20
+ // diagnostic. (Store-load errors count even when they were filtered
21
+ // out before reaching the kernel, because an invalid spec file is a
22
+ // project-health problem regardless.)
23
+ // 2 = repo-root resolution failed, or other hard composition failure.
24
+ //
25
+ // Testable without Commander: caller passes cwd / out / err / now and
26
+ // receives a number. `registerShellCommands(program)` (Slice 5c.9) is the
27
+ // only place that wires this to Commander.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runDoctorCommand = runDoctorCommand;
30
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
31
+ const store_1 = require("../../store");
32
+ const index_1 = require("../index");
33
+ function runDoctorCommand(opts = {}) {
34
+ const cwd = opts.cwd ?? process.cwd();
35
+ const now = opts.now ?? new Date();
36
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
37
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
38
+ const showData = opts.showData === true;
39
+ // 1. Repo root
40
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
41
+ if (!repoRootResult.ok) {
42
+ err('caws doctor: failed to resolve repo root.');
43
+ err((0, index_1.renderDiagnostics)(repoRootResult.errors, { showData }));
44
+ return 2;
45
+ }
46
+ const { repoRoot, cawsDir } = repoRootResult.value;
47
+ // 2 + 3. Compose snapshot, run kernel diagnoser
48
+ let composition;
49
+ try {
50
+ composition = (0, store_1.composeDoctorSnapshot)({ repoRoot, cawsDir, now });
51
+ }
52
+ catch (e) {
53
+ err(`caws doctor: store composition failed: ${e.message}`);
54
+ return 2;
55
+ }
56
+ const { snapshot, doctorInput } = composition;
57
+ let report;
58
+ try {
59
+ report = (0, caws_kernel_1.inspectProjectState)(doctorInput);
60
+ }
61
+ catch (e) {
62
+ err(`caws doctor: kernel inspect failed: ${e.message}`);
63
+ return 2;
64
+ }
65
+ // 4. Render store-load diagnostics — kept SEPARATE from doctor findings.
66
+ const loadDiagnostics = [
67
+ ...snapshot.specDiagnostics,
68
+ ...snapshot.policyErrors,
69
+ ...snapshot.policyWarnings,
70
+ ...snapshot.eventWarnings,
71
+ ];
72
+ out('Store load diagnostics:');
73
+ if (loadDiagnostics.length === 0) {
74
+ out(' (none)');
75
+ }
76
+ else {
77
+ out((0, index_1.renderDiagnostics)(loadDiagnostics, { showData }));
78
+ }
79
+ // 5. Render doctor findings — separate section.
80
+ out('');
81
+ out('Doctor findings:');
82
+ if (report.findings.length === 0) {
83
+ out(' (none)');
84
+ }
85
+ else {
86
+ out((0, index_1.renderFindings)(report.findings, { showData }));
87
+ }
88
+ // 6. Exit code
89
+ const loadCounts = (0, index_1.countSeverities)(loadDiagnostics);
90
+ const findingCounts = (0, index_1.countFindingSeverities)(report.findings);
91
+ const hasErrors = findingCounts.errors > 0 || loadCounts.errors > 0;
92
+ out('');
93
+ out(`Summary: findings ${findingCounts.errors}E/${findingCounts.warnings}W/${findingCounts.infos}I; ` +
94
+ `load ${loadCounts.errors}E/${loadCounts.warnings}W/${loadCounts.infos}I`);
95
+ return hasErrors ? 1 : 0;
96
+ }
97
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/shell/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type ActorKind } from '@paths.design/caws-kernel';
2
+ export type EvidenceKind = 'test' | 'gate' | 'ac';
3
+ export interface EvidenceRecordOptions {
4
+ /** Which evidence event to record. */
5
+ readonly kind: EvidenceKind;
6
+ /** Required: the spec id this evidence is about. */
7
+ readonly specId: string;
8
+ /** Required: the event payload — must match the kernel's event-type schema. */
9
+ readonly data: Record<string, unknown>;
10
+ /** Actor kind. Defaults to 'agent'. */
11
+ readonly actorKind?: ActorKind;
12
+ /** Optional actor id override. Defaults to session.identity.session_id. */
13
+ readonly actorId?: string;
14
+ /** Optional ISO-8601 ts. Defaults to now. */
15
+ readonly ts?: string;
16
+ /** Working directory. Defaults to process.cwd(). */
17
+ readonly cwd?: string;
18
+ /** Injected clock for tests. */
19
+ readonly now?: () => Date;
20
+ /** Injected env for tests. */
21
+ readonly env?: NodeJS.ProcessEnv;
22
+ readonly out?: (line: string) => void;
23
+ readonly err?: (line: string) => void;
24
+ /** Show optional `data` blocks on rendered errors. */
25
+ readonly showData?: boolean;
26
+ }
27
+ export declare function runEvidenceRecordCommand(opts: EvidenceRecordOptions): number;
28
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/evidence.ts"],"names":[],"mappings":"AAyBA,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,2BAA2B,CAAC;AAQnC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAQlD,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAeD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAqG5E"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ // `caws evidence record` — append one typed evidence event.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd)
6
+ // 2. resolveSession({ allowMint: true }) — this is a write op
7
+ // 3. buildActor({ session, kind })
8
+ // 4. construct EventBody from caller inputs — body-only; no seq/prev/hash
9
+ // 5. appendEvent(cawsDir, body) — store enforces lock,
10
+ // chain via kernel
11
+ // prepareAppend
12
+ // 6. print seq + event_hash AFTER success
13
+ //
14
+ // Exit codes:
15
+ // 0 = append succeeded
16
+ // 1 = validation rejected the body OR appendEvent returned Err
17
+ // 2 = repo-root / session resolution / composition failure
18
+ //
19
+ // CRITICAL: the API surface accepts EventBody-shaped inputs only. It does
20
+ // not accept `seq`, `prev_hash`, or `event_hash`. The CLI layer parsing
21
+ // (commander) MUST NOT add those fields. If a caller does pass them via
22
+ // the data object, kernel `validateEventBody` rejects them (additionalProperties:
23
+ // false on the per-event-type payload schemas).
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.runEvidenceRecordCommand = runEvidenceRecordCommand;
59
+ const path = __importStar(require("node:path"));
60
+ const store_1 = require("../../store");
61
+ const actor_1 = require("../session/actor");
62
+ const resolve_session_1 = require("../session/resolve-session");
63
+ const diagnostic_1 = require("../render/diagnostic");
64
+ const rules_1 = require("../rules");
65
+ const KIND_TO_EVENT_TYPE = {
66
+ test: 'test_recorded',
67
+ gate: 'gate_evaluated',
68
+ ac: 'ac_recorded',
69
+ };
70
+ function rejectPreChainedFields(data) {
71
+ for (const banned of ['seq', 'prev_hash', 'event_hash']) {
72
+ if (Object.prototype.hasOwnProperty.call(data, banned)) {
73
+ return banned;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ function isEvidenceKind(value) {
79
+ return value === 'test' || value === 'gate' || value === 'ac';
80
+ }
81
+ function runEvidenceRecordCommand(opts) {
82
+ const cwd = opts.cwd ?? process.cwd();
83
+ const now = opts.now ?? (() => new Date());
84
+ const env = opts.env ?? process.env;
85
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
86
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
87
+ const showData = opts.showData === true;
88
+ // Validate the evidence kind up front (defensive — Commander should
89
+ // reject unknown values at the parser, but tests / programmatic callers
90
+ // may bypass that).
91
+ if (!isEvidenceKind(opts.kind)) {
92
+ err(`caws evidence record: invalid --type. Got ${JSON.stringify(opts.kind)}; expected test|gate|ac.`);
93
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_INVALID_EVIDENCE_TYPE})`);
94
+ return 1;
95
+ }
96
+ // Reject pre-chained fields in the payload BEFORE doing any I/O.
97
+ const banned = rejectPreChainedFields(opts.data);
98
+ if (banned !== null) {
99
+ err(`caws evidence record: payload must NOT include \`${banned}\`. Pre-chained events are not accepted by this command.`);
100
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_PRE_CHAINED_EVENT_REFUSED})`);
101
+ return 1;
102
+ }
103
+ // Require non-empty spec_id (also enforced by kernel REQUIRES_SPEC_ID
104
+ // fence, but we surface the shell-level error early).
105
+ if (typeof opts.specId !== 'string' || opts.specId.length === 0) {
106
+ err('caws evidence record: --spec is required.');
107
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_MISSING_SPEC_ID})`);
108
+ return 1;
109
+ }
110
+ // 1. Repo root.
111
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
112
+ if (!repoRootResult.ok) {
113
+ err('caws evidence record: failed to resolve repo root.');
114
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
115
+ return 2;
116
+ }
117
+ const { repoRoot, cawsDir } = repoRootResult.value;
118
+ // 2. Session (write op → allowMint).
119
+ const sessionResult = (0, resolve_session_1.resolveSession)({
120
+ cawsDir,
121
+ worktreeRoot: cwd,
122
+ env,
123
+ now,
124
+ allowMint: true,
125
+ });
126
+ if (!sessionResult.ok) {
127
+ err('caws evidence record: failed to resolve session identity.');
128
+ err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
129
+ return 2;
130
+ }
131
+ // 3. Actor envelope.
132
+ const actor = (0, actor_1.buildActor)({
133
+ session: sessionResult.value,
134
+ kind: opts.actorKind ?? 'agent',
135
+ ...(opts.actorId !== undefined ? { id: opts.actorId } : {}),
136
+ });
137
+ // 4. Body.
138
+ const eventType = KIND_TO_EVENT_TYPE[opts.kind];
139
+ const ts = opts.ts ?? now().toISOString();
140
+ // `EventBody.data` is typed as `EventPayload` (a union of per-event
141
+ // payload shapes). The kernel will validate against the right schema
142
+ // at append time; we hand off the caller's already-parsed object.
143
+ const body = {
144
+ event: eventType,
145
+ ts,
146
+ actor,
147
+ spec_id: opts.specId,
148
+ data: opts.data,
149
+ };
150
+ // 5. Append. `appendEvent` calls `prepareAppend` which calls
151
+ // `validateEventBody` against the per-type schema.
152
+ const appendResult = (0, store_1.appendEvent)(cawsDir, body);
153
+ if (!appendResult.ok) {
154
+ err('caws evidence record: append rejected.');
155
+ err((0, diagnostic_1.renderDiagnostics)(appendResult.errors, { showData }));
156
+ return 1;
157
+ }
158
+ // 6. Print outcome AFTER success. Includes seq + event_hash so the
159
+ // caller (agent or human) gets a stable handle for the new event.
160
+ const ev = appendResult.value;
161
+ out(`recorded ${ev.event} seq=${ev.seq} hash=${ev.event_hash} spec=${ev.spec_id ?? '(none)'}`);
162
+ // Print the relative events file path for ergonomics.
163
+ out(` written to ${path.relative(repoRoot, path.join(cawsDir, 'events.jsonl'))}`);
164
+ return 0;
165
+ }
166
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../../src/shell/commands/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type QualityGatesRunner } from '../gates/quality-gates-adapter';
2
+ export interface GatesRunCommandOptions {
3
+ readonly cwd?: string;
4
+ readonly now?: () => Date;
5
+ readonly env?: NodeJS.ProcessEnv;
6
+ readonly out?: (line: string) => void;
7
+ readonly err?: (line: string) => void;
8
+ /** Extra args to pass to the subprocess after --json. */
9
+ readonly subprocessArgs?: readonly string[];
10
+ /** Injected subprocess runner (tests). */
11
+ readonly runner?: QualityGatesRunner;
12
+ /** Show structured data on rendered diagnostics. */
13
+ readonly showData?: boolean;
14
+ }
15
+ export interface GatesRunCommandRequest {
16
+ readonly specId: string;
17
+ }
18
+ export declare function runGatesRunCommand(request: GatesRunCommandRequest, opts?: GatesRunCommandOptions): number;
19
+ //# sourceMappingURL=gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":"AAyCA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA6CD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAgIR"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ // `caws gates run` — single policy-driven gate execution path.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd)
6
+ // 2. composeStoreSnapshot — we need the policy
7
+ // 3. policy presence check — gates cannot run without policy
8
+ // 4. resolveSession({ allowMint: true }) — we will append events
9
+ // 5. runQualityGates(adapter) — subprocess + JSON validation
10
+ // 6. deriveDispositions(report, policy) — policy decides block/warn/skip
11
+ // 7. For each disposition, appendEvent(`gate_evaluated`)
12
+ // 8. Render summary
13
+ // 9. Exit code:
14
+ // 0 if no disposition blocks
15
+ // 1 if any disposition blocks
16
+ // 2 on hard composition errors (no policy, subprocess contract failure,
17
+ // event append failure)
18
+ //
19
+ // The subprocess does NOT decide blocking. The policy does. The subprocess
20
+ // reports violations; this command groups them per policy-declared gate
21
+ // and applies policy.gates[gate].mode to compute outcome.
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.runGatesRunCommand = runGatesRunCommand;
24
+ const store_1 = require("../../store");
25
+ const diagnostic_1 = require("../render/diagnostic");
26
+ const gates_1 = require("../render/gates");
27
+ const resolve_session_1 = require("../session/resolve-session");
28
+ const actor_1 = require("../session/actor");
29
+ const rules_1 = require("../rules");
30
+ const disposition_1 = require("../gates/disposition");
31
+ const quality_gates_adapter_1 = require("../gates/quality-gates-adapter");
32
+ const waiver_filter_1 = require("../gates/waiver-filter");
33
+ const MAX_EVENT_VIOLATIONS = 100;
34
+ function dispositionToEventBody(args) {
35
+ const violations = args.disposition.violations
36
+ .slice(0, MAX_EVENT_VIOLATIONS)
37
+ .map((v) => ({
38
+ rule: typeof v.type === 'string' ? v.type : 'unknown',
39
+ subject: typeof v.file === 'string'
40
+ ? typeof v.line === 'number'
41
+ ? `${v.file}:${v.line}`
42
+ : v.file
43
+ : (v.gate ?? 'unknown'),
44
+ ...(v.message !== undefined ? { details: v.message } : {}),
45
+ }));
46
+ const ev = args.waiverEvidence;
47
+ const waivedCount = ev?.waived_count ?? 0;
48
+ return {
49
+ event: 'gate_evaluated',
50
+ ts: args.ts,
51
+ actor: args.actor,
52
+ spec_id: args.specId,
53
+ data: {
54
+ gate_id: args.disposition.gate_id,
55
+ mode: args.disposition.mode,
56
+ result: args.disposition.outcome === 'skipped' ? 'skipped' : args.disposition.outcome,
57
+ violations,
58
+ waived_count: waivedCount,
59
+ ...(ev !== undefined && ev.waiver_ids.length > 0
60
+ ? { waiver_ids: ev.waiver_ids.slice() }
61
+ : {}),
62
+ },
63
+ };
64
+ }
65
+ function runGatesRunCommand(request, opts = {}) {
66
+ const cwd = opts.cwd ?? process.cwd();
67
+ const nowFn = opts.now ?? (() => new Date());
68
+ const now = nowFn();
69
+ const env = opts.env ?? process.env;
70
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
71
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
72
+ const showData = opts.showData === true;
73
+ if (typeof request.specId !== 'string' || request.specId.length === 0) {
74
+ err('caws gates run: --spec is required.');
75
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_MISSING_SPEC_ID})`);
76
+ return 1;
77
+ }
78
+ // 1. Repo root
79
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
80
+ if (!repoRootResult.ok) {
81
+ err('caws gates run: failed to resolve repo root.');
82
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
83
+ return 2;
84
+ }
85
+ const { repoRoot, cawsDir } = repoRootResult.value;
86
+ // 2. Snapshot for policy
87
+ let snapshot;
88
+ try {
89
+ snapshot = (0, store_1.composeStoreSnapshot)({ repoRoot, cawsDir });
90
+ }
91
+ catch (e) {
92
+ err(`caws gates run: store composition failed: ${e.message}`);
93
+ return 2;
94
+ }
95
+ // 3. Policy required — gates cannot decide mode without it.
96
+ if (snapshot.policy === undefined) {
97
+ err(`caws gates run: no policy.yaml loaded — gates require policy to derive ` +
98
+ `block/warn/skip semantics. Run \`caws doctor\` for details.`);
99
+ err(`(rule: ${rules_1.SHELL_RULES.GATES_POLICY_REQUIRED})`);
100
+ if (snapshot.policyErrors.length > 0) {
101
+ err((0, diagnostic_1.renderDiagnostics)(snapshot.policyErrors, { showData }));
102
+ }
103
+ return 2;
104
+ }
105
+ const policy = snapshot.policy;
106
+ // 4. Session (write op — gates append events)
107
+ const sessionResult = (0, resolve_session_1.resolveSession)({
108
+ cawsDir,
109
+ worktreeRoot: cwd,
110
+ env,
111
+ now: nowFn,
112
+ allowMint: true,
113
+ });
114
+ if (!sessionResult.ok) {
115
+ err('caws gates run: failed to resolve session identity.');
116
+ err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
117
+ return 2;
118
+ }
119
+ const actor = (0, actor_1.buildActor)({
120
+ session: sessionResult.value,
121
+ kind: 'agent',
122
+ });
123
+ // 5. Subprocess + contract validation
124
+ const runOpts = {
125
+ cwd: repoRoot,
126
+ };
127
+ if (opts.runner !== undefined)
128
+ runOpts.runner = opts.runner;
129
+ if (opts.subprocessArgs !== undefined)
130
+ runOpts.args = opts.subprocessArgs;
131
+ const reportResult = (0, quality_gates_adapter_1.runQualityGates)(runOpts);
132
+ if (!reportResult.ok) {
133
+ err('caws gates run: quality-gates subprocess contract failure.');
134
+ err((0, diagnostic_1.renderDiagnostics)(reportResult.errors, { showData }));
135
+ return 2;
136
+ }
137
+ const report = reportResult.value;
138
+ // 6a. Load + apply waivers BEFORE disposition.
139
+ // Waivers do NOT mutate policy.gates[gate].mode. They remove
140
+ // authorized-exception violations from the report so blocking is
141
+ // computed only from unwaived violations. Malformed waiver files
142
+ // produce diagnostics but never discard valid waivers.
143
+ const waiversLoad = (0, store_1.loadWaivers)(cawsDir);
144
+ if (waiversLoad.diagnostics.length > 0) {
145
+ err((0, diagnostic_1.renderDiagnostics)(waiversLoad.diagnostics, { showData }));
146
+ }
147
+ const waiverFilter = (0, waiver_filter_1.filterWaivedViolations)({
148
+ report,
149
+ waivers: waiversLoad.waivers,
150
+ specId: request.specId,
151
+ now,
152
+ policyGateIds: Object.keys(policy.gates),
153
+ });
154
+ // 6b. Policy-driven disposition on UNWAIVED violations only.
155
+ const dispositionResult = (0, disposition_1.deriveDispositions)(waiverFilter.reportForDisposition, policy);
156
+ // 7. Append one gate_evaluated event per policy-declared gate.
157
+ // Failure to append is a hard error: evidence integrity matters.
158
+ const ts = now.toISOString();
159
+ for (const d of dispositionResult.dispositions) {
160
+ const body = dispositionToEventBody({
161
+ disposition: d,
162
+ ts,
163
+ actor,
164
+ specId: request.specId,
165
+ ...(waiverFilter.waivedByGate[d.gate_id] !== undefined
166
+ ? { waiverEvidence: waiverFilter.waivedByGate[d.gate_id] }
167
+ : {}),
168
+ });
169
+ const append = (0, store_1.appendEvent)(cawsDir, body);
170
+ if (!append.ok) {
171
+ err(`caws gates run: failed to append gate_evaluated event for ${d.gate_id}.`);
172
+ err((0, diagnostic_1.renderDiagnostics)(append.errors, { showData }));
173
+ return 2;
174
+ }
175
+ }
176
+ // 8. Render summary
177
+ out((0, gates_1.renderGatesRun)(dispositionResult));
178
+ // 9. Exit by policy disposition.
179
+ return dispositionResult.anyBlocks ? 1 : 0;
180
+ }
181
+ //# sourceMappingURL=gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,EAAE;AACF,YAAY;AACZ,4BAA4B;AAC5B,+DAA+D;AAC/D,4EAA4E;AAC5E,mEAAmE;AACnE,0EAA0E;AAC1E,4EAA4E;AAC5E,2DAA2D;AAC3D,sBAAsB;AACtB,kBAAkB;AAClB,kCAAkC;AAClC,mCAAmC;AACnC,6EAA6E;AAC7E,+BAA+B;AAC/B,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,0DAA0D;;AA4F1D,gDAmIC;AAxND,uCAKqB;AACrB,qDAAyD;AACzD,2CAAiD;AACjD,gEAA4D;AAC5D,4CAA8C;AAC9C,oCAAuC;AACvC,sDAG8B;AAC9B,0EAGwC;AACxC,0DAGgC;AAgBhC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,SAAS,sBAAsB,CAAC,IAM/B;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;SAC3C,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,EACL,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YACxB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAC1B,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;gBACvB,CAAC,CAAC,CAAC,CAAC,IAAI;YACV,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC,CAAC,CAAC;IAEN,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/B,MAAM,WAAW,GAAG,EAAE,EAAE,YAAY,IAAI,CAAC,CAAC;IAE1C,OAAO;QACL,KAAK,EAAE,gBAAgB;QACvB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;YACjC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC3B,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO;YACrF,UAAU;YACV,YAAY,EAAE,WAAW;YACzB,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC9C,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR;KACsB,CAAC;AAC5B,CAAC;AAMD,SAAgB,kBAAkB,CAChC,OAA+B,EAC/B,OAA+B,EAAE;IAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAExC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC3C,GAAG,CAAC,UAAU,mBAAW,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,eAAe;IACf,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,GAAG,CAAC,8CAA8C,CAAC,CAAC;QACpD,GAAG,CAAC,IAAA,8BAAiB,EAAC,cAAc,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC;IAEnD,yBAAyB;IACzB,IAAI,QAAiD,CAAC;IACtD,IAAI,CAAC;QACH,QAAQ,GAAG,IAAA,4BAAoB,EAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,6CAA8C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CACD,yEAAyE;YACvE,6DAA6D,CAChE,CAAC;QACF,GAAG,CAAC,UAAU,mBAAW,CAAC,qBAAqB,GAAG,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,IAAA,8BAAiB,EAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE/B,8CAA8C;IAC9C,MAAM,aAAa,GAAG,IAAA,gCAAc,EAAC;QACnC,OAAO;QACP,YAAY,EAAE,GAAG;QACjB,GAAG;QACH,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAC3D,GAAG,CAAC,IAAA,8BAAiB,EAAC,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAU,IAAA,kBAAU,EAAC;QAC9B,OAAO,EAAE,aAAa,CAAC,KAAK;QAC5B,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,OAAO,GAA2E;QACtF,GAAG,EAAE,QAAQ;KACd,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAA,uCAAe,EAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAClE,GAAG,CAAC,IAAA,8BAAiB,EAAC,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAElC,+CAA+C;IAC/C,iEAAiE;IACjE,qEAAqE;IACrE,qEAAqE;IACrE,2DAA2D;IAC3D,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC;IACzC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAA,8BAAiB,EAAC,WAAW,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,YAAY,GAAG,IAAA,sCAAsB,EAAC;QAC1C,MAAM;QACN,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;QACH,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,MAAM,iBAAiB,GAAG,IAAA,gCAAkB,EAC1C,YAAY,CAAC,oBAAoB,EACjC,MAAM,CACP,CAAC;IAEF,+DAA+D;IAC/D,oEAAoE;IACpE,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,sBAAsB,CAAC;YAClC,WAAW,EAAE,CAAC;YACd,EAAE;YACF,KAAK;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS;gBACpD,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBAC1D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,GAAG,CAAC,6DAA6D,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;YAC/E,GAAG,CAAC,IAAA,8BAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,GAAG,CAAC,IAAA,sBAAc,EAAC,iBAAiB,CAAC,CAAC,CAAC;IAEvC,iCAAiC;IACjC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface InitCommandOptions {
2
+ readonly cwd?: string;
3
+ readonly out?: (line: string) => void;
4
+ readonly err?: (line: string) => void;
5
+ readonly showData?: boolean;
6
+ }
7
+ export declare function runInitCommand(opts?: InitCommandOptions): number;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/init.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,MAAM,CAsCpE"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // `caws init` — vNext bootstrap of the canonical .caws/ shape.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd) — needs git, NOT .caws/
6
+ // 2. initProject(repoRoot) — store-side adapter does the work
7
+ // 3. render result — short summary or "already initialized"
8
+ //
9
+ // Exit codes:
10
+ // 0 = canonical state established (created OR already_initialized)
11
+ // 1 = legacy residue refused (INIT_LEGACY_RESIDUE) — non-destructive,
12
+ // the user must clear the listed files manually
13
+ // 2 = repo-root resolution failed, write I/O failed, or the default
14
+ // policy itself failed kernel validation
15
+ // (INIT_DEFAULT_POLICY_INVALID — programmer error in our seed)
16
+ //
17
+ // Discipline:
18
+ // - No --force in 7b. Force modes turn into cleanup tools and cleanup
19
+ // belongs to a later doctor/repair surface.
20
+ // - The seeded policy MUST pass kernel validation BEFORE landing on
21
+ // disk. If our default is bad, that's a programmer error and exit 2
22
+ // is correct — we do NOT write a known-invalid policy just to keep
23
+ // `init` succeeding.
24
+ // - Init never overwrites existing canonical files. Idempotent rerun
25
+ // reports "already initialized"; partial state is filled in
26
+ // additively (a half-bootstrapped project becomes whole).
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.runInitCommand = runInitCommand;
29
+ const store_1 = require("../../store");
30
+ const diagnostic_1 = require("../render/diagnostic");
31
+ const init_1 = require("../render/init");
32
+ function runInitCommand(opts = {}) {
33
+ const cwd = opts.cwd ?? process.cwd();
34
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
35
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
36
+ const showData = opts.showData === true;
37
+ // 1. Resolve repo root. We do NOT pass requireCawsDir — the whole
38
+ // point of init is to create .caws/, so failing on its absence
39
+ // here would be self-contradictory.
40
+ const root = (0, store_1.resolveRepoRoot)(cwd);
41
+ if (!root.ok) {
42
+ err('caws init: failed to resolve repo root.');
43
+ err((0, diagnostic_1.renderDiagnostics)(root.errors, { showData }));
44
+ return 2;
45
+ }
46
+ const { repoRoot } = root.value;
47
+ // 2. Bootstrap.
48
+ const result = (0, store_1.initProject)(repoRoot);
49
+ if (!result.ok) {
50
+ // Decide exit code from the diagnostic rule. Legacy residue is a
51
+ // user-correctable domain error (1); everything else is a hard
52
+ // store/programmer failure (2).
53
+ const isLegacy = result.errors.some((d) => d.rule === 'store.init.legacy_residue');
54
+ err(isLegacy
55
+ ? 'caws init: refusing to overwrite legacy state.'
56
+ : 'caws init: failed to bootstrap project.');
57
+ err((0, diagnostic_1.renderDiagnostics)(result.errors, { showData }));
58
+ return isLegacy ? 1 : 2;
59
+ }
60
+ // 3. Render and exit.
61
+ out((0, init_1.renderInit)({ result: result.value, repoRoot }));
62
+ return 0;
63
+ }
64
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/shell/commands/init.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,EAAE;AACF,YAAY;AACZ,gEAAgE;AAChE,2EAA2E;AAC3E,iFAAiF;AACjF,EAAE;AACF,cAAc;AACd,qEAAqE;AACrE,wEAAwE;AACxE,sDAAsD;AACtD,sEAAsE;AACtE,+CAA+C;AAC/C,qEAAqE;AACrE,EAAE;AACF,cAAc;AACd,wEAAwE;AACxE,gDAAgD;AAChD,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,yBAAyB;AACzB,uEAAuE;AACvE,gEAAgE;AAChE,8DAA8D;;AAa9D,wCAsCC;AAjDD,uCAA2D;AAC3D,qDAAyD;AACzD,yCAA4C;AAS5C,SAAgB,cAAc,CAAC,OAA2B,EAAE;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAExC,kEAAkE;IAClE,kEAAkE;IAClE,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAA,8BAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IAEhC,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,iEAAiE;QACjE,+DAA+D;QAC/D,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAC9C,CAAC;QACF,GAAG,CACD,QAAQ;YACN,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,yCAAyC,CAC9C,CAAC;QACF,GAAG,CAAC,IAAA,8BAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,IAAA,iBAAU,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type ScopeMode = 'show' | 'check';
2
+ export interface ScopeCommandOptions {
3
+ readonly path: string;
4
+ readonly mode: ScopeMode;
5
+ readonly cwd?: string;
6
+ readonly out?: (line: string) => void;
7
+ readonly err?: (line: string) => void;
8
+ readonly showData?: boolean;
9
+ }
10
+ export declare function runScopeCommand(opts: ScopeCommandOptions): number;
11
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/scope.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAkEjE"}