peaks-loop 4.1.2 → 4.1.4

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 (717) hide show
  1. package/.claude-plugin/marketplace.json +136 -47
  2. package/CHANGELOG.md +112 -0
  3. package/README-en.md +1 -1
  4. package/README.md +1 -1
  5. package/contracts/readonly-argv-whitelist.json +211 -0
  6. package/dist/cli/commands/asset-command-shared.d.ts +12 -0
  7. package/dist/cli/commands/asset-command-shared.js +45 -0
  8. package/dist/cli/commands/asset-commands.d.ts +6 -1
  9. package/dist/cli/commands/asset-commands.js +11 -372
  10. package/dist/cli/commands/asset-crystallize-command.d.ts +3 -0
  11. package/dist/cli/commands/asset-crystallize-command.js +60 -0
  12. package/dist/cli/commands/asset-crystallize-payload.d.ts +47 -0
  13. package/dist/cli/commands/asset-crystallize-payload.js +85 -0
  14. package/dist/cli/commands/asset-crystallize-runner.d.ts +3 -0
  15. package/dist/cli/commands/asset-crystallize-runner.js +133 -0
  16. package/dist/cli/commands/asset-dispose-command.d.ts +3 -0
  17. package/dist/cli/commands/asset-dispose-command.js +99 -0
  18. package/dist/cli/commands/asset-status-command.d.ts +3 -0
  19. package/dist/cli/commands/asset-status-command.js +100 -0
  20. package/dist/cli/commands/audit-artifact-runners.d.ts +16 -0
  21. package/dist/cli/commands/audit-artifact-runners.js +170 -0
  22. package/dist/cli/commands/audit-command-shared.d.ts +97 -0
  23. package/dist/cli/commands/audit-command-shared.js +60 -0
  24. package/dist/cli/commands/audit-commands.d.ts +7 -31
  25. package/dist/cli/commands/audit-commands.js +64 -473
  26. package/dist/cli/commands/audit-goal-runners.d.ts +17 -0
  27. package/dist/cli/commands/audit-goal-runners.js +114 -0
  28. package/dist/cli/commands/audit-red-lines-runners.d.ts +11 -0
  29. package/dist/cli/commands/audit-red-lines-runners.js +43 -0
  30. package/dist/cli/commands/audit-refusal-data.d.ts +23 -0
  31. package/dist/cli/commands/audit-refusal-data.js +69 -0
  32. package/dist/cli/commands/audit-static-runners.d.ts +13 -0
  33. package/dist/cli/commands/audit-static-runners.js +139 -0
  34. package/dist/cli/commands/await-runners.d.ts +11 -0
  35. package/dist/cli/commands/await-runners.js +148 -0
  36. package/dist/cli/commands/baseline-audit-command.d.ts +3 -0
  37. package/dist/cli/commands/baseline-audit-command.js +64 -0
  38. package/dist/cli/commands/baseline-command-shared.d.ts +23 -0
  39. package/dist/cli/commands/baseline-command-shared.js +39 -0
  40. package/dist/cli/commands/baseline-commands.js +33 -313
  41. package/dist/cli/commands/baseline-freeze-commands.d.ts +4 -0
  42. package/dist/cli/commands/baseline-freeze-commands.js +81 -0
  43. package/dist/cli/commands/baseline-guard-command.d.ts +3 -0
  44. package/dist/cli/commands/baseline-guard-command.js +52 -0
  45. package/dist/cli/commands/baseline-read-commands.d.ts +5 -0
  46. package/dist/cli/commands/baseline-read-commands.js +72 -0
  47. package/dist/cli/commands/baseline-rollback-commands.d.ts +4 -0
  48. package/dist/cli/commands/baseline-rollback-commands.js +88 -0
  49. package/dist/cli/commands/classify-downgrade-command.d.ts +9 -0
  50. package/dist/cli/commands/classify-downgrade-command.js +21 -0
  51. package/dist/cli/commands/classify-run-command.d.ts +9 -0
  52. package/dist/cli/commands/classify-run-command.js +73 -0
  53. package/dist/cli/commands/classify-signals.d.ts +5 -0
  54. package/dist/cli/commands/classify-signals.js +104 -0
  55. package/dist/cli/commands/code-auto-compact-command.d.ts +3 -0
  56. package/dist/cli/commands/code-auto-compact-command.js +124 -0
  57. package/dist/cli/commands/code-auto-compact-envelope.d.ts +22 -0
  58. package/dist/cli/commands/code-auto-compact-envelope.js +39 -0
  59. package/dist/cli/commands/code-context-audit-command.d.ts +3 -0
  60. package/dist/cli/commands/code-context-audit-command.js +68 -0
  61. package/dist/cli/commands/code-context-now-command.d.ts +3 -0
  62. package/dist/cli/commands/code-context-now-command.js +124 -0
  63. package/dist/cli/commands/code-context-now-envelope.d.ts +66 -0
  64. package/dist/cli/commands/code-context-now-envelope.js +136 -0
  65. package/dist/cli/commands/code-context-now-mapping.d.ts +27 -0
  66. package/dist/cli/commands/code-context-now-mapping.js +43 -0
  67. package/dist/cli/commands/code-emit-handoff-command.d.ts +3 -0
  68. package/dist/cli/commands/code-emit-handoff-command.js +136 -0
  69. package/dist/cli/commands/code-gate-step-08-command.d.ts +3 -0
  70. package/dist/cli/commands/code-gate-step-08-command.js +155 -0
  71. package/dist/cli/commands/code-post-compact-detect-command.d.ts +3 -0
  72. package/dist/cli/commands/code-post-compact-detect-command.js +50 -0
  73. package/dist/cli/commands/code-runtime-commands.d.ts +9 -43
  74. package/dist/cli/commands/code-runtime-commands.js +20 -672
  75. package/dist/cli/commands/code-runtime-session.d.ts +1 -0
  76. package/dist/cli/commands/code-runtime-session.js +15 -0
  77. package/dist/cli/commands/codegraph-command-options.d.ts +22 -0
  78. package/dist/cli/commands/codegraph-command-options.js +22 -0
  79. package/dist/cli/commands/codegraph-commands.d.ts +2 -2
  80. package/dist/cli/commands/codegraph-commands.js +14 -397
  81. package/dist/cli/commands/codegraph-config-restore-command.d.ts +3 -0
  82. package/dist/cli/commands/codegraph-config-restore-command.js +200 -0
  83. package/dist/cli/commands/codegraph-proxy-commands.d.ts +10 -0
  84. package/dist/cli/commands/codegraph-proxy-commands.js +159 -0
  85. package/dist/cli/commands/codegraph-repair-commands.d.ts +3 -0
  86. package/dist/cli/commands/codegraph-repair-commands.js +94 -0
  87. package/dist/cli/commands/codegraph-status-command.d.ts +1 -1
  88. package/dist/cli/commands/codegraph-status-command.js +27 -214
  89. package/dist/cli/commands/codegraph-status-integrity.d.ts +44 -0
  90. package/dist/cli/commands/codegraph-status-integrity.js +121 -0
  91. package/dist/cli/commands/codegraph-status-json.d.ts +5 -0
  92. package/dist/cli/commands/codegraph-status-json.js +127 -0
  93. package/dist/cli/commands/compact-command.d.ts +6 -2
  94. package/dist/cli/commands/compact-command.js +12 -559
  95. package/dist/cli/commands/compact-dry-run-command.d.ts +3 -0
  96. package/dist/cli/commands/compact-dry-run-command.js +87 -0
  97. package/dist/cli/commands/compact-force-command.d.ts +3 -0
  98. package/dist/cli/commands/compact-force-command.js +98 -0
  99. package/dist/cli/commands/compact-harness-window-command.d.ts +3 -0
  100. package/dist/cli/commands/compact-harness-window-command.js +174 -0
  101. package/dist/cli/commands/compact-history-command.d.ts +3 -0
  102. package/dist/cli/commands/compact-history-command.js +89 -0
  103. package/dist/cli/commands/compact-read-commands.d.ts +3 -0
  104. package/dist/cli/commands/compact-read-commands.js +123 -0
  105. package/dist/cli/commands/compact-settle-command.d.ts +3 -0
  106. package/dist/cli/commands/compact-settle-command.js +130 -0
  107. package/dist/cli/commands/compact-shared.d.ts +9 -0
  108. package/dist/cli/commands/compact-shared.js +26 -0
  109. package/dist/cli/commands/container-command-shared.d.ts +60 -0
  110. package/dist/cli/commands/container-command-shared.js +52 -0
  111. package/dist/cli/commands/container-commands.d.ts +1 -1
  112. package/dist/cli/commands/container-commands.js +4 -216
  113. package/dist/cli/commands/container-release-command.d.ts +3 -0
  114. package/dist/cli/commands/container-release-command.js +105 -0
  115. package/dist/cli/commands/container-spawn-command.d.ts +3 -0
  116. package/dist/cli/commands/container-spawn-command.js +148 -0
  117. package/dist/cli/commands/context-check-command.d.ts +3 -0
  118. package/dist/cli/commands/context-check-command.js +81 -0
  119. package/dist/cli/commands/context-commands.d.ts +2 -7
  120. package/dist/cli/commands/context-commands.js +6 -276
  121. package/dist/cli/commands/context-layer-command.d.ts +3 -0
  122. package/dist/cli/commands/context-layer-command.js +34 -0
  123. package/dist/cli/commands/context-layer-fetchers.d.ts +15 -0
  124. package/dist/cli/commands/context-layer-fetchers.js +162 -0
  125. package/dist/cli/commands/context-status-command.d.ts +17 -0
  126. package/dist/cli/commands/context-status-command.js +41 -0
  127. package/dist/cli/commands/contract-write-command.d.ts +3 -0
  128. package/dist/cli/commands/contract-write-command.js +144 -0
  129. package/dist/cli/commands/core/doctor-bindings.d.ts +17 -0
  130. package/dist/cli/commands/core/doctor-bindings.js +30 -0
  131. package/dist/cli/commands/core/doctor-command.d.ts +4 -18
  132. package/dist/cli/commands/core/doctor-command.js +2 -323
  133. package/dist/cli/commands/core/doctor-logs.d.ts +8 -0
  134. package/dist/cli/commands/core/doctor-logs.js +32 -0
  135. package/dist/cli/commands/core/doctor-probes.d.ts +3 -0
  136. package/dist/cli/commands/core/doctor-probes.js +55 -0
  137. package/dist/cli/commands/core/doctor-run-command.d.ts +12 -0
  138. package/dist/cli/commands/core/doctor-run-command.js +172 -0
  139. package/dist/cli/commands/core/doctor-summary.d.ts +7 -0
  140. package/dist/cli/commands/core/doctor-summary.js +39 -0
  141. package/dist/cli/commands/core/memory-command-shared.d.ts +25 -0
  142. package/dist/cli/commands/core/memory-command-shared.js +20 -0
  143. package/dist/cli/commands/core/memory-command.d.ts +1 -1
  144. package/dist/cli/commands/core/memory-command.js +6 -227
  145. package/dist/cli/commands/core/memory-delegated-verbs.d.ts +4 -0
  146. package/dist/cli/commands/core/memory-delegated-verbs.js +178 -0
  147. package/dist/cli/commands/core/memory-extract-command.d.ts +3 -0
  148. package/dist/cli/commands/core/memory-extract-command.js +90 -0
  149. package/dist/cli/commands/core/memory-sync-command.d.ts +3 -0
  150. package/dist/cli/commands/core/memory-sync-command.js +38 -0
  151. package/dist/cli/commands/core/session-command.d.ts +1 -1
  152. package/dist/cli/commands/core/session-command.js +12 -206
  153. package/dist/cli/commands/core/session-info-command.d.ts +3 -0
  154. package/dist/cli/commands/core/session-info-command.js +142 -0
  155. package/dist/cli/commands/core/session-verb-commands.d.ts +5 -0
  156. package/dist/cli/commands/core/session-verb-commands.js +58 -0
  157. package/dist/cli/commands/core/skill-command.d.ts +1 -44
  158. package/dist/cli/commands/core/skill-command.js +13 -541
  159. package/dist/cli/commands/core/skill-context-verdict.d.ts +38 -0
  160. package/dist/cli/commands/core/skill-context-verdict.js +63 -0
  161. package/dist/cli/commands/core/skill-generated-config-notice.d.ts +41 -0
  162. package/dist/cli/commands/core/skill-generated-config-notice.js +75 -0
  163. package/dist/cli/commands/core/skill-heartbeat-commands.d.ts +3 -0
  164. package/dist/cli/commands/core/skill-heartbeat-commands.js +50 -0
  165. package/dist/cli/commands/core/skill-presence-commands.d.ts +3 -0
  166. package/dist/cli/commands/core/skill-presence-commands.js +123 -0
  167. package/dist/cli/commands/core/skill-presence-housekeeping-commands.d.ts +3 -0
  168. package/dist/cli/commands/core/skill-presence-housekeeping-commands.js +165 -0
  169. package/dist/cli/commands/core/skill-registry-commands.d.ts +3 -0
  170. package/dist/cli/commands/core/skill-registry-commands.js +117 -0
  171. package/dist/cli/commands/core/skill-runbook-command.d.ts +3 -0
  172. package/dist/cli/commands/core/skill-runbook-command.js +29 -0
  173. package/dist/cli/commands/core/standards-command.d.ts +1 -24
  174. package/dist/cli/commands/core/standards-command.js +33 -201
  175. package/dist/cli/commands/core/standards-init-command.d.ts +3 -0
  176. package/dist/cli/commands/core/standards-init-command.js +87 -0
  177. package/dist/cli/commands/core/standards-lint.d.ts +24 -0
  178. package/dist/cli/commands/core/standards-lint.js +57 -0
  179. package/dist/cli/commands/core/standards-migrate-command.d.ts +3 -0
  180. package/dist/cli/commands/core/standards-migrate-command.js +57 -0
  181. package/dist/cli/commands/cron-scheduler-commands.d.ts +5 -1
  182. package/dist/cli/commands/cron-scheduler-commands.js +36 -206
  183. package/dist/cli/commands/cron-scheduler-run-once-command.d.ts +7 -0
  184. package/dist/cli/commands/cron-scheduler-run-once-command.js +35 -0
  185. package/dist/cli/commands/cron-scheduler-shared.d.ts +6 -0
  186. package/dist/cli/commands/cron-scheduler-shared.js +48 -0
  187. package/dist/cli/commands/cron-scheduler-start-command.d.ts +7 -0
  188. package/dist/cli/commands/cron-scheduler-start-command.js +65 -0
  189. package/dist/cli/commands/cron-scheduler-status-command.d.ts +7 -0
  190. package/dist/cli/commands/cron-scheduler-status-command.js +46 -0
  191. package/dist/cli/commands/cron-scheduler-stop-command.d.ts +7 -0
  192. package/dist/cli/commands/cron-scheduler-stop-command.js +61 -0
  193. package/dist/cli/commands/dispatch-command-spec.d.ts +2 -0
  194. package/dist/cli/commands/dispatch-command-spec.js +62 -0
  195. package/dist/cli/commands/dispatch-commands.js +159 -775
  196. package/dist/cli/commands/dispatch-dag-envelope.d.ts +41 -0
  197. package/dist/cli/commands/dispatch-dag-envelope.js +49 -0
  198. package/dist/cli/commands/dispatch-dag-failure.d.ts +18 -0
  199. package/dist/cli/commands/dispatch-dag-failure.js +16 -0
  200. package/dist/cli/commands/dispatch-dag-preflight.d.ts +51 -0
  201. package/dist/cli/commands/dispatch-dag-preflight.js +105 -0
  202. package/dist/cli/commands/dispatch-dag-runners.d.ts +48 -0
  203. package/dist/cli/commands/dispatch-dag-runners.js +73 -0
  204. package/dist/cli/commands/dispatch-detached-branch.d.ts +3 -0
  205. package/dist/cli/commands/dispatch-detached-branch.js +58 -0
  206. package/dist/cli/commands/dispatch-envelope.d.ts +36 -0
  207. package/dist/cli/commands/dispatch-envelope.js +104 -0
  208. package/dist/cli/commands/dispatch-from-dag.d.ts +27 -0
  209. package/dist/cli/commands/dispatch-from-dag.js +87 -257
  210. package/dist/cli/commands/dispatch-isolation-lease.d.ts +17 -0
  211. package/dist/cli/commands/dispatch-isolation-lease.js +149 -0
  212. package/dist/cli/commands/dispatch-preflight.d.ts +7 -0
  213. package/dist/cli/commands/dispatch-preflight.js +105 -0
  214. package/dist/cli/commands/dispatch-prompt-blocks.d.ts +10 -0
  215. package/dist/cli/commands/dispatch-prompt-blocks.js +56 -0
  216. package/dist/cli/commands/dispatch-prompt-composition.d.ts +30 -0
  217. package/dist/cli/commands/dispatch-prompt-composition.js +171 -0
  218. package/dist/cli/commands/dispatch-record-write.d.ts +24 -0
  219. package/dist/cli/commands/dispatch-record-write.js +96 -0
  220. package/dist/cli/commands/dispatch-tool-call.d.ts +15 -0
  221. package/dist/cli/commands/dispatch-tool-call.js +128 -0
  222. package/dist/cli/commands/evolution-command-shared.d.ts +78 -0
  223. package/dist/cli/commands/evolution-command-shared.js +107 -0
  224. package/dist/cli/commands/evolution-commands.d.ts +11 -1
  225. package/dist/cli/commands/evolution-commands.js +19 -350
  226. package/dist/cli/commands/evolution-evaluate-command.d.ts +24 -0
  227. package/dist/cli/commands/evolution-evaluate-command.js +138 -0
  228. package/dist/cli/commands/evolution-propose-command.d.ts +23 -0
  229. package/dist/cli/commands/evolution-propose-command.js +145 -0
  230. package/dist/cli/commands/evolution-status-command.d.ts +17 -0
  231. package/dist/cli/commands/evolution-status-command.js +41 -0
  232. package/dist/cli/commands/evolution-verdict-commands.d.ts +30 -0
  233. package/dist/cli/commands/evolution-verdict-commands.js +100 -0
  234. package/dist/cli/commands/final-review-command-envelopes.d.ts +44 -0
  235. package/dist/cli/commands/final-review-command-envelopes.js +100 -0
  236. package/dist/cli/commands/final-review-command-shared.d.ts +52 -0
  237. package/dist/cli/commands/final-review-command-shared.js +35 -0
  238. package/dist/cli/commands/final-review-commands.d.ts +7 -27
  239. package/dist/cli/commands/final-review-commands.js +13 -240
  240. package/dist/cli/commands/final-review-prepare-command.d.ts +3 -0
  241. package/dist/cli/commands/final-review-prepare-command.js +200 -0
  242. package/dist/cli/commands/finalize-accumulator.d.ts +44 -0
  243. package/dist/cli/commands/finalize-accumulator.js +55 -0
  244. package/dist/cli/commands/finalize-branches.d.ts +34 -0
  245. package/dist/cli/commands/finalize-branches.js +119 -0
  246. package/dist/cli/commands/finalize-runners.d.ts +3 -0
  247. package/dist/cli/commands/finalize-runners.js +92 -0
  248. package/dist/cli/commands/finalize-selection.d.ts +65 -0
  249. package/dist/cli/commands/finalize-selection.js +35 -0
  250. package/dist/cli/commands/gate-commands.js +26 -8
  251. package/dist/cli/commands/governance-classify-contract-commands.d.ts +23 -9
  252. package/dist/cli/commands/governance-classify-contract-commands.js +26 -269
  253. package/dist/cli/commands/hooks-command-shared.d.ts +42 -0
  254. package/dist/cli/commands/hooks-command-shared.js +32 -0
  255. package/dist/cli/commands/hooks-commands.d.ts +20 -0
  256. package/dist/cli/commands/hooks-commands.js +75 -309
  257. package/dist/cli/commands/hooks-install-envelopes.d.ts +6 -0
  258. package/dist/cli/commands/hooks-install-envelopes.js +144 -0
  259. package/dist/cli/commands/hooks-status-command.d.ts +3 -0
  260. package/dist/cli/commands/hooks-status-command.js +93 -0
  261. package/dist/cli/commands/hooks-uninstall-command.d.ts +3 -0
  262. package/dist/cli/commands/hooks-uninstall-command.js +43 -0
  263. package/dist/cli/commands/job-checkpoint-commands.d.ts +3 -0
  264. package/dist/cli/commands/job-checkpoint-commands.js +157 -0
  265. package/dist/cli/commands/job-command-shared.d.ts +109 -0
  266. package/dist/cli/commands/job-command-shared.js +72 -0
  267. package/dist/cli/commands/job-commands.d.ts +4 -64
  268. package/dist/cli/commands/job-commands.js +42 -552
  269. package/dist/cli/commands/job-cost-check-command.d.ts +3 -0
  270. package/dist/cli/commands/job-cost-check-command.js +41 -0
  271. package/dist/cli/commands/job-init-status-commands.d.ts +3 -0
  272. package/dist/cli/commands/job-init-status-commands.js +149 -0
  273. package/dist/cli/commands/job-run-commands.d.ts +3 -0
  274. package/dist/cli/commands/job-run-commands.js +97 -0
  275. package/dist/cli/commands/job-state-root.d.ts +35 -0
  276. package/dist/cli/commands/job-state-root.js +76 -0
  277. package/dist/cli/commands/loop-command-shared.d.ts +31 -0
  278. package/dist/cli/commands/loop-command-shared.js +15 -0
  279. package/dist/cli/commands/loop-commands.d.ts +12 -17
  280. package/dist/cli/commands/loop-commands.js +56 -238
  281. package/dist/cli/commands/loop-eval-capture-index.d.ts +4 -0
  282. package/dist/cli/commands/loop-eval-capture-index.js +44 -0
  283. package/dist/cli/commands/loop-eval-commands.d.ts +8 -5
  284. package/dist/cli/commands/loop-eval-commands.js +12 -626
  285. package/dist/cli/commands/loop-eval-eval-command.d.ts +3 -0
  286. package/dist/cli/commands/loop-eval-eval-command.js +168 -0
  287. package/dist/cli/commands/loop-eval-monotonic-command.d.ts +3 -0
  288. package/dist/cli/commands/loop-eval-monotonic-command.js +90 -0
  289. package/dist/cli/commands/loop-eval-parents.d.ts +7 -0
  290. package/dist/cli/commands/loop-eval-parents.js +20 -0
  291. package/dist/cli/commands/loop-eval-run-code.d.ts +7 -0
  292. package/dist/cli/commands/loop-eval-run-code.js +40 -0
  293. package/dist/cli/commands/loop-eval-run-command.d.ts +3 -0
  294. package/dist/cli/commands/loop-eval-run-command.js +113 -0
  295. package/dist/cli/commands/loop-eval-spec-commands.d.ts +3 -0
  296. package/dist/cli/commands/loop-eval-spec-commands.js +165 -0
  297. package/dist/cli/commands/loop-eval-spec-lint-command.d.ts +3 -0
  298. package/dist/cli/commands/loop-eval-spec-lint-command.js +42 -0
  299. package/dist/cli/commands/loop-eval-workflow-commands.d.ts +3 -0
  300. package/dist/cli/commands/loop-eval-workflow-commands.js +141 -0
  301. package/dist/cli/commands/loop-export-command.d.ts +3 -0
  302. package/dist/cli/commands/loop-export-command.js +73 -0
  303. package/dist/cli/commands/loop-goal-compose-command.d.ts +3 -0
  304. package/dist/cli/commands/loop-goal-compose-command.js +36 -0
  305. package/dist/cli/commands/loop-import-command.d.ts +3 -0
  306. package/dist/cli/commands/loop-import-command.js +86 -0
  307. package/dist/cli/commands/loop-placeholder-commands.d.ts +3 -0
  308. package/dist/cli/commands/loop-placeholder-commands.js +52 -0
  309. package/dist/cli/commands/mcp-commands.d.ts +10 -0
  310. package/dist/cli/commands/mcp-commands.js +157 -0
  311. package/dist/cli/commands/memory-command-shared.d.ts +59 -0
  312. package/dist/cli/commands/memory-command-shared.js +39 -0
  313. package/dist/cli/commands/memory-commands.d.ts +6 -79
  314. package/dist/cli/commands/memory-commands.js +19 -309
  315. package/dist/cli/commands/memory-ingest-command.d.ts +3 -0
  316. package/dist/cli/commands/memory-ingest-command.js +50 -0
  317. package/dist/cli/commands/memory-list-command.d.ts +16 -0
  318. package/dist/cli/commands/memory-list-command.js +129 -0
  319. package/dist/cli/commands/memory-reindex-command.d.ts +9 -0
  320. package/dist/cli/commands/memory-reindex-command.js +78 -0
  321. package/dist/cli/commands/memory-rotate-command.d.ts +3 -0
  322. package/dist/cli/commands/memory-rotate-command.js +55 -0
  323. package/dist/cli/commands/memory-search-command.d.ts +7 -0
  324. package/dist/cli/commands/memory-search-command.js +46 -0
  325. package/dist/cli/commands/openspec-archive-command.d.ts +3 -0
  326. package/dist/cli/commands/openspec-archive-command.js +55 -0
  327. package/dist/cli/commands/openspec-command-shared.d.ts +62 -0
  328. package/dist/cli/commands/openspec-command-shared.js +135 -0
  329. package/dist/cli/commands/openspec-commands.d.ts +1 -1
  330. package/dist/cli/commands/openspec-commands.js +33 -306
  331. package/dist/cli/commands/openspec-from-doctor-command.d.ts +3 -0
  332. package/dist/cli/commands/openspec-from-doctor-command.js +66 -0
  333. package/dist/cli/commands/openspec-init-command.d.ts +3 -0
  334. package/dist/cli/commands/openspec-init-command.js +49 -0
  335. package/dist/cli/commands/openspec-list-command.d.ts +3 -0
  336. package/dist/cli/commands/openspec-list-command.js +27 -0
  337. package/dist/cli/commands/openspec-render-command.d.ts +3 -0
  338. package/dist/cli/commands/openspec-render-command.js +33 -0
  339. package/dist/cli/commands/openspec-show-command.d.ts +3 -0
  340. package/dist/cli/commands/openspec-show-command.js +33 -0
  341. package/dist/cli/commands/openspec-to-rd-command.d.ts +3 -0
  342. package/dist/cli/commands/openspec-to-rd-command.js +33 -0
  343. package/dist/cli/commands/openspec-validate-command.d.ts +3 -0
  344. package/dist/cli/commands/openspec-validate-command.js +45 -0
  345. package/dist/cli/commands/playwright-browser-command.d.ts +8 -0
  346. package/dist/cli/commands/playwright-browser-command.js +61 -0
  347. package/dist/cli/commands/playwright-commands.d.ts +10 -62
  348. package/dist/cli/commands/playwright-commands.js +77 -400
  349. package/dist/cli/commands/playwright-envelope.d.ts +8 -0
  350. package/dist/cli/commands/playwright-envelope.js +29 -0
  351. package/dist/cli/commands/playwright-ls-stop-commands.d.ts +4 -0
  352. package/dist/cli/commands/playwright-ls-stop-commands.js +74 -0
  353. package/dist/cli/commands/playwright-session-store.d.ts +65 -0
  354. package/dist/cli/commands/playwright-session-store.js +189 -0
  355. package/dist/cli/commands/project-commands.d.ts +19 -0
  356. package/dist/cli/commands/project-commands.js +98 -259
  357. package/dist/cli/commands/project-context-command.d.ts +3 -0
  358. package/dist/cli/commands/project-context-command.js +44 -0
  359. package/dist/cli/commands/project-dashboard-command.d.ts +3 -0
  360. package/dist/cli/commands/project-dashboard-command.js +74 -0
  361. package/dist/cli/commands/project-knowledge-command.d.ts +3 -0
  362. package/dist/cli/commands/project-knowledge-command.js +48 -0
  363. package/dist/cli/commands/project-memories-show-command.d.ts +3 -0
  364. package/dist/cli/commands/project-memories-show-command.js +87 -0
  365. package/dist/cli/commands/project-memory-index-command.d.ts +3 -0
  366. package/dist/cli/commands/project-memory-index-command.js +31 -0
  367. package/dist/cli/commands/qa-archive-screenshots-command.d.ts +3 -0
  368. package/dist/cli/commands/qa-archive-screenshots-command.js +53 -0
  369. package/dist/cli/commands/qa-commands.d.ts +14 -87
  370. package/dist/cli/commands/qa-commands.js +17 -315
  371. package/dist/cli/commands/qa-context-prestep.d.ts +1 -0
  372. package/dist/cli/commands/qa-context-prestep.js +34 -0
  373. package/dist/cli/commands/qa-run-command.d.ts +3 -0
  374. package/dist/cli/commands/qa-run-command.js +105 -0
  375. package/dist/cli/commands/qa-run-options.d.ts +23 -0
  376. package/dist/cli/commands/qa-run-options.js +31 -0
  377. package/dist/cli/commands/qa-run-slice.d.ts +41 -0
  378. package/dist/cli/commands/qa-run-slice.js +145 -0
  379. package/dist/cli/commands/release-canary-command.d.ts +28 -0
  380. package/dist/cli/commands/release-canary-command.js +129 -0
  381. package/dist/cli/commands/release-command-shared.d.ts +13 -0
  382. package/dist/cli/commands/release-command-shared.js +18 -0
  383. package/dist/cli/commands/release-commands.d.ts +10 -18
  384. package/dist/cli/commands/release-commands.js +25 -298
  385. package/dist/cli/commands/release-done-command.d.ts +3 -0
  386. package/dist/cli/commands/release-done-command.js +64 -0
  387. package/dist/cli/commands/release-hotfix-command.d.ts +3 -0
  388. package/dist/cli/commands/release-hotfix-command.js +50 -0
  389. package/dist/cli/commands/release-plan-command.d.ts +3 -0
  390. package/dist/cli/commands/release-plan-command.js +33 -0
  391. package/dist/cli/commands/release-precheck-command.d.ts +3 -0
  392. package/dist/cli/commands/release-precheck-command.js +28 -0
  393. package/dist/cli/commands/release-promote-command.d.ts +3 -0
  394. package/dist/cli/commands/release-promote-command.js +34 -0
  395. package/dist/cli/commands/release-rollback-command.d.ts +3 -0
  396. package/dist/cli/commands/release-rollback-command.js +33 -0
  397. package/dist/cli/commands/release-watch-command.d.ts +3 -0
  398. package/dist/cli/commands/release-watch-command.js +44 -0
  399. package/dist/cli/commands/request-command-options.d.ts +49 -0
  400. package/dist/cli/commands/request-command-options.js +1 -0
  401. package/dist/cli/commands/request-commands.d.ts +3 -9
  402. package/dist/cli/commands/request-commands.js +17 -522
  403. package/dist/cli/commands/request-init-command.d.ts +3 -0
  404. package/dist/cli/commands/request-init-command.js +100 -0
  405. package/dist/cli/commands/request-lint-command.d.ts +3 -0
  406. package/dist/cli/commands/request-lint-command.js +50 -0
  407. package/dist/cli/commands/request-list-command.d.ts +10 -0
  408. package/dist/cli/commands/request-list-command.js +53 -0
  409. package/dist/cli/commands/request-repair-status-command.d.ts +3 -0
  410. package/dist/cli/commands/request-repair-status-command.js +61 -0
  411. package/dist/cli/commands/request-show-command.d.ts +3 -0
  412. package/dist/cli/commands/request-show-command.js +56 -0
  413. package/dist/cli/commands/request-transition-command.d.ts +3 -0
  414. package/dist/cli/commands/request-transition-command.js +122 -0
  415. package/dist/cli/commands/request-transition-failures.d.ts +8 -0
  416. package/dist/cli/commands/request-transition-failures.js +90 -0
  417. package/dist/cli/commands/request-transition-hooks.d.ts +50 -0
  418. package/dist/cli/commands/request-transition-hooks.js +115 -0
  419. package/dist/cli/commands/request-transition-preflight.d.ts +10 -0
  420. package/dist/cli/commands/request-transition-preflight.js +107 -0
  421. package/dist/cli/commands/scan-command-shared.d.ts +96 -0
  422. package/dist/cli/commands/scan-command-shared.js +83 -0
  423. package/dist/cli/commands/scan-commands.d.ts +3 -2
  424. package/dist/cli/commands/scan-commands.js +23 -463
  425. package/dist/cli/commands/scan-inventory-commands.d.ts +3 -0
  426. package/dist/cli/commands/scan-inventory-commands.js +96 -0
  427. package/dist/cli/commands/scan-project-commands.d.ts +3 -0
  428. package/dist/cli/commands/scan-project-commands.js +65 -0
  429. package/dist/cli/commands/scan-scope-commands.d.ts +3 -0
  430. package/dist/cli/commands/scan-scope-commands.js +149 -0
  431. package/dist/cli/commands/scan-scope-helpers.d.ts +8 -0
  432. package/dist/cli/commands/scan-scope-helpers.js +54 -0
  433. package/dist/cli/commands/scan-structural-commands.d.ts +3 -0
  434. package/dist/cli/commands/scan-structural-commands.js +113 -0
  435. package/dist/cli/commands/sediment-argv-flags.d.ts +54 -0
  436. package/dist/cli/commands/sediment-argv-flags.js +116 -0
  437. package/dist/cli/commands/sediment-command-shared.d.ts +15 -0
  438. package/dist/cli/commands/sediment-command-shared.js +5 -0
  439. package/dist/cli/commands/sediment-commands.d.ts +35 -59
  440. package/dist/cli/commands/sediment-commands.js +36 -590
  441. package/dist/cli/commands/sediment-pool-commands.d.ts +9 -0
  442. package/dist/cli/commands/sediment-pool-commands.js +185 -0
  443. package/dist/cli/commands/sediment-query-commands.d.ts +4 -0
  444. package/dist/cli/commands/sediment-query-commands.js +94 -0
  445. package/dist/cli/commands/sediment-release-commands.d.ts +8 -0
  446. package/dist/cli/commands/sediment-release-commands.js +232 -0
  447. package/dist/cli/commands/share-commands.d.ts +12 -68
  448. package/dist/cli/commands/share-commands.js +47 -556
  449. package/dist/cli/commands/share-error-hints.d.ts +14 -0
  450. package/dist/cli/commands/share-error-hints.js +38 -0
  451. package/dist/cli/commands/share-identity.d.ts +13 -0
  452. package/dist/cli/commands/share-identity.js +22 -0
  453. package/dist/cli/commands/share-record-paths.d.ts +37 -0
  454. package/dist/cli/commands/share-record-paths.js +68 -0
  455. package/dist/cli/commands/share-runners.d.ts +3 -0
  456. package/dist/cli/commands/share-runners.js +158 -0
  457. package/dist/cli/commands/shared-read-runners.d.ts +3 -0
  458. package/dist/cli/commands/shared-read-runners.js +51 -0
  459. package/dist/cli/commands/slice-check-command.d.ts +3 -0
  460. package/dist/cli/commands/slice-check-command.js +54 -0
  461. package/dist/cli/commands/slice-commands.d.ts +2 -22
  462. package/dist/cli/commands/slice-commands.js +18 -517
  463. package/dist/cli/commands/slice-decompose-artifacts.d.ts +18 -0
  464. package/dist/cli/commands/slice-decompose-artifacts.js +79 -0
  465. package/dist/cli/commands/slice-decompose-command.d.ts +3 -0
  466. package/dist/cli/commands/slice-decompose-command.js +123 -0
  467. package/dist/cli/commands/slice-list-commands.d.ts +3 -0
  468. package/dist/cli/commands/slice-list-commands.js +182 -0
  469. package/dist/cli/commands/slice-pick-command.d.ts +3 -0
  470. package/dist/cli/commands/slice-pick-command.js +60 -0
  471. package/dist/cli/commands/slice-plan-command.d.ts +24 -0
  472. package/dist/cli/commands/slice-plan-command.js +111 -0
  473. package/dist/cli/commands/sop-advance-command.d.ts +3 -0
  474. package/dist/cli/commands/sop-advance-command.js +160 -0
  475. package/dist/cli/commands/sop-check-command.d.ts +3 -0
  476. package/dist/cli/commands/sop-check-command.js +44 -0
  477. package/dist/cli/commands/sop-command-shared.d.ts +23 -0
  478. package/dist/cli/commands/sop-command-shared.js +18 -0
  479. package/dist/cli/commands/sop-commands.d.ts +15 -1
  480. package/dist/cli/commands/sop-commands.js +26 -240
  481. package/dist/cli/commands/sop-init-command.d.ts +3 -0
  482. package/dist/cli/commands/sop-init-command.js +51 -0
  483. package/dist/cli/commands/sop-lint-command.d.ts +3 -0
  484. package/dist/cli/commands/sop-lint-command.js +64 -0
  485. package/dist/cli/commands/sop-register-command.d.ts +3 -0
  486. package/dist/cli/commands/sop-register-command.js +48 -0
  487. package/dist/cli/commands/sop-registry-command.d.ts +3 -0
  488. package/dist/cli/commands/sop-registry-command.js +30 -0
  489. package/dist/cli/commands/statusline-command-shared.d.ts +73 -0
  490. package/dist/cli/commands/statusline-command-shared.js +90 -0
  491. package/dist/cli/commands/statusline-commands.d.ts +1 -19
  492. package/dist/cli/commands/statusline-commands.js +48 -287
  493. package/dist/cli/commands/statusline-compact-command.d.ts +4 -0
  494. package/dist/cli/commands/statusline-compact-command.js +54 -0
  495. package/dist/cli/commands/statusline-install-command.d.ts +3 -0
  496. package/dist/cli/commands/statusline-install-command.js +48 -0
  497. package/dist/cli/commands/statusline-render-command.d.ts +9 -0
  498. package/dist/cli/commands/statusline-render-command.js +55 -0
  499. package/dist/cli/commands/statusline-status-command.d.ts +3 -0
  500. package/dist/cli/commands/statusline-status-command.js +23 -0
  501. package/dist/cli/commands/statusline-uninstall-command.d.ts +3 -0
  502. package/dist/cli/commands/statusline-uninstall-command.js +23 -0
  503. package/dist/cli/commands/test-command-run-helpers.d.ts +27 -0
  504. package/dist/cli/commands/test-command-run-helpers.js +73 -0
  505. package/dist/cli/commands/test-command-runner-resolution.d.ts +57 -0
  506. package/dist/cli/commands/test-command-runner-resolution.js +183 -0
  507. package/dist/cli/commands/test-commands.d.ts +8 -56
  508. package/dist/cli/commands/test-commands.js +26 -249
  509. package/dist/cli/commands/vm-command-shared.d.ts +23 -0
  510. package/dist/cli/commands/vm-command-shared.js +23 -0
  511. package/dist/cli/commands/vm-commands.d.ts +1 -28
  512. package/dist/cli/commands/vm-commands.js +36 -270
  513. package/dist/cli/commands/vm-hypervisor-runtime.d.ts +15 -0
  514. package/dist/cli/commands/vm-hypervisor-runtime.js +64 -0
  515. package/dist/cli/commands/vm-release-command.d.ts +5 -0
  516. package/dist/cli/commands/vm-release-command.js +101 -0
  517. package/dist/cli/commands/vm-spawn-command.d.ts +5 -0
  518. package/dist/cli/commands/vm-spawn-command.js +177 -0
  519. package/dist/cli/commands/web-command-shared.d.ts +12 -0
  520. package/dist/cli/commands/web-command-shared.js +30 -0
  521. package/dist/cli/commands/web-commands.d.ts +7 -14
  522. package/dist/cli/commands/web-commands.js +6 -314
  523. package/dist/cli/commands/web-install-command.d.ts +10 -0
  524. package/dist/cli/commands/web-install-command.js +116 -0
  525. package/dist/cli/commands/web-lifecycle-commands.d.ts +9 -30
  526. package/dist/cli/commands/web-lifecycle-commands.js +14 -322
  527. package/dist/cli/commands/web-login-command.d.ts +14 -0
  528. package/dist/cli/commands/web-login-command.js +189 -0
  529. package/dist/cli/commands/web-op-payload.d.ts +22 -0
  530. package/dist/cli/commands/web-op-payload.js +89 -0
  531. package/dist/cli/commands/web-op-refusals.d.ts +37 -0
  532. package/dist/cli/commands/web-op-refusals.js +73 -0
  533. package/dist/cli/commands/web-op-runner.d.ts +14 -0
  534. package/dist/cli/commands/web-op-runner.js +166 -0
  535. package/dist/cli/commands/web-status-command.d.ts +4 -0
  536. package/dist/cli/commands/web-status-command.js +32 -0
  537. package/dist/cli/commands/web-stop-command.d.ts +10 -0
  538. package/dist/cli/commands/web-stop-command.js +59 -0
  539. package/dist/cli/commands/web-verb-specs.d.ts +18 -0
  540. package/dist/cli/commands/web-verb-specs.js +66 -0
  541. package/dist/cli/commands/workflow-command-shared.d.ts +102 -0
  542. package/dist/cli/commands/workflow-command-shared.js +74 -0
  543. package/dist/cli/commands/workflow-commands.d.ts +10 -1
  544. package/dist/cli/commands/workflow-commands.js +6 -594
  545. package/dist/cli/commands/workflow-gate-commands.d.ts +3 -0
  546. package/dist/cli/commands/workflow-gate-commands.js +116 -0
  547. package/dist/cli/commands/workflow-graph-commands.d.ts +3 -0
  548. package/dist/cli/commands/workflow-graph-commands.js +73 -0
  549. package/dist/cli/commands/workflow-init-command.d.ts +3 -0
  550. package/dist/cli/commands/workflow-init-command.js +68 -0
  551. package/dist/cli/commands/workflow-lifecycle-commands.d.ts +9 -59
  552. package/dist/cli/commands/workflow-lifecycle-commands.js +14 -348
  553. package/dist/cli/commands/workflow-node-commands.d.ts +3 -0
  554. package/dist/cli/commands/workflow-node-commands.js +154 -0
  555. package/dist/cli/commands/workflow-plan-helpers.d.ts +48 -0
  556. package/dist/cli/commands/workflow-plan-helpers.js +103 -0
  557. package/dist/cli/commands/workflow-planning-commands.d.ts +3 -0
  558. package/dist/cli/commands/workflow-planning-commands.js +56 -0
  559. package/dist/cli/commands/workflow-swarm-actions.d.ts +7 -0
  560. package/dist/cli/commands/workflow-swarm-actions.js +109 -0
  561. package/dist/cli/commands/workflow-swarm-commands.d.ts +3 -0
  562. package/dist/cli/commands/workflow-swarm-commands.js +138 -0
  563. package/dist/cli/commands/workflow-tech-actions.d.ts +10 -0
  564. package/dist/cli/commands/workflow-tech-actions.js +150 -0
  565. package/dist/cli/commands/workflow-terminalize-command.d.ts +3 -0
  566. package/dist/cli/commands/workflow-terminalize-command.js +56 -0
  567. package/dist/cli/commands/workspace/init-actions.d.ts +10 -0
  568. package/dist/cli/commands/workspace/init-actions.js +199 -0
  569. package/dist/cli/commands/workspace/init-codegraph-stake.d.ts +10 -0
  570. package/dist/cli/commands/workspace/init-codegraph-stake.js +54 -0
  571. package/dist/cli/commands/workspace/init-command.d.ts +8 -124
  572. package/dist/cli/commands/workspace/init-command.js +59 -623
  573. package/dist/cli/commands/workspace/init-context.d.ts +58 -0
  574. package/dist/cli/commands/workspace/init-context.js +121 -0
  575. package/dist/cli/commands/workspace/init-envelope.d.ts +3 -0
  576. package/dist/cli/commands/workspace/init-envelope.js +34 -0
  577. package/dist/cli/commands/workspace/init-failures.d.ts +3 -0
  578. package/dist/cli/commands/workspace/init-failures.js +84 -0
  579. package/dist/cli/commands/workspace/init-hooks-decision.d.ts +24 -0
  580. package/dist/cli/commands/workspace/init-hooks-decision.js +189 -0
  581. package/dist/cli/commands/workspace/init-options.d.ts +102 -0
  582. package/dist/cli/commands/workspace/init-options.js +1 -0
  583. package/dist/cli/commands/worktree-lease-commands.d.ts +10 -6
  584. package/dist/cli/commands/worktree-lease-commands.js +42 -512
  585. package/dist/cli/commands/worktree-lease-gc-command.d.ts +12 -0
  586. package/dist/cli/commands/worktree-lease-gc-command.js +117 -0
  587. package/dist/cli/commands/worktree-lease-git.d.ts +22 -0
  588. package/dist/cli/commands/worktree-lease-git.js +48 -0
  589. package/dist/cli/commands/worktree-lease-list-command.d.ts +12 -0
  590. package/dist/cli/commands/worktree-lease-list-command.js +100 -0
  591. package/dist/cli/commands/worktree-lease-load.d.ts +37 -0
  592. package/dist/cli/commands/worktree-lease-load.js +28 -0
  593. package/dist/cli/commands/worktree-lease-release-command.d.ts +13 -0
  594. package/dist/cli/commands/worktree-lease-release-command.js +105 -0
  595. package/dist/cli/commands/worktree-lease-renew-command.d.ts +11 -0
  596. package/dist/cli/commands/worktree-lease-renew-command.js +99 -0
  597. package/dist/cli/commands/worktree-lease-session.d.ts +22 -0
  598. package/dist/cli/commands/worktree-lease-session.js +29 -0
  599. package/dist/cli/commands/worktree-lease-spawn-command.d.ts +11 -0
  600. package/dist/cli/commands/worktree-lease-spawn-command.js +119 -0
  601. package/dist/cli/commands/worktree-lease-status-command.d.ts +11 -0
  602. package/dist/cli/commands/worktree-lease-status-command.js +86 -0
  603. package/dist/cli/commands/worktree-lease-store.d.ts +19 -0
  604. package/dist/cli/commands/worktree-lease-store.js +24 -0
  605. package/dist/cli/program.js +5 -0
  606. package/dist/services/code/auto-compact-artifacts.d.ts +54 -0
  607. package/dist/services/code/auto-compact-artifacts.js +135 -0
  608. package/dist/services/code/auto-compact-attempt.d.ts +46 -0
  609. package/dist/services/code/auto-compact-attempt.js +88 -0
  610. package/dist/services/code/auto-compact-decision.d.ts +74 -0
  611. package/dist/services/code/auto-compact-decision.js +149 -0
  612. package/dist/services/code/auto-compact-dispatch-gate.d.ts +36 -0
  613. package/dist/services/code/auto-compact-dispatch-gate.js +86 -0
  614. package/dist/services/code/auto-compact-envelopes.d.ts +33 -0
  615. package/dist/services/code/auto-compact-envelopes.js +134 -0
  616. package/dist/services/code/auto-compact-history.d.ts +46 -0
  617. package/dist/services/code/auto-compact-history.js +17 -0
  618. package/dist/services/code/auto-compact-orchestrator.d.ts +11 -240
  619. package/dist/services/code/auto-compact-orchestrator.js +165 -686
  620. package/dist/services/code/auto-compact-run-types.d.ts +123 -0
  621. package/dist/services/code/auto-compact-run-types.js +1 -0
  622. package/dist/services/code/emit-handoff.d.ts +35 -1
  623. package/dist/services/code/emit-handoff.js +128 -7
  624. package/dist/services/code/step-08-gate.d.ts +28 -19
  625. package/dist/services/code/step-08-gate.js +92 -35
  626. package/dist/services/config/config-coercion.d.ts +7 -0
  627. package/dist/services/config/config-coercion.js +156 -0
  628. package/dist/services/config/config-file-io.d.ts +11 -0
  629. package/dist/services/config/config-file-io.js +61 -0
  630. package/dist/services/config/config-get.d.ts +2 -0
  631. package/dist/services/config/config-get.js +36 -0
  632. package/dist/services/config/config-global-loader.d.ts +15 -0
  633. package/dist/services/config/config-global-loader.js +111 -0
  634. package/dist/services/config/config-nested-path.d.ts +3 -0
  635. package/dist/services/config/config-nested-path.js +53 -0
  636. package/dist/services/config/config-primitives.d.ts +16 -0
  637. package/dist/services/config/config-primitives.js +24 -0
  638. package/dist/services/config/config-service.d.ts +9 -33
  639. package/dist/services/config/config-service.js +16 -665
  640. package/dist/services/config/config-validation.d.ts +19 -0
  641. package/dist/services/config/config-validation.js +152 -0
  642. package/dist/services/config/config-workspace.d.ts +10 -0
  643. package/dist/services/config/config-workspace.js +158 -0
  644. package/dist/services/distribution/mcp-install-runner.d.ts +21 -0
  645. package/dist/services/distribution/mcp-install-runner.js +59 -0
  646. package/dist/services/distribution/mcp-install.d.ts +95 -0
  647. package/dist/services/distribution/mcp-install.js +179 -0
  648. package/dist/services/distribution/plugin-manifest.d.ts +97 -0
  649. package/dist/services/distribution/plugin-manifest.js +126 -0
  650. package/dist/services/hooks/mcp-surface-gate.d.ts +19 -0
  651. package/dist/services/hooks/mcp-surface-gate.js +87 -0
  652. package/dist/services/ide/adapters/claude-code-adapter.d.ts +4 -35
  653. package/dist/services/ide/adapters/claude-code-adapter.js +48 -171
  654. package/dist/services/ide/adapters/claude-code-local-state.d.ts +28 -0
  655. package/dist/services/ide/adapters/claude-code-local-state.js +112 -0
  656. package/dist/services/ide/adapters/claude-code-model-window.d.ts +37 -0
  657. package/dist/services/ide/adapters/claude-code-model-window.js +113 -0
  658. package/dist/services/ide/ide-mcp-install-types.d.ts +78 -0
  659. package/dist/services/ide/ide-mcp-install-types.js +104 -0
  660. package/dist/services/ide/ide-types.d.ts +45 -1
  661. package/dist/services/ide/mcp-tool-matcher.d.ts +34 -0
  662. package/dist/services/ide/mcp-tool-matcher.js +84 -0
  663. package/dist/services/lint/npx-resolver.js +7 -0
  664. package/dist/services/mcp/cli-executor.d.ts +36 -0
  665. package/dist/services/mcp/cli-executor.js +97 -0
  666. package/dist/services/mcp/json-rpc.d.ts +81 -0
  667. package/dist/services/mcp/json-rpc.js +116 -0
  668. package/dist/services/mcp/memory-tool.d.ts +3 -0
  669. package/dist/services/mcp/memory-tool.js +62 -0
  670. package/dist/services/mcp/server-main.d.ts +1 -0
  671. package/dist/services/mcp/server-main.js +66 -0
  672. package/dist/services/mcp/server.d.ts +22 -0
  673. package/dist/services/mcp/server.js +152 -0
  674. package/dist/services/mcp/surface.d.ts +62 -0
  675. package/dist/services/mcp/surface.js +198 -0
  676. package/dist/services/mcp/tool-core.d.ts +42 -0
  677. package/dist/services/mcp/tool-core.js +137 -0
  678. package/dist/services/mcp/tools.d.ts +13 -0
  679. package/dist/services/mcp/tools.js +58 -0
  680. package/dist/services/readonly-surface/argv-guard.d.ts +32 -0
  681. package/dist/services/readonly-surface/argv-guard.js +164 -0
  682. package/dist/services/readonly-surface/readonly-whitelist.d.ts +147 -0
  683. package/dist/services/readonly-surface/readonly-whitelist.js +107 -0
  684. package/dist/services/readonly-surface/whitelist-generator.d.ts +64 -0
  685. package/dist/services/readonly-surface/whitelist-generator.js +212 -0
  686. package/dist/services/skills/hooks-codegate-superpowers.d.ts +1 -0
  687. package/dist/services/skills/hooks-codegate-superpowers.js +26 -0
  688. package/dist/services/skills/hooks-settings-deny-list.d.ts +61 -0
  689. package/dist/services/skills/hooks-settings-deny-list.js +173 -0
  690. package/dist/services/skills/hooks-settings-envelopes.d.ts +20 -0
  691. package/dist/services/skills/hooks-settings-envelopes.js +79 -0
  692. package/dist/services/skills/hooks-settings-file-shape.d.ts +43 -0
  693. package/dist/services/skills/hooks-settings-file-shape.js +207 -0
  694. package/dist/services/skills/hooks-settings-paths.d.ts +34 -0
  695. package/dist/services/skills/hooks-settings-paths.js +75 -0
  696. package/dist/services/skills/hooks-settings-read-installed.d.ts +39 -0
  697. package/dist/services/skills/hooks-settings-read-installed.js +60 -0
  698. package/dist/services/skills/hooks-settings-service.d.ts +12 -212
  699. package/dist/services/skills/hooks-settings-service.js +71 -649
  700. package/dist/services/skills/hooks-settings-types.d.ts +139 -0
  701. package/dist/services/skills/hooks-settings-types.js +1 -0
  702. package/dist/services/workspace/claude-settings-template-merge.d.ts +89 -0
  703. package/dist/services/workspace/claude-settings-template-merge.js +243 -0
  704. package/dist/services/workspace/claude-settings-template.d.ts +29 -87
  705. package/dist/services/workspace/claude-settings-template.js +81 -236
  706. package/package.json +17 -6
  707. package/scripts/install-skills-bundles.mjs +233 -0
  708. package/scripts/install-skills-fs.mjs +148 -0
  709. package/scripts/install-skills-ide.mjs +279 -0
  710. package/scripts/install-skills-output-style-default.mjs +196 -0
  711. package/scripts/install-skills-output-styles.mjs +121 -0
  712. package/scripts/install-skills-report.mjs +42 -0
  713. package/scripts/install-skills-user-config.mjs +198 -0
  714. package/scripts/install-skills.mjs +36 -1066
  715. package/scripts/watch-tree.mjs +140 -0
  716. package/scripts/watch.mjs +4 -126
  717. package/skills/peaks-status/SKILL.md +31 -13
