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,117 @@
1
+ /**
2
+ * `peaks worktree gc` — sweep released/expired leases.
3
+ *
4
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
5
+ * the `.action()` body). The per-lease sweep is now `sweepLease`; the
6
+ * `--lease-id` / `--dry-run` semantics, the expired-active transition, the
7
+ * best-effort git removal + prune, the per-lease metric emit and the
8
+ * ok/fail envelopes are unchanged.
9
+ */
10
+ import { fail, ok } from 'peaks-loop-shared/result';
11
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
12
+ import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
13
+ import { emitLeaseEvent } from '../../services/observability/observability-service.js';
14
+ import { isLeaseGcEligible, leaseFilePath, markExpired, markGc } from '../../services/worktree/worktree-lease.js';
15
+ import { pruneWorktreesBestEffort, removeWorktreeBestEffort } from './worktree-lease-git.js';
16
+ import { loadLeaseStore, malformedLeaseWarnings } from './worktree-lease-store.js';
17
+ import { joinPathSession, resolveProjectRoot, resolveSessionId } from './worktree-lease-session.js';
18
+ const GC_DESCRIPTION = "Sweep released/expired leases: remove their git worktree (if still attached), prune git's " +
19
+ 'worktree references, and mark the lease as "gc". With --lease-id <id>, only that lease is ' +
20
+ "considered. With --dry-run, report what would be gc'd without mutating. Expired-active " +
21
+ 'leases (status=active but past expiresAt) are eligible — they are first marked "expired" ' +
22
+ 'then their worktree is removed.';
23
+ const GC_LEASE_ID_DESCRIPTION = 'only consider this specific lease';
24
+ const GC_DRY_RUN_DESCRIPTION = "report what would be gc'd without mutating";
25
+ function sweepLease(ctx) {
26
+ const { lease, dryRun, now, projectRoot, sessionId } = ctx;
27
+ let prevStatus = lease.status;
28
+ let updated = lease;
29
+ // If the lease is still marked active but past expiresAt, transition to expired first.
30
+ if (lease.status === 'active' && lease.expiresAt <= now) {
31
+ updated = markExpired(lease);
32
+ prevStatus = 'active';
33
+ }
34
+ if (dryRun) {
35
+ return {
36
+ leaseId: lease.leaseId,
37
+ path: lease.path,
38
+ prevStatus,
39
+ gitWorktreeRemoveFailed: false
40
+ };
41
+ }
42
+ // `git worktree remove --force` is best-effort — if the path is
43
+ // already gone we still mark the lease gc.
44
+ const gitWorktreeRemoveFailed = removeWorktreeBestEffort(projectRoot, updated.path);
45
+ pruneWorktreesBestEffort(projectRoot);
46
+ const finalLease = markGc(updated);
47
+ atomicWriteJson(leaseFilePath(joinPathSession(projectRoot, sessionId), lease.leaseId), finalLease);
48
+ // Part 4.A: emit gc metric (per swept lease).
49
+ emitLeaseEvent({
50
+ sessionId,
51
+ projectRoot,
52
+ kind: 'gc',
53
+ leaseId: lease.leaseId,
54
+ rid: lease.rid,
55
+ role: lease.role
56
+ });
57
+ return { leaseId: lease.leaseId, path: lease.path, prevStatus, gitWorktreeRemoveFailed };
58
+ }
59
+ function printGcStoreMissing(io, options, ctx) {
60
+ const { sessionId, projectRoot, storeDir } = ctx;
61
+ printResult(io, ok('worktree.gc', { sessionId, projectRoot, swept: 0, storeMissing: true }, [], [`No lease store at ${storeDir}; nothing to gc.`]), options.json);
62
+ }
63
+ function printGcOk(io, options, ctx) {
64
+ const { sessionId, projectRoot, dryRun, candidates, swept, errors } = ctx;
65
+ printResult(io, ok('worktree.gc', { sessionId, projectRoot, dryRun, candidates, swept, errors }, malformedLeaseWarnings(errors), [
66
+ dryRun
67
+ ? `[dry-run] Would gc ${swept.length} lease(s); no filesystem changes were made.`
68
+ : `Gc'd ${swept.length} lease(s).`,
69
+ 'For per-lease detail, run `peaks worktree status --lease-id <id>`.'
70
+ ]), options.json);
71
+ }
72
+ function printGcFailed(io, options, err, sessionId) {
73
+ printResult(io, fail('worktree.gc', 'GC_FAILED', getErrorMessage(err), { sessionId }, [
74
+ 'Re-run after fixing the failure (see cause in the error message).'
75
+ ]), options.json);
76
+ process.exitCode = 1;
77
+ }
78
+ function runGc(options, io) {
79
+ const projectRoot = resolveProjectRoot(options);
80
+ const sessionId = resolveSessionId(options, projectRoot);
81
+ try {
82
+ const { storeDir, result } = loadLeaseStore(projectRoot, sessionId);
83
+ if (result.kind === 'store-missing') {
84
+ printGcStoreMissing(io, options, { sessionId, projectRoot, storeDir });
85
+ return;
86
+ }
87
+ const now = Date.now();
88
+ const candidates = result.leases
89
+ .filter((l) => (options.leaseId ? l.leaseId === options.leaseId : true))
90
+ .filter((l) => isLeaseGcEligible(l, now));
91
+ const dryRun = options.dryRun === true;
92
+ const swept = [];
93
+ for (const lease of candidates) {
94
+ swept.push(sweepLease({ lease, dryRun, now, projectRoot, sessionId }));
95
+ }
96
+ printGcOk(io, options, {
97
+ sessionId,
98
+ projectRoot,
99
+ dryRun,
100
+ candidates: candidates.length,
101
+ swept,
102
+ errors: result.errors
103
+ });
104
+ }
105
+ catch (err) {
106
+ printGcFailed(io, options, err, sessionId);
107
+ }
108
+ }
109
+ export function registerWorktreeLeaseGcCommand(auth, io) {
110
+ addJsonOption(auth
111
+ .command('gc')
112
+ .description(GC_DESCRIPTION)
113
+ .option('--lease-id <id>', GC_LEASE_ID_DESCRIPTION)
114
+ .option('--dry-run', GC_DRY_RUN_DESCRIPTION)
115
+ .option('--session <sid>', 'override session id')
116
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runGc(options, io));
117
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Best-effort `git worktree` shell helpers shared by `release` and `gc`.
3
+ *
4
+ * Both commands detach a worktree the same way (and `gc` additionally
5
+ * prunes stale admin entries). Extracted verbatim from
6
+ * `worktree-lease-commands.ts`: the commands, cwd, stdio/encoding flags
7
+ * and the swallow-on-failure posture are unchanged.
8
+ */
9
+ /**
10
+ * `git worktree remove --force` is best-effort: when the path is already
11
+ * pruned the caller still marks the lease released / gc. Returns whether
12
+ * the git invocation failed.
13
+ *
14
+ * `windowsHide: true` is spelled at each call site rather than shared: the
15
+ * guard (`tests/unit/spawn-windows-hide-guard.test.ts`) resolves a same-file
16
+ * plain-`const` object literal and a spread of it, but not one declared
17
+ * `as const`, frozen, `let`, or imported from another file — measured: both
18
+ * call sites below were reported while the shared constant was `as const`.
19
+ */
20
+ export declare function removeWorktreeBestEffort(projectRoot: string, wtPath: string): boolean;
21
+ /** `git worktree prune` clears stale admin entries. Best-effort. */
22
+ export declare function pruneWorktreesBestEffort(projectRoot: string): void;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Best-effort `git worktree` shell helpers shared by `release` and `gc`.
3
+ *
4
+ * Both commands detach a worktree the same way (and `gc` additionally
5
+ * prunes stale admin entries). Extracted verbatim from
6
+ * `worktree-lease-commands.ts`: the commands, cwd, stdio/encoding flags
7
+ * and the swallow-on-failure posture are unchanged.
8
+ */
9
+ import { execSync } from 'node:child_process';
10
+ /**
11
+ * `git worktree remove --force` is best-effort: when the path is already
12
+ * pruned the caller still marks the lease released / gc. Returns whether
13
+ * the git invocation failed.
14
+ *
15
+ * `windowsHide: true` is spelled at each call site rather than shared: the
16
+ * guard (`tests/unit/spawn-windows-hide-guard.test.ts`) resolves a same-file
17
+ * plain-`const` object literal and a spread of it, but not one declared
18
+ * `as const`, frozen, `let`, or imported from another file — measured: both
19
+ * call sites below were reported while the shared constant was `as const`.
20
+ */
21
+ export function removeWorktreeBestEffort(projectRoot, wtPath) {
22
+ try {
23
+ execSync(`git worktree remove --force "${wtPath}"`, {
24
+ cwd: projectRoot,
25
+ stdio: 'pipe',
26
+ encoding: 'utf8',
27
+ windowsHide: true
28
+ });
29
+ return false;
30
+ }
31
+ catch {
32
+ return true;
33
+ }
34
+ }
35
+ /** `git worktree prune` clears stale admin entries. Best-effort. */
36
+ export function pruneWorktreesBestEffort(projectRoot) {
37
+ try {
38
+ execSync('git worktree prune', {
39
+ cwd: projectRoot,
40
+ stdio: 'pipe',
41
+ encoding: 'utf8',
42
+ windowsHide: true
43
+ });
44
+ }
45
+ catch {
46
+ // ignore — prune is idempotent
47
+ }
48
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `peaks worktree list` — enumerate every lease in the session store.
3
+ *
4
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
5
+ * the `.action()` body). The store read is now the shared
6
+ * `loadLeaseStore`; the live/elapsed/remaining annotation, the
7
+ * `--status` / `--expired-only` filters, the createdAt-desc sort and the
8
+ * ok/fail envelopes are unchanged.
9
+ */
10
+ import type { Command } from 'commander';
11
+ import { type ProgramIO } from '../cli-helpers.js';
12
+ export declare function registerWorktreeLeaseListCommand(auth: Command, io: ProgramIO): void;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * `peaks worktree list` — enumerate every lease in the session store.
3
+ *
4
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
5
+ * the `.action()` body). The store read is now the shared
6
+ * `loadLeaseStore`; the live/elapsed/remaining annotation, the
7
+ * `--status` / `--expired-only` filters, the createdAt-desc sort and the
8
+ * ok/fail envelopes are unchanged.
9
+ */
10
+ import { fail, ok } from 'peaks-loop-shared/result';
11
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
12
+ import { isLeaseActive } from '../../services/worktree/worktree-lease.js';
13
+ import { loadLeaseStore, malformedLeaseWarnings } from './worktree-lease-store.js';
14
+ import { resolveProjectRoot, resolveSessionId } from './worktree-lease-session.js';
15
+ const LIST_DESCRIPTION = "List every lease under the current session's lease store. " +
16
+ 'Optionally filter by --status (active|released|expired|gc) and/or --expired-only. ' +
17
+ 'Leases past their expiresAt with status=active are still listed under "active" by default ' +
18
+ '(`isLeaseActive` returns false for them, but the on-disk status only flips to "expired" ' +
19
+ 'after `peaks worktree gc` runs).';
20
+ const LIST_STATUS_DESCRIPTION = 'filter by lease status: active | released | expired | gc';
21
+ const LIST_EXPIRED_ONLY_DESCRIPTION = 'only show leases whose expiresAt is in the past';
22
+ function annotateLeases(leases, now) {
23
+ return leases.map((l) => ({
24
+ ...l,
25
+ live: isLeaseActive(l, now),
26
+ elapsedMs: now - l.createdAt,
27
+ remainingMs: l.expiresAt - now
28
+ }));
29
+ }
30
+ function filterLeases(leases, options) {
31
+ let filtered = leases;
32
+ if (options.status) {
33
+ filtered = filtered.filter((l) => l.status === options.status);
34
+ }
35
+ if (options.expiredOnly === true) {
36
+ filtered = filtered.filter((l) => !l.live);
37
+ }
38
+ // Sort by createdAt desc — most-recent first. Stable for diffs.
39
+ return [...filtered].sort((a, b) => b.createdAt - a.createdAt);
40
+ }
41
+ function printListStoreMissing(io, options, ctx) {
42
+ const { sessionId, projectRoot, storeDir } = ctx;
43
+ printResult(io, ok('worktree.list', { sessionId, projectRoot, leases: [], errors: [], storeMissing: true }, [], [`No lease store at ${storeDir}. Spawn a worktree first (\`peaks worktree spawn ...\`).`]), options.json);
44
+ }
45
+ function printListOk(io, options, ctx) {
46
+ const { sessionId, projectRoot, storeDir, totalOnDisk, errors, leases } = ctx;
47
+ printResult(io, ok('worktree.list', {
48
+ sessionId,
49
+ projectRoot,
50
+ storeDir,
51
+ totalOnDisk,
52
+ returned: leases.length,
53
+ errors,
54
+ leases
55
+ }, malformedLeaseWarnings(errors), [
56
+ `${leases.length} lease(s) matched (${totalOnDisk} on disk).`,
57
+ errors.length > 0
58
+ ? 'Some lease files were malformed — see errors[]; they were skipped.'
59
+ : ''
60
+ ].filter(Boolean)), options.json);
61
+ }
62
+ function printListFailed(io, options, err, sessionId) {
63
+ printResult(io, fail('worktree.list', 'LIST_FAILED', getErrorMessage(err), { sessionId }, [
64
+ 'Re-run after fixing the failure (see cause in the error message).'
65
+ ]), options.json);
66
+ process.exitCode = 1;
67
+ }
68
+ function runList(options, io) {
69
+ const projectRoot = resolveProjectRoot(options);
70
+ const sessionId = resolveSessionId(options, projectRoot);
71
+ try {
72
+ const { storeDir, result } = loadLeaseStore(projectRoot, sessionId);
73
+ if (result.kind === 'store-missing') {
74
+ printListStoreMissing(io, options, { sessionId, projectRoot, storeDir });
75
+ return;
76
+ }
77
+ const now = Date.now();
78
+ const filtered = filterLeases(annotateLeases(result.leases, now), options);
79
+ printListOk(io, options, {
80
+ sessionId,
81
+ projectRoot,
82
+ storeDir,
83
+ totalOnDisk: result.leases.length,
84
+ errors: result.errors,
85
+ leases: filtered
86
+ });
87
+ }
88
+ catch (err) {
89
+ printListFailed(io, options, err, sessionId);
90
+ }
91
+ }
92
+ export function registerWorktreeLeaseListCommand(auth, io) {
93
+ addJsonOption(auth
94
+ .command('list')
95
+ .description(LIST_DESCRIPTION)
96
+ .option('--status <state>', LIST_STATUS_DESCRIPTION)
97
+ .option('--expired-only', LIST_EXPIRED_ONLY_DESCRIPTION)
98
+ .option('--session <sid>', 'override session id')
99
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runList(options, io));
100
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared single-lease loader for the three read-by-lease-id commands
3
+ * (`release`, `renew`, `lease-status`).
4
+ *
5
+ * All three used to inline the same two failure shapes — a missing lease
6
+ * file (`LEASE_NOT_FOUND`) and an unparseable one (`LEASE_FILE_INVALID`) —
7
+ * differing only in the envelope `command` string and the two hint lines.
8
+ * Both are parameters here. The message text, the `{ leaseId, file }`
9
+ * data payload and the caller's `process.exitCode = 1` are unchanged.
10
+ */
11
+ import { type ProgramIO } from '../cli-helpers.js';
12
+ import { type WorktreeLease } from '../../services/worktree/worktree-lease.js';
13
+ /** The option surface the loader reads: the lease id and `--json`. */
14
+ export interface LeaseIdOptions {
15
+ leaseId: string;
16
+ json?: boolean;
17
+ }
18
+ export interface LeaseLoadHints {
19
+ /** nextActions printed for `LEASE_NOT_FOUND`. */
20
+ missing: string[];
21
+ /** nextActions printed for `LEASE_FILE_INVALID`. */
22
+ invalid: string[];
23
+ }
24
+ export interface LeaseLoadRequest {
25
+ /** The envelope `command` string (e.g. `worktree.renew`). */
26
+ command: string;
27
+ /** Absolute path of the lease file to read. */
28
+ file: string;
29
+ hints: LeaseLoadHints;
30
+ }
31
+ export type LeaseLoadResult = {
32
+ stop: true;
33
+ } | {
34
+ stop: false;
35
+ lease: WorktreeLease;
36
+ };
37
+ export declare function loadLeaseOrStop(io: ProgramIO, options: LeaseIdOptions, request: LeaseLoadRequest): LeaseLoadResult;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared single-lease loader for the three read-by-lease-id commands
3
+ * (`release`, `renew`, `lease-status`).
4
+ *
5
+ * All three used to inline the same two failure shapes — a missing lease
6
+ * file (`LEASE_NOT_FOUND`) and an unparseable one (`LEASE_FILE_INVALID`) —
7
+ * differing only in the envelope `command` string and the two hint lines.
8
+ * Both are parameters here. The message text, the `{ leaseId, file }`
9
+ * data payload and the caller's `process.exitCode = 1` are unchanged.
10
+ */
11
+ import { fail } from 'peaks-loop-shared/result';
12
+ import { existsSync, readFileSync as readFileSyncNode } from 'node:fs';
13
+ import { getErrorMessage, printResult } from '../cli-helpers.js';
14
+ import { deserializeLease } from '../../services/worktree/worktree-lease.js';
15
+ export function loadLeaseOrStop(io, options, request) {
16
+ const { command, file, hints } = request;
17
+ if (!existsSync(file)) {
18
+ printResult(io, fail(command, 'LEASE_NOT_FOUND', `no lease on disk at ${file}`, { leaseId: options.leaseId, file }, hints.missing), options.json);
19
+ return { stop: true };
20
+ }
21
+ try {
22
+ return { stop: false, lease: deserializeLease(readFileSyncNode(file, 'utf8')) };
23
+ }
24
+ catch (error) {
25
+ printResult(io, fail(command, 'LEASE_FILE_INVALID', getErrorMessage(error), { leaseId: options.leaseId, file }, hints.invalid), options.json);
26
+ return { stop: true };
27
+ }
28
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `peaks worktree release` — transition a lease to 'released' and run
3
+ * `git worktree remove`.
4
+ *
5
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
6
+ * the `.action()` body). The lease-file failures now route through the
7
+ * shared `loadLeaseOrStop` (same envelope, same hints, same exit code);
8
+ * the idempotent already-released branch, the best-effort git removal and
9
+ * the ok/fail envelopes are unchanged.
10
+ */
11
+ import type { Command } from 'commander';
12
+ import { type ProgramIO } from '../cli-helpers.js';
13
+ export declare function registerWorktreeLeaseReleaseCommand(auth: Command, io: ProgramIO): void;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * `peaks worktree release` — transition a lease to 'released' and run
3
+ * `git worktree remove`.
4
+ *
5
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
6
+ * the `.action()` body). The lease-file failures now route through the
7
+ * shared `loadLeaseOrStop` (same envelope, same hints, same exit code);
8
+ * the idempotent already-released branch, the best-effort git removal and
9
+ * the ok/fail envelopes are unchanged.
10
+ */
11
+ import { fail, ok } from 'peaks-loop-shared/result';
12
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
13
+ import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
14
+ import { emitLeaseEvent } from '../../services/observability/observability-service.js';
15
+ import { leaseFilePath, markReleased } from '../../services/worktree/worktree-lease.js';
16
+ import { loadLeaseOrStop } from './worktree-lease-load.js';
17
+ import { removeWorktreeBestEffort } from './worktree-lease-git.js';
18
+ import { joinPathSession, resolveProjectRoot, resolveSessionId } from './worktree-lease-session.js';
19
+ const RELEASE_DESCRIPTION = 'Transition a lease to released and run `git worktree remove`. Idempotent on already-released leases.';
20
+ const RELEASE_MISSING_HINTS = [
21
+ 'Run `peaks worktree list` to inspect active leases.',
22
+ 'For a never-spawned lease, this is a no-op — no further action needed.'
23
+ ];
24
+ const RELEASE_INVALID_HINTS = [
25
+ 'Delete the malformed lease file manually and re-issue spawn.',
26
+ 'For security, release never fails open on a malformed lease.'
27
+ ];
28
+ function printReleaseAlreadyReleased(io, options, ctx) {
29
+ const { lease, sessionId, projectRoot } = ctx;
30
+ // Idempotent: already released, nothing to do.
31
+ printResult(io, ok('worktree.release', { lease, sessionId, projectRoot, alreadyReleased: true }, [], [`Lease ${lease.leaseId} already released; nothing to do.`]), options.json);
32
+ }
33
+ function printReleaseDone(io, options, ctx) {
34
+ const { lease, released, sessionId, projectRoot, gitWorktreeRemoveFailed } = ctx;
35
+ printResult(io, ok('worktree.release', { lease: released, sessionId, projectRoot, gitWorktreeRemoveFailed }, gitWorktreeRemoveFailed
36
+ ? [
37
+ 'git worktree remove failed (likely the path was already pruned); lease marked released.'
38
+ ]
39
+ : [], [
40
+ `Lease ${lease.leaseId} marked released.`,
41
+ gitWorktreeRemoveFailed
42
+ ? 'Manual `git worktree prune` may be needed.'
43
+ : `Worktree ${lease.path} removed.`
44
+ ]), options.json);
45
+ }
46
+ function printReleaseFailed(io, options, error, sessionId) {
47
+ printResult(io, fail('worktree.release', 'RELEASE_FAILED', getErrorMessage(error), { leaseId: options.leaseId, sessionId }, ['Verify the lease id and re-run.', 'If the lease was never spawned, no-op.']), options.json);
48
+ process.exitCode = 1;
49
+ }
50
+ function runRelease(options, io) {
51
+ const projectRoot = resolveProjectRoot(options);
52
+ const sessionId = resolveSessionId(options, projectRoot);
53
+ try {
54
+ const file = leaseFilePath(joinPathSession(projectRoot, sessionId), options.leaseId);
55
+ const loaded = loadLeaseOrStop(io, options, {
56
+ command: 'worktree.release',
57
+ file,
58
+ hints: { missing: RELEASE_MISSING_HINTS, invalid: RELEASE_INVALID_HINTS }
59
+ });
60
+ if (loaded.stop) {
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ const lease = loaded.lease;
65
+ if (lease.status === 'released') {
66
+ printReleaseAlreadyReleased(io, options, { lease, sessionId, projectRoot });
67
+ return;
68
+ }
69
+ // Run `git worktree remove` from the project root. If the path is
70
+ // missing on disk (e.g. manually pruned), this fails; we still
71
+ // update the lease state so the L2 hook (Part 2) treats it as
72
+ // released.
73
+ const gitWorktreeRemoveFailed = removeWorktreeBestEffort(projectRoot, lease.path);
74
+ const released = markReleased(lease);
75
+ atomicWriteJson(file, released);
76
+ // Part 4.A: emit release metric (manual path; auto-release is
77
+ // recorded in dispatch-record-writer's tryAutoReleaseLease).
78
+ emitLeaseEvent({
79
+ sessionId,
80
+ projectRoot,
81
+ kind: 'release',
82
+ leaseId: released.leaseId,
83
+ rid: released.rid,
84
+ role: released.role
85
+ });
86
+ printReleaseDone(io, options, {
87
+ lease,
88
+ released,
89
+ sessionId,
90
+ projectRoot,
91
+ gitWorktreeRemoveFailed
92
+ });
93
+ }
94
+ catch (error) {
95
+ printReleaseFailed(io, options, error, sessionId);
96
+ }
97
+ }
98
+ export function registerWorktreeLeaseReleaseCommand(auth, io) {
99
+ addJsonOption(auth
100
+ .command('release')
101
+ .description(RELEASE_DESCRIPTION)
102
+ .requiredOption('--lease-id <id>', 'lease id returned by `peaks worktree spawn`')
103
+ .option('--session <sid>', 'override session id')
104
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runRelease(options, io));
105
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `peaks worktree renew` — extend an active lease's `expiresAt`.
3
+ *
4
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
5
+ * the `.action()` body). The lease-file failures route through the shared
6
+ * `loadLeaseOrStop`; the LEASE_NOT_RENEWABLE / INVALID_TTL guards, the
7
+ * renewal write, the metric emit and the ok/fail envelopes are unchanged.
8
+ */
9
+ import type { Command } from 'commander';
10
+ import { type ProgramIO } from '../cli-helpers.js';
11
+ export declare function registerWorktreeLeaseRenewCommand(auth: Command, io: ProgramIO): void;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * `peaks worktree renew` — extend an active lease's `expiresAt`.
3
+ *
4
+ * Extracted verbatim from `worktree-lease-commands.ts` (mechanical move of
5
+ * the `.action()` body). The lease-file failures route through the shared
6
+ * `loadLeaseOrStop`; the LEASE_NOT_RENEWABLE / INVALID_TTL guards, the
7
+ * renewal write, the metric emit and the ok/fail envelopes are unchanged.
8
+ */
9
+ import { fail, ok } from 'peaks-loop-shared/result';
10
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
11
+ import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
12
+ import { emitLeaseEvent } from '../../services/observability/observability-service.js';
13
+ import { leaseFilePath, renewLease, ttlForRole } from '../../services/worktree/worktree-lease.js';
14
+ import { loadLeaseOrStop } from './worktree-lease-load.js';
15
+ import { joinPathSession, resolveProjectRoot, resolveSessionId } from './worktree-lease-session.js';
16
+ const RENEW_DESCRIPTION = "Extend an active lease's `expiresAt` and persist it. Idempotent for already-active leases. " +
17
+ 'Default TTL uses `DEFAULT_TTL_BY_ROLE[<lease.role>]`; pass --ttl <ms> to override.';
18
+ const RENEW_MISSING_HINTS = [
19
+ 'Run `peaks worktree list` to inspect active leases.',
20
+ 'For a never-spawned lease, this is a no-op.'
21
+ ];
22
+ const RENEW_INVALID_HINTS = [
23
+ 'Delete the malformed lease file manually and re-spawn.',
24
+ 'For security, renew never fails open on a malformed lease.'
25
+ ];
26
+ function printRenewNotRenewable(io, options, lease) {
27
+ printResult(io, fail('worktree.renew', 'LEASE_NOT_RENEWABLE', `lease is in status '${lease.status}'; only active/expired leases may be renewed`, { leaseId: lease.leaseId, status: lease.status }, [
28
+ 'Released leases cannot be renewed. Run `peaks worktree spawn` to start a new lease.',
29
+ 'Gc-marked leases are terminal — re-spawn.'
30
+ ]), options.json);
31
+ process.exitCode = 1;
32
+ }
33
+ function printRenewInvalidTtl(io, options) {
34
+ printResult(io, fail('worktree.renew', 'INVALID_TTL', '--ttl must be a positive integer (ms)', { ttl: options.ttl }, ['Re-run with --ttl 1800000 (30 min) or omit to use role default.']), options.json);
35
+ process.exitCode = 1;
36
+ }
37
+ function printRenewOk(io, options, ctx) {
38
+ const { lease, renewed, sessionId, projectRoot, ttlMs } = ctx;
39
+ printResult(io, ok('worktree.renew', { lease: renewed, sessionId, projectRoot, ttlMs, previousExpiresAt: lease.expiresAt }, [], [
40
+ `Lease ${renewed.leaseId} renewed; new expiresAt: ${new Date(renewed.expiresAt).toISOString()}.`,
41
+ `Branch ${renewed.branch} at ${renewed.path} remains intact (no ` +
42
+ '`git worktree` operation was performed — the worktree was always there).'
43
+ ]), options.json);
44
+ }
45
+ function printRenewFailed(io, options, err, sessionId) {
46
+ printResult(io, fail('worktree.renew', 'RENEW_FAILED', getErrorMessage(err), { leaseId: options.leaseId, sessionId }, ['Re-run after fixing the failure (see cause in the error message).']), options.json);
47
+ process.exitCode = 1;
48
+ }
49
+ function runRenew(options, io) {
50
+ const projectRoot = resolveProjectRoot(options);
51
+ const sessionId = resolveSessionId(options, projectRoot);
52
+ try {
53
+ const file = leaseFilePath(joinPathSession(projectRoot, sessionId), options.leaseId);
54
+ const loaded = loadLeaseOrStop(io, options, {
55
+ command: 'worktree.renew',
56
+ file,
57
+ hints: { missing: RENEW_MISSING_HINTS, invalid: RENEW_INVALID_HINTS }
58
+ });
59
+ if (loaded.stop) {
60
+ process.exitCode = 1;
61
+ return;
62
+ }
63
+ const lease = loaded.lease;
64
+ if (lease.status === 'released' || lease.status === 'gc') {
65
+ printRenewNotRenewable(io, options, lease);
66
+ return;
67
+ }
68
+ const now = Date.now();
69
+ const ttlMs = options.ttl === undefined ? ttlForRole(lease.role) : Number.parseInt(options.ttl, 10);
70
+ if (!Number.isInteger(ttlMs) || ttlMs <= 0) {
71
+ printRenewInvalidTtl(io, options);
72
+ return;
73
+ }
74
+ const renewed = renewLease(lease, now + ttlMs);
75
+ atomicWriteJson(file, renewed);
76
+ // Part 4.A: emit renew metric.
77
+ emitLeaseEvent({
78
+ sessionId,
79
+ projectRoot,
80
+ kind: 'renew',
81
+ leaseId: renewed.leaseId,
82
+ rid: renewed.rid,
83
+ role: renewed.role
84
+ });
85
+ printRenewOk(io, options, { lease, renewed, sessionId, projectRoot, ttlMs });
86
+ }
87
+ catch (err) {
88
+ printRenewFailed(io, options, err, sessionId);
89
+ }
90
+ }
91
+ export function registerWorktreeLeaseRenewCommand(auth, io) {
92
+ addJsonOption(auth
93
+ .command('renew')
94
+ .description(RENEW_DESCRIPTION)
95
+ .requiredOption('--lease-id <id>', 'lease id returned by `peaks worktree spawn`')
96
+ .option('--ttl <ms>', 'time-to-live in ms from now (default: role-default)')
97
+ .option('--session <sid>', 'override session id')
98
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runRenew(options, io));
99
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Session / project-root resolution shared by every `peaks worktree
3
+ * <spawn|release|renew|list|gc|lease-status>` sub-command.
4
+ *
5
+ * Extracted verbatim from `worktree-lease-commands.ts` so each
6
+ * `worktree-lease-<name>-command.ts` sibling can resolve the same roots
7
+ * without importing the registrar module (the dependency direction stays
8
+ * one-way: siblings → this module → services).
9
+ */
10
+ export declare function resolveSessionId(options: {
11
+ session?: string;
12
+ }, projectRoot: string): string;
13
+ export declare function resolveProjectRoot(options: {
14
+ project?: string;
15
+ }): string;
16
+ /**
17
+ * Resolve the per-session runtime directory: `<projectRoot>/.peaks/_runtime/<sessionId>`.
18
+ * The runtime tree is gitignored; the spawn CLI writes the lease file
19
+ * under `<this>/worktree-leases/<leaseId>.json` and the worktree itself
20
+ * under `<this>/worktrees/<leaseId>/`.
21
+ */
22
+ export declare function joinPathSession(projectRoot: string, sessionId: string): string;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Session / project-root resolution shared by every `peaks worktree
3
+ * <spawn|release|renew|list|gc|lease-status>` sub-command.
4
+ *
5
+ * Extracted verbatim from `worktree-lease-commands.ts` so each
6
+ * `worktree-lease-<name>-command.ts` sibling can resolve the same roots
7
+ * without importing the registrar module (the dependency direction stays
8
+ * one-way: siblings → this module → services).
9
+ */
10
+ import { findProjectRoot } from '../../services/config/config-safety.js';
11
+ import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
12
+ export function resolveSessionId(options, projectRoot) {
13
+ if (typeof options.session === 'string' && options.session.length > 0)
14
+ return options.session;
15
+ // Reuse the same precedence as the rest of peaks: explicit --session > PEAKS_SESSION_ID > active session.json
16
+ return process.env.PEAKS_SESSION_ID ?? getCurrentSessionId(projectRoot) ?? 'unknown-sid';
17
+ }
18
+ export function resolveProjectRoot(options) {
19
+ return options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
20
+ }
21
+ /**
22
+ * Resolve the per-session runtime directory: `<projectRoot>/.peaks/_runtime/<sessionId>`.
23
+ * The runtime tree is gitignored; the spawn CLI writes the lease file
24
+ * under `<this>/worktree-leases/<leaseId>.json` and the worktree itself
25
+ * under `<this>/worktrees/<leaseId>/`.
26
+ */
27
+ export function joinPathSession(projectRoot, sessionId) {
28
+ return `${projectRoot.replace(/[\\/]+$/, '')}/.peaks/_runtime/${sessionId}`;
29
+ }