peaks-loop 4.1.3 → 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 (402) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +56 -0
  3. package/README-en.md +1 -1
  4. package/README.md +1 -1
  5. package/dist/cli/commands/asset-command-shared.d.ts +12 -0
  6. package/dist/cli/commands/asset-command-shared.js +45 -0
  7. package/dist/cli/commands/asset-commands.d.ts +6 -1
  8. package/dist/cli/commands/asset-commands.js +11 -372
  9. package/dist/cli/commands/asset-crystallize-command.d.ts +3 -0
  10. package/dist/cli/commands/asset-crystallize-command.js +60 -0
  11. package/dist/cli/commands/asset-crystallize-payload.d.ts +47 -0
  12. package/dist/cli/commands/asset-crystallize-payload.js +85 -0
  13. package/dist/cli/commands/asset-crystallize-runner.d.ts +3 -0
  14. package/dist/cli/commands/asset-crystallize-runner.js +133 -0
  15. package/dist/cli/commands/asset-dispose-command.d.ts +3 -0
  16. package/dist/cli/commands/asset-dispose-command.js +99 -0
  17. package/dist/cli/commands/asset-status-command.d.ts +3 -0
  18. package/dist/cli/commands/asset-status-command.js +100 -0
  19. package/dist/cli/commands/baseline-audit-command.d.ts +3 -0
  20. package/dist/cli/commands/baseline-audit-command.js +64 -0
  21. package/dist/cli/commands/baseline-command-shared.d.ts +23 -0
  22. package/dist/cli/commands/baseline-command-shared.js +39 -0
  23. package/dist/cli/commands/baseline-commands.js +33 -313
  24. package/dist/cli/commands/baseline-freeze-commands.d.ts +4 -0
  25. package/dist/cli/commands/baseline-freeze-commands.js +81 -0
  26. package/dist/cli/commands/baseline-guard-command.d.ts +3 -0
  27. package/dist/cli/commands/baseline-guard-command.js +52 -0
  28. package/dist/cli/commands/baseline-read-commands.d.ts +5 -0
  29. package/dist/cli/commands/baseline-read-commands.js +72 -0
  30. package/dist/cli/commands/baseline-rollback-commands.d.ts +4 -0
  31. package/dist/cli/commands/baseline-rollback-commands.js +88 -0
  32. package/dist/cli/commands/classify-downgrade-command.d.ts +9 -0
  33. package/dist/cli/commands/classify-downgrade-command.js +21 -0
  34. package/dist/cli/commands/classify-run-command.d.ts +9 -0
  35. package/dist/cli/commands/classify-run-command.js +73 -0
  36. package/dist/cli/commands/classify-signals.d.ts +5 -0
  37. package/dist/cli/commands/classify-signals.js +104 -0
  38. package/dist/cli/commands/code-emit-handoff-command.js +40 -3
  39. package/dist/cli/commands/code-gate-step-08-command.js +25 -9
  40. package/dist/cli/commands/codegraph-command-options.d.ts +22 -0
  41. package/dist/cli/commands/codegraph-command-options.js +22 -0
  42. package/dist/cli/commands/codegraph-commands.d.ts +2 -2
  43. package/dist/cli/commands/codegraph-commands.js +14 -397
  44. package/dist/cli/commands/codegraph-config-restore-command.d.ts +3 -0
  45. package/dist/cli/commands/codegraph-config-restore-command.js +200 -0
  46. package/dist/cli/commands/codegraph-proxy-commands.d.ts +10 -0
  47. package/dist/cli/commands/codegraph-proxy-commands.js +159 -0
  48. package/dist/cli/commands/codegraph-repair-commands.d.ts +3 -0
  49. package/dist/cli/commands/codegraph-repair-commands.js +94 -0
  50. package/dist/cli/commands/codegraph-status-command.d.ts +1 -1
  51. package/dist/cli/commands/codegraph-status-command.js +27 -214
  52. package/dist/cli/commands/codegraph-status-integrity.d.ts +44 -0
  53. package/dist/cli/commands/codegraph-status-integrity.js +121 -0
  54. package/dist/cli/commands/codegraph-status-json.d.ts +5 -0
  55. package/dist/cli/commands/codegraph-status-json.js +127 -0
  56. package/dist/cli/commands/container-command-shared.d.ts +60 -0
  57. package/dist/cli/commands/container-command-shared.js +52 -0
  58. package/dist/cli/commands/container-commands.d.ts +1 -1
  59. package/dist/cli/commands/container-commands.js +4 -216
  60. package/dist/cli/commands/container-release-command.d.ts +3 -0
  61. package/dist/cli/commands/container-release-command.js +105 -0
  62. package/dist/cli/commands/container-spawn-command.d.ts +3 -0
  63. package/dist/cli/commands/container-spawn-command.js +148 -0
  64. package/dist/cli/commands/context-check-command.d.ts +3 -0
  65. package/dist/cli/commands/context-check-command.js +81 -0
  66. package/dist/cli/commands/context-commands.d.ts +2 -7
  67. package/dist/cli/commands/context-commands.js +6 -276
  68. package/dist/cli/commands/context-layer-command.d.ts +3 -0
  69. package/dist/cli/commands/context-layer-command.js +34 -0
  70. package/dist/cli/commands/context-layer-fetchers.d.ts +15 -0
  71. package/dist/cli/commands/context-layer-fetchers.js +162 -0
  72. package/dist/cli/commands/context-status-command.d.ts +17 -0
  73. package/dist/cli/commands/context-status-command.js +41 -0
  74. package/dist/cli/commands/contract-write-command.d.ts +3 -0
  75. package/dist/cli/commands/contract-write-command.js +144 -0
  76. package/dist/cli/commands/core/doctor-bindings.d.ts +17 -0
  77. package/dist/cli/commands/core/doctor-bindings.js +30 -0
  78. package/dist/cli/commands/core/doctor-command.d.ts +4 -18
  79. package/dist/cli/commands/core/doctor-command.js +2 -323
  80. package/dist/cli/commands/core/doctor-logs.d.ts +8 -0
  81. package/dist/cli/commands/core/doctor-logs.js +32 -0
  82. package/dist/cli/commands/core/doctor-probes.d.ts +3 -0
  83. package/dist/cli/commands/core/doctor-probes.js +55 -0
  84. package/dist/cli/commands/core/doctor-run-command.d.ts +12 -0
  85. package/dist/cli/commands/core/doctor-run-command.js +172 -0
  86. package/dist/cli/commands/core/doctor-summary.d.ts +7 -0
  87. package/dist/cli/commands/core/doctor-summary.js +39 -0
  88. package/dist/cli/commands/core/memory-command-shared.d.ts +25 -0
  89. package/dist/cli/commands/core/memory-command-shared.js +20 -0
  90. package/dist/cli/commands/core/memory-command.d.ts +1 -1
  91. package/dist/cli/commands/core/memory-command.js +6 -227
  92. package/dist/cli/commands/core/memory-delegated-verbs.d.ts +4 -0
  93. package/dist/cli/commands/core/memory-delegated-verbs.js +178 -0
  94. package/dist/cli/commands/core/memory-extract-command.d.ts +3 -0
  95. package/dist/cli/commands/core/memory-extract-command.js +90 -0
  96. package/dist/cli/commands/core/memory-sync-command.d.ts +3 -0
  97. package/dist/cli/commands/core/memory-sync-command.js +38 -0
  98. package/dist/cli/commands/core/session-command.d.ts +1 -1
  99. package/dist/cli/commands/core/session-command.js +12 -206
  100. package/dist/cli/commands/core/session-info-command.d.ts +3 -0
  101. package/dist/cli/commands/core/session-info-command.js +142 -0
  102. package/dist/cli/commands/core/session-verb-commands.d.ts +5 -0
  103. package/dist/cli/commands/core/session-verb-commands.js +58 -0
  104. package/dist/cli/commands/core/standards-command.d.ts +1 -24
  105. package/dist/cli/commands/core/standards-command.js +33 -201
  106. package/dist/cli/commands/core/standards-init-command.d.ts +3 -0
  107. package/dist/cli/commands/core/standards-init-command.js +87 -0
  108. package/dist/cli/commands/core/standards-lint.d.ts +24 -0
  109. package/dist/cli/commands/core/standards-lint.js +57 -0
  110. package/dist/cli/commands/core/standards-migrate-command.d.ts +3 -0
  111. package/dist/cli/commands/core/standards-migrate-command.js +57 -0
  112. package/dist/cli/commands/cron-scheduler-commands.d.ts +5 -1
  113. package/dist/cli/commands/cron-scheduler-commands.js +36 -206
  114. package/dist/cli/commands/cron-scheduler-run-once-command.d.ts +7 -0
  115. package/dist/cli/commands/cron-scheduler-run-once-command.js +35 -0
  116. package/dist/cli/commands/cron-scheduler-shared.d.ts +6 -0
  117. package/dist/cli/commands/cron-scheduler-shared.js +48 -0
  118. package/dist/cli/commands/cron-scheduler-start-command.d.ts +7 -0
  119. package/dist/cli/commands/cron-scheduler-start-command.js +65 -0
  120. package/dist/cli/commands/cron-scheduler-status-command.d.ts +7 -0
  121. package/dist/cli/commands/cron-scheduler-status-command.js +46 -0
  122. package/dist/cli/commands/cron-scheduler-stop-command.d.ts +7 -0
  123. package/dist/cli/commands/cron-scheduler-stop-command.js +61 -0
  124. package/dist/cli/commands/dispatch-dag-envelope.d.ts +41 -0
  125. package/dist/cli/commands/dispatch-dag-envelope.js +49 -0
  126. package/dist/cli/commands/dispatch-dag-failure.d.ts +18 -0
  127. package/dist/cli/commands/dispatch-dag-failure.js +16 -0
  128. package/dist/cli/commands/dispatch-dag-preflight.d.ts +51 -0
  129. package/dist/cli/commands/dispatch-dag-preflight.js +105 -0
  130. package/dist/cli/commands/dispatch-dag-runners.d.ts +48 -0
  131. package/dist/cli/commands/dispatch-dag-runners.js +73 -0
  132. package/dist/cli/commands/dispatch-from-dag.d.ts +27 -0
  133. package/dist/cli/commands/dispatch-from-dag.js +87 -257
  134. package/dist/cli/commands/final-review-command-envelopes.d.ts +44 -0
  135. package/dist/cli/commands/final-review-command-envelopes.js +100 -0
  136. package/dist/cli/commands/final-review-command-shared.d.ts +52 -0
  137. package/dist/cli/commands/final-review-command-shared.js +35 -0
  138. package/dist/cli/commands/final-review-commands.d.ts +7 -27
  139. package/dist/cli/commands/final-review-commands.js +13 -240
  140. package/dist/cli/commands/final-review-prepare-command.d.ts +3 -0
  141. package/dist/cli/commands/final-review-prepare-command.js +200 -0
  142. package/dist/cli/commands/governance-classify-contract-commands.d.ts +23 -9
  143. package/dist/cli/commands/governance-classify-contract-commands.js +26 -269
  144. package/dist/cli/commands/hooks-command-shared.d.ts +42 -0
  145. package/dist/cli/commands/hooks-command-shared.js +32 -0
  146. package/dist/cli/commands/hooks-commands.d.ts +20 -0
  147. package/dist/cli/commands/hooks-commands.js +75 -309
  148. package/dist/cli/commands/hooks-install-envelopes.d.ts +6 -0
  149. package/dist/cli/commands/hooks-install-envelopes.js +144 -0
  150. package/dist/cli/commands/hooks-status-command.d.ts +3 -0
  151. package/dist/cli/commands/hooks-status-command.js +93 -0
  152. package/dist/cli/commands/hooks-uninstall-command.d.ts +3 -0
  153. package/dist/cli/commands/hooks-uninstall-command.js +43 -0
  154. package/dist/cli/commands/loop-command-shared.d.ts +31 -0
  155. package/dist/cli/commands/loop-command-shared.js +15 -0
  156. package/dist/cli/commands/loop-commands.d.ts +12 -17
  157. package/dist/cli/commands/loop-commands.js +56 -238
  158. package/dist/cli/commands/loop-export-command.d.ts +3 -0
  159. package/dist/cli/commands/loop-export-command.js +73 -0
  160. package/dist/cli/commands/loop-goal-compose-command.d.ts +3 -0
  161. package/dist/cli/commands/loop-goal-compose-command.js +36 -0
  162. package/dist/cli/commands/loop-import-command.d.ts +3 -0
  163. package/dist/cli/commands/loop-import-command.js +86 -0
  164. package/dist/cli/commands/loop-placeholder-commands.d.ts +3 -0
  165. package/dist/cli/commands/loop-placeholder-commands.js +52 -0
  166. package/dist/cli/commands/memory-command-shared.d.ts +59 -0
  167. package/dist/cli/commands/memory-command-shared.js +39 -0
  168. package/dist/cli/commands/memory-commands.d.ts +6 -79
  169. package/dist/cli/commands/memory-commands.js +19 -309
  170. package/dist/cli/commands/memory-ingest-command.d.ts +3 -0
  171. package/dist/cli/commands/memory-ingest-command.js +50 -0
  172. package/dist/cli/commands/memory-list-command.d.ts +16 -0
  173. package/dist/cli/commands/memory-list-command.js +129 -0
  174. package/dist/cli/commands/memory-reindex-command.d.ts +9 -0
  175. package/dist/cli/commands/memory-reindex-command.js +78 -0
  176. package/dist/cli/commands/memory-rotate-command.d.ts +3 -0
  177. package/dist/cli/commands/memory-rotate-command.js +55 -0
  178. package/dist/cli/commands/memory-search-command.d.ts +7 -0
  179. package/dist/cli/commands/memory-search-command.js +46 -0
  180. package/dist/cli/commands/openspec-archive-command.d.ts +3 -0
  181. package/dist/cli/commands/openspec-archive-command.js +55 -0
  182. package/dist/cli/commands/openspec-command-shared.d.ts +62 -0
  183. package/dist/cli/commands/openspec-command-shared.js +135 -0
  184. package/dist/cli/commands/openspec-commands.d.ts +1 -1
  185. package/dist/cli/commands/openspec-commands.js +33 -306
  186. package/dist/cli/commands/openspec-from-doctor-command.d.ts +3 -0
  187. package/dist/cli/commands/openspec-from-doctor-command.js +66 -0
  188. package/dist/cli/commands/openspec-init-command.d.ts +3 -0
  189. package/dist/cli/commands/openspec-init-command.js +49 -0
  190. package/dist/cli/commands/openspec-list-command.d.ts +3 -0
  191. package/dist/cli/commands/openspec-list-command.js +27 -0
  192. package/dist/cli/commands/openspec-render-command.d.ts +3 -0
  193. package/dist/cli/commands/openspec-render-command.js +33 -0
  194. package/dist/cli/commands/openspec-show-command.d.ts +3 -0
  195. package/dist/cli/commands/openspec-show-command.js +33 -0
  196. package/dist/cli/commands/openspec-to-rd-command.d.ts +3 -0
  197. package/dist/cli/commands/openspec-to-rd-command.js +33 -0
  198. package/dist/cli/commands/openspec-validate-command.d.ts +3 -0
  199. package/dist/cli/commands/openspec-validate-command.js +45 -0
  200. package/dist/cli/commands/playwright-browser-command.d.ts +8 -0
  201. package/dist/cli/commands/playwright-browser-command.js +61 -0
  202. package/dist/cli/commands/playwright-commands.d.ts +10 -62
  203. package/dist/cli/commands/playwright-commands.js +77 -400
  204. package/dist/cli/commands/playwright-envelope.d.ts +8 -0
  205. package/dist/cli/commands/playwright-envelope.js +29 -0
  206. package/dist/cli/commands/playwright-ls-stop-commands.d.ts +4 -0
  207. package/dist/cli/commands/playwright-ls-stop-commands.js +74 -0
  208. package/dist/cli/commands/playwright-session-store.d.ts +65 -0
  209. package/dist/cli/commands/playwright-session-store.js +189 -0
  210. package/dist/cli/commands/project-commands.d.ts +19 -0
  211. package/dist/cli/commands/project-commands.js +98 -259
  212. package/dist/cli/commands/project-context-command.d.ts +3 -0
  213. package/dist/cli/commands/project-context-command.js +44 -0
  214. package/dist/cli/commands/project-dashboard-command.d.ts +3 -0
  215. package/dist/cli/commands/project-dashboard-command.js +74 -0
  216. package/dist/cli/commands/project-knowledge-command.d.ts +3 -0
  217. package/dist/cli/commands/project-knowledge-command.js +48 -0
  218. package/dist/cli/commands/project-memories-show-command.d.ts +3 -0
  219. package/dist/cli/commands/project-memories-show-command.js +87 -0
  220. package/dist/cli/commands/project-memory-index-command.d.ts +3 -0
  221. package/dist/cli/commands/project-memory-index-command.js +31 -0
  222. package/dist/cli/commands/qa-archive-screenshots-command.d.ts +3 -0
  223. package/dist/cli/commands/qa-archive-screenshots-command.js +53 -0
  224. package/dist/cli/commands/qa-commands.d.ts +14 -87
  225. package/dist/cli/commands/qa-commands.js +17 -315
  226. package/dist/cli/commands/qa-context-prestep.d.ts +1 -0
  227. package/dist/cli/commands/qa-context-prestep.js +34 -0
  228. package/dist/cli/commands/qa-run-command.d.ts +3 -0
  229. package/dist/cli/commands/qa-run-command.js +105 -0
  230. package/dist/cli/commands/qa-run-options.d.ts +23 -0
  231. package/dist/cli/commands/qa-run-options.js +31 -0
  232. package/dist/cli/commands/qa-run-slice.d.ts +41 -0
  233. package/dist/cli/commands/qa-run-slice.js +145 -0
  234. package/dist/cli/commands/release-canary-command.d.ts +28 -0
  235. package/dist/cli/commands/release-canary-command.js +129 -0
  236. package/dist/cli/commands/release-command-shared.d.ts +13 -0
  237. package/dist/cli/commands/release-command-shared.js +18 -0
  238. package/dist/cli/commands/release-commands.d.ts +10 -18
  239. package/dist/cli/commands/release-commands.js +25 -298
  240. package/dist/cli/commands/release-done-command.d.ts +3 -0
  241. package/dist/cli/commands/release-done-command.js +64 -0
  242. package/dist/cli/commands/release-hotfix-command.d.ts +3 -0
  243. package/dist/cli/commands/release-hotfix-command.js +50 -0
  244. package/dist/cli/commands/release-plan-command.d.ts +3 -0
  245. package/dist/cli/commands/release-plan-command.js +33 -0
  246. package/dist/cli/commands/release-precheck-command.d.ts +3 -0
  247. package/dist/cli/commands/release-precheck-command.js +28 -0
  248. package/dist/cli/commands/release-promote-command.d.ts +3 -0
  249. package/dist/cli/commands/release-promote-command.js +34 -0
  250. package/dist/cli/commands/release-rollback-command.d.ts +3 -0
  251. package/dist/cli/commands/release-rollback-command.js +33 -0
  252. package/dist/cli/commands/release-watch-command.d.ts +3 -0
  253. package/dist/cli/commands/release-watch-command.js +44 -0
  254. package/dist/cli/commands/sediment-argv-flags.d.ts +54 -0
  255. package/dist/cli/commands/sediment-argv-flags.js +116 -0
  256. package/dist/cli/commands/sediment-command-shared.d.ts +15 -0
  257. package/dist/cli/commands/sediment-command-shared.js +5 -0
  258. package/dist/cli/commands/sediment-commands.d.ts +35 -59
  259. package/dist/cli/commands/sediment-commands.js +36 -590
  260. package/dist/cli/commands/sediment-pool-commands.d.ts +9 -0
  261. package/dist/cli/commands/sediment-pool-commands.js +185 -0
  262. package/dist/cli/commands/sediment-query-commands.d.ts +4 -0
  263. package/dist/cli/commands/sediment-query-commands.js +94 -0
  264. package/dist/cli/commands/sediment-release-commands.d.ts +8 -0
  265. package/dist/cli/commands/sediment-release-commands.js +232 -0
  266. package/dist/cli/commands/sop-advance-command.d.ts +3 -0
  267. package/dist/cli/commands/sop-advance-command.js +160 -0
  268. package/dist/cli/commands/sop-check-command.d.ts +3 -0
  269. package/dist/cli/commands/sop-check-command.js +44 -0
  270. package/dist/cli/commands/sop-command-shared.d.ts +23 -0
  271. package/dist/cli/commands/sop-command-shared.js +18 -0
  272. package/dist/cli/commands/sop-commands.d.ts +15 -1
  273. package/dist/cli/commands/sop-commands.js +26 -240
  274. package/dist/cli/commands/sop-init-command.d.ts +3 -0
  275. package/dist/cli/commands/sop-init-command.js +51 -0
  276. package/dist/cli/commands/sop-lint-command.d.ts +3 -0
  277. package/dist/cli/commands/sop-lint-command.js +64 -0
  278. package/dist/cli/commands/sop-register-command.d.ts +3 -0
  279. package/dist/cli/commands/sop-register-command.js +48 -0
  280. package/dist/cli/commands/sop-registry-command.d.ts +3 -0
  281. package/dist/cli/commands/sop-registry-command.js +30 -0
  282. package/dist/cli/commands/statusline-command-shared.d.ts +73 -0
  283. package/dist/cli/commands/statusline-command-shared.js +90 -0
  284. package/dist/cli/commands/statusline-commands.d.ts +1 -19
  285. package/dist/cli/commands/statusline-commands.js +48 -287
  286. package/dist/cli/commands/statusline-compact-command.d.ts +4 -0
  287. package/dist/cli/commands/statusline-compact-command.js +54 -0
  288. package/dist/cli/commands/statusline-install-command.d.ts +3 -0
  289. package/dist/cli/commands/statusline-install-command.js +48 -0
  290. package/dist/cli/commands/statusline-render-command.d.ts +9 -0
  291. package/dist/cli/commands/statusline-render-command.js +55 -0
  292. package/dist/cli/commands/statusline-status-command.d.ts +3 -0
  293. package/dist/cli/commands/statusline-status-command.js +23 -0
  294. package/dist/cli/commands/statusline-uninstall-command.d.ts +3 -0
  295. package/dist/cli/commands/statusline-uninstall-command.js +23 -0
  296. package/dist/cli/commands/test-command-run-helpers.d.ts +27 -0
  297. package/dist/cli/commands/test-command-run-helpers.js +73 -0
  298. package/dist/cli/commands/test-command-runner-resolution.d.ts +57 -0
  299. package/dist/cli/commands/test-command-runner-resolution.js +183 -0
  300. package/dist/cli/commands/test-commands.d.ts +8 -56
  301. package/dist/cli/commands/test-commands.js +26 -249
  302. package/dist/cli/commands/vm-command-shared.d.ts +23 -0
  303. package/dist/cli/commands/vm-command-shared.js +23 -0
  304. package/dist/cli/commands/vm-commands.d.ts +1 -28
  305. package/dist/cli/commands/vm-commands.js +36 -270
  306. package/dist/cli/commands/vm-hypervisor-runtime.d.ts +15 -0
  307. package/dist/cli/commands/vm-hypervisor-runtime.js +64 -0
  308. package/dist/cli/commands/vm-release-command.d.ts +5 -0
  309. package/dist/cli/commands/vm-release-command.js +101 -0
  310. package/dist/cli/commands/vm-spawn-command.d.ts +5 -0
  311. package/dist/cli/commands/vm-spawn-command.js +177 -0
  312. package/dist/cli/commands/web-command-shared.d.ts +12 -0
  313. package/dist/cli/commands/web-command-shared.js +30 -0
  314. package/dist/cli/commands/web-commands.d.ts +7 -14
  315. package/dist/cli/commands/web-commands.js +6 -314
  316. package/dist/cli/commands/web-install-command.d.ts +10 -0
  317. package/dist/cli/commands/web-install-command.js +116 -0
  318. package/dist/cli/commands/web-lifecycle-commands.d.ts +9 -30
  319. package/dist/cli/commands/web-lifecycle-commands.js +14 -322
  320. package/dist/cli/commands/web-login-command.d.ts +14 -0
  321. package/dist/cli/commands/web-login-command.js +189 -0
  322. package/dist/cli/commands/web-op-payload.d.ts +22 -0
  323. package/dist/cli/commands/web-op-payload.js +89 -0
  324. package/dist/cli/commands/web-op-refusals.d.ts +37 -0
  325. package/dist/cli/commands/web-op-refusals.js +73 -0
  326. package/dist/cli/commands/web-op-runner.d.ts +14 -0
  327. package/dist/cli/commands/web-op-runner.js +166 -0
  328. package/dist/cli/commands/web-status-command.d.ts +4 -0
  329. package/dist/cli/commands/web-status-command.js +32 -0
  330. package/dist/cli/commands/web-stop-command.d.ts +10 -0
  331. package/dist/cli/commands/web-stop-command.js +59 -0
  332. package/dist/cli/commands/web-verb-specs.d.ts +18 -0
  333. package/dist/cli/commands/web-verb-specs.js +66 -0
  334. package/dist/cli/commands/workflow-command-shared.d.ts +102 -0
  335. package/dist/cli/commands/workflow-command-shared.js +74 -0
  336. package/dist/cli/commands/workflow-graph-commands.d.ts +3 -0
  337. package/dist/cli/commands/workflow-graph-commands.js +73 -0
  338. package/dist/cli/commands/workflow-init-command.d.ts +3 -0
  339. package/dist/cli/commands/workflow-init-command.js +68 -0
  340. package/dist/cli/commands/workflow-lifecycle-commands.d.ts +9 -59
  341. package/dist/cli/commands/workflow-lifecycle-commands.js +14 -348
  342. package/dist/cli/commands/workflow-node-commands.d.ts +3 -0
  343. package/dist/cli/commands/workflow-node-commands.js +154 -0
  344. package/dist/cli/commands/workflow-terminalize-command.d.ts +3 -0
  345. package/dist/cli/commands/workflow-terminalize-command.js +56 -0
  346. package/dist/services/code/auto-compact-artifacts.d.ts +54 -0
  347. package/dist/services/code/auto-compact-artifacts.js +135 -0
  348. package/dist/services/code/auto-compact-attempt.d.ts +46 -0
  349. package/dist/services/code/auto-compact-attempt.js +88 -0
  350. package/dist/services/code/auto-compact-decision.d.ts +74 -0
  351. package/dist/services/code/auto-compact-decision.js +149 -0
  352. package/dist/services/code/auto-compact-dispatch-gate.d.ts +36 -0
  353. package/dist/services/code/auto-compact-dispatch-gate.js +86 -0
  354. package/dist/services/code/auto-compact-envelopes.d.ts +33 -0
  355. package/dist/services/code/auto-compact-envelopes.js +134 -0
  356. package/dist/services/code/auto-compact-history.d.ts +46 -0
  357. package/dist/services/code/auto-compact-history.js +17 -0
  358. package/dist/services/code/auto-compact-orchestrator.d.ts +11 -240
  359. package/dist/services/code/auto-compact-orchestrator.js +165 -686
  360. package/dist/services/code/auto-compact-run-types.d.ts +123 -0
  361. package/dist/services/code/auto-compact-run-types.js +1 -0
  362. package/dist/services/code/emit-handoff.d.ts +35 -1
  363. package/dist/services/code/emit-handoff.js +128 -7
  364. package/dist/services/code/step-08-gate.d.ts +28 -19
  365. package/dist/services/code/step-08-gate.js +92 -35
  366. package/dist/services/config/config-coercion.d.ts +7 -0
  367. package/dist/services/config/config-coercion.js +156 -0
  368. package/dist/services/config/config-file-io.d.ts +11 -0
  369. package/dist/services/config/config-file-io.js +61 -0
  370. package/dist/services/config/config-get.d.ts +2 -0
  371. package/dist/services/config/config-get.js +36 -0
  372. package/dist/services/config/config-global-loader.d.ts +15 -0
  373. package/dist/services/config/config-global-loader.js +111 -0
  374. package/dist/services/config/config-nested-path.d.ts +3 -0
  375. package/dist/services/config/config-nested-path.js +53 -0
  376. package/dist/services/config/config-primitives.d.ts +16 -0
  377. package/dist/services/config/config-primitives.js +24 -0
  378. package/dist/services/config/config-service.d.ts +9 -33
  379. package/dist/services/config/config-service.js +16 -665
  380. package/dist/services/config/config-validation.d.ts +19 -0
  381. package/dist/services/config/config-validation.js +152 -0
  382. package/dist/services/config/config-workspace.d.ts +10 -0
  383. package/dist/services/config/config-workspace.js +158 -0
  384. package/dist/services/skills/hooks-settings-deny-list.d.ts +61 -0
  385. package/dist/services/skills/hooks-settings-deny-list.js +173 -0
  386. package/dist/services/skills/hooks-settings-envelopes.d.ts +20 -0
  387. package/dist/services/skills/hooks-settings-envelopes.js +79 -0
  388. package/dist/services/skills/hooks-settings-file-shape.d.ts +43 -0
  389. package/dist/services/skills/hooks-settings-file-shape.js +207 -0
  390. package/dist/services/skills/hooks-settings-paths.d.ts +34 -0
  391. package/dist/services/skills/hooks-settings-paths.js +75 -0
  392. package/dist/services/skills/hooks-settings-read-installed.d.ts +39 -0
  393. package/dist/services/skills/hooks-settings-read-installed.js +60 -0
  394. package/dist/services/skills/hooks-settings-service.d.ts +12 -212
  395. package/dist/services/skills/hooks-settings-service.js +71 -657
  396. package/dist/services/skills/hooks-settings-types.d.ts +139 -0
  397. package/dist/services/skills/hooks-settings-types.js +1 -0
  398. package/dist/services/workspace/claude-settings-template-merge.d.ts +89 -0
  399. package/dist/services/workspace/claude-settings-template-merge.js +243 -0
  400. package/dist/services/workspace/claude-settings-template.d.ts +29 -87
  401. package/dist/services/workspace/claude-settings-template.js +81 -236
  402. package/package.json +5 -5
