@paths.design/caws-cli 10.2.0 → 11.1.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 (493) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +45 -787
  3. package/dist/init/harness-detect.d.ts +18 -0
  4. package/dist/init/harness-detect.d.ts.map +1 -0
  5. package/dist/init/harness-detect.js +90 -0
  6. package/dist/init/harness-detect.js.map +1 -0
  7. package/dist/init/hook-install.d.ts +53 -0
  8. package/dist/init/hook-install.d.ts.map +1 -0
  9. package/dist/init/hook-install.js +421 -0
  10. package/dist/init/hook-install.js.map +1 -0
  11. package/dist/init/hook-packs/manifest-claude-code.d.ts +4 -0
  12. package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -0
  13. package/dist/init/hook-packs/manifest-claude-code.js +190 -0
  14. package/dist/init/hook-packs/manifest-claude-code.js.map +1 -0
  15. package/dist/init/hook-packs/register.d.ts +19 -0
  16. package/dist/init/hook-packs/register.d.ts.map +1 -0
  17. package/dist/init/hook-packs/register.js +37 -0
  18. package/dist/init/hook-packs/register.js.map +1 -0
  19. package/dist/init/hook-packs/types.d.ts +123 -0
  20. package/dist/init/hook-packs/types.d.ts.map +1 -0
  21. package/dist/init/hook-packs/types.js +29 -0
  22. package/dist/init/hook-packs/types.js.map +1 -0
  23. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  24. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  25. package/dist/shell/binding/resolve-binding.js +228 -0
  26. package/dist/shell/binding/resolve-binding.js.map +1 -0
  27. package/dist/shell/binding/types.d.ts +42 -0
  28. package/dist/shell/binding/types.d.ts.map +1 -0
  29. package/dist/shell/binding/types.js +21 -0
  30. package/dist/shell/binding/types.js.map +1 -0
  31. package/dist/shell/commands/claim.d.ts +14 -0
  32. package/dist/shell/commands/claim.d.ts.map +1 -0
  33. package/dist/shell/commands/claim.js +197 -0
  34. package/dist/shell/commands/claim.js.map +1 -0
  35. package/dist/shell/commands/doctor.d.ts +13 -0
  36. package/dist/shell/commands/doctor.d.ts.map +1 -0
  37. package/dist/shell/commands/doctor.js +97 -0
  38. package/dist/shell/commands/doctor.js.map +1 -0
  39. package/dist/shell/commands/evidence.d.ts +28 -0
  40. package/dist/shell/commands/evidence.d.ts.map +1 -0
  41. package/dist/shell/commands/evidence.js +166 -0
  42. package/dist/shell/commands/evidence.js.map +1 -0
  43. package/dist/shell/commands/gates.d.ts +19 -0
  44. package/dist/shell/commands/gates.d.ts.map +1 -0
  45. package/dist/shell/commands/gates.js +208 -0
  46. package/dist/shell/commands/gates.js.map +1 -0
  47. package/dist/shell/commands/init.d.ts +17 -0
  48. package/dist/shell/commands/init.d.ts.map +1 -0
  49. package/dist/shell/commands/init.js +168 -0
  50. package/dist/shell/commands/init.js.map +1 -0
  51. package/dist/shell/commands/scope.d.ts +11 -0
  52. package/dist/shell/commands/scope.d.ts.map +1 -0
  53. package/dist/shell/commands/scope.js +92 -0
  54. package/dist/shell/commands/scope.js.map +1 -0
  55. package/dist/shell/commands/specs.d.ts +41 -0
  56. package/dist/shell/commands/specs.d.ts.map +1 -0
  57. package/dist/shell/commands/specs.js +264 -0
  58. package/dist/shell/commands/specs.js.map +1 -0
  59. package/dist/shell/commands/status.d.ts +15 -0
  60. package/dist/shell/commands/status.d.ts.map +1 -0
  61. package/dist/shell/commands/status.js +106 -0
  62. package/dist/shell/commands/status.js.map +1 -0
  63. package/dist/shell/commands/waiver.d.ts +38 -0
  64. package/dist/shell/commands/waiver.d.ts.map +1 -0
  65. package/dist/shell/commands/waiver.js +240 -0
  66. package/dist/shell/commands/waiver.js.map +1 -0
  67. package/dist/shell/commands/worktree.d.ts +38 -0
  68. package/dist/shell/commands/worktree.d.ts.map +1 -0
  69. package/dist/shell/commands/worktree.js +286 -0
  70. package/dist/shell/commands/worktree.js.map +1 -0
  71. package/dist/shell/gates/disposition.d.ts +23 -0
  72. package/dist/shell/gates/disposition.d.ts.map +1 -0
  73. package/dist/shell/gates/disposition.js +117 -0
  74. package/dist/shell/gates/disposition.js.map +1 -0
  75. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  76. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  77. package/dist/shell/gates/gate-result-contract.js +150 -0
  78. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  79. package/dist/shell/gates/local-evaluators/budget-limit.d.ts +24 -0
  80. package/dist/shell/gates/local-evaluators/budget-limit.d.ts.map +1 -0
  81. package/dist/shell/gates/local-evaluators/budget-limit.js +67 -0
  82. package/dist/shell/gates/local-evaluators/budget-limit.js.map +1 -0
  83. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts +25 -0
  84. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts.map +1 -0
  85. package/dist/shell/gates/local-evaluators/diff-helpers.js +74 -0
  86. package/dist/shell/gates/local-evaluators/diff-helpers.js.map +1 -0
  87. package/dist/shell/gates/local-evaluators/index.d.ts +28 -0
  88. package/dist/shell/gates/local-evaluators/index.d.ts.map +1 -0
  89. package/dist/shell/gates/local-evaluators/index.js +67 -0
  90. package/dist/shell/gates/local-evaluators/index.js.map +1 -0
  91. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts +23 -0
  92. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts.map +1 -0
  93. package/dist/shell/gates/local-evaluators/scope-boundary.js +67 -0
  94. package/dist/shell/gates/local-evaluators/scope-boundary.js.map +1 -0
  95. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts +12 -0
  96. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts.map +1 -0
  97. package/dist/shell/gates/local-evaluators/spec-completeness.js +73 -0
  98. package/dist/shell/gates/local-evaluators/spec-completeness.js.map +1 -0
  99. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  100. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  101. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  102. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  103. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  104. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  105. package/dist/shell/gates/waiver-filter.js +119 -0
  106. package/dist/shell/gates/waiver-filter.js.map +1 -0
  107. package/dist/shell/index.d.ts +54 -0
  108. package/dist/shell/index.d.ts.map +1 -0
  109. package/dist/shell/index.js +85 -0
  110. package/dist/shell/index.js.map +1 -0
  111. package/dist/shell/register.d.ts +11 -0
  112. package/dist/shell/register.d.ts.map +1 -0
  113. package/dist/shell/register.js +464 -0
  114. package/dist/shell/register.js.map +1 -0
  115. package/dist/shell/render/claim.d.ts +22 -0
  116. package/dist/shell/render/claim.d.ts.map +1 -0
  117. package/dist/shell/render/claim.js +75 -0
  118. package/dist/shell/render/claim.js.map +1 -0
  119. package/dist/shell/render/decision.d.ts +15 -0
  120. package/dist/shell/render/decision.d.ts.map +1 -0
  121. package/dist/shell/render/decision.js +66 -0
  122. package/dist/shell/render/decision.js.map +1 -0
  123. package/dist/shell/render/diagnostic.d.ts +19 -0
  124. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  125. package/dist/shell/render/diagnostic.js +76 -0
  126. package/dist/shell/render/diagnostic.js.map +1 -0
  127. package/dist/shell/render/finding.d.ts +15 -0
  128. package/dist/shell/render/finding.d.ts.map +1 -0
  129. package/dist/shell/render/finding.js +57 -0
  130. package/dist/shell/render/finding.js.map +1 -0
  131. package/dist/shell/render/gates.d.ts +3 -0
  132. package/dist/shell/render/gates.d.ts.map +1 -0
  133. package/dist/shell/render/gates.js +56 -0
  134. package/dist/shell/render/gates.js.map +1 -0
  135. package/dist/shell/render/init-hook-pack.d.ts +16 -0
  136. package/dist/shell/render/init-hook-pack.d.ts.map +1 -0
  137. package/dist/shell/render/init-hook-pack.js +206 -0
  138. package/dist/shell/render/init-hook-pack.js.map +1 -0
  139. package/dist/shell/render/init.d.ts +11 -0
  140. package/dist/shell/render/init.d.ts.map +1 -0
  141. package/dist/shell/render/init.js +32 -0
  142. package/dist/shell/render/init.js.map +1 -0
  143. package/dist/shell/render/status.d.ts +26 -0
  144. package/dist/shell/render/status.d.ts.map +1 -0
  145. package/dist/shell/render/status.js +143 -0
  146. package/dist/shell/render/status.js.map +1 -0
  147. package/dist/shell/render/waiver.d.ts +21 -0
  148. package/dist/shell/render/waiver.d.ts.map +1 -0
  149. package/dist/shell/render/waiver.js +94 -0
  150. package/dist/shell/render/waiver.js.map +1 -0
  151. package/dist/shell/rules.d.ts +37 -0
  152. package/dist/shell/rules.d.ts.map +1 -0
  153. package/dist/shell/rules.js +51 -0
  154. package/dist/shell/rules.js.map +1 -0
  155. package/dist/shell/session/actor.d.ts +14 -0
  156. package/dist/shell/session/actor.d.ts.map +1 -0
  157. package/dist/shell/session/actor.js +34 -0
  158. package/dist/shell/session/actor.js.map +1 -0
  159. package/dist/shell/session/resolve-session.d.ts +5 -0
  160. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  161. package/dist/shell/session/resolve-session.js +239 -0
  162. package/dist/shell/session/resolve-session.js.map +1 -0
  163. package/dist/shell/session/types.d.ts +56 -0
  164. package/dist/shell/session/types.d.ts.map +1 -0
  165. package/dist/shell/session/types.js +15 -0
  166. package/dist/shell/session/types.js.map +1 -0
  167. package/dist/store/agents-store.d.ts +3 -0
  168. package/dist/store/agents-store.d.ts.map +1 -0
  169. package/dist/store/agents-store.js +63 -0
  170. package/dist/store/agents-store.js.map +1 -0
  171. package/dist/store/apply-patch.d.ts +16 -0
  172. package/dist/store/apply-patch.d.ts.map +1 -0
  173. package/dist/store/apply-patch.js +191 -0
  174. package/dist/store/apply-patch.js.map +1 -0
  175. package/dist/store/atomic-write.d.ts +34 -0
  176. package/dist/store/atomic-write.d.ts.map +1 -0
  177. package/dist/store/atomic-write.js +174 -0
  178. package/dist/store/atomic-write.js.map +1 -0
  179. package/dist/store/doctor-snapshot.d.ts +20 -0
  180. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  181. package/dist/store/doctor-snapshot.js +176 -0
  182. package/dist/store/doctor-snapshot.js.map +1 -0
  183. package/dist/store/events-store.d.ts +33 -0
  184. package/dist/store/events-store.d.ts.map +1 -0
  185. package/dist/store/events-store.js +297 -0
  186. package/dist/store/events-store.js.map +1 -0
  187. package/dist/store/index.d.ts +21 -0
  188. package/dist/store/index.d.ts.map +1 -0
  189. package/dist/store/index.js +47 -0
  190. package/dist/store/index.js.map +1 -0
  191. package/dist/store/init-store.d.ts +21 -0
  192. package/dist/store/init-store.d.ts.map +1 -0
  193. package/dist/store/init-store.js +295 -0
  194. package/dist/store/init-store.js.map +1 -0
  195. package/dist/store/json-store.d.ts +3 -0
  196. package/dist/store/json-store.d.ts.map +1 -0
  197. package/dist/store/json-store.js +65 -0
  198. package/dist/store/json-store.js.map +1 -0
  199. package/dist/store/lifecycle-lock.d.ts +34 -0
  200. package/dist/store/lifecycle-lock.d.ts.map +1 -0
  201. package/dist/store/lifecycle-lock.js +168 -0
  202. package/dist/store/lifecycle-lock.js.map +1 -0
  203. package/dist/store/lifecycle-transaction.d.ts +79 -0
  204. package/dist/store/lifecycle-transaction.d.ts.map +1 -0
  205. package/dist/store/lifecycle-transaction.js +319 -0
  206. package/dist/store/lifecycle-transaction.js.map +1 -0
  207. package/dist/store/policy-store.d.ts +3 -0
  208. package/dist/store/policy-store.d.ts.map +1 -0
  209. package/dist/store/policy-store.js +65 -0
  210. package/dist/store/policy-store.js.map +1 -0
  211. package/dist/store/repo-root.d.ts +46 -0
  212. package/dist/store/repo-root.d.ts.map +1 -0
  213. package/dist/store/repo-root.js +145 -0
  214. package/dist/store/repo-root.js.map +1 -0
  215. package/dist/store/rules.d.ts +69 -0
  216. package/dist/store/rules.d.ts.map +1 -0
  217. package/dist/store/rules.js +95 -0
  218. package/dist/store/rules.js.map +1 -0
  219. package/dist/store/specs-store.d.ts +3 -0
  220. package/dist/store/specs-store.d.ts.map +1 -0
  221. package/dist/store/specs-store.js +131 -0
  222. package/dist/store/specs-store.js.map +1 -0
  223. package/dist/store/specs-writer.d.ts +61 -0
  224. package/dist/store/specs-writer.d.ts.map +1 -0
  225. package/dist/store/specs-writer.js +506 -0
  226. package/dist/store/specs-writer.js.map +1 -0
  227. package/dist/store/types.d.ts +84 -0
  228. package/dist/store/types.d.ts.map +1 -0
  229. package/dist/store/types.js +14 -0
  230. package/dist/store/types.js.map +1 -0
  231. package/dist/store/waivers-store.d.ts +25 -0
  232. package/dist/store/waivers-store.d.ts.map +1 -0
  233. package/dist/store/waivers-store.js +232 -0
  234. package/dist/store/waivers-store.js.map +1 -0
  235. package/dist/store/worktrees-store.d.ts +3 -0
  236. package/dist/store/worktrees-store.d.ts.map +1 -0
  237. package/dist/store/worktrees-store.js +62 -0
  238. package/dist/store/worktrees-store.js.map +1 -0
  239. package/dist/store/worktrees-writer.d.ts +77 -0
  240. package/dist/store/worktrees-writer.d.ts.map +1 -0
  241. package/dist/store/worktrees-writer.js +674 -0
  242. package/dist/store/worktrees-writer.js.map +1 -0
  243. package/dist/store/yaml-patch.d.ts +7 -0
  244. package/dist/store/yaml-patch.d.ts.map +1 -0
  245. package/dist/store/yaml-patch.js +250 -0
  246. package/dist/store/yaml-patch.js.map +1 -0
  247. package/dist/store/yaml-store.d.ts +9 -0
  248. package/dist/store/yaml-store.d.ts.map +1 -0
  249. package/dist/store/yaml-store.js +121 -0
  250. package/dist/store/yaml-store.js.map +1 -0
  251. package/package.json +15 -13
  252. package/dist/budget-derivation.js +0 -751
  253. package/dist/cicd-optimizer.js +0 -504
  254. package/dist/commands/agents.js +0 -124
  255. package/dist/commands/archive.js +0 -500
  256. package/dist/commands/burnup.js +0 -198
  257. package/dist/commands/diagnose.js +0 -525
  258. package/dist/commands/evaluate.js +0 -314
  259. package/dist/commands/gates.js +0 -149
  260. package/dist/commands/init.js +0 -857
  261. package/dist/commands/iterate.js +0 -417
  262. package/dist/commands/mode.js +0 -269
  263. package/dist/commands/parallel.js +0 -242
  264. package/dist/commands/plan.js +0 -438
  265. package/dist/commands/provenance.js +0 -1143
  266. package/dist/commands/quality-monitor.js +0 -284
  267. package/dist/commands/scope.js +0 -264
  268. package/dist/commands/session.js +0 -312
  269. package/dist/commands/sidecar.js +0 -74
  270. package/dist/commands/specs.js +0 -1656
  271. package/dist/commands/status.js +0 -1172
  272. package/dist/commands/templates.js +0 -237
  273. package/dist/commands/tool.js +0 -136
  274. package/dist/commands/tutorial.js +0 -480
  275. package/dist/commands/validate.js +0 -357
  276. package/dist/commands/verify-acs.js +0 -443
  277. package/dist/commands/waivers.js +0 -599
  278. package/dist/commands/workflow.js +0 -243
  279. package/dist/commands/worktree.js +0 -502
  280. package/dist/config/lite-scope.js +0 -158
  281. package/dist/config/modes.js +0 -347
  282. package/dist/constants/spec-types.js +0 -65
  283. package/dist/gates/budget-limit.js +0 -121
  284. package/dist/gates/feedback.js +0 -260
  285. package/dist/gates/format.js +0 -179
  286. package/dist/gates/god-object.js +0 -117
  287. package/dist/gates/pipeline.js +0 -167
  288. package/dist/gates/scope-boundary.js +0 -112
  289. package/dist/gates/spec-completeness.js +0 -109
  290. package/dist/gates/todo-detection.js +0 -205
  291. package/dist/generators/jest-config-generator.js +0 -242
  292. package/dist/generators/working-spec.js +0 -237
  293. package/dist/minimal-cli.js +0 -88
  294. package/dist/parallel/parallel-manager.js +0 -433
  295. package/dist/policy/PolicyManager.js +0 -470
  296. package/dist/scaffold/claude-hooks.js +0 -443
  297. package/dist/scaffold/cursor-hooks.js +0 -177
  298. package/dist/scaffold/git-hooks.js +0 -928
  299. package/dist/scaffold/index.js +0 -794
  300. package/dist/session/session-manager.js +0 -653
  301. package/dist/sidecars/index.js +0 -33
  302. package/dist/sidecars/listeners.js +0 -40
  303. package/dist/sidecars/provenance-summary.js +0 -238
  304. package/dist/sidecars/quality-gaps.js +0 -258
  305. package/dist/sidecars/schema.js +0 -149
  306. package/dist/sidecars/spec-drift.js +0 -151
  307. package/dist/sidecars/waiver-draft.js +0 -176
  308. package/dist/spec/SpecFileManager.js +0 -419
  309. package/dist/templates/.caws/schemas/policy.schema.json +0 -117
  310. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  311. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  312. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  313. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  314. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  315. package/dist/templates/.caws/tools/README.md +0 -18
  316. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  317. package/dist/templates/.caws/tools-allow.json +0 -331
  318. package/dist/templates/.caws/waivers.yml +0 -19
  319. package/dist/templates/.claude/README.md +0 -190
  320. package/dist/templates/.claude/hooks/audit.sh +0 -121
  321. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  322. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  323. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  324. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  325. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  326. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  327. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  328. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  329. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  330. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  331. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  332. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  333. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  334. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  335. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  336. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  337. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  338. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  339. package/dist/templates/.claude/rules/git-safety.md +0 -26
  340. package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
  341. package/dist/templates/.claude/settings.json +0 -141
  342. package/dist/templates/.cursor/README.md +0 -299
  343. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  344. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  345. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  346. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  347. package/dist/templates/.cursor/hooks/format.sh +0 -38
  348. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  349. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  350. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  351. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  352. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  353. package/dist/templates/.cursor/hooks.json +0 -76
  354. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  355. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  356. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  357. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  358. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  359. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  360. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  361. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  362. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  363. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  364. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  365. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  366. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  367. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  368. package/dist/templates/.cursor/rules/README.md +0 -148
  369. package/dist/templates/.github/copilot-instructions.md +0 -82
  370. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  371. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  372. package/dist/templates/.junie/guidelines.md +0 -73
  373. package/dist/templates/.vscode/launch.json +0 -17
  374. package/dist/templates/.vscode/settings.json +0 -95
  375. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  376. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  377. package/dist/templates/CLAUDE.md +0 -196
  378. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  379. package/dist/templates/OIDC_SETUP.md +0 -300
  380. package/dist/templates/agents.md +0 -171
  381. package/dist/templates/codemod/README.md +0 -1
  382. package/dist/templates/codemod/test.js +0 -93
  383. package/dist/templates/docs/README.md +0 -151
  384. package/dist/templates/scripts/new_feature.sh +0 -80
  385. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  386. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  387. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  388. package/dist/test-analysis.js +0 -786
  389. package/dist/tool-interface.js +0 -314
  390. package/dist/tool-loader.js +0 -303
  391. package/dist/tool-validator.js +0 -393
  392. package/dist/utils/agent-display.js +0 -210
  393. package/dist/utils/agent-session.js +0 -344
  394. package/dist/utils/async-utils.js +0 -188
  395. package/dist/utils/command-wrapper.js +0 -200
  396. package/dist/utils/event-log.js +0 -584
  397. package/dist/utils/event-renderer.js +0 -521
  398. package/dist/utils/finalization.js +0 -230
  399. package/dist/utils/git-lock.js +0 -119
  400. package/dist/utils/gitignore-updater.js +0 -158
  401. package/dist/utils/ide-detection.js +0 -133
  402. package/dist/utils/lifecycle-events.js +0 -94
  403. package/dist/utils/project-analysis.js +0 -367
  404. package/dist/utils/promise-utils.js +0 -72
  405. package/dist/utils/quality-gates-errors.js +0 -520
  406. package/dist/utils/quality-gates-utils.js +0 -387
  407. package/dist/utils/schema-validator.js +0 -50
  408. package/dist/utils/spec-resolver.js +0 -711
  409. package/dist/utils/typescript-detector.js +0 -369
  410. package/dist/utils/working-state.js +0 -530
  411. package/dist/utils/yaml-validation.js +0 -156
  412. package/dist/validation/spec-validation.js +0 -924
  413. package/dist/waivers-manager.js +0 -732
  414. package/dist/worktree/worktree-manager.js +0 -1735
  415. package/templates/.caws/schemas/policy.schema.json +0 -117
  416. package/templates/.caws/schemas/scope.schema.json +0 -52
  417. package/templates/.caws/schemas/waivers.schema.json +0 -106
  418. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  419. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  420. package/templates/.caws/templates/working-spec.template.yml +0 -80
  421. package/templates/.caws/tools/README.md +0 -18
  422. package/templates/.caws/tools/scope-guard.js +0 -203
  423. package/templates/.caws/tools-allow.json +0 -331
  424. package/templates/.caws/waivers.yml +0 -19
  425. package/templates/.claude/README.md +0 -190
  426. package/templates/.claude/hooks/audit.sh +0 -121
  427. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  428. package/templates/.claude/hooks/classify_command.py +0 -592
  429. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  430. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  431. package/templates/.claude/hooks/naming-check.sh +0 -100
  432. package/templates/.claude/hooks/protected-paths.sh +0 -39
  433. package/templates/.claude/hooks/quality-check.sh +0 -81
  434. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  435. package/templates/.claude/hooks/scope-guard.sh +0 -381
  436. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  437. package/templates/.claude/hooks/session-log.sh +0 -634
  438. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  439. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  440. package/templates/.claude/hooks/test_classify_command.py +0 -370
  441. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  442. package/templates/.claude/hooks/validate-spec.sh +0 -76
  443. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  444. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  445. package/templates/.claude/rules/git-safety.md +0 -26
  446. package/templates/.claude/rules/worktree-isolation.md +0 -101
  447. package/templates/.claude/settings.json +0 -141
  448. package/templates/.cursor/README.md +0 -299
  449. package/templates/.cursor/hooks/audit.sh +0 -55
  450. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  451. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  452. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  453. package/templates/.cursor/hooks/format.sh +0 -38
  454. package/templates/.cursor/hooks/naming-check.sh +0 -64
  455. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  456. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  457. package/templates/.cursor/hooks/session-log.sh +0 -924
  458. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  459. package/templates/.cursor/hooks.json +0 -76
  460. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  461. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  462. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  463. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  464. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  465. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  466. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  467. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  468. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  469. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  470. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  471. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  472. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  473. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  474. package/templates/.cursor/rules/README.md +0 -148
  475. package/templates/.github/copilot-instructions.md +0 -82
  476. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  477. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  478. package/templates/.junie/guidelines.md +0 -73
  479. package/templates/.vscode/launch.json +0 -17
  480. package/templates/.vscode/settings.json +0 -95
  481. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  482. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  483. package/templates/CLAUDE.md +0 -196
  484. package/templates/COMMIT_CONVENTIONS.md +0 -86
  485. package/templates/OIDC_SETUP.md +0 -300
  486. package/templates/agents.md +0 -171
  487. package/templates/codemod/README.md +0 -1
  488. package/templates/codemod/test.js +0 -93
  489. package/templates/docs/README.md +0 -151
  490. package/templates/scripts/new_feature.sh +0 -80
  491. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  492. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  493. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ // Claude Code hook pack manifest.