@@ -1,14 +1,33 @@
1
+ /**
2
+ * `peaks hooks *` — the Peaks-managed hook entry in the adapter's settings.json.
3
+ *
4
+ * The `install` verb and the hook-script distribution stay in this file because
5
+ * three source-scanning guards pin file-level facts to this exact path:
6
+ *
7
+ * - `tests/unit/cli/ide-option-help-lists-the-registry.test.ts` needs an
8
+ * `--ide` option declaration here whose help is derived from the registry;
9
+ * - `tests/unit/runtime/vendor-neutral-identity-guard.test.ts` pins the two
10
+ * user-global Claude Code skill-bridge copy targets to this file
11
+ * (`settingsPaths: 2` in its `KNOWN_DEBT` census);
12
+ * - `tests/unit/hooks/gate-enforce-machine-local-shell.test.ts` scans this
13
+ * file for the CJS module-directory global, because this is where the hook
14
+ * script sources are resolved.
15
+ *
16
+ * The other verbs live beside it: `hooks-uninstall-command.ts`,
17
+ * `hooks-status-command.ts`, the two install envelopes in
18
+ * `hooks-install-envelopes.ts`, and the scope / IDE resolution in
19
+ * `hooks-command-shared.ts`.
20
+ */
1
21
  import { existsSync, copyFileSync, mkdirSync } from 'node:fs';
