@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,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":"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"}
@@ -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"}