3
+ //
4
+ // Installs the v11-shape Claude Code hook plane into a repo. Activation
5
+ // requires a session restart in Claude Code: hook registration is read at
6
+ // session start, so installing mid-session does not affect the current
7
+ // session's tool calls.
8
+ //
9
+ // Lineage entries this pack covers — see
10
+ // packages/caws-cli/docs-status/failure-lineage.md:
11
+ // Entry 1 — git init catastrophic deletion (block-dangerous + classify_command)
12
+ // Entry 4 — worktree cross-contamination, inherited-dirty-state (worktree-guard)
13
+ // Entry 6 — stash-and-destroy (worktree-guard)
14
+ // Entry 8 — scope violations, union-mode interference (scope-guard)
15
+ // Entry 11 — ownership claim, CAWSFIX-31/32 (worktree-guard, session-caws-status)
16
+ // Entry 12 — unbound = no authority (scope-guard fail-closed)
17
+ // Entry 13 — working-spec.yaml baseline clobber (worktree-write-guard)
18
+ // Entry 16 — adjudicator overstep / role partitioning (the pack itself)
19
+ // Entry 17 — git --bare init bypass + danger latch (classify_command + block-dangerous + reset-danger-latch)
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CLAUDE_CODE_PACK = exports.CLAUDE_CODE_PACK_VERSION = void 0;
22
+ // Pack version bumps when managed file contents change in a way that
23
+ // existing installs should pick up via the managed_old_version → auto-
24
+ // update path. Version 2 ships the strike-level diagnostic triage,
25
+ // activation-banner wording fix, settings.json "why we don't write it"
26
+ // note, and tightened ask/block semantics in block-dangerous.
27
+ exports.CLAUDE_CODE_PACK_VERSION = 2;
28
+ exports.CLAUDE_CODE_PACK = {
29
+ id: 'claude-code',
30
+ targetSurface: 'claude-code',
31
+ packVersion: exports.CLAUDE_CODE_PACK_VERSION,
32
+ cawsMinMajor: 11,
33
+ summary: 'v11-shape Claude Code hook pack: scope, worktree, dangerous-command, ' +
34
+ 'and session lifecycle guards.',
35
+ activation: 'restart_required',
36
+ lifecycleEvents: ['pre_bash', 'pre_write', 'pre_edit', 'session_start', 'stop'],
37
+ stateModel: {
38
+ reads: [
39
+ '.caws/specs/*.yaml',
40
+ '.caws/worktrees.json',
41
+ '.caws/agents.json',
42
+ '.caws/policy.yaml',
43
+ 'package.json',
44
+ ],
45
+ writes: [
46
+ '.claude/logs/audit.log',
47
+ '.claude/logs/session-*.log',
48
+ '.claude/hooks/state/danger-latch-*.json',
49
+ '.claude/hooks/state/guard-strikes-*.json',
50
+ 'tmp/<session-id>/',
51
+ ],
52
+ },
53
+ lineageRefs: [1, 4, 6, 8, 11, 12, 13, 16, 17],
54
+ // Installed files. Order is deterministic (used by tests and by the
55
+ // install reporter). destPath is relative to repo root.
56
+ // sourcePath is relative to the pack root
57
+ // (packages/caws-cli/templates/hook-packs/claude-code/).
58
+ installedFiles: [
59
+ // -- Scope and worktree guards (v11-shape) --
60
+ {
61
+ destPath: '.claude/hooks/scope-guard.sh',
62
+ sourcePath: 'scope-guard.sh',
63
+ executable: true,
64
+ managed: true,
65
+ },
66
+ {
67
+ destPath: '.claude/hooks/worktree-guard.sh',
68
+ sourcePath: 'worktree-guard.sh',
69
+ executable: true,
70
+ managed: true,
71
+ },
72
+ {
73
+ destPath: '.claude/hooks/worktree-write-guard.sh',
74
+ sourcePath: 'worktree-write-guard.sh',
75
+ executable: true,
76
+ managed: true,
77
+ },
78
+ // -- Entry 17 dangerous-command hardening (preserved verbatim) --
79
+ {
80
+ destPath: '.claude/hooks/block-dangerous.sh',
81
+ sourcePath: 'block-dangerous.sh',
82
+ executable: true,
83
+ managed: true,
84
+ },
85
+ {
86
+ destPath: '.claude/hooks/classify_command.py',
87
+ sourcePath: 'classify_command.py',
88
+ executable: true,
89
+ managed: true,
90
+ },
91
+ // -- Human-authorized escape hatches (preserved) --
92
+ {
93
+ destPath: '.claude/hooks/reset-strikes.sh',
94
+ sourcePath: 'reset-strikes.sh',
95
+ executable: true,
96
+ managed: true,
97
+ },
98
+ {
99
+ destPath: '.claude/hooks/reset-danger-latch.sh',
100
+ sourcePath: 'reset-danger-latch.sh',
101
+ executable: true,
102
+ managed: true,
103
+ },
104
+ // -- Strike counter shared library (sourced by scope-guard) --
105
+ {
106
+ destPath: '.claude/hooks/guard-strikes.sh',
107
+ sourcePath: 'guard-strikes.sh',
108
+ executable: true,
109
+ managed: true,
110
+ },
111
+ // -- Session lifecycle and logging --
112
+ {
113
+ destPath: '.claude/hooks/session-caws-status.sh',
114
+ sourcePath: 'session-caws-status.sh',
115
+ executable: true,
116
+ managed: true,
117
+ },
118
+ {
119
+ destPath: '.claude/hooks/session-log.sh',
120
+ sourcePath: 'session-log.sh',
121
+ executable: true,
122
+ managed: true,
123
+ },
124
+ {
125
+ destPath: '.claude/hooks/audit.sh',
126
+ sourcePath: 'audit.sh',
127
+ executable: true,
128
+ managed: true,
129
+ },
130
+ // -- Shared libraries sourced by every hook script --
131
+ {
132
+ destPath: '.claude/hooks/runtime-paths.sh',
133
+ sourcePath: 'runtime-paths.sh',
134
+ executable: false,
135
+ managed: true,
136
+ },
137
+ {
138
+ destPath: '.claude/hooks/lib/parse-input.sh',
139
+ sourcePath: 'lib/parse-input.sh',
140
+ executable: false,
141
+ managed: true,
142
+ },
143
+ {
144
+ destPath: '.claude/hooks/lib/run-handlers.sh',
145
+ sourcePath: 'lib/run-handlers.sh',
146
+ executable: false,
147
+ managed: true,
148
+ },
149
+ // -- Dispatch entrypoints invoked from .claude/settings.json --
150
+ {
151
+ destPath: '.claude/hooks/dispatch/pre_tool_use.sh',
152
+ sourcePath: 'dispatch/pre_tool_use.sh',
153
+ executable: true,
154
+ managed: true,
155
+ },
156
+ {
157
+ destPath: '.claude/hooks/dispatch/post_tool_use.sh',
158
+ sourcePath: 'dispatch/post_tool_use.sh',
159
+ executable: true,
160
+ managed: true,
161
+ },
162
+ {
163
+ destPath: '.claude/hooks/dispatch/session_start.sh',
164
+ sourcePath: 'dispatch/session_start.sh',
165
+ executable: true,
166
+ managed: true,
167
+ },
168
+ {
169
+ destPath: '.claude/hooks/dispatch/stop.sh',
170
+ sourcePath: 'dispatch/stop.sh',
171
+ executable: true,
172
+ managed: true,
173
+ },
174
+ // NOTE: .claude/settings.json is NOT a managed pack file. It often
175
+ // carries user-authored `permissions` and `env` blocks that the pack
176
+ // should not touch. Install emits explicit instructions for the
177
+ // user to wire the four dispatch entrypoints into their existing
178
+ // settings.json (or to create one from the canonical snippet in
179
+ // CLAUDE.md if absent). This avoids JSON-merge complexity and
180
+ // preserves user-owned settings.
181
+ // -- Doctrine landing for hook editors --
182
+ {
183
+ destPath: '.claude/hooks/CLAUDE.md',
184
+ sourcePath: 'CLAUDE.md',
185
+ executable: false,
186
+ managed: true,
187
+ },
188
+ ],
189
+ };
190
+ //# sourceMappingURL=manifest-claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-claude-code.js","sourceRoot":"","sources":["../../../src/init/hook-packs/manifest-claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AgentSurface, HookPackV1 } from './types';
2
+ export type PackResolution = {
3
+ readonly kind: 'pack';
4
+ readonly pack: HookPackV1;
5
+ } | {
6
+ readonly kind: 'none';
7
+ } | {
8
+ readonly kind: 'declared_not_implemented';
9
+ readonly surface: Exclude<AgentSurface, 'none'>;
10
+ };
11
+ /** Resolve a requested surface to a pack manifest. */
12
+ export declare function resolveHookPack(surface: AgentSurface): PackResolution;
13
+ /** Full list of surfaces this CLI version recognizes (for help text and
14
+ * validation). */
15
+ export declare const KNOWN_SURFACES: readonly AgentSurface[];
16
+ /** Surfaces that have a fully-implemented pack in this CLI version. */
17
+ export declare const IMPLEMENTED_SURFACES: readonly AgentSurface[];
18
+ export declare function isKnownSurface(value: string): value is AgentSurface;
19
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/init/hook-packs/register.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGxD,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IACE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CACjD,CAAC;AAEN,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CASrE;AAED;mBACmB;AACnB,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAKjD,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAAoB,CAAC;AAE7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // Pack registry. Maps `--agent-surface <id>` to a `HookPackV1` manifest.
3
+ //
4
+ // v11.1 ships only the `claude-code` pack. `cursor` and `windsurf` are
5
+ // recognized as values but resolution returns a "declared but not
6
+ // implemented" diagnostic — the abstraction is in place so adding a
7
+ // new pack is purely additive (drop a manifest, register it here).
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.IMPLEMENTED_SURFACES = exports.KNOWN_SURFACES = void 0;
10
+ exports.resolveHookPack = resolveHookPack;
11
+ exports.isKnownSurface = isKnownSurface;
12
+ const manifest_claude_code_1 = require("./manifest-claude-code");
13
+ /** Resolve a requested surface to a pack manifest. */
14
+ function resolveHookPack(surface) {
15
+ if (surface === 'none') {
16
+ return { kind: 'none' };
17
+ }
18
+ if (surface === 'claude-code') {
19
+ return { kind: 'pack', pack: manifest_claude_code_1.CLAUDE_CODE_PACK };
20
+ }
21
+ // cursor / windsurf: recognized but not yet implemented.
22
+ return { kind: 'declared_not_implemented', surface };
23
+ }
24
+ /** Full list of surfaces this CLI version recognizes (for help text and
25
+ * validation). */
26
+ exports.KNOWN_SURFACES = [
27
+ 'claude-code',
28
+ 'cursor',
29
+ 'windsurf',
30
+ 'none',
31
+ ];
32
+ /** Surfaces that have a fully-implemented pack in this CLI version. */
33
+ exports.IMPLEMENTED_SURFACES = ['claude-code'];
34
+ function isKnownSurface(value) {
35
+ return exports.KNOWN_SURFACES.includes(value);
36
+ }
37
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/init/hook-packs/register.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,oEAAoE;AACpE,mEAAmE;;;AAcnE,0CASC;AAcD,wCAEC;AApCD,iEAA0D;AAU1D,sDAAsD;AACtD,SAAgB,eAAe,CAAC,OAAqB;IACnD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAgB,EAAE,CAAC;IAClD,CAAC;IACD,yDAAyD;IACzD,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;mBACmB;AACN,QAAA,cAAc,GAA4B;IACrD,aAAa;IACb,QAAQ;IACR,UAAU;IACV,MAAM;CACP,CAAC;AAEF,uEAAuE;AAC1D,QAAA,oBAAoB,GAA4B,CAAC,aAAa,CAAC,CAAC;AAE7E,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAQ,sBAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,123 @@
1
+ /** Supported agent harnesses. v11.1 implements claude-code only. */
2
+ export type AgentSurface = 'claude-code' | 'cursor' | 'windsurf' | 'none';
3
+ /** Lifecycle interception points a pack may register on a harness. */
4
+ export type LifecycleEvent = 'pre_bash' | 'pre_write' | 'pre_edit' | 'session_start' | 'stop';
5
+ /** A single file the pack installs, relative to the repo root. */
6
+ export interface HookPackFile {
7
+ /** Destination path relative to repo root (e.g., `.claude/hooks/scope-guard.sh`). */
8
+ readonly destPath: string;
9
+ /** Source path within the templates tree, relative to the pack root
10
+ * (e.g., `scope-guard.sh`). */
11
+ readonly sourcePath: string;
12
+ /** When true, the installed file must be executable (chmod +x). */
13
+ readonly executable: boolean;
14
+ /** When true, this file gets a managed header prepended/verified.
15
+ * Set false for non-script auxiliary files where a comment marker
16
+ * is not appropriate (e.g., a state directory placeholder). */
17
+ readonly managed: boolean;
18
+ }
19
+ /** State surfaces the pack reads from / writes to. Informational; used
20
+ * by docs and by future drift detection. */
21
+ export interface HookPackStateModel {
22
+ /** Files/dirs the pack reads (relative to repo root). */
23
+ readonly reads: readonly string[];
24
+ /** Files/dirs the pack writes (relative to repo root). */
25
+ readonly writes: readonly string[];
26
+ }
27
+ /** The pack manifest. */
28
+ export interface HookPackV1 {
29
+ /** Pack identifier, stable across versions (e.g., "claude-code"). */
30
+ readonly id: string;
31
+ /** The harness this pack targets. */
32
+ readonly targetSurface: Exclude<AgentSurface, 'none'>;
33
+ /** Pack version. Bumps when managed file contents change in a way
34
+ * that requires an update on re-install. */
35
+ readonly packVersion: number;
36
+ /** Minimum CAWS major version this pack is compatible with. */
37
+ readonly cawsMinMajor: number;
38
+ /** Lifecycle events this pack registers on the harness. */
39
+ readonly lifecycleEvents: readonly LifecycleEvent[];
40
+ /** Files installed by this pack, in deterministic order. */
41
+ readonly installedFiles: readonly HookPackFile[];
42
+ /** State surfaces (read/write paths). */
43
+ readonly stateModel: HookPackStateModel;
44
+ /** Failure-lineage entry numbers this pack covers. */
45
+ readonly lineageRefs: readonly number[];
46
+ /** Human-readable summary for init output. One short sentence. */
47
+ readonly summary: string;
48
+ /** Activation contract: whether installed hooks take effect in the
49
+ * current harness session, or require a restart. */
50
+ readonly activation: 'immediate' | 'restart_required' | 'unknown';
51
+ }
52
+ /** Managed-file header fields. Used by install for parse/emit. */
53
+ export interface ManagedHeader {
54
+ readonly hookPack: string;
55
+ readonly hookPackVersion: number;
56
+ readonly cawsMinMajor: number;
57
+ readonly lineageRefs: readonly number[];
58
+ }
59
+ /** Outcome of evaluating an installed-file path against the local filesystem
60
+ * during install. */
61
+ export type InstallFileState =
62
+ /** No file at destPath; safe to create. */
63
+ {
64
+ readonly kind: 'absent';
65
+ }
66
+ /** Managed file at destPath matching this pack/version and unchanged
67
+ * from bundled content. Safe to no-op. */
68
+ | {
69
+ readonly kind: 'managed_clean';
70
+ readonly header: ManagedHeader;
71
+ }
72
+ /** Managed file at destPath matching this pack but at an older version.
73
+ * Safe to update under update policy. */
74
+ | {
75
+ readonly kind: 'managed_old_version';
76
+ readonly header: ManagedHeader;
77
+ readonly currentVersion: number;
78
+ }
79
+ /** Managed file at destPath matching this pack/version but content
80
+ * differs from bundled. Refuses without --adopt or --overwrite. */
81
+ | {
82
+ readonly kind: 'managed_drift';
83
+ readonly header: ManagedHeader;
84
+ }
85
+ /** File at destPath without a managed header. Refuses without
86
+ * --adopt or --overwrite. */
87
+ | {
88
+ readonly kind: 'unmanaged_collision';
89
+ };
90
+ /** Aggregate outcome of an install operation. */
91
+ export type HookPackInstallOutcome =
92
+ /** Pack was installed for the first time (or new files added to an
93
+ * existing pack install). */
94
+ 'installed'
95
+ /** Pack files all present at correct version and content; no changes. */
96
+ | 'already_installed'
97
+ /** Pack files updated from an older version. */
98
+ | 'updated'
99
+ /** Caller explicitly chose `--agent-surface none`. No pack installed. */
100
+ | 'skipped_explicit_none'
101
+ /** No harness detected, non-interactive mode. No pack installed, warning
102
+ * emitted. */
103
+ | 'skipped_ambiguous';
104
+ /** Per-file install action recorded for reporting. */
105
+ export interface HookPackFileAction {
106
+ readonly destPath: string;
107
+ readonly action: 'created' | 'updated' | 'unchanged' | 'refused';
108
+ /** When action === 'refused', the reason. */
109
+ readonly refusalReason?: 'unmanaged_collision' | 'managed_drift';
110
+ }
111
+ /** Result of installing a pack into a repo. */
112
+ export interface HookPackInstallResult {
113
+ readonly outcome: HookPackInstallOutcome;
114
+ /** The pack that was (or would have been) installed. Null when
115
+ * outcome is 'skipped_explicit_none' or 'skipped_ambiguous'. */
116
+ readonly pack: HookPackV1 | null;
117
+ /** Per-file actions. */
118
+ readonly actions: readonly HookPackFileAction[];
119
+ /** Whether the harness requires a session restart for hooks to take
120
+ * effect. Drives the activation banner. */
121
+ readonly activation: 'immediate' | 'restart_required' | 'unknown' | 'not_applicable';
122
+ }
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/init/hook-packs/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ // HookPackV1 — manifest model for harness-specific hook packs installed by
3
+ // `caws init --agent-surface <name>`.
4
+ //
5
+ // A hook pack is the **runtime adapter** that projects CAWS authority into
6
+ // an agent harness's lifecycle (Claude Code, Cursor, Windsurf, etc.).
7
+ // The kernel/store/shell trinity owns canonical state. The pack interposes
8
+ // at pre-Edit/Write/Bash, where the kernel cannot reach (it runs downstream
9
+ // of the agent's tool call).
10
+ //
11
+ // Every file installed by a pack carries a CAWS-MANAGED-HOOK header:
12
+ //
13
+ // # CAWS-MANAGED-HOOK
14
+ // # hook_pack: <id>
15
+ // # hook_pack_version: <pack_version>
16
+ // # caws_min_major: <caws_min_major>
17
+ // # lineage_refs: <comma-separated lineage entry numbers>
18
+ // # do_not_edit_directly: update via `caws init --agent-surface <id>`
19
+ //
20
+ // The marker is what install/update uses to distinguish managed files
21
+ // (safe to rewrite under explicit policy) from local user files (refused
22
+ // without --adopt/--overwrite).
23
+ //
24
+ // Lineage: every pack must declare which failure-lineage entries it covers
25
+ // (packages/caws-cli/docs-status/failure-lineage.md). Removing or weakening
26
+ // a pack file requires naming the entry and identifying the replacement
27
+ // mechanism.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/init/hook-packs/types.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,sCAAsC;AACtC,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,2EAA2E;AAC3E,4EAA4E;AAC5E,6BAA6B;AAC7B,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,wBAAwB;AACxB,sBAAsB;AACtB,wCAAwC;AACxC,uCAAuC;AACvC,4DAA4D;AAC5D,wEAAwE;AACxE,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,aAAa"}
@@ -0,0 +1,4 @@
1
+ import type { GitWorktreeEntry, ResolveBindingInput, ResolvedBinding } from './types';
2
+ export declare function parseWorktreePorcelain(text: string): readonly GitWorktreeEntry[];
3
+ export declare function resolveBinding(input: ResolveBindingInput): ResolvedBinding;
4
+ //# sourceMappingURL=resolve-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-binding.d.ts","sourceRoot":"","sources":["../../../src/shell/binding/resolve-binding.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAChB,MAAM,SAAS,CAAC;AA0BjB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CAqChF;AA6BD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,eAAe,CA2F1E"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ // resolve-binding — turn (repoRoot, cwd, registry, specsBySpecId) into a
3
+ // `BindingState` plus a worktree-name resolution provenance.
4
+ //
5
+ // Algorithm:
6
+ //
7
+ // 1. Real-resolve repoRoot and cwd. macOS /tmp ↔ /private/tmp matters.
8
+ // 2. If cwd is the repoRoot (or a descendant that is NOT inside any
9
+ // worktree path), we are NOT in a tracked worktree → `unbound`.
10
+ // 3. Walk worktrees.json entries with a recorded `path`. Pick the entry
11
+ // whose realpath(path) is cwd or an ancestor of cwd. (Multiple matches
12
+ // would be a registry conflict; we take the deepest match, with a
13
+ // stable tiebreak by name.)
14
+ // 4. If no registry entry matches, fall back to `git worktree list
15
+ // --porcelain` to find the worktree path containing cwd, then look up
16
+ // that path in the registry. If still no match: `unbound`.
17
+ // 5. With a worktree name in hand, look up the bound spec by following
18
+ // registry.specId → spec. If the spec exists, hand the Spec +
19
+ // registry + name to kernel `deriveBindingState`. If not, synthesize
20
+ // an `unbound` (and emit a one-sided shape if the registry has a
21
+ // specId pointing at something that didn't load).
22
+ //
23
+ // The shell NEVER uses `basename(cwd)` to invent a worktree name.
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.parseWorktreePorcelain = parseWorktreePorcelain;
59
+ exports.resolveBinding = resolveBinding;
60
+ const fs = __importStar(require("node:fs"));
61
+ const path = __importStar(require("node:path"));
62
+ const node_child_process_1 = require("node:child_process");
63
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
64
+ function safeRealpath(p) {
65
+ try {
66
+ return fs.realpathSync(p);
67
+ }
68
+ catch {
69
+ return p;
70
+ }
71
+ }
72
+ function isAncestorOrEqual(maybeAncestor, descendant) {
73
+ if (maybeAncestor === descendant)
74
+ return true;
75
+ const withSep = maybeAncestor.endsWith(path.sep)
76
+ ? maybeAncestor
77
+ : maybeAncestor + path.sep;
78
+ return descendant.startsWith(withSep);
79
+ }
80
+ function defaultGitWorktreeList(repoRoot) {
81
+ const r = (0, node_child_process_1.spawnSync)('git', ['-C', repoRoot, 'worktree', 'list', '--porcelain'], {
82
+ encoding: 'utf8',
83
+ });
84
+ if (r.status !== 0 || typeof r.stdout !== 'string')
85
+ return [];
86
+ return parseWorktreePorcelain(r.stdout);
87
+ }
88
+ function parseWorktreePorcelain(text) {
89
+ const out = [];
90
+ let currentPath;
91
+ let currentBranch;
92
+ for (const line of text.split('\n')) {
93
+ if (line.startsWith('worktree ')) {
94
+ if (currentPath !== undefined) {
95
+ const entry = currentBranch !== undefined
96
+ ? { path: currentPath, branch: currentBranch }
97
+ : { path: currentPath };
98
+ out.push(entry);
99
+ }
100
+ currentPath = line.slice('worktree '.length);
101
+ currentBranch = undefined;
102
+ }
103
+ else if (line.startsWith('branch ')) {
104
+ currentBranch = line.slice('branch '.length);
105
+ }
106
+ else if (line === '') {
107
+ if (currentPath !== undefined) {
108
+ const entry = currentBranch !== undefined
109
+ ? { path: currentPath, branch: currentBranch }
110
+ : { path: currentPath };
111
+ out.push(entry);
112
+ currentPath = undefined;
113
+ currentBranch = undefined;
114
+ }
115
+ }
116
+ }
117
+ if (currentPath !== undefined) {
118
+ const entry = currentBranch !== undefined
119
+ ? { path: currentPath, branch: currentBranch }
120
+ : { path: currentPath };
121
+ out.push(entry);
122
+ }
123
+ return out;
124
+ }
125
+ function findRegistryMatch(cwdReal, registry) {
126
+ let best = null;
127
+ let bestDepth = -1;
128
+ for (const [name, record] of Object.entries(registry)) {
129
+ if (typeof record?.path !== 'string')
130
+ continue;
131
+ const recordReal = safeRealpath(record.path);
132
+ if (!isAncestorOrEqual(recordReal, cwdReal))
133
+ continue;
134
+ const depth = recordReal.split(path.sep).length;
135
+ if (depth > bestDepth ||
136
+ (depth === bestDepth && best !== null && name < best.name)) {
137
+ best = { name, path: recordReal };
138
+ bestDepth = depth;
139
+ }
140
+ }
141
+ return best;
142
+ }
143
+ function resolveBinding(input) {
144
+ const cwdReal = safeRealpath(input.cwd);
145
+ const repoRootReal = safeRealpath(input.repoRoot);
146
+ // If cwd is exactly the repo root, we are in the main checkout. Walk the
147
+ // registry anyway in case a worktree was created at the repo root (rare,
148
+ // would imply specId === <main> binding). Otherwise this returns null.
149
+ let candidate = findRegistryMatch(cwdReal, input.registry);
150
+ let source = 'registry_path_match';
151
+ if (candidate === null) {
152
+ // Fallback: git porcelain. Find the worktree path containing cwd,
153
+ // then match that path against the registry.
154
+ const lister = input.gitWorktreeList ?? defaultGitWorktreeList;
155
+ const wts = lister(input.repoRoot);
156
+ let porcelainMatch = null;
157
+ let porcelainDepth = -1;
158
+ for (const wt of wts) {
159
+ const wtReal = safeRealpath(wt.path);
160
+ if (!isAncestorOrEqual(wtReal, cwdReal))
161
+ continue;
162
+ const depth = wtReal.split(path.sep).length;
163
+ if (depth > porcelainDepth) {
164
+ porcelainMatch = wt;
165
+ porcelainDepth = depth;
166
+ }
167
+ }
168
+ if (porcelainMatch !== null) {
169
+ const porcelainReal = safeRealpath(porcelainMatch.path);
170
+ // Skip if porcelain match is the main checkout (no worktree binding).
171
+ if (porcelainReal !== repoRootReal) {
172
+ // Look up registry entry by path equality.
173
+ for (const [name, record] of Object.entries(input.registry)) {
174
+ if (typeof record?.path === 'string' &&
175
+ safeRealpath(record.path) === porcelainReal) {
176
+ candidate = { name, path: porcelainReal };
177
+ source = 'git_porcelain_match';
178
+ break;
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ if (candidate === null) {
185
+ return { binding: { kind: 'unbound' }, source: 'none' };
186
+ }
187
+ // We have a worktree name. Now find the bound spec for kernel evaluation.
188
+ const record = input.registry[candidate.name];
189
+ const registrySpecId = record?.specId;
190
+ if (typeof registrySpecId !== 'string' || registrySpecId.length === 0) {
191
+ // Registry knows the worktree but no spec is linked. Neither side
192
+ // points at the other, so this is `unbound`, NOT `one_sided`.
193
+ // The repair is "bind this worktree to a spec", not "repair corrupt
194
+ // asymmetric binding". The downstream renderer keys off the
195
+ // worktreeName being set to distinguish "tracked worktree without
196
+ // spec" from "cwd outside any worktree".
197
+ return {
198
+ binding: { kind: 'unbound' },
199
+ worktreeName: candidate.name,
200
+ source,
201
+ };
202
+ }
203
+ // We have registrySpecId. Find the bound spec in the loaded specs list.
204
+ const boundSpec = input.specs.find((s) => s.id === registrySpecId);
205
+ if (boundSpec === undefined) {
206
+ // Registry points at a spec id that didn't load. From the kernel's
207
+ // perspective this is one-sided (registry has specId, spec missing).
208
+ return {
209
+ binding: {
210
+ kind: 'one_sided',
211
+ detail: {
212
+ specHasWorktree: false,
213
+ registryHasSpecId: true,
214
+ registrySpecId,
215
+ worktreeName: candidate.name,
216
+ },
217
+ },
218
+ worktreeName: candidate.name,
219
+ source,
220
+ };
221
+ }
222
+ return {
223
+ binding: (0, caws_kernel_1.deriveBindingState)(boundSpec, input.registry, candidate.name),
224
+ worktreeName: candidate.name,
225
+ source,
226
+ };
227
+ }
228
+ //# sourceMappingURL=resolve-binding.js.map