2
22
  import { dirname, resolve } from 'node:path';
3
23
  import { fileURLToPath } from 'node:url';
4
- import { fail, ok } from 'peaks-loop-shared/result';
5
- import { addJsonOption, printResult, getErrorMessage } from '../cli-helpers.js';
6
- import { findProjectRoot } from '../../services/config/config-safety.js';
7
- import { applyHookInstall, planHookInstall, readHookStatus, readInstalledEntriesFromSettings, removeHookInstall, listSuperpowersDenyEntries } from '../../services/skills/hooks-settings-service.js';
8
- import { resolveHookEntries, resolveHookSpec } from '../../services/skills/hooks-codegate-superpowers.js';
9
- import { readJsonObjectFile } from '../../services/ide/shared/atomic-json.js';
10
- import { detectIdeFromContext } from '../../services/ide/hook-translator.js';
11
24
  import { resolveIdeOptionHelp } from '../../services/ide/ide-registry.js';
25
+ import { fail } from 'peaks-loop-shared/result';
26
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
27
+ import { resolveIdeForCommand, resolveProjectRoot, resolveScope } from './hooks-command-shared.js';
28
+ import { printInstallApplied, printInstallDryRun } from './hooks-install-envelopes.js';
29
+ import { registerHooksStatusCommand } from './hooks-status-command.js';
30
+ import { registerHooksUninstallCommand } from './hooks-uninstall-command.js';
12
31
  /**
13
32
  * This module's own directory — `<root>/src/cli/commands` in the source tree,
14
33
  * `<root>/dist/cli/commands` in a build. Same reason as
@@ -19,73 +38,17 @@ import { resolveIdeOptionHelp } from '../../services/ide/ide-registry.js';
19
38
  * `process.argv[1]` names a different file per entry point.
20
39
  */
