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
@@ -0,0 +1,64 @@
1
+ import type { Command } from 'commander';
2
+ import { z } from 'zod';
3
+ import { type ReadOnlyWhitelist } from './readonly-whitelist.js';
4
+ /** The hand-authored input, relative to the package root. */
5
+ export declare const READONLY_SURFACE_RELATIVE_PATH = "contracts/readonly-surface.json";
6
+ /** The schema version of the artifact this module emits. */
7
+ export declare const READONLY_WHITELIST_SCHEMA_VERSION = 1;
8
+ declare const SurfaceEntrySchema: z.ZodObject<{
9
+ id: z.ZodString;
10
+ commandPath: z.ZodArray<z.ZodString>;
11
+ argv: z.ZodArray<z.ZodString>;
12
+ params: z.ZodRecord<z.ZodString, z.ZodObject<{
13
+ type: z.ZodEnum<{
14
+ enum: "enum";
15
+ path: "path";
16
+ token: "token";
17
+ slug: "slug";
18
+ integer: "integer";
19
+ }>;
20
+ pattern: z.ZodOptional<z.ZodString>;
21
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ min: z.ZodOptional<z.ZodNumber>;
23
+ max: z.ZodOptional<z.ZodNumber>;
24
+ default: z.ZodOptional<z.ZodNumber>;
25
+ }, z.core.$strip>>;
26
+ }, z.core.$strip>;
27
+ export declare const ReadOnlySurfaceSchema: z.ZodObject<{
28
+ schemaVersion: z.ZodLiteral<1>;
29
+ readOnlyDefinition: z.ZodString;
30
+ note: z.ZodDefault<z.ZodArray<z.ZodString>>;
31
+ tools: z.ZodArray<z.ZodObject<{
32
+ tool: z.ZodString;
33
+ entries: z.ZodArray<z.ZodObject<{
34
+ id: z.ZodString;
35
+ commandPath: z.ZodArray<z.ZodString>;
36
+ argv: z.ZodArray<z.ZodString>;
37
+ params: z.ZodRecord<z.ZodString, z.ZodObject<{
38
+ type: z.ZodEnum<{
39
+ enum: "enum";
40
+ path: "path";
41
+ token: "token";
42
+ slug: "slug";
43
+ integer: "integer";
44
+ }>;
45
+ pattern: z.ZodOptional<z.ZodString>;
46
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
47
+ min: z.ZodOptional<z.ZodNumber>;
48
+ max: z.ZodOptional<z.ZodNumber>;
49
+ default: z.ZodOptional<z.ZodNumber>;
50
+ }, z.core.$strip>>;
51
+ }, z.core.$strip>>;
52
+ }, z.core.$strip>>;
53
+ }, z.core.$strip>;
54
+ export type ReadOnlySurface = z.infer<typeof ReadOnlySurfaceSchema>;
55
+ export type ReadOnlySurfaceEntry = z.infer<typeof SurfaceEntrySchema>;
56
+ /** Build the artifact object from a surface declaration and a live program. */
57
+ export declare function generateReadOnlyWhitelist(surface: ReadOnlySurface, program: Command): ReadOnlyWhitelist;
58
+ /** Byte-stable serialization: two runs over the same input MUST match. */
59
+ export declare function serializeReadOnlyWhitelist(whitelist: ReadOnlyWhitelist): string;
60
+ /** Read + validate the hand-authored surface declaration. */
61
+ export declare function loadReadOnlySurface(root?: string): ReadOnlySurface;
62
+ /** Absolute path of the generated artifact. */
63
+ export declare function readonlyWhitelistPath(root?: string): string;
64
+ export {};
@@ -0,0 +1,212 @@
1
+ /**
2
+ * The schema introspector (spec §3 row 2): turns the hand-authored surface
3
+ * declaration into the generated whitelist artifact by READING the live Commander
4
+ * registry - never by restating it.
5
+ *
6
+ * Everything the registry can answer is taken from it:
7
+ * - does the command path exist,
8
+ * - does each `--flag` in the template exist on that command,
9
+ * - is that flag mandatory, and does it take a value,
10
+ * - which positionals does the command declare, and are they required.
11
+ * A template that disagrees with the registry is a BUILD FAILURE, not a warning:
12
+ * that is the whole point of generating the artifact instead of typing it.
13
+ *
14
+ * What the registry CANNOT answer is the constraint on a placeholder's value
15
+ * (`^[a-z0-9-]+$` for a request id). Those constraints come from the surface file
16
+ * and are marked `constraintSource: 'handwritten'`, so the one place drift can
17
+ * enter is visible in the artifact. When a command later declares `.choices()`,
18
+ * the same field flips to `introspected` with no artifact edit.
19
+ *
20
+ * DETERMINISM: no timestamps, no `Date`, no unordered iteration. Record
21
+ * keys follow argv order and entries follow the surface file's order, so two
22
+ * consecutive runs are byte-identical.
23
+ */
24
+ import { readFileSync } from 'node:fs';
25
+ import { join } from 'node:path';
26
+ import { z } from 'zod';
27
+ import { repoRoot } from 'peaks-loop-shared/paths';
28
+ import { READONLY_WHITELIST_RELATIVE_PATH } from './readonly-whitelist.js';
29
+ /** The hand-authored input, relative to the package root. */
30
+ export const READONLY_SURFACE_RELATIVE_PATH = 'contracts/readonly-surface.json';
31
+ /** The schema version of the artifact this module emits. */
32
+ export const READONLY_WHITELIST_SCHEMA_VERSION = 1;
33
+ const SurfaceParamSchema = z.object({
34
+ type: z.enum(['slug', 'enum', 'token', 'integer', 'path']),
35
+ pattern: z.string().min(1).optional(),
36
+ values: z.array(z.string().min(1)).min(1).optional(),
37
+ min: z.number().int().optional(),
38
+ max: z.number().int().optional(),
39
+ default: z.number().int().optional()
40
+ });
41
+ const SurfaceEntrySchema = z.object({
42
+ id: z.string().min(1),
43
+ commandPath: z.array(z.string().min(1)).min(1),
44
+ argv: z.array(z.string().min(1)).min(1),
45
+ params: z.record(z.string(), SurfaceParamSchema)
46
+ });
47
+ export const ReadOnlySurfaceSchema = z.object({
48
+ schemaVersion: z.literal(1),
49
+ readOnlyDefinition: z.string().min(1),
50
+ note: z.array(z.string()).default([]),
51
+ tools: z.array(z.object({ tool: z.string().min(1), entries: z.array(SurfaceEntrySchema).min(1) }))
52
+ });
53
+ /** `<name>` marks a placeholder token in a surface `argv` element. */
54
+ const PLACEHOLDER_TOKEN = /^<([a-z][a-z0-9-]*)>$/;
55
+ class SurfaceDriftError extends Error {
56
+ constructor(message) {
57
+ super(message);
58
+ this.name = 'SurfaceDriftError';
59
+ }
60
+ }
61
+ function resolveCommand(program, path) {
62
+ let current = program;
63
+ for (const name of path) {
64
+ current = current.commands.find((candidate) => candidate.name() === name);
65
+ if (current === undefined) {
66
+ throw new SurfaceDriftError(`No command registered at path: ${path.join(' ')}`);
67
+ }
68
+ }
69
+ return current;
70
+ }
71
+ function hasOption(command, token) {
72
+ return command.options.some((option) => option.long === token || option.short === token);
73
+ }
74
+ function optionTakingValue(command, token) {
75
+ return command.options.find((option) => {
76
+ if (option.long !== token && option.short !== token)
77
+ return false;
78
+ return /[<[].+[>\]]/.test(option.flags);
79
+ });
80
+ }
81
+ /** Placeholders the registry supplies a constraint for are marked as such. */
82
+ function constraintSourceOf(declared, option) {
83
+ if (declared.type === 'enum' && option?.argChoices !== undefined)
84
+ return 'introspected';
85
+ if (option?.defaultValue !== undefined && declared.default !== undefined)
86
+ return 'introspected';
87
+ return 'handwritten';
88
+ }
89
+ /** The constraint fields the surface declares, copied without inventing absent ones. */
90
+ function constraintsOf(declared) {
91
+ return {
92
+ type: declared.type,
93
+ ...(declared.pattern === undefined ? {} : { pattern: declared.pattern }),
94
+ ...(declared.values === undefined ? {} : { values: declared.values }),
95
+ ...(declared.min === undefined ? {} : { min: declared.min }),
96
+ ...(declared.max === undefined ? {} : { max: declared.max }),
97
+ ...(declared.default === undefined ? {} : { default: declared.default })
98
+ };
99
+ }
100
+ /**
101
+ * Bind one placeholder either to the value-taking flag before it or to the next
102
+ * positional the command declares. Membership in the template is what makes a
103
+ * value required; `binding.required` carries the REGISTRY's opinion, which is a
104
+ * different fact (`--limit` is not mandatory, yet the template pins it).
105
+ */
106
+ function bindPlaceholder(slot) {
107
+ const { entryId, name, declared, command, previousToken, cursor } = slot;
108
+ if (declared === undefined) {
109
+ throw new SurfaceDriftError(`Entry ${entryId}: placeholder <${name}> has no params spec`);
110
+ }
111
+ const boundOption = previousToken === undefined ? undefined : optionTakingValue(command, previousToken);
112
+ if (boundOption !== undefined && previousToken !== undefined) {
113
+ return {
114
+ ...constraintsOf(declared),
115
+ binding: { kind: 'option', token: previousToken, required: boundOption.mandatory },
116
+ constraintSource: constraintSourceOf(declared, boundOption)
117
+ };
118
+ }
119
+ const registered = command.registeredArguments[cursor.positionalIndex];
120
+ if (registered === undefined) {
121
+ throw new SurfaceDriftError(`Entry ${entryId}: <${name}> is positional ${cursor.positionalIndex + 1} but the command declares ${command.registeredArguments.length}`);
122
+ }
123
+ cursor.positionalIndex += 1;
124
+ cursor.positionalNames.push(registered.name());
125
+ return {
126
+ ...constraintsOf(declared),
127
+ binding: { kind: 'positional', token: registered.name(), required: registered.required },
128
+ constraintSource: 'handwritten'
129
+ };
130
+ }
131
+ /** The non-flag words a template opens with, which must be the command path. */
132
+ function leadingLiteralsOf(argv) {
133
+ return argv.flatMap((segment) => segment.kind === 'literal' && !segment.value.startsWith('-') ? [segment.value] : []);
134
+ }
135
+ function assertTemplateDrivesCommand(surface, command, argv, cursor) {
136
+ const leading = leadingLiteralsOf(argv);
137
+ if (leading.join('\u0000') !== surface.commandPath.join('\u0000')) {
138
+ throw new SurfaceDriftError(`Entry ${surface.id}: argv opens with [${leading.join(', ')}] but commandPath is [${surface.commandPath.join(', ')}]`);
139
+ }
140
+ if (cursor.positionalIndex !== command.registeredArguments.length) {
141
+ throw new SurfaceDriftError(`Entry ${surface.id}: template fills ${cursor.positionalIndex} positional(s); ${surface.commandPath.join(' ')} declares ${command.registeredArguments.length}`);
142
+ }
143
+ }
144
+ function buildEntry(program, tool, surface) {
145
+ const command = resolveCommand(program, surface.commandPath);
146
+ const optionTokens = [];
147
+ const argv = [];
148
+ const params = {};
149
+ const cursor = { positionalIndex: 0, positionalNames: [] };
150
+ for (let index = 0; index < surface.argv.length; index += 1) {
151
+ const token = surface.argv[index];
152
+ if (token === undefined)
153
+ continue;
154
+ const placeholder = PLACEHOLDER_TOKEN.exec(token);
155
+ const name = placeholder?.[1];
156
+ if (placeholder !== null && name !== undefined) {
157
+ params[name] = bindPlaceholder({
158
+ entryId: surface.id,
159
+ name,
160
+ declared: surface.params[name],
161
+ command,
162
+ previousToken: index > 0 ? surface.argv[index - 1] : undefined,
163
+ cursor
164
+ });
165
+ argv.push({ kind: 'param', name });
166
+ continue;
167
+ }
168
+ if (token.startsWith('-')) {
169
+ if (!hasOption(command, token)) {
170
+ throw new SurfaceDriftError(`Entry ${surface.id}: no such option ${token} on ${surface.commandPath.join(' ')}`);
171
+ }
172
+ optionTokens.push(token);
173
+ }
174
+ argv.push({ kind: 'literal', value: token });
175
+ }
176
+ assertTemplateDrivesCommand(surface, command, argv, cursor);
177
+ return {
178
+ id: surface.id,
179
+ tool,
180
+ commandPath: [...surface.commandPath],
181
+ argv,
182
+ params,
183
+ introspection: { optionTokens, positionalCount: cursor.positionalNames.length }
184
+ };
185
+ }
186
+ /** Build the artifact object from a surface declaration and a live program. */
187
+ export function generateReadOnlyWhitelist(surface, program) {
188
+ const entries = surface.tools.flatMap((group) => group.entries.map((entry) => buildEntry(program, group.tool, entry)));
189
+ const ids = new Set(entries.map((entry) => entry.id));
190
+ if (ids.size !== entries.length) {
191
+ throw new SurfaceDriftError('Entry ids must be unique across the whole surface');
192
+ }
193
+ return {
194
+ schemaVersion: READONLY_WHITELIST_SCHEMA_VERSION,
195
+ source: READONLY_SURFACE_RELATIVE_PATH,
196
+ readOnlyDefinition: surface.readOnlyDefinition,
197
+ entries
198
+ };
199
+ }
200
+ /** Byte-stable serialization: two runs over the same input MUST match. */
201
+ export function serializeReadOnlyWhitelist(whitelist) {
202
+ return `${JSON.stringify(whitelist, null, 2)}\n`;
203
+ }
204
+ /** Read + validate the hand-authored surface declaration. */
205
+ export function loadReadOnlySurface(root = repoRoot) {
206
+ const text = readFileSync(join(root, READONLY_SURFACE_RELATIVE_PATH), 'utf8');
207
+ return ReadOnlySurfaceSchema.parse(JSON.parse(text));
208
+ }
209
+ /** Absolute path of the generated artifact. */
210
+ export function readonlyWhitelistPath(root = repoRoot) {
211
+ return join(root, READONLY_WHITELIST_RELATIVE_PATH);
212
+ }
@@ -15,6 +15,7 @@ interface ResolvedHookSpec {
15
15
  readonly hookEnforceSentinel: string;
16
16
  readonly hookEnforceMatcher: string;
17
17
  readonly hookEnforceEvent: string;
18
+ readonly hookEnforceMcpMatcher: string | undefined;
18
19
  /**
19
20
  * True when the gate-enforce entry must be materialized into the IDE's
20
21
  * MACHINE-LOCAL settings file rather than the shared one (see
@@ -8,6 +8,7 @@
8
8
  * type contract re-exported by the caller.
9
9
  */
10
10
  import { getAdapter } from '../ide/ide-registry.js';
11
+ import { mcpHookMatcher } from '../ide/mcp-tool-matcher.js';
11
12
  import { HOOK_COMPACT_SETTLE_COMMAND, HOOK_COMPACT_SETTLE_EVENT, HOOK_COMPACT_SETTLE_MATCHER, HOOK_COMPACT_SETTLE_SENTINEL, HOOK_OUTER_CACHE_COMMAND, HOOK_OUTER_CACHE_EVENT, HOOK_OUTER_CACHE_SENTINEL, HOOK_POST_COMPACT_REINJECT_COMMAND, HOOK_POST_COMPACT_REINJECT_EVENT, HOOK_POST_COMPACT_REINJECT_MATCHER, HOOK_POST_COMPACT_REINJECT_SENTINEL, HOOK_WORKSPACE_INIT_COMMAND, HOOK_WORKSPACE_INIT_EVENT, HOOK_WORKSPACE_INIT_SENTINEL } from './session-start-hook-constants.js';
12
13
  /** Sentinel substring identifying a Claude-Code gate-enforce hook entry. */
13
14
  export const HOOK_ENFORCE_SENTINEL = 'peaks gate enforce';
@@ -87,6 +88,7 @@ export function resolveHookSpec(ide) {
87
88
  hookEnforceSentinel: spec.sentinel,
88
89
  hookEnforceMatcher: adapter.toolMatcher,
89
90
  hookEnforceEvent: adapter.hookEvent,
91
+ hookEnforceMcpMatcher: mcpHookMatcher(adapter),
90
92
  // Only Claude Code has the machine-local sibling settings file the
91
93
  // routing depends on, and only Claude Code's hook schema accepts a
92
94
  // `shell` key.
@@ -105,6 +107,27 @@ export const HOOK_CODE_GATE_SENTINEL = 'peaks code-gate';
105
107
  export const HOOK_CODE_GATE_MATCHER = 'Edit|Write|MultiEdit';
106
108
  export const HOOK_CODE_GATE_EVENT = 'PreToolUse';
107
109
  export const HOOK_CODE_GATE_COMMAND = `peaks code-gate --json`;
110
+ /**
111
+ * The read-only MCP surface as a hook entry: the same command under the
112
+ * adapter's MCP matcher, or `undefined` for a harness that declares no MCP
113
+ * naming. A hook fires only for the matchers its OWN entry names, so without this
114
+ * entry the fail-closed branch in `mcp-surface-gate.ts` never runs on a live
115
+ * harness. A second entry rather than a wider matcher on the Bash one: that entry
116
+ * is mirrored by the workspace-init template, and widening it would put installer
117
+ * and template out of step.
118
+ */
119
+ function mcpMatcherEntry(spec) {
120
+ if (spec.hookEnforceMcpMatcher === undefined)
121
+ return undefined;
122
+ return {
123
+ sentinel: spec.hookEnforceSentinel,
124
+ matcher: spec.hookEnforceMcpMatcher,
125
+ command: spec.hookEnforceCommand,
126
+ event: spec.hookEnforceEvent,
127
+ machineLocal: spec.hookEnforceMachineLocal,
128
+ ...(spec.hookEnforceShell !== undefined ? { shell: spec.hookEnforceShell } : {})
129
+ };
130
+ }
108
131
  export function resolveHookEntries(ide, _skipProgress = false) {
109
132
  const spec = resolveHookSpec(ide);
110
133
  const entries = [
@@ -117,6 +140,9 @@ export function resolveHookEntries(ide, _skipProgress = false) {
117
140
  ...(spec.hookEnforceShell !== undefined ? { shell: spec.hookEnforceShell } : {})
118
141
  }
119
142
  ];
143
+ const mcpEntry = mcpMatcherEntry(spec);
144
+ if (mcpEntry !== undefined)
145
+ entries.push(mcpEntry);
120
146
  // ── Why the three SessionStart entries below carry NO `shell` pin ─────────
121
147
  //
122
148
  // The gate-enforce entry above is shell-pinned on Windows (see
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Merge the peaks-managed Skill denylist into the existing settings object.
3
+ * Preserves every other `permissions.deny` entry the user (or another tool)
4
+ * has written so the install is additive, not destructive. The output is
5
+ * always deterministic: the same input always yields the same output,
6
+ * regardless of insertion order in the source array.
7
+ *
8
+ * Defensive behavior:
9
+ * - `settings.permissions` is missing or non-object → install creates a
10
+ * fresh `permissions: { deny: [...our entries] }` object.
11
+ * - `settings.permissions.deny` is missing or non-array → install replaces
12
+ * the field with a fresh array containing only our entries.
13
+ * - Duplicate entries (any source) are collapsed to one via `new Set`.
14
+ *
15
+ * The function is pure: it does not mutate the input. Atomic write happens
16
+ * at the call site (`applyHookInstall`).
17
+ */
18
+ export declare function withSuperpowersSkillDenylist(settings: Record<string, unknown>): Record<string, unknown>;
19
+ /**
20
+ * Inverse of `withSuperpowersSkillDenylist`. Removes every peaks-managed
21
+ * `UseSkill(...)` entry from the deny list. If the resulting deny list is
22
+ * empty, the `deny` field itself is deleted; if the `permissions` object
23
+ * becomes empty, the `permissions` field itself is deleted. This is the
24
+ * uninstall path: every field we wrote must be removed exactly, and no
25
+ * other field may be touched.
26
+ *
27
+ * Pure (no mutation).
28
+ */
29
+ export declare function withoutSuperpowersSkillDenylist(settings: Record<string, unknown>): Record<string, unknown>;
30
+ /**
31
+ * Read-only introspection. Returns the deny entries that `peaks hooks
32
+ * install` would write today. Useful for `peaks hooks status` and the
33
+ * dry-run envelope.
34
+ */
35
+ export declare function listSuperpowersDenyEntries(): ReadonlyArray<string>;
36
+ /**
37
+ *
38
+ * In addition to the static SUPERPOWERS_DENIED_SKILLS list, peaks
39
+ * scans the existing settings file for "trigger phrases" that
40
+ * indicate the user has configured the superpowers chain (or
41
+ * any other auto-run worktree-creating tool) and appends a
42
+ * defensive deny to prevent the chain from running raw
43
+ * `git worktree add` (or `podman run`) directly.
44
+ *
45
+ * Triggers detected (substring match on the existing
46
+ * permissions.deny / permissions.allow list):
47
+ *
48
+ * - `superpowers:using-git-worktrees` — the chain's ground zero
49
+ * - `superpowers:brainstorming` etc. — the upstream skill
50
+ * - `Bash(git worktree add` — the user has explicitly
51
+ * allowed raw git worktree, which our L2 lease-aware gate
52
+ * would also intercept (defense in depth)
53
+ *
54
+ * Append-only — never replaces, never re-orders, never removes
55
+ * existing entries. Idempotent: re-running the install with
56
+ * the same input yields the same output.
57
+ */
58
+ export declare const TRIGGER_PHRASES: ReadonlyArray<string>;
59
+ export declare function withTriggeredDenyList(settings: Record<string, unknown>): Record<string, unknown>;
60
+ /** Inverse of withTriggeredDenyList: strip every deny-trigger entry. */
61
+ export declare function withoutTriggeredDenyList(settings: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +1,173 @@
1
+ /**
2
+ * The peaks-managed `permissions.deny` entries, and their inverses.
3
+ *
4
+ * Split out of `hooks-settings-service.ts` (file-size cap campaign). The
5
+ * service re-exports every name declared here, so existing importers keep
6
+ * using `./hooks-settings-service.js` unchanged.
7
+ */
8
+ import { SUPERPOWERS_DENIED_SKILLS, SUPERPOWERS_DENY_SENTINELS, formatSuperpowersDenyEntry } from './hooks-codegate-superpowers.js';
9
+ /**
10
+ * Merge the peaks-managed Skill denylist into the existing settings object.
11
+ * Preserves every other `permissions.deny` entry the user (or another tool)
12
+ * has written so the install is additive, not destructive. The output is
13
+ * always deterministic: the same input always yields the same output,
14
+ * regardless of insertion order in the source array.
15
+ *
16
+ * Defensive behavior:
17
+ * - `settings.permissions` is missing or non-object → install creates a
18
+ * fresh `permissions: { deny: [...our entries] }` object.
19
+ * - `settings.permissions.deny` is missing or non-array → install replaces
20
+ * the field with a fresh array containing only our entries.
21
+ * - Duplicate entries (any source) are collapsed to one via `new Set`.
22
+ *
23
+ * The function is pure: it does not mutate the input. Atomic write happens
24
+ * at the call site (`applyHookInstall`).
25
+ */
26
+ export function withSuperpowersSkillDenylist(settings) {
27
+ const ourEntries = SUPERPOWERS_DENIED_SKILLS.map(formatSuperpowersDenyEntry);
28
+ const permissions = settings.permissions &&
29
+ typeof settings.permissions === 'object' &&
30
+ !Array.isArray(settings.permissions)
31
+ ? settings.permissions
32
+ : {};
33
+ const existingDeny = Array.isArray(permissions.deny)
34
+ ? permissions.deny.filter((d) => typeof d === 'string')
35
+ : [];
36
+ const otherDeny = existingDeny.filter((d) => !SUPERPOWERS_DENY_SENTINELS.has(d));
37
+ const finalDeny = [...new Set([...otherDeny, ...ourEntries])];
38
+ return {
39
+ ...settings,
40
+ permissions: { ...permissions, deny: finalDeny }
41
+ };
42
+ }
43
+ /**
44
+ * Inverse of `withSuperpowersSkillDenylist`. Removes every peaks-managed
45
+ * `UseSkill(...)` entry from the deny list. If the resulting deny list is
46
+ * empty, the `deny` field itself is deleted; if the `permissions` object
47
+ * becomes empty, the `permissions` field itself is deleted. This is the
48
+ * uninstall path: every field we wrote must be removed exactly, and no
49
+ * other field may be touched.
50
+ *
51
+ * Pure (no mutation).
52
+ */
53
+ export function withoutSuperpowersSkillDenylist(settings) {
54
+ const permissions = settings.permissions &&
55
+ typeof settings.permissions === 'object' &&
56
+ !Array.isArray(settings.permissions)
57
+ ? settings.permissions
58
+ : {};
59
+ if (!Array.isArray(permissions.deny)) {
60
+ return settings;
61
+ }
62
+ const remainingDeny = permissions.deny
63
+ .filter((d) => typeof d === 'string')
64
+ .filter((d) => !SUPERPOWERS_DENY_SENTINELS.has(d));
65
+ const nextPermissions = { ...permissions };
66
+ if (remainingDeny.length > 0) {
67
+ nextPermissions.deny = remainingDeny;
68
+ }
69
+ else {
70
+ delete nextPermissions.deny;
71
+ }
72
+ if (Object.keys(nextPermissions).length === 0) {
73
+ // The whole `permissions` object is empty (no deny, no allow, no other
74
+ // sub-fields). Drop it to avoid leaving an empty object on disk.
75
+ const rest = { ...settings };
76
+ delete rest['permissions'];
77
+ return rest;
78
+ }
79
+ return { ...settings, permissions: nextPermissions };
80
+ }
81
+ /**
82
+ * Read-only introspection. Returns the deny entries that `peaks hooks
83
+ * install` would write today. Useful for `peaks hooks status` and the
84
+ * dry-run envelope.
85
+ */
86
+ export function listSuperpowersDenyEntries() {
87
+ return SUPERPOWERS_DENIED_SKILLS.map(formatSuperpowersDenyEntry);
88
+ }
89
+ /**
90
+ *
91
+ * In addition to the static SUPERPOWERS_DENIED_SKILLS list, peaks
92
+ * scans the existing settings file for "trigger phrases" that
93
+ * indicate the user has configured the superpowers chain (or
94
+ * any other auto-run worktree-creating tool) and appends a
95
+ * defensive deny to prevent the chain from running raw
96
+ * `git worktree add` (or `podman run`) directly.
97
+ *
98
+ * Triggers detected (substring match on the existing
99
+ * permissions.deny / permissions.allow list):
100
+ *
101
+ * - `superpowers:using-git-worktrees` — the chain's ground zero
102
+ * - `superpowers:brainstorming` etc. — the upstream skill
103
+ * - `Bash(git worktree add` — the user has explicitly
104
+ * allowed raw git worktree, which our L2 lease-aware gate
105
+ * would also intercept (defense in depth)
106
+ *
107
+ * Append-only — never replaces, never re-orders, never removes
108
+ * existing entries. Idempotent: re-running the install with
109
+ * the same input yields the same output.
110
+ */
111
+ export const TRIGGER_PHRASES = Object.freeze([
112
+ 'superpowers:using-git-worktrees',
113
+ 'superpowers:brainstorming',
114
+ 'superpowers:writing-plans',
115
+ 'superpowers:subagent-driven-development',
116
+ 'Bash(git worktree add',
117
+ 'Bash(podman run'
118
+ ]);
119
+ /**
120
+ * Format a trigger-phrase into a stable `Edit` deny entry. We deny
121
+ * `Edit` (not `Bash`) on the *settings file* itself, so the
122
+ * user cannot edit the trigger away without an explicit
123
+ * `peaks hooks uninstall` first. The skill name (when
124
+ * applicable) is the value after the colon.
125
+ */
126
+ function formatTriggerDenyEntry(phrase) {
127
+ return `Edit(deny-trigger:${phrase})`;
128
+ }
129
+ export function withTriggeredDenyList(settings) {
130
+ const existingDeny = Array.isArray(settings.permissions?.deny)
131
+ ? settings.permissions.deny.filter((d) => typeof d === 'string')
132
+ : [];
133
+ // Detect triggers in the existing allow + deny lists.
134
+ const existingAllow = Array.isArray(settings.permissions?.allow)
135
+ ? settings.permissions.allow.filter((d) => typeof d === 'string')
136
+ : [];
137
+ const haystack = [...existingDeny, ...existingAllow].join('|');
138
+ const triggered = TRIGGER_PHRASES.filter((p) => haystack.includes(p));
139
+ if (triggered.length === 0)
140
+ return settings;
141
+ const triggeredEntries = triggered.map(formatTriggerDenyEntry);
142
+ const permissions = settings.permissions &&
143
+ typeof settings.permissions === 'object' &&
144
+ !Array.isArray(settings.permissions)
145
+ ? settings.permissions
146
+ : {};
147
+ const otherDeny = existingDeny.filter((d) => !triggeredEntries.includes(d));
148
+ return {
149
+ ...settings,
150
+ permissions: { ...permissions, deny: [...new Set([...otherDeny, ...triggeredEntries])] }
151
+ };
152
+ }
153
+ /** Inverse of withTriggeredDenyList: strip every deny-trigger entry. */
154
+ export function withoutTriggeredDenyList(settings) {
155
+ const permissions = settings.permissions &&
156
+ typeof settings.permissions === 'object' &&
157
+ !Array.isArray(settings.permissions)
158
+ ? settings.permissions
159
+ : {};
160
+ const existingDeny = Array.isArray(permissions.deny)
161
+ ? permissions.deny.filter((d) => typeof d === 'string')
162
+ : [];
163
+ const kept = existingDeny.filter((d) => !d.startsWith('Edit(deny-trigger:'));
164
+ const next = { ...permissions, deny: kept };
165
+ if (kept.length === 0)
166
+ delete next.deny;
167
+ if (Object.keys(next).length === 0) {
168
+ const out = { ...settings };
169
+ delete out.permissions;
170
+ return out;
171
+ }
172
+ return { ...settings, permissions: next };
173
+ }
@@ -0,0 +1,20 @@
1
+ import type { HookScope } from '../ide/shared/safe-path.js';
2
+ import type { HookRemoveResult, HookStatus, HookTarget } from './hooks-settings-types.js';
3
+ /** The uninstall envelope; a `localPath` is reported only when it is a distinct file. */
4
+ export declare function removedResult(scope: HookScope, settingsPath: string, localPath: string | undefined, removed: boolean): HookRemoveResult;
5
+ /**
6
+ * Strip every peaks-managed row from one target's file and write it back.
7
+ *
8
+ * The deny-list helpers run only on the SHARED settings file (the one that
9
+ * carries the committed `permissions.deny` block); the machine-local file
10
+ * carries hook entries plus, for Claude Code, the gate exemptions.
11
+ */
12
+ export declare function applyRemovalToTarget(target: HookTarget, sentinels: ReadonlyArray<string>, isSharedFile: boolean): boolean;
13
+ /**
14
+ * The status envelope for an IDE that can never carry a peaks hook: the query
15
+ * ran, the disk was read, and the honest reply is "nothing, and nothing ever
16
+ * will be".
17
+ */
18
+ export declare function unsupportedHookStatus(scope: HookScope, settingsPath: string, localPath: string | undefined): HookStatus;
19
+ /** The status envelope for a set of resolved targets. */
20
+ export declare function hookStatusFromTargets(scope: HookScope, settingsPath: string, targets: ReadonlyArray<HookTarget>): HookStatus;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * The result envelopes the uninstall and status verbs return.
3
+ *
4
+ * Split out of `hooks-settings-service.ts` (file-size cap campaign). The
5
+ * service re-exports every name declared here, so existing importers keep
6
+ * using `./hooks-settings-service.js` unchanged.
7
+ */
8
+ import { existsSync } from 'node:fs';
9
+ import { atomicWriteJson } from '../ide/shared/atomic-json.js';
10
+ import { withoutExternalGateExemptions } from './hooks-codegate-superpowers.js';
11
+ import { withoutSuperpowersSkillDenylist, withoutTriggeredDenyList } from './hooks-settings-deny-list.js';
12
+ import { isInstalledForEntries, readSettingsFile, stripPeaksEntries } from './hooks-settings-file-shape.js';
13
+ /** The uninstall envelope; a `localPath` is reported only when it is a distinct file. */
14
+ export function removedResult(scope, settingsPath, localPath, removed) {
15
+ return {
16
+ scope,
17
+ settingsPath,
18
+ removed,
19
+ ...(localPath !== undefined && localPath !== settingsPath
20
+ ? { localSettingsPath: localPath }
21
+ : {})
22
+ };
23
+ }
24
+ /**
25
+ * Strip every peaks-managed row from one target's file and write it back.
26
+ *
27
+ * The deny-list helpers run only on the SHARED settings file (the one that
28
+ * carries the committed `permissions.deny` block); the machine-local file
29
+ * carries hook entries plus, for Claude Code, the gate exemptions.
30
+ */
31
+ export function applyRemovalToTarget(target, sentinels, isSharedFile) {
32
+ const { settings, removed } = stripPeaksEntries(target, sentinels);
33
+ let finalSettings = settings;
34
+ if (target.envExemptions === true) {
35
+ finalSettings = withoutExternalGateExemptions(finalSettings);
36
+ }
37
+ if (isSharedFile) {
38
+ finalSettings = withoutTriggeredDenyList(withoutSuperpowersSkillDenylist(finalSettings));
39
+ }
40
+ atomicWriteJson(target.settingsPath, finalSettings);
41
+ return removed;
42
+ }
43
+ /**
44
+ * The status envelope for an IDE that can never carry a peaks hook: the query
45
+ * ran, the disk was read, and the honest reply is "nothing, and nothing ever
46
+ * will be".
47
+ */
48
+ export function unsupportedHookStatus(scope, settingsPath, localPath) {
49
+ return {
50
+ scope,
51
+ settingsPath,
52
+ exists: existsSync(settingsPath),
53
+ ...(localPath !== undefined && localPath !== settingsPath
54
+ ? { localSettingsPath: localPath, localExists: existsSync(localPath) }
55
+ : {}),
56
+ installed: false,
57
+ supportsHooks: false
58
+ };
59
+ }
60
+ /** The status envelope for a set of resolved targets. */
61
+ export function hookStatusFromTargets(scope, settingsPath, targets) {
62
+ const localTarget = targets.find((t) => t.settingsPath !== settingsPath);
63
+ return {
64
+ scope,
65
+ settingsPath,
66
+ exists: existsSync(settingsPath),
67
+ ...(localTarget !== undefined
68
+ ? {
69
+ localSettingsPath: localTarget.settingsPath,
70
+ localExists: existsSync(localTarget.settingsPath)
71
+ }
72
+ : {}),
73
+ installed: targets.some((t) => {
74
+ const settings = readSettingsFile(t.settingsPath);
75
+ return Object.keys(settings).length > 0 && isInstalledForEntries(settings, t.entries);
76
+ }),
77
+ supportsHooks: true
78
+ };
79
+ }