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,130 @@
1
+ import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
2
+ import { findProjectRoot } from '../../services/config/config-safety.js';
3
+ import { fail, ok, getErrorMessage } from 'peaks-loop-shared/result';
4
+ import { addJsonOption, printResult } from '../cli-helpers.js';
5
+ import { readSessionIdFromHookPayload, readTriggerFromHookPayload, settleCompactFromHarnessEvent } from '../../services/code/compact-event-settle.js';
6
+ import { resolveSessionId } from './compact-shared.js';
7
+ const COMPACT_SETTLE_DESCRIPTION = 'PostCompact hook handler: settle the open compact run because the HARNESS reported a ' +
8
+ 'compaction completed, and append an `observed` compact-history row carrying the ' +
9
+ 'harness-reported trigger (manual | auto). Reads the hook JSON on stdin; prints nothing ' +
10
+ 'and exits 0 when run by the hook. Pass --json for the diagnostic envelope.';
11
+ /**
12
+ * Read the `PostCompact` hook payload from stdin.
13
+ *
14
+ * `PEAKS_HOOK_STDIN` is the test seam, verbatim the one `peaks gate enforce`
15
+ * uses (`gate-commands.ts`) — the CLI side owns `process.stdin`'s lifecycle, so
16
+ * the reader lives with the command rather than in the service.
17
+ *
18
+ * Returns `null` for every shape that is not a JSON object: empty stdin, a TTY
19
+ * (the `--json` diagnostic path run by a human), malformed JSON. A payload that
20
+ * cannot be read is not a failure — it is a payload with no `trigger`, which is
21
+ * an input this path is explicitly designed to accept.
22
+ */
23
+ async function readHookPayload() {
24
+ const override = process.env.PEAKS_HOOK_STDIN;
25
+ let raw;
26
+ if (override !== undefined) {
27
+ raw = override;
28
+ }
29
+ else if (process.stdin.isTTY) {
30
+ raw = '';
31
+ }
32
+ else {
33
+ raw = await new Promise((resolveStdin) => {
34
+ let data = '';
35
+ process.stdin.setEncoding('utf8');
36
+ process.stdin.on('data', (chunk) => {
37
+ data += chunk;
38
+ });
39
+ process.stdin.on('end', () => resolveStdin(data));
40
+ process.stdin.on('error', () => resolveStdin(data));
41
+ });
42
+ }
43
+ if (raw.trim().length === 0)
44
+ return null;
45
+ try {
46
+ return JSON.parse(raw);
47
+ }
48
+ catch {
49
+ // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
50
+ return null;
51
+ }
52
+ }
53
+ function reportCompactSettleSessionFailure(io, error, project) {
54
+ printResult(io, fail('compact.settle', error.code, error.message, { projectRoot: project }, error.nextActions), true);
55
+ }
56
+ function buildCompactSettleNextActions(result) {
57
+ return [
58
+ result.settled
59
+ ? result.lifecycleWritten
60
+ ? result.historyWritten
61
+ ? `Settled run ${result.runId}; appended a kind:'observed' row with pathway 'post-compact-hook'.`
62
+ : `Settled run ${result.runId}, but the kind:'observed' row could NOT be appended — check that .peaks/_runtime/<sid>/ is writable.`
63
+ : `The harness reported a compaction for run ${result.runId}, but the lifecycle record could NOT be written — that run is still open, so a later probe will settle it from its own measurement and append the row then. Nothing was recorded for this event: a row here would assert a settlement the store never made.`
64
+ : result.reason === 'different-session'
65
+ ? `The hook payload names a different harness session, so this project's open compact run was left alone.`
66
+ : 'No compact run was open, so nothing was settled and no history row was appended.'
67
+ ];
68
+ }
69
+ function reportCompactSettleFailure(io, error) {
70
+ printResult(io, fail('compact.settle', 'COMPACT_SETTLE_FAILED', getErrorMessage(error), {}, [
71
+ 'Verify the project path and session binding'
72
+ ]), true);
73
+ }
74
+ async function runCompactSettle(options, io) {
75
+ // One parse, two fields: reading stdin twice would let the two readers
76
+ // disagree about the payload they were handed.
77
+ const payload = await readHookPayload();
78
+ const trigger = readTriggerFromHookPayload(payload);
79
+ const hookSessionId = readSessionIdFromHookPayload(payload);
80
+ // The hook path returns before any `process.exitCode` assignment below, so
81
+ // the harness never sees a non-zero exit from this command.
82
+ try {
83
+ const project = options.project !== undefined
84
+ ? resolveCanonicalProjectRoot(options.project)
85
+ : (findProjectRoot(process.cwd()) ?? process.cwd());
86
+ const session = resolveSessionId(project, options.sessionId);
87
+ if (session.error !== null) {
88
+ if (options.json !== true)
89
+ return;
90
+ reportCompactSettleSessionFailure(io, session.error, project);
91
+ return;
92
+ }
93
+ const result = settleCompactFromHarnessEvent({
94
+ projectRoot: project,
95
+ sessionId: session.sid,
96
+ trigger,
97
+ hookSessionId
98
+ });
99
+ if (options.json !== true)
100
+ return;
101
+ printResult(io, ok('compact.settle', { projectRoot: project, sessionId: session.sid, trigger: trigger ?? null, ...result }, [], buildCompactSettleNextActions(result)), true);
102
+ }
103
+ catch (error) {
104
+ if (options.json !== true)
105
+ return;
106
+ reportCompactSettleFailure(io, error);
107
+ }
108
+ }
109
+ export function registerCompactSettleCommand(compact, io) {
110
+ // 8. peaks compact settle [--json]
111
+ //
112
+ // The `PostCompact` hook's transport. Before this command, peaks-loop knew a
113
+ // compaction had landed only because a LATER probe measured a ratio that had
114
+ // fallen — an inference. This command lets the harness's own event settle the
115
+ // run, and records what the harness said the compaction WAS (`manual` /
116
+ // `auto`), which is the one question a ratio can never answer.
117
+ //
118
+ // STDOUT IS CONTEXT HERE. `PostCompact`'s output contract is truncated in the
119
+ // retrievable docs, so the safe assumption is the `SessionStart` one: stdout
120
+ // is added to the model's context. The hook path therefore prints NOTHING and
121
+ // exits 0 for every outcome — success, no open run, unresolvable session,
122
+ // unparseable stdin. An error sentence in the model's context is a false
123
+ // problem handed to it mid-slice. Same discipline as `session reinject`;
124
+ // `--json` is the diagnostic surface, and the hook never passes it.
125
+ addJsonOption(compact
126
+ .command('settle')
127
+ .description(COMPACT_SETTLE_DESCRIPTION)
128
+ .option('--project <path>', 'project root (defaults to git root or cwd)')
129
+ .option('--session-id <sid>', 'override the active session id (defaults to the canonical binding)')).action((options) => runCompactSettle(options, io));
130
+ }
@@ -0,0 +1,9 @@
1
+ /** The active session id, or the refusal envelope every caller prints the same way. */
2
+ export declare function resolveSessionId(projectRoot: string, explicit: string | undefined): {
3
+ sid: string | null;
4
+ error: {
5
+ code: string;
6
+ message: string;
7
+ nextActions: string[];
8
+ } | null;
9
+ };
@@ -0,0 +1,26 @@
1
+ // The session binding every `peaks compact` subcommand resolves through, on its own so
2
+ // the five commands that read it share one fix point.
3
+ import { getSessionIdCanonical } from '../../services/session/session-manager.js';
4
+ /** The active session id, or the refusal envelope every caller prints the same way. */
5
+ export function resolveSessionId(projectRoot, explicit) {
6
+ if (explicit !== undefined && explicit.length > 0) {
7
+ return { sid: explicit, error: null };
8
+ }
9
+ // Statically-imported `getSessionIdCanonical` (see import block
10
+ // at the top of this file). It is the single source of truth for
11
+ // "what session is bound to this project"; we use it instead of
12
+ // re-implementing the resolution here to keep one fix point when
13
+ // the binding layout changes.
14
+ const sid = getSessionIdCanonical(projectRoot) ?? null;
15
+ if (sid === null) {
16
+ return {
17
+ sid: null,
18
+ error: {
19
+ code: 'NO_ACTIVE_SESSION',
20
+ message: 'No active session bound. Run `peaks workspace init --project <repo> --json` to bind one.',
21
+ nextActions: [`peaks workspace init --project ${projectRoot} --json`]
22
+ }
23
+ };
24
+ }
25
+ return { sid, error: null };
26
+ }
@@ -0,0 +1,60 @@
1
+ export declare const DEFAULT_DOCKER_IMAGE = "node:22-slim";
2
+ /**
3
+ * runtime adapter. The container CLI supports both docker and
4
+ * podman as the underlying runtime. The auto-detect order is:
5
+ * 1. `--runtime docker|podman` if explicit
6
+ * 2. docker (most common, ships with Docker Desktop on
7
+ * macOS/Windows, docker.io on Linux)
8
+ * 3. podman (RHEL/Fedora default, runs rootless by default,
9
+ * same CLI surface as docker)
10
+ * Each runtime has the same spawn/release shape; the
11
+ * difference is the binary name (`docker` vs `podman`). The
12
+ * `--cidfile` flag is supported by both.
13
+ */
14
+ export type ContainerRuntime = 'docker' | 'podman';
15
+ /** A runtime that answered `--version`, or the reason none did. */
16
+ export type ContainerRuntimeProbe = {
17
+ ok: true;
18
+ runtime: ContainerRuntime;
19
+ binary: string;
20
+ } | {
21
+ ok: false;
22
+ stderr: string;
23
+ hint: string;
24
+ };
25
+ export declare function detectContainerRuntime(explicit: ContainerRuntime | undefined): ContainerRuntimeProbe;
26
+ export type ContainerOptions = {
27
+ session?: string;
28
+ project?: string;
29
+ json?: boolean;
30
+ };
31
+ export type SpawnOptions = ContainerOptions & {
32
+ rid: string;
33
+ role: string;
34
+ purpose: string;
35
+ image?: string;
36
+ ttl?: string;
37
+ mount?: string;
38
+ /** Part 43: explicit runtime selector (docker | podman). */
39
+ runtime?: string;
40
+ };
41
+ export type ReleaseOptions = ContainerOptions & {
42
+ leaseId: string;
43
+ };
44
+ export declare function joinPathSession(projectRoot: string, sessionId: string): string;
45
+ /**
46
+ * Resolve the project root and session id every container verb works against.
47
+ * The sid falls back through `PEAKS_SESSION_ID` and the canonical binding
48
+ * before the `unknown-sid` sentinel.
49
+ */
50
+ export declare function resolveContainerTarget(options: ContainerOptions): {
51
+ projectRoot: string;
52
+ sessionId: string;
53
+ };
54
+ export declare function checkDockerAvailable(): {
55
+ ok: true;
56
+ version: string;
57
+ } | {
58
+ ok: false;
59
+ stderr: string;
60
+ };
@@ -0,0 +1,52 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { findProjectRoot } from '../../services/config/config-safety.js';
3
+ import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
4
+ export const DEFAULT_DOCKER_IMAGE = 'node:22-slim';
5
+ export function detectContainerRuntime(explicit) {
6
+ const tryOrder = explicit ? [explicit] : ['docker', 'podman'];
7
+ for (const r of tryOrder) {
8
+ try {
9
+ const version = execSync(`${r} --version`, {
10
+ stdio: ['ignore', 'pipe', 'pipe'],
11
+ encoding: 'utf8',
12
+ windowsHide: true
13
+ }).trim();
14
+ return { ok: true, runtime: r, binary: `${r} (${version.split('\n')[0] ?? ''})` };
15
+ }
16
+ catch {
17
+ /* try next */
18
+ }
19
+ }
20
+ return {
21
+ ok: false,
22
+ stderr: explicit
23
+ ? `explicit --runtime ${explicit} not on PATH`
24
+ : 'neither docker nor podman is on PATH',
25
+ hint: explicit
26
+ ? `Install ${explicit} or pass a different --runtime.`
27
+ : 'Install docker (Docker Desktop on macOS / Windows) or podman (RHEL / Fedora).'
28
+ };
29
+ }
30
+ export function joinPathSession(projectRoot, sessionId) {
31
+ return `${projectRoot.replace(/[\\/]+$/, '')}/.peaks/_runtime/${sessionId}`;
32
+ }
33
+ /**
34
+ * Resolve the project root and session id every container verb works against.
35
+ * The sid falls back through `PEAKS_SESSION_ID` and the canonical binding
36
+ * before the `unknown-sid` sentinel.
37
+ */
38
+ export function resolveContainerTarget(options) {
39
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
40
+ const sessionId = options.session ??
41
+ process.env.PEAKS_SESSION_ID ??
42
+ getCurrentSessionId(projectRoot) ??
43
+ 'unknown-sid';
44
+ return { projectRoot, sessionId };
45
+ }
46
+ export function checkDockerAvailable() {
47
+ // Part 43: superseded by detectContainerRuntime above; this
48
+ // function is preserved for callers that imported it. The
49
+ // container-commands.ts action handlers all use
50
+ // detectContainerRuntime directly.
51
+ return { ok: false, stderr: 'deprecated — use detectContainerRuntime' };
52
+ }
@@ -23,5 +23,5 @@
23
23
  * follow-up rid.