21
40
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
22
- function resolveScope(options) {
23
- return options.global ? 'global' : 'project';
24
- }
25
- function resolveProjectRoot(scope, project) {
26
- return scope === 'project'
27
- ? (project ?? findProjectRoot(process.cwd()) ?? process.cwd())
28
- : undefined;
29
- }
30
- /**
31
- * Resolve the IDE the install should target. The CLI user can override with
32
- * `--ide <id>`. Otherwise we delegate to `detectIdeFromContext` which checks
33
- * `process.env[adapter.envVar]` → stdin shape → cwd `.trae`/`.claude` →
34
- * fallback `'claude-code'`. Pass `parsedStdin: null` since `peaks hooks
35
- * install` is not invoked from inside an IDE hook — there's no stdin payload.
36
- */
37
- function resolveIdeForCommand(options, projectRoot) {
38
- if (options.ide !== undefined && options.ide.length > 0) {
39
- return options.ide;
40
- }
41
- return detectIdeFromContext({
42
- env: process.env,
43
- cwd: projectRoot ?? process.cwd(),
44
- parsedStdin: null
45
- });
46
- }
47
41
  /**
48
- * Slice #014: compute the per-IDE peaks hook entries for the install /
49
- * dry-run RESPONSE SUMMARY. This is the *desired* shape (what the install
50
- * WOULD write), not what is on disk. The status command uses a different
51
- * helper (`readInstalledEntriesFromSettings`) that reads the actual
52
- * settings.json.
42
+ * `src/services/hooks/pre-tool-superpowers-bridge.sh` from the peaks-loop repo
43
+ * into the user-global `<userHome>/.claude/skills/peaks-code/hooks/` directory.
44
+ * The user-global copy is treated as a build artifact: it MUST be
45
+ * byte-identical to the repo source after install, and the source of truth is
46
+ * the repo file.
53
47
  *
54
- * After slice #014 only the gate-enforce entry is ever installed
55
- * (the legacy progress-start surface is gone). The summary mirrors
56
- * the install shape so the JSON envelope doesn't claim a hook the
57
- * service did not write.
58
- */
59
- function listExpectedEntriesForIde(ide, _skipProgress = false) {
60
- // Derived from `resolveHookEntries(ide)` — the same function `planHookInstall`
61
- // / `applyHookInstall` write from — so the summary can only ever report a
62
- // shape the install actually produces. The previous version was a
63
- // hand-written literal under a comment claiming it "mirrors the install
64
- // shape, NOT a hardcoded expected list" (diagnosis 2026-09-15, C4); the
65
- // literal had drifted from that claim in both directions: it re-typed the
66
- // code-gate matcher instead of reading `HOOK_CODE_GATE_MATCHER`, and it
67
- // reported 2 of the 6 entries a claude-code install writes.
68
- //
69
- // The filter is the tool-call event. `resolveHookEntries` also returns the
70
- // once-per-session SessionStart / PostCompact entries; those are not what a
71
- // per-call hook-entry summary is read for, and leaving them out is the only
72
- // place this summary is narrower than the install.
73
- const event = resolveHookSpec(ide).hookEnforceEvent;
74
- return resolveHookEntries(ide, _skipProgress)
75
- .filter((entry) => entry.event === event)
76
- .map((entry) => ({ matcher: entry.matcher, sentinel: entry.sentinel }));
77
- }
78
- /**
79
- * superpowers-bridge hook source from the peaks-loop repo
80
- * (src/services/hooks/pre-tool-superpowers-bridge.sh) into the user-global
81
- * `<userHome>/.claude/skills/peaks-code/hooks/` directory. The user-global
82
- * copy is treated as a build artifact: it MUST be byte-identical to the
83
- * repo source after install, and the source of truth is the repo file.
84
- *
85
- * Why this lives in the install command: the install is the single
86
- * declared surface where the user-global directory is touched. Adding it
87
- * here keeps the "hooks only ship from src/services/hooks/" invariant
88
- * (G10 / AC10) — no other code path writes to `~/.claude/skills/peaks-code/hooks/`.
48
+ * Why this lives in the install command: the install is the single declared
49
+ * surface where the user-global directory is touched. Adding it here keeps the
50
+ * "hooks only ship from src/services/hooks/" invariant (G10 / AC10) — no other
51
+ * code path writes to `~/.claude/skills/peaks-code/hooks/`.
89
52
  *
90
53
  * Failure modes:
91
54
  * - Source file missing (build not run yet) → silently skip and emit a
@@ -100,49 +63,6 @@ function listExpectedEntriesForIde(ide, _skipProgress = false) {
100
63
  * Returns `{ copied, source, target }` so the install envelope can report
101
64
  * it without forcing the caller to inspect the filesystem.
102
65
  */