@@ -0,0 +1,185 @@
1
+ // src/cli/commands/sediment-pool-commands.ts
2
+ //
3
+ // The `peaks skill sediment` verbs that read or write the bee pool itself:
4
+ // `add-segment`, `add-bee`, `list`, `rebuild-index`, `refine-bee`,
5
+ // `clone-bee`, `promote`, `retire`. Split out of `sediment-commands.ts`;
6
+ // every verb's args, envelope and error strings are unchanged.
7
+ import { writeFileSync, mkdirSync, readFileSync, existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { assertNotSystemPath, resolveSegmentsDir, resolveUserBeesDir } from '../../services/sediment/pool-paths.js';
10
+ import { writeBeeManifest } from '../../services/sediment/pool-write.js';
11
+ import { readPool } from '../../services/sediment/pool-read.js';
12
+ import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
13
+ import { evaluateGate } from '../../services/sediment/promotion-gate.js';
14
+ /** Longest `description` the pool will store; a patch appends under this cap. */
15
+ const DESCRIPTION_MAX_CHARS = 1000;
16
+ export function addSegment(ctx) {
17
+ const { home, positional, flags } = ctx;
18
+ const name = positional[1];
19
+ if (!name)
20
+ return { ok: false, error: 'MISSING_ARG: name' };
21
+ const description = flags.maybeString('describe') ?? '';
22
+ const segDir = join(resolveSegmentsDir({ home }), name);
23
+ // Soft-protection guard: refuse to write under any `.system` path
24
+ // segment. Mirrors the same guard in writeBeeManifest.
25
+ assertNotSystemPath(segDir);
26
+ mkdirSync(segDir, { recursive: true });
27
+ writeFileSync(join(segDir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\n`);
28
+ rebuildIndexFromFs({ home });
29
+ return { ok: true };
30
+ }
31
+ export function addBee(ctx) {
32
+ const { home, positional, flags } = ctx;
33
+ const name = positional[1];
34
+ if (!name)
35
+ return { ok: false, error: 'MISSING_ARG: name' };
36
+ // Collect --segment values; the brief uses repeatable --segment
37
+ // flags (one token per segment). parseFlags now returns a
38
+ // 1-element array for a single occurrence and a longer array
39
+ // for repeated keys, so .list() returns a uniform string[].
40
+ const segList = flags.list('segment');
41
+ const description = flags.maybeString('description') ?? '';
42
+ const m = {
43
+ schemaVersion: 'peaks.bee/1',
44
+ name,
45
+ source: 'user',
46
+ promotion_status: 'candidate',
47
+ description,
48
+ segments: segList.map((s) => ({
49
+ name: s,
50
+ inputs: [],
51
+ outputs: [],
52
+ sideEffects: []
53
+ })),
54
+ entrypoint: { preamble: `## ${name}`, refs: [] },
55
+ promotion: {
56
+ minCycles: 1,
57
+ requiresHumanApproval: true,
58
+ requiresSmokeTest: true
59
+ },
60
+ createdBy: 'llm',
61
+ lastTouchedAt: new Date().toISOString()
62
+ };
63
+ // writeBeeManifest runs zod validation + SYSTEM_PATH_FORBIDDEN
64
+ // guard internally.
65
+ writeBeeManifest({ home }, m);
66
+ rebuildIndexFromFs({ home });
67
+ return { ok: true };
68
+ }
69
+ export function listPool(ctx) {
70
+ const idx = readPool({ home: ctx.home });
71
+ return { ok: true, data: idx.entries };
72
+ }
73
+ export function rebuildIndex(ctx) {
74
+ const idx = rebuildIndexFromFs({ home: ctx.home });
75
+ return { ok: true, data: idx };
76
+ }
77
+ /** Read a bee's manifest, or null when it is absent. */
78
+ function readManifest(manifestPath) {
79
+ if (!existsSync(manifestPath))
80
+ return null;
81
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
82
+ }
83
+ function beeManifestPath(home, name) {
84
+ return join(resolveUserBeesDir({ home }), name, 'manifest.json');
85
+ }
86
+ /** Append a `[tag timestamp] text` note to a description under the length cap. */
87
+ function appendNote(description, tag, text, ts) {
88
+ const note = `[${tag} ${ts}] ${text}`;
89
+ return (description + (description ? '\n' : '') + note).slice(0, DESCRIPTION_MAX_CHARS);
90
+ }
91
+ export function refineBee(ctx) {
92
+ const { home, positional, flags } = ctx;
93
+ const name = positional[1];
94
+ if (!name)
95
+ return { ok: false, error: 'MISSING_ARG: refine-bee requires <name>' };
96
+ const patch = flags.maybeString('patch') ?? '';
97
+ if (!patch)
98
+ return { ok: false, error: 'MISSING_ARG: refine-bee requires --patch' };
99
+ const m = readManifest(beeManifestPath(home, name));
100
+ if (m === null)
101
+ return { ok: false, error: 'BEE_NOT_FOUND' };
102
+ // Append patch note to description, preserving prior content. Cap at
103
+ // 1000 chars to avoid unbounded growth.
104
+ const ts = new Date().toISOString();
105
+ m.description = appendNote(m.description, 'refine', patch, ts);
106
+ m.lastTouchedAt = ts;
107
+ // promotion_status is preserved (do not touch it here).
108
+ writeBeeManifest({ home }, m);
109
+ rebuildIndexFromFs({ home });
110
+ return { ok: true };
111
+ }
112
+ export function cloneBee(ctx) {
113
+ const { home, positional, flags } = ctx;
114
+ const name = positional[1];
115
+ if (!name)
116
+ return { ok: false, error: 'MISSING_ARG: clone-bee requires <name>' };
117
+ const asName = flags.maybeString('as') ?? '';
118
+ if (!asName)
119
+ return { ok: false, error: 'MISSING_ARG: clone-bee requires --as <new-name>' };
120
+ const src = readManifest(beeManifestPath(home, name));
121
+ if (src === null)
122
+ return { ok: false, error: 'BEE_NOT_FOUND' };
123
+ // Fresh id, reset promotion_status to candidate, rename. The source
124
+ // manifest is unchanged on disk.
125
+ const clone = {
126
+ ...src,
127
+ name: asName,
128
+ promotion_status: 'candidate',
129
+ lastTouchedAt: new Date().toISOString()
130
+ };
131
+ writeBeeManifest({ home }, clone);
132
+ rebuildIndexFromFs({ home });
133
+ return { ok: true };
134
+ }
135
+ export function promote(ctx) {
136
+ const { home, positional } = ctx;
137
+ const name = positional[1];
138
+ if (!name)
139
+ return { ok: false, error: 'MISSING_ARG: promote requires <name>' };
140
+ const m = readManifest(beeManifestPath(home, name));
141
+ if (m === null)
142
+ return { ok: false, error: 'BEE_NOT_FOUND' };
143
+ if (m.source === 'system')
144
+ return { ok: false, error: 'PROMOTION_SYSTEM_REFUSED' };
145
+ // Evaluate the PromotionGate (Task 5). The CLI is a thin shim; the
146
+ // humanApproved / smokeTestPresent inputs default to "true" here
147
+ // because the LLM-driven peaks-maker workflow has already obtained
148
+ // those approvals before calling promote.
149
+ const gate = evaluateGate({ home }, m, {
150
+ humanApproved: true,
151
+ smokeTestPresent: m.promotion.requiresSmokeTest
152
+ });
153
+ if (!gate.ok) {
154
+ return {
155
+ ok: false,
156
+ error: `PROMOTION_GATE_FAILED: ${gate.failedSubconditions.join(',')}`
157
+ };
158
+ }
159
+ m.promotion_status = 'stable';
160
+ m.lastTouchedAt = new Date().toISOString();
161
+ writeBeeManifest({ home }, m);
162
+ rebuildIndexFromFs({ home });
163
+ return { ok: true };
164
+ }
165
+ export function retire(ctx) {
166
+ const { home, positional, flags } = ctx;
167
+ const name = positional[1];
168
+ if (!name)
169
+ return { ok: false, error: 'MISSING_ARG: retire requires <name>' };
170
+ const reason = flags.maybeString('reason') ?? '';
171
+ const m = readManifest(beeManifestPath(home, name));
172
+ if (m === null)
173
+ return { ok: false, error: 'BEE_NOT_FOUND' };
174
+ if (m.source === 'system')
175
+ return { ok: false, error: 'RETIRE_SYSTEM_REFUSED' };
176
+ m.promotion_status = 'retired';
177
+ if (reason) {
178
+ const ts = new Date().toISOString();
179
+ m.description = appendNote(m.description, 'retire', reason, ts);
180
+ }
181
+ m.lastTouchedAt = new Date().toISOString();
182
+ writeBeeManifest({ home }, m);
183
+ rebuildIndexFromFs({ home });
184
+ return { ok: true };
185
+ }
@@ -0,0 +1,4 @@
1
+ import type { CliResult, SedimentContext } from './sediment-command-shared.js';
2
+ export declare function search(ctx: SedimentContext): CliResult;
3
+ export declare function recent(ctx: SedimentContext): CliResult;
4
+ export declare function show(ctx: SedimentContext): CliResult;
@@ -0,0 +1,94 @@
1
+ // src/cli/commands/sediment-query-commands.ts
2
+ //
3
+ // The read-only `peaks skill sediment` verbs: `search`, `recent`, `show`.
4
+ // Split out of `sediment-commands.ts`; every verb's args, envelope and error
5
+ // strings are unchanged.
6
+ import { readFileSync, existsSync, readdirSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { resolveUserBeesDir } from '../../services/sediment/pool-paths.js';
9
+ /** Milliseconds in one day, for `recent --since <N>d`. */
10
+ const MILLISECONDS_PER_DAY = 86_400_000;
11
+ /** `e instanceof Error ? e.message : String(e)` — the pool's error text. */
12
+ function errorText(e) {
13
+ return e instanceof Error ? e.message : String(e);
14
+ }
15
+ /**
16
+ * Walk `beesDir` and hand every readable bee manifest to `visit`. A manifest
17
+ * that cannot be parsed is reported as a warning and skipped, exactly as the
18
+ * per-verb inline loops did.
19
+ */
20
+ function eachManifest(beesDir, warnings, visit) {
21
+ if (!existsSync(beesDir))
22
+ return;
23
+ for (const name of readdirSync(beesDir)) {
24
+ const manifestPath = join(beesDir, name, 'manifest.json');
25
+ if (!existsSync(manifestPath))
26
+ continue;
27
+ let manifest;
28
+ try {
29
+ manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
30
+ }
31
+ catch (e) {
32
+ warnings.push(`skipped ${name}: ${errorText(e)}`);
33
+ continue;
34
+ }
35
+ visit(name, manifest);
36
+ }
37
+ }
38
+ export function search(ctx) {
39
+ const { home, positional, flags } = ctx;
40
+ const query = positional[1] ?? flags.maybeString('q') ?? '';
41
+ if (!query)
42
+ return { ok: false, error: 'MISSING_ARG: search requires <query>' };
43
+ const q = query.toLowerCase();
44
+ const matches = [];
45
+ const warnings = [];
46
+ eachManifest(resolveUserBeesDir({ home }), warnings, (_name, m) => {
47
+ const haystack = `${m.name ?? ''} ${m.description ?? ''}`.toLowerCase();
48
+ if (haystack.includes(q)) {
49
+ matches.push({
50
+ name: m.name,
51
+ description: m.description,
52
+ source: m.source,
53
+ promotion_status: m.promotion_status
54
+ });
55
+ }
56
+ });
57
+ return { ok: true, data: { matches, warnings } };
58
+ }
59
+ export function recent(ctx) {
60
+ const { home, flags } = ctx;
61
+ const sinceRaw = flags.maybeString('since') ?? '7d';
62
+ const m = sinceRaw.match(/^(\d+)d$/);
63
+ if (!m)
64
+ return { ok: false, error: 'MISSING_ARG: recent requires --since Nd (e.g. 7d)' };
65
+ const sinceDays = parseInt(m[1], 10);
66
+ const cutoff = new Date(Date.now() - sinceDays * MILLISECONDS_PER_DAY).toISOString();
67
+ const matches = [];
68
+ const warnings = [];
69
+ eachManifest(resolveUserBeesDir({ home }), warnings, (_name, b) => {
70
+ if (typeof b.lastTouchedAt === 'string' && b.lastTouchedAt >= cutoff) {
71
+ matches.push({
72
+ name: b.name,
73
+ lastTouchedAt: b.lastTouchedAt,
74
+ promotion_status: b.promotion_status
75
+ });
76
+ }
77
+ });
78
+ return { ok: true, data: { matches, warnings } };
79
+ }
80
+ export function show(ctx) {
81
+ const { home, positional } = ctx;
82
+ const name = positional[1];
83
+ if (!name)
84
+ return { ok: false, error: 'MISSING_ARG: show requires <name>' };
85
+ const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
86
+ if (!existsSync(manifestPath))
87
+ return { ok: false, error: 'BEE_NOT_FOUND' };
88
+ try {
89
+ return { ok: true, data: JSON.parse(readFileSync(manifestPath, 'utf-8')) };
90
+ }
91
+ catch (e) {
92
+ return { ok: false, error: `MANIFEST_CORRUPT: ${errorText(e)}` };
93
+ }
94
+ }
@@ -0,0 +1,8 @@
1
+ import type { CliResult, SedimentContext } from './sediment-command-shared.js';
2
+ export declare function dispose(ctx: SedimentContext): CliResult;
3
+ export declare function releases(ctx: SedimentContext): CliResult;
4
+ export declare function releaseShow(ctx: SedimentContext): CliResult;
5
+ export declare function releaseDiffVerb(ctx: SedimentContext): CliResult;
6
+ export declare function exportVerb(ctx: SedimentContext): CliResult;
7
+ export declare function importVerb(ctx: SedimentContext): CliResult;
8
+ export declare function gcBlobsVerb(ctx: SedimentContext): CliResult;
@@ -0,0 +1,232 @@
1
+ // src/cli/commands/sediment-release-commands.ts
2
+ //
3
+ // The `peaks skill sediment` verbs that act on retained releases:
4
+ // `dispose`, `releases`, `release-show`, `release-diff`, `export`, `import`,
5
+ // `gc-blobs`. Split out of `sediment-commands.ts`; every verb's args,
6
+ // envelope, stderr warning and error strings are unchanged.
7
+ import { mkdirSync, existsSync, readFileSync, rmSync } from 'node:fs';
8
+ import { join, basename } from 'node:path';
9
+ import { resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir } from '../../services/sediment/pool-paths.js';
10
+ import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
11
+ import { openStateDb } from '../../services/skillhub/sqlite-store.js';
12
+ import { retainRelease } from '../../services/skillhub/release-retain.js';
13
+ import { releaseDiff } from '../../services/skillhub/release-diff.js';
14
+ import { exportRelease } from '../../services/skillhub/release-export.js';
15
+ import { importRelease } from '../../services/skillhub/release-import.js';
16
+ import { gcBlobs } from '../../services/skillhub/release-gc-blobs.js';
17
+ const DEFAULT_RELEASE_VERSION = '0.1.0';
18
+ function beeManifestPath(home, name) {
19
+ return join(resolveUserBeesDir({ home }), name, 'manifest.json');
20
+ }
21
+ function readManifest(manifestPath) {
22
+ if (!existsSync(manifestPath))
23
+ return null;
24
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
25
+ }
26
+ /** `e instanceof Error ? e.message : String(e)` — the pool's error text. */
27
+ function errorText(e) {
28
+ return e instanceof Error ? e.message : String(e);
29
+ }
30
+ /**
31
+ * User bee destroy: remove the manifest dir from the pool. The scratch
32
+ * materialization is cleaned up by the dispatch flow (its concern), but the
33
+ * pool's bees/<name>/manifest.json entry is removed here so the index reflects
34
+ * reality on next read.
35
+ */
36
+ function destroyUserBee(home, name) {
37
+ const beeDir = resolveUserBeeDir({ home }, name);
38
+ rmSync(beeDir, { recursive: true, force: true });
39
+ rebuildIndexFromFs({ home });
40
+ return { ok: true, data: { userDestroyed: true, path: beeDir } };
41
+ }
42
+ /** User bee retain: open state.db, call retainRelease. */
43
+ function retainUserBee(home, manifest, flags) {
44
+ const version = flags.maybeString('version') ?? DEFAULT_RELEASE_VERSION;
45
+ const scratchDir = flags.maybeString('scratch') ?? join(home, 'scratch');
46
+ if (!existsSync(scratchDir))
47
+ return { ok: false, error: 'SCRATCH_NOT_FOUND' };
48
+ const stateDbPath = resolveStateDbPath({ home });
49
+ const blobsDir = resolveBlobsDir({ home });
50
+ mkdirSync(blobsDir, { recursive: true });
51
+ const db = openStateDb(stateDbPath);
52
+ try {
53
+ retainRelease({ db, blobsDir, scratchDir, manifest, version });
54
+ }
55
+ finally {
56
+ db.close();
57
+ }
58
+ return { ok: true, data: { retained: true, version } };
59
+ }
60
+ export function dispose(ctx) {
61
+ const { home, positional, flags } = ctx;
62
+ const name = positional[1];
63
+ if (!name)
64
+ return { ok: false, error: 'MISSING_ARG: dispose requires <name>' };
65
+ const decision = flags.maybeString('decision') ?? '';
66
+ if (decision !== 'destroy' && decision !== 'retain') {
67
+ return { ok: false, error: 'MISSING_ARG: dispose requires --decision destroy|retain' };
68
+ }
69
+ const m = readManifest(beeManifestPath(home, name));
70
+ if (m === null)
71
+ return { ok: false, error: 'BEE_NOT_FOUND' };
72
+ // System bees: silently destroy; refuse retain (Task 9 contract).
73
+ if (m.source === 'system') {
74
+ if (decision === 'retain')
75
+ return { ok: false, error: 'RETAIN_SYSTEM_REFUSED' };
76
+ return { ok: true, data: { systemDestroyed: true } };
77
+ }
78
+ return decision === 'destroy' ? destroyUserBee(home, name) : retainUserBee(home, m, flags);
79
+ }
80
+ const RELEASES_SQL = 'SELECT id, bee_name, version, source, archived_at, archived_by FROM bee_release WHERE bee_name = ? ORDER BY archived_at DESC';
81
+ export function releases(ctx) {
82
+ const { home, positional } = ctx;
83
+ const beeName = positional[1];
84
+ if (!beeName)
85
+ return { ok: false, error: 'MISSING_ARG: releases requires <bee-name>' };
86
+ const stateDbPath = resolveStateDbPath({ home });
87
+ const db = openStateDb(stateDbPath);
88
+ try {
89
+ const rows = db.prepare(RELEASES_SQL).all(beeName);
90
+ return { ok: true, data: rows };
91
+ }
92
+ finally {
93
+ db.close();
94
+ }
95
+ }
96
+ export function releaseShow(ctx) {
97
+ const { home, positional, flags } = ctx;
98
+ const beeName = positional[1];
99
+ const version = flags.maybeString('version') ?? '';
100
+ if (!beeName || !version) {
101
+ return {
102
+ ok: false,
103
+ error: 'MISSING_ARG: release-show requires <bee-name> and --version'
104
+ };
105
+ }
106
+ const stateDbPath = resolveStateDbPath({ home });
107
+ const db = openStateDb(stateDbPath);
108
+ try {
109
+ // Cast the row to the typed interface from skillhub/types.ts so
110
+ // downstream consumers (LLM agents in peaks-maker, CLI JSON
111
+ // renderers) get a structural shape rather than
112
+ // Record<string, unknown>. Minor #12 fix.
113
+ const row = db
114
+ .prepare('SELECT * FROM bee_release WHERE bee_name = ? AND version = ?')
115
+ .get(beeName, version);
116
+ if (!row)
117
+ return { ok: false, error: 'VERSION_NOT_FOUND' };
118
+ const id = row.id;
119
+ const manifest = db.prepare('SELECT * FROM bee_manifest WHERE release_id = ?').get(id);
120
+ const segments = db
121
+ .prepare('SELECT * FROM bee_segment_ref WHERE release_id = ?')
122
+ .all(id);
123
+ const files = db
124
+ .prepare('SELECT * FROM bee_file WHERE release_id = ?')
125
+ .all(id);
126
+ return { ok: true, data: { release: row, manifest, segments, files } };
127
+ }
128
+ finally {
129
+ db.close();
130
+ }
131
+ }
132
+ export function releaseDiffVerb(ctx) {
133
+ const { home, positional, flags } = ctx;
134
+ const beeName = positional[1];
135
+ const fromVersion = flags.maybeString('from') ?? '';
136
+ const toVersion = flags.maybeString('to') ?? '';
137
+ if (!beeName || !fromVersion || !toVersion) {
138
+ return {
139
+ ok: false,
140
+ error: 'MISSING_ARG: release-diff requires <bee-name> and --from and --to'
141
+ };
142
+ }
143
+ const stateDbPath = resolveStateDbPath({ home });
144
+ const db = openStateDb(stateDbPath);
145
+ try {
146
+ const diff = releaseDiff({ db, beeName, fromVersion, toVersion });
147
+ return { ok: true, data: diff };
148
+ }
149
+ catch (e) {
150
+ return { ok: false, error: errorText(e) };
151
+ }
152
+ finally {
153
+ db.close();
154
+ }
155
+ }
156
+ export function exportVerb(ctx) {
157
+ const { home, positional, flags } = ctx;
158
+ const beeName = positional[1];
159
+ const version = flags.maybeString('version') ?? '';
160
+ const outPath = flags.maybeString('out') ?? '';
161
+ if (!beeName || !version || !outPath) {
162
+ return { ok: false, error: 'MISSING_ARG: export requires <bee-name>, --version, --out' };
163
+ }
164
+ const stateDbPath = resolveStateDbPath({ home });
165
+ const blobsDir = resolveBlobsDir({ home });
166
+ const db = openStateDb(stateDbPath);
167
+ try {
168
+ exportRelease({ db, blobsDir, beeName, version, outPath });
169
+ }
170
+ catch (e) {
171
+ return { ok: false, error: errorText(e) };
172
+ }
173
+ finally {
174
+ db.close();
175
+ }
176
+ // M7 (spec §7A.2 / §10 RL-9): `peaks skill sediment export` is
177
+ // an ALIAS of `peaks loop export` for one release cycle. Emit
178
+ // the deprecation warning to stderr so downstream tooling can
179
+ // upgrade. Future slice removes the alias.
180
+ process.stderr.write("warning: 'peaks skill sediment export' is deprecated; use 'peaks loop export' or 'peaks bee export' (peaks.bundle/1, spec §7A.2)\n");
181
+ return { ok: true, data: { outPath } };
182
+ }
183
+ export function importVerb(ctx) {
184
+ const { home, positional, flags } = ctx;
185
+ const bundlePath = positional[1];
186
+ const asNameRaw = flags.maybeString('as');
187
+ const asName = asNameRaw && asNameRaw.length > 0 ? asNameRaw : undefined;
188
+ if (!bundlePath)
189
+ return { ok: false, error: 'MISSING_ARG: import requires <bundle-path>' };
190
+ if (!existsSync(bundlePath))
191
+ return { ok: false, error: 'BUNDLE_NOT_FOUND' };
192
+ const stateDbPath = resolveStateDbPath({ home });
193
+ const blobsDir = resolveBlobsDir({ home });
194
+ mkdirSync(blobsDir, { recursive: true });
195
+ const db = openStateDb(stateDbPath);
196
+ try {
197
+ if (asName !== undefined) {
198
+ importRelease({ db, blobsDir, inPath: bundlePath, asName });
199
+ }
200
+ else {
201
+ importRelease({ db, blobsDir, inPath: bundlePath });
202
+ }
203
+ }
204
+ catch (e) {
205
+ return { ok: false, error: errorText(e) };
206
+ }
207
+ finally {
208
+ db.close();
209
+ }
210
+ // M7 (spec §7A.2): `peaks skill sediment import` is an ALIAS of
211
+ // `peaks loop import` for one release cycle. Emit the
212
+ // deprecation warning so downstream tooling can upgrade.
213
+ process.stderr.write("warning: 'peaks skill sediment import' is deprecated; use 'peaks loop import' or 'peaks bee import' (peaks.bundle/1, spec §7A.2)\n");
214
+ return { ok: true, data: { asName: asName ?? basename(bundlePath) } };
215
+ }
216
+ export function gcBlobsVerb(ctx) {
217
+ const { home, flags } = ctx;
218
+ const dryRun = flags.bool('dry-run');
219
+ const stateDbPath = resolveStateDbPath({ home });
220
+ const blobsDir = resolveBlobsDir({ home });
221
+ const db = openStateDb(stateDbPath);
222
+ try {
223
+ const removed = gcBlobs({ db, blobsDir, dryRun });
224
+ return { ok: true, data: { removed } };
225
+ }
226
+ catch (e) {
227
+ return { ok: false, error: errorText(e) };
228
+ }
229
+ finally {
230
+ db.close();
231
+ }
232
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerSopAdvanceCommand(sop: Command, io: ProgramIO): void;