24
24
  */
25
25
  import type { Command } from 'commander';
26
- import { type ProgramIO } from '../cli-helpers.js';
26
+ import type { ProgramIO } from '../cli-helpers.js';
27
27
  export declare function registerContainerCommand(program: Command, io: ProgramIO): void;
@@ -22,224 +22,12 @@
22
22
  * allowing docker-related tool calls. The gate bridge is a
23
23
  * follow-up rid.
24
24
  */
25
- import { execSync } from 'node:child_process';
26
- import { existsSync, readFileSync } from 'node:fs';
27
- import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
28
- import { addJsonOption, printResult } from '../cli-helpers.js';
29
- import { findProjectRoot } from '../../services/config/config-safety.js';
30
- import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
31
- import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
32
- import { normalizePath } from '../../shared/path-utils.js';
33
- import { containerLeaseFilePath, deserializeContainerLease, finalizeContainerLease, generateContainerLeaseId, markContainerReleased, ttlForContainerRole } from '../../services/container/container-lease.js';
34
- const DEFAULT_DOCKER_IMAGE = 'node:22-slim';
35
- function detectContainerRuntime(explicit) {
36
- const tryOrder = explicit ? [explicit] : ['docker', 'podman'];
37
- for (const r of tryOrder) {
38
- try {
39
- const version = execSync(`${r} --version`, {
40
- stdio: ['ignore', 'pipe', 'pipe'],
41
- encoding: 'utf8',
42
- windowsHide: true
43
- }).trim();
44
- return { ok: true, runtime: r, binary: `${r} (${version.split('\n')[0] ?? ''})` };
45
- }
46
- catch {
47
- /* try next */
48
- }
49
- }
50
- return {
51
- ok: false,
52
- stderr: explicit
53
- ? `explicit --runtime ${explicit} not on PATH`
54
- : 'neither docker nor podman is on PATH',
55
- hint: explicit
56
- ? `Install ${explicit} or pass a different --runtime.`
57
- : 'Install docker (Docker Desktop on macOS / Windows) or podman (RHEL / Fedora).'
58
- };
59
- }
60
- function joinPathSession(projectRoot, sessionId) {
61
- return `${projectRoot.replace(/[\\/]+$/, '')}/.peaks/_runtime/${sessionId}`;
62
- }
63
- function checkDockerAvailable() {
64
- // Part 43: superseded by detectContainerRuntime above; this
65
- // function is preserved for callers that imported it. The
66
- // container-commands.ts action handlers all use
67
- // detectContainerRuntime directly.
68
- return { ok: false, stderr: 'deprecated — use detectContainerRuntime' };
69
- }
25
+ import { registerContainerReleaseCommand } from './container-release-command.js';
26
+ import { registerContainerSpawnCommand } from './container-spawn-command.js';
70
27
  export function registerContainerCommand(program, io) {
71
28
  const cmd = program
72
29
  .command('container')
73
30
  .description('L4 container isolation: spawn/release container leases (Part 12; pairs with --isolation container on dispatch).');
74
- addJsonOption(cmd
75
- .command('spawn')
76
- .description('Spawn a container via `docker run` and write a container lease. ' +
77
- 'The lease is the source of truth for the L4 PreToolUse gate (Part 12 follow-up). ' +
78
- 'Default TTL is role-aware (rd=30m / qa=15m / ui=1h); pass --ttl <ms> to override. ' +
79
- 'Default image is `node:22-slim`; pass --image <name> to override.')
80
- .requiredOption('--rid <rid>', 'peaks request id the lease is associated with')
81
- .requiredOption('--role <role>', 'sub-agent role (rd | qa | ui | sc | prd | general-purpose)')
82
- .requiredOption('--purpose <text>', 'why this container was spawned (audit log)')
83
- .option('--image <name>', `container image (default ${DEFAULT_DOCKER_IMAGE})`)
84
- .option('--ttl <ms>', 'time-to-live in ms (default role-aware; override with positive number)')
85
- .option('--mount <path>', 'host path to mount as the container working dir (default: <projectRoot>)')
86
- .option('--session <sid>', 'override session id')
87
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
88
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
89
- const sessionId = options.session ??
90
- process.env.PEAKS_SESSION_ID ??
91
- getCurrentSessionId(projectRoot) ??
92
- 'unknown-sid';
93
- try {
94
- const explicitRuntime = (() => {
95
- if (options.runtime === 'docker')
96
- return 'docker';
97
- if (options.runtime === 'podman')
98
- return 'podman';
99
- return undefined;
100
- })();
101
- const runtime = detectContainerRuntime(explicitRuntime);
102
- if (!runtime.ok) {
103
- printResult(io, fail('container.spawn', 'CONTAINER_RUNTIME_UNAVAILABLE', `${runtime.stderr}: ${runtime.hint}`, { rid: options.rid, role: options.role, sessionId }, [
104
- 'Install docker (Docker Desktop on macOS / Windows) or podman (RHEL / Fedora).',
105
- 'On Windows, ensure WSL2 backend is enabled and the daemon is running.',
106
- 'Pass --runtime docker|podman to force a specific runtime.'
107
- ]), options.json);
108
- process.exitCode = 1;
109
- return;
110
- }
111
- const leaseId = generateContainerLeaseId();
112
- const now = Date.now();
113
- const ttlMs = options.ttl === undefined
114
- ? ttlForContainerRole(options.role)
115
- : Number.parseInt(options.ttl, 10);
116
- if (!Number.isInteger(ttlMs) || ttlMs <= 0) {
117
- printResult(io, fail('container.spawn', '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);
118
- process.exitCode = 1;
119
- return;
120
- }
121
- const image = options.image ?? DEFAULT_DOCKER_IMAGE;
122
- const mount = options.mount ?? projectRoot;
123
- // `docker run --rm -d` so the container is detached and
124
- // auto-removed when stopped; --cidfile writes the
125
- // container id to a file we can read back. The
126
- // `--label peaks.leaseId=<id>` lets `peaks container
127
- // list` / `peaks container gc` find orphans by label
128
- // when the lease file is missing.
129
- const cidFile = `${normalizePath(joinPathSession(projectRoot, sessionId))}/.${runtime.runtime}-cid-${leaseId}`;
130
- try {
131
- execSync(`${runtime.runtime} run --rm -d --cidfile "${cidFile}" --label "peaks.leaseId=${leaseId}" --label "peaks.rid=${options.rid}" -v "${mount}:/work" -w /work ${image} sleep infinity`, { cwd: projectRoot, stdio: 'pipe', encoding: 'utf8', windowsHide: true });
132
- }
133
- catch (err) {
134
- printResult(io, fail('container.spawn', 'DOCKER_RUN_FAILED', getErrorMessage(err), { rid: options.rid, image, runtime: runtime.runtime, sessionId }, [
135
- 'Verify the image name is reachable on the configured registry.',
136
- 'Verify the host path is mounted correctly (Windows: the path must be visible to WSL2).',
137
- `Run \`${runtime.runtime} ps -a\` to inspect any leftover containers with the peaks.leaseId label.`
138
- ]), options.json);
139
- process.exitCode = 1;
140
- return;
141
- }
142
- const containerId = readFileSync(cidFile, 'utf8').trim();
143
- const lease = finalizeContainerLease({
144
- leaseId,
145
- rid: options.rid,
146
- role: options.role,
147
- path: mount,
148
- image,
149
- containerId,
150
- createdAt: now,
151
- expiresAt: now + ttlMs,
152
- purpose: options.purpose
153
- });
154
- atomicWriteJson(containerLeaseFilePath(joinPathSession(projectRoot, sessionId), leaseId), lease);
155
- printResult(io, ok('container.spawn', {
156
- lease,
157
- sessionId,
158
- projectRoot,
159
- runtime: runtime.runtime,
160
- runtimeVersion: runtime.binary,
161
- nextActions: [
162
- `Container id: ${containerId}`,
163
- `Image: ${image}`,
164
- `Lease expires at: ${new Date(lease.expiresAt).toISOString()}`,
165
- 'Run `peaks container release --lease-id <id>` when done'
166
- ]
167
- }, [], []), options.json);
168
- }
169
- catch (err) {
170
- printResult(io, fail('container.spawn', 'SPAWN_FAILED', getErrorMessage(err), { rid: options.rid, sessionId }, [
171
- 'See error message; if the lease was not written, retry after fixing the underlying issue.'
172
- ]), options.json);
173
- process.exitCode = 1;
174
- }
175
- });
176
- addJsonOption(cmd
177
- .command('release')
178
- .description('Transition a container lease to released and run `docker rm --force`. Idempotent on already-released leases.')
179
- .requiredOption('--lease-id <id>', 'lease id returned by `peaks container spawn`')
180
- .option('--session <sid>', 'override session id')
181
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
182
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
183
- const sessionId = options.session ??
184
- process.env.PEAKS_SESSION_ID ??
185
- getCurrentSessionId(projectRoot) ??
186
- 'unknown-sid';
187
- try {
188
- const file = containerLeaseFilePath(joinPathSession(projectRoot, sessionId), options.leaseId);
189
- if (!existsSync(file)) {
190
- printResult(io, fail('container.release', 'LEASE_NOT_FOUND', `no lease on disk at ${file}`, { leaseId: options.leaseId, file }, [
191
- 'Run `peaks container list` to inspect active leases.',
192
- 'For a never-spawned lease, this is a no-op — no further action needed.'
193
- ]), options.json);
194
- process.exitCode = 1;
195
- return;
196
- }
197
- let lease;
198
- try {
199
- lease = deserializeContainerLease(readFileSync(file, 'utf8'));
200
- }
201
- catch (err) {
202
- printResult(io, fail('container.release', 'LEASE_FILE_INVALID', getErrorMessage(err), { leaseId: options.leaseId, file }, [
203
- 'Delete the malformed lease file manually and re-issue spawn.',
204
- 'For security, release never fails open on a malformed lease.'
205
- ]), options.json);
206
- process.exitCode = 1;
207
- return;
208
- }
209
- if (lease.status === 'released') {
210
- printResult(io, ok('container.release', { lease, sessionId, projectRoot, alreadyReleased: true }, [], [`Lease ${lease.leaseId} already released; nothing to do.`]), options.json);
211
- return;
212
- }
213
- let dockerRmFailed = false;
214
- try {
215
- const releaseRuntime = detectContainerRuntime(undefined);
216
- const runtimeCmd = releaseRuntime.ok ? releaseRuntime.runtime : 'docker';
217
- execSync(`${runtimeCmd} rm --force "${lease.containerId}"`, {
218
- cwd: projectRoot,
219
- stdio: 'pipe',
220
- encoding: 'utf8',
221
- windowsHide: true
222
- });
223
- }
224
- catch {
225
- dockerRmFailed = true;
226
- }
227
- const released = markContainerReleased(lease);
228
- atomicWriteJson(file, released);
229
- printResult(io, ok('container.release', { lease: released, sessionId, projectRoot, dockerRmFailed }, dockerRmFailed
230
- ? [
231
- 'docker rm failed (likely the container was already removed); lease marked released.'
232
- ]
233
- : [], [
234
- `Lease ${lease.leaseId} marked released.`,
235
- dockerRmFailed
236
- ? 'Manual `docker ps -a` + `docker rm` may be needed.'
237
- : `Container ${lease.containerId} removed.`
238
- ]), options.json);
239
- }
240
- catch (err) {
241
- printResult(io, fail('container.release', 'RELEASE_FAILED', getErrorMessage(err), { leaseId: options.leaseId, sessionId }, ['Verify the lease id and re-run.', 'If the lease was never spawned, no-op.']), options.json);
242
- process.exitCode = 1;
243
- }
244
- });
31
+ registerContainerSpawnCommand(cmd, io);
32
+ registerContainerReleaseCommand(cmd, io);
245
33
  }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerContainerReleaseCommand(cmd: Command, io: ProgramIO): void;