103
- /**
104
- * `permissions.deny` block from a settings.json object and return
105
- * every peaks-managed entry currently present. Used by `hooks status`
106
- * to surface Layer 3 governance state without forcing the caller to
107
- * re-read the file. Tolerant of missing / malformed `permissions` —
108
- * a missing field returns an empty array, never throws.
109
- */
110
- function readOnDiskDenyEntries(settings) {
111
- const permissions = settings.permissions;
112
- if (!permissions || typeof permissions !== 'object' || Array.isArray(permissions))
113
- return [];
114
- const deny = permissions.deny;
115
- if (!Array.isArray(deny))
116
- return [];
117
- return deny.filter((d) => typeof d === 'string');
118
- }
119
- /**
120
- * One `nextActions` line for a hook-script copy, or `null` when there is
121
- * nothing to say.
122
- *
123
- * Diagnosis 2026-09-15 (C7): the copy failure used to be reported as a single
124
- * sentence — `'<x> hook not copied (source missing or non-global scope)'` —
125
- * which merged a real build failure into the expected project-scope no-op.
126
- * Only `scope === 'global'` copies these scripts at all (see the call sites),
127
- * so in project scope the sentence described normal behaviour in the wording
128
- * of a fault, and a healthy `peaks hooks install` read as broken.
129
- *
130
- * Scope is therefore what decides the sentence, and it is knowable here — the
131
- * copy helper cannot tell the two cases apart because both return
132
- * `copied: false`, but the caller can. Project scope emits no line: there is
133
- * no action to take, and the envelope's `bridgeHookCopy` / `codeGateHookCopy`
134
- * field still reports `copied: false` for anyone reading the JSON.
135
- */
136
- function describeHookCopy(label, copy, scope, dryRun) {
137
- if (scope !== 'global')
138
- return null;
139
- if (copy.copied) {
140
- return dryRun
141
- ? `would copy ${label} from ${copy.source} to ${copy.target}`
142
- : `Copied ${label}: ${copy.target}`;
143
- }
144
- return `${label} NOT copied — source missing at ${copy.source}. Run the build (\`pnpm build\`) so the script ships with the package.`;
145
- }
146
66
  function copyBridgeHookIfPresent(userHome, dryRun = false) {
147
67
  const source = resolve(MODULE_DIR, '..', '..', 'services', 'hooks', 'pre-tool-superpowers-bridge.sh');
148
68
  const target = resolve(userHome, '.claude', 'skills', 'peaks-code', 'hooks', 'pre-tool-superpowers-bridge.sh');
@@ -157,6 +77,7 @@ function copyBridgeHookIfPresent(userHome, dryRun = false) {
157
77
  return { copied: true, source, target };
158
78
  }
159
79
  /**
80
+ * The same distribution for the code-gate hook
160
81
  * source (`src/services/hooks/pre-tool-code-gate.sh`) into the user-
161
82
  * global peaks-code hooks dir, mirroring the bridge-hook copy. The
162
83
  * hook itself is vendor-neutral (no `claude` / `anthropic` strings in
@@ -178,6 +99,42 @@ function copyCodeGateHookIfPresent(userHome, dryRun = false) {
178
99
  copyFileSync(source, target);
179
100
  return { copied: true, source, target };
180
101
  }
102
+ /** The `{ copied: false, source: '', target: '' }` a non-global scope reports. */
103
+ const NO_COPY = { copied: false, source: '', target: '' };
104
+ /**
105
+ * The two hook-script copies for this scope. Only a global install distributes
106
+ * them; a project install reports the no-op shape the envelope has always
107
+ * carried. In `--dry-run` the copies report what they WOULD do and write
108
+ * nothing — their target is the user's home directory.
109
+ */
110
+ function hookScriptCopies(scope, dryRun) {
111
+ const home = process.env.USERPROFILE ?? process.env.HOME ?? '';
112
+ return {
113
+ bridgeCopy: scope === 'global' ? copyBridgeHookIfPresent(home, dryRun) : NO_COPY,
114
+ codeGateCopy: scope === 'global' ? copyCodeGateHookIfPresent(home, dryRun) : NO_COPY
115
+ };
116
+ }
117
+ function runHooksInstall(io, options) {
118
+ const scope = resolveScope(options);
119
+ const projectRoot = resolveProjectRoot(scope, options.project);
120
+ const ide = resolveIdeForCommand(options, projectRoot);
121
+ const skipProgress = options.progress === false;
122
+ const ctx = { scope, projectRoot, ide, skipProgress };
123
+ try {
124
+ const dryRun = options.dryRun === true;
125
+ const copies = hookScriptCopies(scope, dryRun);
126
+ if (dryRun) {
127
+ printInstallDryRun(io, options, ctx, copies);
128
+ return;
129
+ }
130
+ printInstallApplied(io, options, ctx, copies);
131
+ }
132
+ catch (error) {
133
+ const message = getErrorMessage(error);
134
+ printResult(io, fail('hooks.install', 'HOOKS_INSTALL_FAILED', message, { scope, ide, applied: false, skipProgress }, [message]), options.json);
135
+ process.exitCode = 1;
136
+ }
137
+ }
181
138
  export function registerHooksCommands(program, io) {
182
139
  const hooks = program
183
140
  .command('hooks')
@@ -189,198 +146,7 @@ export function registerHooksCommands(program, io) {
189
146
  .option('--project <path>', 'project root path (auto-detected from cwd when omitted)')
190
147
  .option('--ide <id>', resolveIdeOptionHelp())
191
148
  .option('--dry-run', 'show what would change without writing')
192
- .option('--no-progress', 'skip the progress-start PreToolUse hook entry; install ONLY the gate-enforce entry')).action((options) => {
193
- const scope = resolveScope(options);
194
- const projectRoot = resolveProjectRoot(scope, options.project);
195
- const ide = resolveIdeForCommand(options, projectRoot);
196
- const skipProgress = options.progress === false;
197
- try {
198
- if (options.dryRun === true) {
199
- const plan = planHookInstall(scope, projectRoot, { ide, skipProgress });
200
- const dryRunEntries = listExpectedEntriesForIde(ide, skipProgress);
201
- // `dryRun: true` — a --dry-run must not write anything, and these
202
- // helpers' target is the user's home directory.
203
- const bridgeCopy = scope === 'global'
204
- ? copyBridgeHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '', true)
205
- : { copied: false, source: '', target: '' };
206
- // code-gate hook script. The runtime gate lives at
207
- // `peaks code-gate --json` (registered as a PreToolUse entry
208
- // in the install output); the script is the build artifact
209
- // distributed alongside the bridge hook.
210
- const codeGateCopy = scope === 'global'
211
- ? copyCodeGateHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '', true)
212
- : { copied: false, source: '', target: '' };
213
- printResult(io, ok('hooks.install', {
214
- ...plan,
215
- ide,
216
- applied: false,
217
- dryRun: true,
218
- skipProgress,
219
- entries: dryRunEntries,
220
- bridgeHookCopy: bridgeCopy,
221
- codeGateHookCopy: codeGateCopy,
222
- // Layer 3 deny entries the install WOULD write. The
223
- // dry-run branch never actually invokes
224
- // `applyHookInstall`, so the on-disk snapshot is not
225
- // consulted here — the list is the desired-state
226
- // constant for clarity in the JSON envelope.
227
- permissionsDenyEntries: listSuperpowersDenyEntries()
228
- }, [], [
229
- `would install ${dryRunEntries.length} peaks-managed hook entries`,
230
- // Name the target file of every entry: the gate-enforce entry is
231
- // routed to the machine-local settings file (see
232
- // `resolveHookTargets`), so a summary that only listed
233
- // `settingsPath` + the entry names read as if it landed in the
234
- // committed, shared file.
235
- ...plan.entryTargets.map((entry) => `would write ${entry.matcher || '(no matcher)'} → ${entry.sentinel} to ${entry.settingsPath}`),
236
- `would write ${listSuperpowersDenyEntries().length} permissions.deny entries (Layer 3 worktree governance)`,
237
- describeHookCopy('bridge hook', bridgeCopy, scope, true),
238
- describeHookCopy('code-gate hook', codeGateCopy, scope, true)
239
- ].filter((line) => line !== null)), options.json);
240
- return;
241
- }
242
- const result = applyHookInstall(scope, projectRoot, { ide, skipProgress });
243
- // Slice #3: build the per-IDE entries summary for the IDE the user
244
- // targeted, not the slice #1 PEAKS_HOOK_ENTRIES constant (which is the
245
- // claude-code default). The summary is derived from the install's own
246
- // entry table — see `listExpectedEntriesForIde`.
247
- const installedEntries = listExpectedEntriesForIde(ide, skipProgress);
248
- // the install targets global scope, also copy the superpowers-bridge
249
- // hook script from src/services/hooks/ to the user-global hooks
250
- // directory. Project scope does not need this — project's
251
- // .claude/skills/peaks-code is already a junction into the npm source.
252
- const bridgeCopy = scope === 'global'
253
- ? copyBridgeHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '')
254
- : { copied: false, source: '', target: '' };
255
- // code-gate hook script. The runtime gate lives at
256
- // `peaks code-gate --json` (registered as a PreToolUse entry
257
- // in the install output); the script is the build artifact
258
- // distributed alongside the bridge hook.
259
- const codeGateCopy = scope === 'global'
260
- ? copyCodeGateHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '')
261
- : { copied: false, source: '', target: '' };
262
- const nextActions = result.applied
263
- ? [
264
- 'Restart the IDE (or reload the workspace) so the hook entries take effect',
265
- `Installed: ${installedEntries.map((e) => `${e.matcher}→${e.sentinel}`).join(', ')}`,
266
- // write alongside the hook install — single atomic write.
267
- `Layer 3 deny: wrote ${listSuperpowersDenyEntries().length} permissions.deny entries (worktree governance)`,
268
- describeHookCopy('bridge hook', bridgeCopy, scope, false),
269
- describeHookCopy('code-gate hook', codeGateCopy, scope, false)
270
- ].filter((line) => line !== null)
271
- : [describeHookCopy('bridge hook', bridgeCopy, scope, false)].filter((line) => line !== null);
272
- // in the JSON envelope so downstream automation (audit / sc) can
273
- // confirm Layer 3 was applied without re-reading the file. When
274
- // the install is a no-op (`applied: false`) the deny block was
275
- // already on disk from a prior install; we still emit the
276
- // current desired list for symmetry with the dry-run envelope.
277
- const denyEntries = listSuperpowersDenyEntries();
278
- printResult(io, ok('hooks.install', {
279
- ...result,
280
- ide,
281
- dryRun: false,
282
- skipProgress,
283
- entries: installedEntries.map((e) => ({ matcher: e.matcher, sentinel: e.sentinel })),
284
- bridgeHookCopy: bridgeCopy,
285
- codeGateHookCopy: codeGateCopy,
286
- permissionsDenyApplied: result.applied,
287
- permissionsDenyEntries: denyEntries
288
- }, [], nextActions), options.json);
289
- }
290
- catch (error) {
291
- const message = getErrorMessage(error);
292
- printResult(io, fail('hooks.install', 'HOOKS_INSTALL_FAILED', message, { scope, ide, applied: false, skipProgress }, [message]), options.json);
293
- process.exitCode = 1;
294
- }
295
- });
296
- addJsonOption(hooks
297
- .command('uninstall')
298
- .description('Remove the peaks-managed gate-enforce hook entry from the target settings.json. Any legacy progress-start entry that a pre-#014 install left behind is also removed (sentinel-based scan). Third-party hooks are preserved.')
299
- .option('--global', 'remove from the user-level ~/.claude/settings.json instead of the project')
300
- .option('--project <path>', 'project root path (auto-detected from cwd when omitted)')
301
- .option('--ide <id>', resolveIdeOptionHelp())).action((options) => {
302
- const scope = resolveScope(options);
303
- const projectRoot = resolveProjectRoot(scope, options.project);
304
- const ide = resolveIdeForCommand(options, projectRoot);
305
- try {
306
- const result = removeHookInstall(scope, projectRoot, { ide });
307
- // bookkeeping. `permissionsDenyRemoved` mirrors `removed` (the
308
- // service strips deny entries on the same atomic write that
309
- // strips the hook entries; they share the same boolean).
310
- printResult(io, ok('hooks.uninstall', {
311
- ...result,
312
- ide,
313
- permissionsDenyRemoved: result.removed,
314
- permissionsDenyEntries: listSuperpowersDenyEntries()
315
- }), options.json);
316
- }
317
- catch (error) {
318
- const message = getErrorMessage(error);
319
- printResult(io, fail('hooks.uninstall', 'HOOKS_UNINSTALL_FAILED', message, { scope, ide, removed: false }, [
320
- message
321
- ]), options.json);
322
- process.exitCode = 1;
323
- }
324
- });
325
- addJsonOption(hooks
326
- .command('status')
327
- .description('Report which peaks-managed hook entries are installed.')
328
- .option('--global', 'inspect the user-level ~/.claude/settings.json instead of the project')
329
- .option('--project <path>', 'project root path (auto-detected from cwd when omitted)')
330
- .option('--ide <id>', resolveIdeOptionHelp())).action((options) => {
331
- const scope = resolveScope(options);
332
- const projectRoot = resolveProjectRoot(scope, options.project);
333
- const ide = resolveIdeForCommand(options, projectRoot);
334
- try {
335
- const status = readHookStatus(scope, projectRoot, { ide });
336
- // Slice #014: read the ACTUAL on-disk entries (post-install shape),
337
- // not the IDE-EXPECTED list. Pre-#014 `listInstalledEntriesForIde`
338
- // returned the expected list and reported `entries: [Bash, Task]`
339
- // even when the file only had `Bash`. The new helper reads the
340
- // file and reports whatever peaks-managed entries are present,
341
- // including any legacy progress-start entry that a pre-#014
342
- // install left behind.
343
- const settingsPath = status.settingsPath;
344
- const settings = existsSync(settingsPath) ? readJsonObjectFile(settingsPath) : {};
345
- // The gate-enforce entry is materialized into the machine-local
346
- // settings file (see `resolveHookTargets`), so the on-disk entry list
347
- // must be read from both files or `status` would report it missing.
348
- const localSettings = status.localSettingsPath !== undefined && existsSync(status.localSettingsPath)
349
- ? readJsonObjectFile(status.localSettingsPath)
350
- : {};
351
- // entries actually on disk. We read the existing settings.json
352
- // (above) and surface its `permissions.deny` block. Any entry
353
- // that matches the current `SUPERPOWERS_DENIED_SKILLS` set is
354
- // considered "peaks-managed"; user-written entries are passed
355
- // through verbatim so the envelope reflects reality. The desired
356
- // list is also included for parity with install / uninstall.
357
- const onDiskDeny = readOnDiskDenyEntries(settings);
358
- // `status` reports the state of the world; for an IDE that cannot host a
359
- // hook the state of the world is "none, and none is possible". The exit
360
- // code stays 0 (the query succeeded) and the payload carries the finding
361
- // — `supportsHooks: false` on the data, plus a warning naming the IDE, so
362
- // the negative fact is not confused with "supported IDE, nothing
363
- // installed yet".
364
- const warnings = status.supportsHooks
365
- ? []
366
- : [
367
- `IDE '${ide}' cannot host peaks hooks (no HOOK_COMMAND_BY_IDE entry); nothing can be installed for it, which is why none is.`
368
- ];
369
- printResult(io, ok('hooks.status', {
370
- ...status,
371
- ide,
372
- entries: [
373
- ...readInstalledEntriesFromSettings(settings, ide),
374
- ...readInstalledEntriesFromSettings(localSettings, ide)
375
- ],
376
- permissionsDenyEntries: listSuperpowersDenyEntries(),
377
- permissionsDenyOnDisk: onDiskDeny
378
- }, warnings), options.json);
379
- }
380
- catch (error) {
381
- const message = getErrorMessage(error);
382
- printResult(io, fail('hooks.status', 'HOOKS_STATUS_FAILED', message, { scope, ide }, [message]), options.json);
383
- process.exitCode = 1;
384
- }
385
- });
149
+ .option('--no-progress', 'skip the progress-start PreToolUse hook entry; install ONLY the gate-enforce entry')).action((options) => runHooksInstall(io, options));
150
+ registerHooksUninstallCommand(hooks, io);
151
+ registerHooksStatusCommand(hooks, io);
386
152
  }
