@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
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ // Pure string-formatter for scope Decision.
3
+ //
4
+ // The renderer prints exactly one Decision. It distinguishes:
5
+ //
6
+ // admit → "ADMIT <rule>: <message> @ <path>"
7
+ // reject → "REJECT <rule>: <message> @ <path>"
8
+ // invalid_path → "INVALID <rule>: <message>"
9
+ // no_authority (unbound,
10
+ // outside worktree) → "NO AUTHORITY scope.no_authority.unbound (outside any worktree): ..."
11
+ // no_authority (unbound,
12
+ // tracked but unbound) → "NO AUTHORITY scope.no_authority.unbound (worktree <name> not bound to a spec): ..."
13
+ // no_authority (one_sided) → "NO AUTHORITY scope.no_authority.binding_one_sided: ..."
14
+ //
15
+ // The shell-side nuance ("outside any worktree" vs "tracked worktree
16
+ // without spec") comes from the optional `boundContext` arg. The kernel
17
+ // rule id stays the same in both cases — agents can rely on it as a stable
18
+ // handle — but the human prose tells the user which repair to perform.
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.renderDecision = renderDecision;
21
+ const KIND_LABEL = {
22
+ admit: 'ADMIT ',
23
+ reject: 'REJECT ',
24
+ no_authority: 'NO AUTHORITY',
25
+ invalid_path: 'INVALID ',
26
+ };
27
+ function renderDecision(decision, opts = {}) {
28
+ const lines = [];
29
+ const label = KIND_LABEL[decision.kind];
30
+ const nuance = unboundNuance(decision, opts.boundContext);
31
+ const ruleLabel = nuance !== '' ? `${decision.rule} ${nuance}` : decision.rule;
32
+ lines.push(`${label} ${ruleLabel}`);
33
+ lines.push(` path: ${decision.path}`);
34
+ if (typeof decision.normalizedPath === 'string' &&
35
+ decision.normalizedPath !== decision.path) {
36
+ lines.push(` normalized: ${decision.normalizedPath}`);
37
+ }
38
+ lines.push(` message: ${decision.message}`);
39
+ if (typeof decision.narrowRepair === 'string' &&
40
+ decision.narrowRepair.length > 0) {
41
+ lines.push(` repair: ${decision.narrowRepair}`);
42
+ }
43
+ if (opts.showData === true && decision.data !== undefined) {
44
+ lines.push(` data: ${JSON.stringify(decision.data)}`);
45
+ }
46
+ lines.push(` binding: ${decision.bindingState}`);
47
+ return lines.join('\n');
48
+ }
49
+ /**
50
+ * For `no_authority` + unbound, append a parenthetical that explains which
51
+ * shell-side state produced the unbound decision. For every other kind,
52
+ * return ''.
53
+ */
54
+ function unboundNuance(decision, boundContext) {
55
+ if (decision.kind !== 'no_authority')
56
+ return '';
57
+ if (decision.bindingState !== 'unbound')
58
+ return '';
59
+ if (boundContext === undefined)
60
+ return '';
61
+ if (typeof boundContext.worktreeName === 'string') {
62
+ return `(tracked worktree '${boundContext.worktreeName}' has no bound spec)`;
63
+ }
64
+ return '(cwd is outside any CAWS-tracked worktree)';
65
+ }
66
+ //# sourceMappingURL=decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/shell/render/decision.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,EAAE;AACF,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,0DAA0D;AAC1D,2BAA2B;AAC3B,oGAAoG;AACpG,2BAA2B;AAC3B,qHAAqH;AACrH,wFAAwF;AACxF,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,2EAA2E;AAC3E,uEAAuE;;AAwBvE,wCA4BC;AAnCD,MAAM,UAAU,GAAqC;IACnD,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;CAC7B,CAAC;AAEF,SAAgB,cAAc,CAC5B,QAAkB,EAClB,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,IACE,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ;QAC3C,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,IAAI,EACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,IACE,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ;QACzC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CACpB,QAAkB,EAClB,YAAyC;IAEzC,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,OAAO,YAAY,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,sBAAsB,YAAY,CAAC,YAAY,sBAAsB,CAAC;IAC/E,CAAC;IACD,OAAO,4CAA4C,CAAC;AACtD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Diagnostic, Severity } from '@paths.design/caws-kernel';
2
+ export interface RenderDiagnosticsOptions {
3
+ /** Show the optional `data` block. Default false (keeps output tight). */
4
+ readonly showData?: boolean;
5
+ /** Hide diagnostics below this severity. Default: render all. */
6
+ readonly minSeverity?: Severity;
7
+ }
8
+ export declare function renderDiagnostic(d: Diagnostic, opts?: RenderDiagnosticsOptions): string;
9
+ export declare function renderDiagnostics(diagnostics: readonly Diagnostic[], opts?: RenderDiagnosticsOptions): string;
10
+ /**
11
+ * Count severities in a Diagnostic[]. Exposed for callers that want a
12
+ * one-line summary without re-walking the list.
13
+ */
14
+ export declare function countSeverities(diagnostics: readonly Diagnostic[]): {
15
+ readonly errors: number;
16
+ readonly warnings: number;
17
+ readonly infos: number;
18
+ };
19
+ //# sourceMappingURL=diagnostic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/shell/render/diagnostic.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;CACjC;AAkBD,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,UAAU,EACb,IAAI,GAAE,wBAA6B,GAClC,MAAM,CAaR;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,UAAU,EAAE,EAClC,IAAI,GAAE,wBAA6B,GAClC,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAWA"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // Pure string-formatter for kernel/store/shell Diagnostic[].
3
+ //
4
+ // Renderer keys presentation off `severity` and the `rule` prefix only.
5
+ // It does NOT inspect `authority`, does NOT compute exit codes, does NOT
6
+ // read files, does NOT call any kernel or store function, and does NOT
7
+ // mutate the input.
8
+ //
9
+ // Format:
10
+ //
11
+ // [ERROR ] <rule.id>: <message>
12
+ // subject: <subject>
13
+ // repair: <narrowRepair>
14
+ // data: {json}
15
+ //
16
+ // Severity bracket is fixed-width so output columns align. Rule id is
17
+ // always present — agents key off it; the message is human prose only.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.renderDiagnostic = renderDiagnostic;
20
+ exports.renderDiagnostics = renderDiagnostics;
21
+ exports.countSeverities = countSeverities;
22
+ const SEVERITY_RANK = {
23
+ info: 0,
24
+ warning: 1,
25
+ error: 2,
26
+ };
27
+ const SEVERITY_LABEL = {
28
+ info: '[INFO ]',
29
+ warning: '[WARN ]',
30
+ error: '[ERROR ]',
31
+ };
32
+ function severityOf(d) {
33
+ return d.severity ?? 'error';
34
+ }
35
+ function renderDiagnostic(d, opts = {}) {
36
+ const sev = severityOf(d);
37
+ const lines = [`${SEVERITY_LABEL[sev]} ${d.rule}: ${d.message}`];
38
+ if (typeof d.subject === 'string' && d.subject.length > 0) {
39
+ lines.push(` subject: ${d.subject}`);
40
+ }
41
+ if (typeof d.narrowRepair === 'string' && d.narrowRepair.length > 0) {
42
+ lines.push(` repair: ${d.narrowRepair}`);
43
+ }
44
+ if (opts.showData === true && d.data !== undefined) {
45
+ lines.push(` data: ${JSON.stringify(d.data)}`);
46
+ }
47
+ return lines.join('\n');
48
+ }
49
+ function renderDiagnostics(diagnostics, opts = {}) {
50
+ const min = opts.minSeverity ?? 'info';
51
+ const minRank = SEVERITY_RANK[min];
52
+ const kept = diagnostics.filter((d) => SEVERITY_RANK[severityOf(d)] >= minRank);
53
+ if (kept.length === 0)
54
+ return '';
55
+ return kept.map((d) => renderDiagnostic(d, opts)).join('\n');
56
+ }
57
+ /**
58
+ * Count severities in a Diagnostic[]. Exposed for callers that want a
59
+ * one-line summary without re-walking the list.
60
+ */
61
+ function countSeverities(diagnostics) {
62
+ let errors = 0;
63
+ let warnings = 0;
64
+ let infos = 0;
65
+ for (const d of diagnostics) {
66
+ const s = severityOf(d);
67
+ if (s === 'error')
68
+ errors++;
69
+ else if (s === 'warning')
70
+ warnings++;
71
+ else
72
+ infos++;
73
+ }
74
+ return { errors, warnings, infos };
75
+ }
76
+ //# sourceMappingURL=diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../../src/shell/render/diagnostic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { DoctorFinding, FindingSeverity } from '@paths.design/caws-kernel';
2
+ export interface RenderFindingsOptions {
3
+ /** Show the optional `data` block. Default false. */
4
+ readonly showData?: boolean;
5
+ /** Hide findings below this severity. Default: render all. */
6
+ readonly minSeverity?: FindingSeverity;
7
+ }
8
+ export declare function renderFinding(f: DoctorFinding, opts?: RenderFindingsOptions): string;
9
+ export declare function renderFindings(findings: readonly DoctorFinding[], opts?: RenderFindingsOptions): string;
10
+ export declare function countFindingSeverities(findings: readonly DoctorFinding[]): {
11
+ readonly errors: number;
12
+ readonly warnings: number;
13
+ readonly infos: number;
14
+ };
15
+ //# sourceMappingURL=finding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../../src/shell/render/finding.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAchF,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;CACxC;AAED,wBAAgB,aAAa,CAC3B,CAAC,EAAE,aAAa,EAChB,IAAI,GAAE,qBAA0B,GAC/B,MAAM,CAYR;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,IAAI,GAAE,qBAA0B,GAC/B,MAAM,CAMR;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,aAAa,EAAE,GACjC;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAUA"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // Pure string-formatter for kernel DoctorFinding[].
3
+ //
4
+ // DoctorFinding has the same envelope as Diagnostic. We render with a
5
+ // slightly different label set to make it visible which list the user
6
+ // is reading. The doctor command keeps store load diagnostics SEPARATE
7
+ // from these findings (the renderer doesn't merge them).
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.renderFinding = renderFinding;
10
+ exports.renderFindings = renderFindings;
11
+ exports.countFindingSeverities = countFindingSeverities;
12
+ const SEVERITY_RANK = {
13
+ info: 0,
14
+ warning: 1,
15
+ error: 2,
16
+ };
17
+ const SEVERITY_LABEL = {
18
+ info: '[INFO ]',
19
+ warning: '[WARN ]',
20
+ error: '[ERROR ]',
21
+ };
22
+ function renderFinding(f, opts = {}) {
23
+ const lines = [`${SEVERITY_LABEL[f.severity]} ${f.rule}: ${f.message}`];
24
+ if (typeof f.subject === 'string' && f.subject.length > 0) {
25
+ lines.push(` subject: ${f.subject}`);
26
+ }
27
+ if (typeof f.narrowRepair === 'string' && f.narrowRepair.length > 0) {
28
+ lines.push(` repair: ${f.narrowRepair}`);
29
+ }
30
+ if (opts.showData === true && f.data !== undefined) {
31
+ lines.push(` data: ${JSON.stringify(f.data)}`);
32
+ }
33
+ return lines.join('\n');
34
+ }
35
+ function renderFindings(findings, opts = {}) {
36
+ const min = opts.minSeverity ?? 'info';
37
+ const minRank = SEVERITY_RANK[min];
38
+ const kept = findings.filter((f) => SEVERITY_RANK[f.severity] >= minRank);
39
+ if (kept.length === 0)
40
+ return '';
41
+ return kept.map((f) => renderFinding(f, opts)).join('\n');
42
+ }
43
+ function countFindingSeverities(findings) {
44
+ let errors = 0;
45
+ let warnings = 0;
46
+ let infos = 0;
47
+ for (const f of findings) {
48
+ if (f.severity === 'error')
49
+ errors++;
50
+ else if (f.severity === 'warning')
51
+ warnings++;
52
+ else
53
+ infos++;
54
+ }
55
+ return { errors, warnings, infos };
56
+ }
57
+ //# sourceMappingURL=finding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/shell/render/finding.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,yDAAyD;;AAuBzD,sCAeC;AAED,wCASC;AAED,wDAgBC;AA/DD,MAAM,aAAa,GAAoC;IACrD,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,cAAc,GAAoC;IACtD,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;CACnB,CAAC;AASF,SAAgB,aAAa,CAC3B,CAAgB,EAChB,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAa,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,cAAc,CAC5B,QAAkC,EAClC,OAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,sBAAsB,CACpC,QAAkC;IAMlC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,EAAE,CAAC;;YACzC,KAAK,EAAE,CAAC;IACf,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DispositionResult } from '../gates/disposition';
2
+ export declare function renderGatesRun(result: DispositionResult): string;
3
+ //# sourceMappingURL=gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/render/gates.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAa9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAwChE"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ // Pure formatter for `caws gates run` output.
3
+ //
4
+ // Renders one line per policy gate disposition, plus an unmatched-violations
5
+ // section when subprocess gates that policy doesn't declare have violations.
6
+ // Rule ids are not shown here (this is a command summary, not a Diagnostic
7
+ // stream); each disposition carries enough text for an agent to triage.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.renderGatesRun = renderGatesRun;
10
+ function outcomeLabel(o) {
11
+ switch (o) {
12
+ case 'pass':
13
+ return 'PASS ';
14
+ case 'fail':
15
+ return 'FAIL ';
16
+ case 'skipped':
17
+ return 'SKIPPED';
18
+ }
19
+ }
20
+ function renderGatesRun(result) {
21
+ const lines = [];
22
+ lines.push('Gate dispositions (policy-derived):');
23
+ if (result.dispositions.length === 0) {
24
+ lines.push(' (no gates declared in policy)');
25
+ }
26
+ else {
27
+ for (const d of result.dispositions) {
28
+ const blockTag = d.outcome === 'fail' ? (d.blocks ? ' [BLOCKS]' : ' [warn]') : '';
29
+ lines.push(` ${outcomeLabel(d.outcome)} ${d.gate_id} (mode=${d.mode}, ${d.violations.length} violations)${blockTag}`);
30
+ // Show first violation message per failing gate as a hint.
31
+ const first = d.violations[0];
32
+ if (first !== undefined && first.message !== undefined) {
33
+ lines.push(` → ${first.message}`);
34
+ if (d.violations.length > 1) {
35
+ lines.push(` … and ${d.violations.length - 1} more`);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ if (result.unmatchedViolations.length > 0) {
41
+ lines.push('');
42
+ lines.push(`Unmatched violations (subprocess gates not declared in policy): ${result.unmatchedViolations.length}`);
43
+ // Group by gate for the rendered tally
44
+ const byGate = new Map();
45
+ for (const v of result.unmatchedViolations) {
46
+ byGate.set(v.gate, (byGate.get(v.gate) ?? 0) + 1);
47
+ }
48
+ for (const [gate, count] of byGate) {
49
+ lines.push(` ${gate}: ${count}`);
50
+ }
51
+ }
52
+ lines.push('');
53
+ lines.push(`Overall: ${result.anyBlocks ? 'BLOCKED by policy' : 'OK'}`);
54
+ return lines.join('\n');
55
+ }
56
+ //# sourceMappingURL=gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../src/shell/render/gates.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,wEAAwE;;AAexE,wCAwCC;AAnDD,SAAS,YAAY,CAAC,CAA8B;IAClD,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,MAAyB;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,KAAK,CAAC,IAAI,CACR,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,eAAe,QAAQ,EAAE,CAC5G,CAAC;YACF,2DAA2D;YAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,mEAAmE,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,CACvG,CAAC;QACF,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { InitProjectResult } from '../../store';
2
+ export interface RenderInitInput {
3
+ readonly result: InitProjectResult;
4
+ /**
5
+ * Optional repo root used to render created paths relative to the
6
+ * project. When omitted, absolute paths are rendered as-is.
7
+ */
8
+ readonly repoRoot?: string;
9
+ }
10
+ export declare function renderInit(input: RenderInitInput): string;
11
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/shell/render/init.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAWzD"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ // Pure formatter for the `caws init` outcome.
3
+ //
4
+ // Two render shapes:
5
+ // - "created" → list each created path
6
+ // - "already_initialized" → single status line
7
+ //
8
+ // Renderer never decides outcomes; the store does. Renderer never reads
9
+ // `process.cwd` or `Date.now`. All inputs come from the caller.
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.renderInit = renderInit;
12
+ function relativize(p, repoRoot) {
13
+ if (repoRoot === undefined)
14
+ return p;
15
+ if (!p.startsWith(repoRoot))
16
+ return p;
17
+ const rel = p.slice(repoRoot.length);
18
+ return rel.startsWith('/') ? rel.slice(1) : rel;
19
+ }
20
+ function renderInit(input) {
21
+ const lines = [];
22
+ if (input.result.outcome === 'already_initialized') {
23
+ lines.push('caws init: project already initialized; no changes.');
24
+ return lines.join('\n');
25
+ }
26
+ lines.push(`caws init: created ${input.result.created.length} path(s).`);
27
+ for (const p of input.result.created) {
28
+ lines.push(` + ${relativize(p, input.repoRoot)}`);
29
+ }
30
+ return lines.join('\n');
31
+ }
32
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/shell/render/init.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,EAAE;AACF,qBAAqB;AACrB,qDAAqD;AACrD,iDAAiD;AACjD,EAAE;AACF,wEAAwE;AACxE,gEAAgE;;AAoBhE,gCAWC;AAlBD,SAAS,UAAU,CAAC,CAAS,EAAE,QAAiB;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,SAAgB,UAAU,CAAC,KAAsB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { AgentRegistry, DoctorFinding, Spec, WorktreeRegistry } from '@paths.design/caws-kernel';
2
+ import type { ResolvedBinding } from '../binding/types';
3
+ import type { ResolvedSession } from '../session/types';
4
+ export interface StatusRenderInput {
5
+ readonly repoRoot: string;
6
+ readonly cawsDir: string;
7
+ readonly policyLoaded: boolean;
8
+ readonly specs: readonly Spec[];
9
+ readonly worktrees: WorktreeRegistry;
10
+ readonly agents: AgentRegistry;
11
+ readonly eventCount: number;
12
+ /** When undefined, the dashboard renders "no event chain on disk". */
13
+ readonly eventChainOk?: boolean;
14
+ /** Result of resolveBinding(cwd, ...). */
15
+ readonly binding: ResolvedBinding;
16
+ /** Result of resolveSession({ allowMint: false }). */
17
+ readonly session: ResolvedSession | null;
18
+ readonly doctorFindings: readonly DoctorFinding[];
19
+ readonly now: Date;
20
+ /** Heartbeat-stale TTL in ms; display only. Default 24h. */
21
+ readonly staleTtlMs?: number;
22
+ /** Cap on rendered top findings. Default 5. */
23
+ readonly findingCap?: number;
24
+ }
25
+ export declare function renderStatus(input: StatusRenderInput): string;
26
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/shell/render/status.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACb,IAAI,EAEJ,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEhC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAEzC,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAoCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmG7D"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ // Pure formatter for the vNext `caws status` dashboard.
3
+ //
4
+ // Read-only: the formatter inspects already-loaded state and renders a
5
+ // summary. It does NOT mint capsules, refresh heartbeats, write events,
6
+ // or mutate any registry.
7
+ //
8
+ // Composition order (sections):
9
+ //
10
+ // CAWS Status
11
+ //
12
+ // Project
13
+ // repo root / .caws / policy presence / specs by lifecycle /
14
+ // worktree count / event count
15
+ //
16
+ // Current context
17
+ // cwd relation: tracked / untracked / outside repo
18
+ // worktree name (if resolved) / bound spec id / binding state
19
+ // current session id (or "unresolved (read-only)")
20
+ //
21
+ // Claim (only when inside a tracked worktree)
22
+ // reuses renderClaimPanel — same authority discipline.
23
+ //
24
+ // Doctor
25
+ // error/warning/info counts; top findings, capped.
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.renderStatus = renderStatus;
28
+ const claim_1 = require("./claim");
29
+ const finding_1 = require("./finding");
30
+ const DEFAULT_FINDING_CAP = 5;
31
+ function countSpecsByLifecycle(specs) {
32
+ const counts = {};
33
+ for (const s of specs) {
34
+ counts[s.lifecycle_state] = (counts[s.lifecycle_state] ?? 0) + 1;
35
+ }
36
+ return counts;
37
+ }
38
+ function fmtSessionTag(identity) {
39
+ if (identity.platform !== undefined && identity.platform.length > 0) {
40
+ return `${identity.session_id}:${identity.platform}`;
41
+ }
42
+ return identity.session_id;
43
+ }
44
+ function describeCwdRelation(binding) {
45
+ if (binding.worktreeName !== undefined)
46
+ return 'inside tracked worktree';
47
+ if (binding.source === 'none')
48
+ return 'main checkout (no tracked worktree match)';
49
+ return 'unknown';
50
+ }
51
+ function describeBindingState(state) {
52
+ switch (state.kind) {
53
+ case 'bound':
54
+ return `bound → ${state.spec.id} (worktree '${state.worktreeName}')`;
55
+ case 'one_sided':
56
+ return 'one_sided (corrupt asymmetric binding — see doctor)';
57
+ case 'unbound':
58
+ return 'unbound';
59
+ }
60
+ }
61
+ function renderStatus(input) {
62
+ const lines = [];
63
+ lines.push('CAWS Status');
64
+ lines.push('');
65
+ // -------- Project --------
66
+ lines.push('Project');
67
+ lines.push(` repo root: ${input.repoRoot}`);
68
+ lines.push(` .caws dir: ${input.cawsDir}`);
69
+ lines.push(` policy: ${input.policyLoaded ? 'loaded' : 'MISSING'}`);
70
+ const lifecycle = countSpecsByLifecycle(input.specs);
71
+ const lifecycleSummary = input.specs.length === 0
72
+ ? '0 specs'
73
+ : Object.entries(lifecycle)
74
+ .sort(([a], [b]) => a.localeCompare(b))
75
+ .map(([k, v]) => `${v} ${k}`)
76
+ .join(', ');
77
+ lines.push(` specs: ${lifecycleSummary}`);
78
+ const worktreeCount = Object.keys(input.worktrees).length;
79
+ lines.push(` worktrees: ${worktreeCount}`);
80
+ const eventLine = input.eventChainOk === undefined
81
+ ? `${input.eventCount} events`
82
+ : input.eventChainOk
83
+ ? `${input.eventCount} events (chain OK)`
84
+ : `${input.eventCount} events (CHAIN BROKEN — see doctor)`;
85
+ lines.push(` events: ${eventLine}`);
86
+ // -------- Current context --------
87
+ lines.push('');
88
+ lines.push('Current context');
89
+ lines.push(` cwd: ${describeCwdRelation(input.binding)}`);
90
+ if (input.binding.worktreeName !== undefined) {
91
+ lines.push(` worktree: ${input.binding.worktreeName}`);
92
+ }
93
+ lines.push(` binding: ${describeBindingState(input.binding.binding)}`);
94
+ if (input.session !== null) {
95
+ lines.push(` session: ${fmtSessionTag(input.session.identity)} (source: ${input.session.source})`);
96
+ }
97
+ else {
98
+ lines.push(' session: unresolved (read-only; no capsule minted)');
99
+ }
100
+ // -------- Claim (only when inside a tracked worktree) --------
101
+ if (input.binding.worktreeName !== undefined && input.session !== null) {
102
+ const wtName = input.binding.worktreeName;
103
+ const record = input.worktrees[wtName];
104
+ if (record !== undefined) {
105
+ lines.push('');
106
+ const agentRecord = record.owner !== undefined ? input.agents[record.owner.session_id] : undefined;
107
+ lines.push((0, claim_1.renderClaimPanel)({
108
+ worktreeName: wtName,
109
+ worktreeRecord: record,
110
+ ...(agentRecord !== undefined ? { agentRecord } : {}),
111
+ currentSession: input.session.identity,
112
+ now: input.now,
113
+ ...(input.staleTtlMs !== undefined ? { staleTtlMs: input.staleTtlMs } : {}),
114
+ }));
115
+ }
116
+ }
117
+ // -------- Doctor --------
118
+ lines.push('');
119
+ lines.push('Doctor');
120
+ const counts = (0, finding_1.countFindingSeverities)(input.doctorFindings);
121
+ lines.push(` Summary: ${counts.errors}E / ${counts.warnings}W / ${counts.infos}I`);
122
+ if (input.doctorFindings.length === 0) {
123
+ lines.push(' (no findings)');
124
+ }
125
+ else {
126
+ const cap = input.findingCap ?? DEFAULT_FINDING_CAP;
127
+ // Sort by severity rank (error > warning > info) and take top `cap`.
128
+ const rank = {
129
+ error: 0,
130
+ warning: 1,
131
+ info: 2,
132
+ };
133
+ const top = [...input.doctorFindings]
134
+ .sort((a, b) => rank[a.severity] - rank[b.severity])
135
+ .slice(0, cap);
136
+ lines.push((0, finding_1.renderFindings)(top));
137
+ if (input.doctorFindings.length > cap) {
138
+ lines.push(` … ${input.doctorFindings.length - cap} more — run \`caws doctor\` for full list`);
139
+ }
140
+ }
141
+ return lines.join('\n');
142
+ }
143
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/shell/render/status.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,0BAA0B;AAC1B,EAAE;AACF,gCAAgC;AAChC,EAAE;AACF,gBAAgB;AAChB,EAAE;AACF,YAAY;AACZ,iEAAiE;AACjE,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AACpB,uDAAuD;AACvD,kEAAkE;AAClE,uDAAuD;AACvD,EAAE;AACF,gDAAgD;AAChD,2DAA2D;AAC3D,EAAE;AACF,WAAW;AACX,uDAAuD;;AA6EvD,oCAmGC;AAnKD,mCAA2C;AAC3C,uCAGmB;AA0BnB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,SAAS,qBAAqB,CAAC,KAAsB;IACnD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,QAAyB;IAC9C,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,QAAQ,CAAC,UAAU,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAwB;IACnD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,yBAAyB,CAAC;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,2CAA2C,CAAC;IAClF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAmB;IAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,WAAW,KAAK,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,CAAC,YAAY,IAAI,CAAC;QACvE,KAAK,WAAW;YACd,OAAO,qDAAqD,CAAC;QAC/D,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,gBAAgB,GACpB,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACtB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,kBAAkB,gBAAgB,EAAE,CAAC,CAAC;IAEjD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IAE9C,MAAM,SAAS,GACb,KAAK,CAAC,YAAY,KAAK,SAAS;QAC9B,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,SAAS;QAC9B,CAAC,CAAC,KAAK,CAAC,YAAY;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,oBAAoB;YACzC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,qCAAqC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;IAE1C,oCAAoC;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,kBAAkB,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE5E,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CACR,kBAAkB,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAC5F,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACzE,CAAC;IAED,gEAAgE;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,WAAW,GACf,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,KAAK,CAAC,IAAI,CACR,IAAA,wBAAgB,EAAC;gBACf,YAAY,EAAE,MAAM;gBACpB,cAAc,EAAE,MAAM;gBACtB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;gBACtC,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,IAAA,gCAAsB,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,KAAK,GAAG,CAC1E,CAAC;IACF,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACpD,qEAAqE;QACrE,MAAM,IAAI,GAA8C;YACtD,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,CAAC;SACR,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;aACnD,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,IAAA,wBAAc,EAAC,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,2CAA2C,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Waiver, WaiverEffectiveness } from '@paths.design/caws-kernel';
2
+ export interface RenderWaiverSummaryInput {
3
+ readonly waiver: Waiver;
4
+ /** Pre-derived effectiveness from kernel.waiverEffectiveness. */
5
+ readonly effectiveness: WaiverEffectiveness;
6
+ }
7
+ export interface RenderWaiverDetailInput extends RenderWaiverSummaryInput {
8
+ /** Now, used to format expiry deltas. Caller owns the clock. */
9
+ readonly now: Date;
10
+ }
11
+ /**
12
+ * One-line summary suited to `caws waiver list`. Includes the kernel-
13
+ * derived effectiveness label so the caller doesn't need to re-classify.
14
+ */
15
+ export declare function renderWaiverSummary(input: RenderWaiverSummaryInput): string;
16
+ /**
17
+ * Multi-line detail block suited to `caws waiver show`. Includes
18
+ * everything `Waiver` carries plus a derived expiry delta.
19
+ */
20
+ export declare function renderWaiverDetail(input: RenderWaiverDetailInput): string;
21
+ //# sourceMappingURL=waiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiver.d.ts","sourceRoot":"","sources":["../../../src/shell/render/waiver.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AAiCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAI3E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAyBzE"}