@@ -0,0 +1,105 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
4
+ import { addJsonOption, printResult } from '../cli-helpers.js';
5
+ import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
6
+ import { containerLeaseFilePath, deserializeContainerLease, markContainerReleased } from '../../services/container/container-lease.js';
7
+ import { detectContainerRuntime, joinPathSession, resolveContainerTarget } from './container-command-shared.js';
8
+ export function registerContainerReleaseCommand(cmd, io) {
9
+ addJsonOption(cmd
10
+ .command('release')
11
+ .description('Transition a container lease to released and run `docker rm --force`. Idempotent on already-released leases.')
12
+ .requiredOption('--lease-id <id>', 'lease id returned by `peaks container spawn`')
13
+ .option('--session <sid>', 'override session id')
14
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runContainerRelease(io, options));
15
+ }
16
+ /** Read + parse the lease file; `null` once the refusal is emitted. */
17
+ function readLease(io, options, file) {
18
+ if (!existsSync(file)) {
19
+ printResult(io, fail('container.release', 'LEASE_NOT_FOUND', `no lease on disk at ${file}`, {
20
+ leaseId: options.leaseId,
21
+ file
22
+ }, [
23
+ 'Run `peaks container list` to inspect active leases.',
24
+ 'For a never-spawned lease, this is a no-op — no further action needed.'
25
+ ]), options.json);
26
+ process.exitCode = 1;
27
+ return null;
28
+ }
29
+ try {
30
+ return deserializeContainerLease(readFileSync(file, 'utf8'));
31
+ }
32
+ catch (err) {
33
+ printResult(io, fail('container.release', 'LEASE_FILE_INVALID', getErrorMessage(err), {
34
+ leaseId: options.leaseId,
35
+ file
36
+ }, [
37
+ 'Delete the malformed lease file manually and re-issue spawn.',
38
+ 'For security, release never fails open on a malformed lease.'
39
+ ]), options.json);
40
+ process.exitCode = 1;
41
+ return null;
42
+ }
43
+ }
44
+ /** `docker rm --force`, tolerating a container that is already gone. */
45
+ function removeContainer(lease, projectRoot) {
46
+ try {
47
+ const detected = detectContainerRuntime(undefined);
48
+ const runtimeCmd = detected.ok ? detected.runtime : 'docker';
49
+ execSync(`${runtimeCmd} rm --force "${lease.containerId}"`, {
50
+ cwd: projectRoot,
51
+ stdio: 'pipe',
52
+ encoding: 'utf8',
53
+ windowsHide: true
54
+ });
55
+ return false;
56
+ }
57
+ catch {
58
+ return true;
59
+ }
60
+ }
61
+ function runContainerRelease(io, options) {
62
+ const { projectRoot, sessionId } = resolveContainerTarget(options);
63
+ try {
64
+ const file = containerLeaseFilePath(joinPathSession(projectRoot, sessionId), options.leaseId);
65
+ const lease = readLease(io, options, file);
66
+ if (lease === null)
67
+ return;
68
+ if (lease.status === 'released') {
69
+ printResult(io, ok('container.release', { lease, sessionId, projectRoot, alreadyReleased: true }, [], [`Lease ${lease.leaseId} already released; nothing to do.`]), options.json);
70
+ return;
71
+ }
72
+ const outcome = releaseLease({ options, io, projectRoot, sessionId, file, lease });
73
+ printResult(io, ok('container.release', outcome.data, outcome.warnings, outcome.nextActions), options.json);
74
+ }
75
+ catch (err) {
76
+ printResult(io, fail('container.release', 'RELEASE_FAILED', getErrorMessage(err), {
77
+ leaseId: options.leaseId,
78
+ sessionId
79
+ }, ['Verify the lease id and re-run.', 'If the lease was never spawned, no-op.']), options.json);
80
+ process.exitCode = 1;
81
+ }
82
+ }
83
+ /**
84
+ * `docker rm --force` the container, flip the lease to released and write it
85
+ * back. A failed `docker rm` is reported, not fatal: the lease is the source
86
+ * of truth and it is still marked released.
87
+ */
88
+ function releaseLease(plan) {
89
+ const { projectRoot, sessionId, file, lease } = plan;
90
+ const dockerRmFailed = removeContainer(lease, projectRoot);
91
+ const released = markContainerReleased(lease);
92
+ atomicWriteJson(file, released);
93
+ return {
94
+ data: { lease: released, sessionId, projectRoot, dockerRmFailed },
95
+ warnings: dockerRmFailed
96
+ ? ['docker rm failed (likely the container was already removed); lease marked released.']
97
+ : [],
98
+ nextActions: [
99
+ `Lease ${lease.leaseId} marked released.`,
100
+ dockerRmFailed
101
+ ? 'Manual `docker ps -a` + `docker rm` may be needed.'
102
+ : `Container ${lease.containerId} removed.`
103
+ ]
104
+ };
105
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerContainerSpawnCommand(cmd: Command, io: ProgramIO): void;