@@ -0,0 +1,6 @@
1
+ import { type ProgramIO } from '../cli-helpers.js';
2
+ import type { HookCliOptions, HookScriptCopies, InstallContext } from './hooks-command-shared.js';
3
+ /** The `--dry-run` envelope: what the install WOULD write, and nothing written. */
4
+ export declare function printInstallDryRun(io: ProgramIO, options: HookCliOptions, ctx: InstallContext, copies: HookScriptCopies): void;
5
+ /** The applying envelope: the install's own result plus the copies and the deny state. */
6
+ export declare function printInstallApplied(io: ProgramIO, options: HookCliOptions, ctx: InstallContext, copies: HookScriptCopies): void;
@@ -0,0 +1,144 @@
1
+ // src/cli/commands/hooks-install-envelopes.ts
2
+ //
3
+ // The two envelopes `peaks hooks install` renders: the `--dry-run` preview and
4
+ // the applied result. Split out of `hooks-commands.ts`; the per-IDE entry
5
+ // summary, the Layer 3 deny lines and every envelope key are unchanged. The
6
+ // hook-script copies are computed by the caller (`hooks-commands.ts`, which owns
7
+ // the two user-global paths) and handed in.
8
+ import { listSuperpowersDenyEntries, planHookInstall, applyHookInstall } from '../../services/skills/hooks-settings-service.js';
9
+ import { resolveHookEntries, resolveHookSpec } from '../../services/skills/hooks-codegate-superpowers.js';
10
+ import { ok } from 'peaks-loop-shared/result';
11
+ import { printResult } from '../cli-helpers.js';
12
+ /**
13
+ * Slice #014: compute the per-IDE peaks hook entries for the install /
14
+ * dry-run RESPONSE SUMMARY. This is the *desired* shape (what the install
15
+ * WOULD write), not what is on disk. The status command uses a different
16
+ * helper (`readInstalledEntriesFromSettings`) that reads the actual
17
+ * settings.json.
18
+ *
19
+ * After slice #014 only the gate-enforce entry is ever installed
20
+ * (the legacy progress-start surface is gone). The summary mirrors
21
+ * the install shape so the JSON envelope doesn't claim a hook the
22
+ * service did not write.
23
+ */
24
+ function listExpectedEntriesForIde(ide, _skipProgress = false) {
25
+ // Derived from `resolveHookEntries(ide)` — the same function `planHookInstall`
26
+ // / `applyHookInstall` write from — so the summary can only ever report a
27
+ // shape the install actually produces. The previous version was a
28
+ // hand-written literal under a comment claiming it "mirrors the install
29
+ // shape, NOT a hardcoded expected list" (diagnosis 2026-09-15, C4); the
30
+ // literal had drifted from that claim in both directions: it re-typed the
31
+ // code-gate matcher instead of reading `HOOK_CODE_GATE_MATCHER`, and it
32
+ // reported 2 of the 6 entries a claude-code install writes.
33
+ //
34
+ // The filter is the tool-call event. `resolveHookEntries` also returns the
35
+ // once-per-session SessionStart / PostCompact entries; those are not what a
36
+ // per-call hook-entry summary is read for, and leaving them out is the only
37
+ // place this summary is narrower than the install.
38
+ const event = resolveHookSpec(ide).hookEnforceEvent;
39
+ return resolveHookEntries(ide, _skipProgress)
40
+ .filter((entry) => entry.event === event)
41
+ .map((entry) => ({ matcher: entry.matcher, sentinel: entry.sentinel }));
42
+ }
43
+ /**
44
+ * One `nextActions` line for a hook-script copy, or `null` when there is
45
+ * nothing to say.
46
+ *
47
+ * Diagnosis 2026-09-15 (C7): the copy failure used to be reported as a single
48
+ * sentence — `'<x> hook not copied (source missing or non-global scope)'` —
49
+ * which merged a real build failure into the expected project-scope no-op.
50
+ * Only `scope === 'global'` copies these scripts at all (see the call sites),
51
+ * so in project scope the sentence described normal behaviour in the wording
52
+ * of a fault, and a healthy `peaks hooks install` read as broken.
53
+ *
54
+ * Scope is therefore what decides the sentence, and it is knowable here — the
55
+ * copy helper cannot tell the two cases apart because both return
56
+ * `copied: false`, but the caller can. Project scope emits no line: there is
57
+ * no action to take, and the envelope's `bridgeHookCopy` / `codeGateHookCopy`
58
+ * field still reports `copied: false` for anyone reading the JSON.
59
+ */
60
+ function describeHookCopy(label, copy, scope, dryRun) {
61
+ if (scope !== 'global')
62
+ return null;
63
+ if (copy.copied) {
64
+ return dryRun
65
+ ? `would copy ${label} from ${copy.source} to ${copy.target}`
66
+ : `Copied ${label}: ${copy.target}`;
67
+ }
68
+ return `${label} NOT copied — source missing at ${copy.source}. Run the build (\`pnpm build\`) so the script ships with the package.`;
69
+ }
70
+ /** The `--dry-run` envelope: what the install WOULD write, and nothing written. */
71
+ export function printInstallDryRun(io, options, ctx, copies) {
72
+ const plan = planHookInstall(ctx.scope, ctx.projectRoot, {
73
+ ide: ctx.ide,
74
+ skipProgress: ctx.skipProgress
75
+ });
76
+ const dryRunEntries = listExpectedEntriesForIde(ctx.ide, ctx.skipProgress);
77
+ const { bridgeCopy, codeGateCopy } = copies;
78
+ printResult(io, ok('hooks.install', {
79
+ ...plan,
80
+ ide: ctx.ide,
81
+ applied: false,
82
+ dryRun: true,
83
+ skipProgress: ctx.skipProgress,
84
+ entries: dryRunEntries,
85
+ bridgeHookCopy: bridgeCopy,
86
+ codeGateHookCopy: codeGateCopy,
87
+ // Layer 3 deny entries the install WOULD write. The
88
+ // dry-run branch never actually invokes
89
+ // `applyHookInstall`, so the on-disk snapshot is not
90
+ // consulted here — the list is the desired-state
91
+ // constant for clarity in the JSON envelope.
92
+ permissionsDenyEntries: listSuperpowersDenyEntries()
93
+ }, [], [
94
+ `would install ${dryRunEntries.length} peaks-managed hook entries`,
95
+ // Name the target file of every entry: the gate-enforce entry is
96
+ // routed to the machine-local settings file (see
97
+ // `resolveHookTargets`), so a summary that only listed
98
+ // `settingsPath` + the entry names read as if it landed in the
99
+ // committed, shared file.
100
+ ...plan.entryTargets.map((entry) => `would write ${entry.matcher || '(no matcher)'} → ${entry.sentinel} to ${entry.settingsPath}`),
101
+ `would write ${listSuperpowersDenyEntries().length} permissions.deny entries (Layer 3 worktree governance)`,
102
+ describeHookCopy('bridge hook', bridgeCopy, ctx.scope, true),
103
+ describeHookCopy('code-gate hook', codeGateCopy, ctx.scope, true)
104
+ ].filter((line) => line !== null)), options.json);
105
+ }
106
+ /** The applying envelope: the install's own result plus the copies and the deny state. */
107
+ export function printInstallApplied(io, options, ctx, copies) {
108
+ const result = applyHookInstall(ctx.scope, ctx.projectRoot, {
109
+ ide: ctx.ide,
110
+ skipProgress: ctx.skipProgress
111
+ });
112
+ // Slice #3: build the per-IDE entries summary for the IDE the user
113
+ // targeted, not the slice #1 PEAKS_HOOK_ENTRIES constant (which is the
114
+ // claude-code default). The summary is derived from the install's own
115
+ // entry table — see `listExpectedEntriesForIde`.
116
+ const installedEntries = listExpectedEntriesForIde(ctx.ide, ctx.skipProgress);
117
+ const { bridgeCopy, codeGateCopy } = copies;
118
+ const nextActions = result.applied
119
+ ? [
120
+ 'Restart the IDE (or reload the workspace) so the hook entries take effect',
121
+ `Installed: ${installedEntries.map((e) => `${e.matcher}→${e.sentinel}`).join(', ')}`,
122
+ // write alongside the hook install — single atomic write.
123
+ `Layer 3 deny: wrote ${listSuperpowersDenyEntries().length} permissions.deny entries (worktree governance)`,
124
+ describeHookCopy('bridge hook', bridgeCopy, ctx.scope, false),
125
+ describeHookCopy('code-gate hook', codeGateCopy, ctx.scope, false)
126
+ ].filter((line) => line !== null)
127
+ : [describeHookCopy('bridge hook', bridgeCopy, ctx.scope, false)].filter((line) => line !== null);
128
+ // in the JSON envelope so downstream automation (audit / sc) can
129
+ // confirm Layer 3 was applied without re-reading the file. When
130
+ // the install is a no-op (`applied: false`) the deny block was
131
+ // already on disk from a prior install; we still emit the
132
+ // current desired list for symmetry with the dry-run envelope.
133
+ printResult(io, ok('hooks.install', {
134
+ ...result,
135
+ ide: ctx.ide,
136
+ dryRun: false,
137
+ skipProgress: ctx.skipProgress,
138
+ entries: installedEntries.map((e) => ({ matcher: e.matcher, sentinel: e.sentinel })),
139
+ bridgeHookCopy: bridgeCopy,
140
+ codeGateHookCopy: codeGateCopy,
141
+ permissionsDenyApplied: result.applied,
142
+ permissionsDenyEntries: listSuperpowersDenyEntries()
143
+ }, [], nextActions), options.json);
144
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerHooksStatusCommand(hooks: Command, io: ProgramIO): void;