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
@@ -1,152 +1,38 @@
1
- /**
2
- * `peaks skill sediment <verb>` — Sediment pool CLI primitives.
3
- *
4
- * Slices 2026-07-04-cli-15a (Task 15a) and 2026-07-04-cli-15b (Task 15b)
5
- * of the 18-verb plan. This file implements 8 of 18 verbs:
6
- *
7
- * Task 15a:
8
- * add-segment — scaffold ~/.peaks/skills/segments/<name>/SKILL.md
9
- * add-bee — write ~/.peaks/skills/bees/<name>/manifest.json
10
- * list — read index.json via readPool
11
- * rebuild-index — rewrite index.json from filesystem state
12
- *
13
- * Task 15b:
14
- * refine-bee — append a NL-described patch to an existing bee manifest
15
- * clone-bee — duplicate an existing bee to a new name, status reset
16
- * promote — flip candidate → stable when PromotionGate passes
17
- * retire — flip → retired, optionally record a reason
18
- *
19
- * Other verbs (dispose / releases / release-show / release-diff / export /
20
- * import / gc-blobs / search / recent / show) return
21
- * `{ ok: false, error: "UNKNOWN_VERB: …" }` until Tasks 15c / 15d fill them.
22
- *
23
- * The CLI boundary is runSediment(argv, { home }): it returns a
24
- * `{ ok, error?, data? }` envelope so program.ts can render the result
25
- * as JSON via peaks-cli's existing printResult primitive.
26
- */
27
- import { writeFileSync, mkdirSync, readFileSync, existsSync, readdirSync, rmSync } from 'node:fs';
28
- import { join, basename } from 'node:path';
29
- import { SYSTEM_PATH_FORBIDDEN, assertNotSystemPath, resolveSegmentsDir, resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir } from '../../services/sediment/pool-paths.js';
1
+ import { SYSTEM_PATH_FORBIDDEN } from '../../services/sediment/pool-paths.js';
30
2
  import { peaksHome } from '../../services/sop/sop-paths.js';
31
- import { writeBeeManifest } from '../../services/sediment/pool-write.js';
32
- import { readPool } from '../../services/sediment/pool-read.js';
33
- import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
34
- import { evaluateGate } from '../../services/sediment/promotion-gate.js';
35
3
  import { printCliEnvelope } from '../cli-helpers.js';
36
- import { openStateDb } from '../../services/skillhub/sqlite-store.js';
37
- import { retainRelease } from '../../services/skillhub/release-retain.js';
38
- import { releaseDiff } from '../../services/skillhub/release-diff.js';
39
- import { exportRelease } from '../../services/skillhub/release-export.js';
40
- import { importRelease } from '../../services/skillhub/release-import.js';
41
- import { gcBlobs } from '../../services/skillhub/release-gc-blobs.js';
42
- /** Typed accessor over the flag map produced by `parseFlags`.
43
- *
44
- * `parseFlags` internally stores every flag with at least one value as a
45
- * `string[]`. A flag with no following non-flag token (e.g. `--apply`,
46
- * `--dry-run`) is recorded as `true`. This helper exposes three typed
47
- * accessors so call-sites don't have to re-narrow `unknown` or
48
- * `string | boolean | string[]` on every read:
49
- *
50
- * - `flags.list(name)` → `string[]` (always an array; a single
51
- * occurrence is wrapped to a 1-element
52
- * array at parse time)
53
- * - `flags.bool(name)` → `boolean` (presence-of flag; missing
54
- * flag is `false`)
55
- * - `flags.maybeString(name)` → `string | undefined` (first value,
56
- * or `undefined` if the flag was given
57
- * as a bare boolean with no value)
58
- *
59
- * The dispatch layer (runSediment) was previously peppered with
60
- * `typeof flags.x === "string"` / `Array.isArray(flags.x)` narrowing.
61
- * With this helper the call-sites collapse to one-line reads and the
62
- * raw flag map stops leaking across the runSediment boundary.
63
- */
64
- export class ParsedFlags {
65
- raw;
66
- constructor(raw) {
67
- this.raw = raw;
68
- }
69
- /** Always returns an array. Missing flag → []. Single-occurrence
70
- * flag → a 1-element array (parseFlags normalizes this). */
71
- list(name) {
72
- const v = this.raw[name];
73
- if (v === undefined)
74
- return [];
75
- if (v === true)
76
- return [];
77
- return v;
78
- }
79
- /** Presence-of a bare boolean flag. Missing → false. */
80
- bool(name) {
81
- const v = this.raw[name];
82
- if (v === undefined)
83
- return false;
84
- // A flag given as `--name <value>` is also "present" (it just happens
85
- // to carry values too). Existing call-sites that want `--dry-run`
86
- // semantics care about presence, not whether values are attached.
87
- return true;
88
- }
89
- /** First value of a flag, or `undefined` if the flag is absent or
90
- * was given as a bare boolean. */
91
- maybeString(name) {
92
- const v = this.raw[name];
93
- if (v === undefined)
94
- return undefined;
95
- if (v === true)
96
- return undefined;
97
- return v[0];
98
- }
99
- }
100
- /** Parse an argv tail into positional args + flag map.
101
- *
102
- * Supports:
103
- * --flag value → flags[flag] = [value, ...] (advance i by 1)
104
- * --flag → flags[flag] = true (when next token starts with `--` or is undefined)
105
- * --flag v1 --flag v2 → repeated `--flag` values are accumulated
106
- *
107
- * Internally stores all values as `string[]` (or `true` for a bare
108
- * boolean flag). Use the `ParsedFlags` helper to read typed accessors.
109
- *
110
- * Repeatable flag handling (Task 15b): when the same `--key` appears
111
- * consecutively (e.g. `--segment a --segment b --segment c`), values
112
- * are accumulated into a single `string[]`. A single occurrence is
113
- * normalized to a 1-element array so callers can use `.list(name)`
114
- * uniformly without shape-narrowing on the call-site.
4
+ import { parseFlags } from './sediment-argv-flags.js';
5
+ import { addBee, addSegment, cloneBee, listPool, promote, rebuildIndex, refineBee, retire } from './sediment-pool-commands.js';
6
+ import { dispose, exportVerb, gcBlobsVerb, importVerb, releaseDiffVerb, releaseShow, releases } from './sediment-release-commands.js';
7
+ import { recent, search, show } from './sediment-query-commands.js';
8
+ // Re-exported so the split is invisible to importers of THIS path.
9
+ export { ParsedFlags, parseFlags } from './sediment-argv-flags.js';
10
+ /**
11
+ * Every verb the pool answers, keyed by the first positional. A `Map` rather
12
+ * than an object literal on purpose: `Object.prototype` names
13
+ * (`toString`, `constructor`, …) would otherwise resolve to an inherited
14
+ * function and dispatch a verb that does not exist.
115
15
  */
116
- export function parseFlags(argv) {
117
- const positional = [];
118
- const rawFlags = {};
119
- for (let i = 0; i < argv.length; i++) {
120
- const a = argv[i];
121
- if (a.startsWith('--')) {
122
- const k = a.slice(2);
123
- const v = argv[i + 1];
124
- if (v === undefined || v.startsWith('--')) {
125
- rawFlags[k] = true;
126
- }
127
- else {
128
- // Capture first value, then look ahead for `--k <value>` repeats.
129
- const values = [v];
130
- i += 2;
131
- while (i < argv.length &&
132
- argv[i] === `--${k}` &&
133
- i + 1 < argv.length &&
134
- !argv[i + 1].startsWith('--')) {
135
- values.push(argv[i + 1]);
136
- i += 2;
137
- }
138
- // Back up one — the outer for-loop will i++ past the flag, so the
139
- // next iteration sees the next real token.
140
- i--;
141
- rawFlags[k] = values;
142
- }
143
- }
144
- else {
145
- positional.push(a);
146
- }
147
- }
148
- return { positional, flags: new ParsedFlags(rawFlags) };
149
- }
16
+ const VERBS = new Map([
17
+ ['add-segment', addSegment],
18
+ ['add-bee', addBee],
19
+ ['list', listPool],
20
+ ['rebuild-index', rebuildIndex],
21
+ ['refine-bee', refineBee],
22
+ ['clone-bee', cloneBee],
23
+ ['promote', promote],
24
+ ['retire', retire],
25
+ ['dispose', dispose],
26
+ ['releases', releases],
27
+ ['release-show', releaseShow],
28
+ ['release-diff', releaseDiffVerb],
29
+ ['export', exportVerb],
30
+ ['import', importVerb],
31
+ ['gc-blobs', gcBlobsVerb],
32
+ ['search', search],
33
+ ['recent', recent],
34
+ ['show', show]
35
+ ]);
150
36
  /** Dispatch a sediment verb argv to the matching implementation.
151
37
  *
152
38
  * Returns { ok: true, data? } on success and { ok: false, error }
@@ -158,451 +44,11 @@ export async function runSediment(argv, { home }) {
158
44
  const { positional, flags } = parseFlags(argv);
159
45
  const verb = positional[0];
160
46
  try {
161
- switch (verb) {
162
- case 'add-segment': {
163
- const name = positional[1];
164
- if (!name)
165
- return { ok: false, error: 'MISSING_ARG: name' };
166
- const description = flags.maybeString('describe') ?? '';
167
- const segDir = join(resolveSegmentsDir({ home }), name);
168
- // Soft-protection guard: refuse to write under any `.system` path
169
- // segment. Mirrors the same guard in writeBeeManifest.
170
- assertNotSystemPath(segDir);
171
- mkdirSync(segDir, { recursive: true });
172
- writeFileSync(join(segDir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\n`);
173
- rebuildIndexFromFs({ home });
174
- return { ok: true };
175
- }
176
- case 'add-bee': {
177
- const name = positional[1];
178
- if (!name)
179
- return { ok: false, error: 'MISSING_ARG: name' };
180
- // Collect --segment values; the brief uses repeatable --segment
181
- // flags (one token per segment). parseFlags now returns a
182
- // 1-element array for a single occurrence and a longer array
183
- // for repeated keys, so .list() returns a uniform string[].
184
- const segList = flags.list('segment');
185
- const description = flags.maybeString('description') ?? '';
186
- const m = {
187
- schemaVersion: 'peaks.bee/1',
188
- name,
189
- source: 'user',
190
- promotion_status: 'candidate',
191
- description,
192
- segments: segList.map((s) => ({
193
- name: s,
194
- inputs: [],
195
- outputs: [],
196
- sideEffects: []
197
- })),
198
- entrypoint: { preamble: `## ${name}`, refs: [] },
199
- promotion: {
200
- minCycles: 1,
201
- requiresHumanApproval: true,
202
- requiresSmokeTest: true
203
- },
204
- createdBy: 'llm',
205
- lastTouchedAt: new Date().toISOString()
206
- };
207
- // writeBeeManifest runs zod validation + SYSTEM_PATH_FORBIDDEN
208
- // guard internally.
209
- writeBeeManifest({ home }, m);
210
- rebuildIndexFromFs({ home });
211
- return { ok: true };
212
- }
213
- case 'list': {
214
- const idx = readPool({ home });
215
- return { ok: true, data: idx.entries };
216
- }
217
- case 'rebuild-index': {
218
- const idx = rebuildIndexFromFs({ home });
219
- return { ok: true, data: idx };
220
- }
221
- // --- Task 15b verbs ---
222
- case 'refine-bee': {
223
- const name = positional[1];
224
- if (!name)
225
- return { ok: false, error: 'MISSING_ARG: refine-bee requires <name>' };
226
- const patch = flags.maybeString('patch') ?? '';
227
- if (!patch)
228
- return { ok: false, error: 'MISSING_ARG: refine-bee requires --patch' };
229
- const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
230
- if (!existsSync(manifestPath))
231
- return { ok: false, error: 'BEE_NOT_FOUND' };
232
- const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
233
- // Append patch note to description, preserving prior content. Cap at
234
- // 1000 chars to avoid unbounded growth.
235
- const ts = new Date().toISOString();
236
- const note = `[refine ${ts}] ${patch}`;
237
- m.description = (m.description + (m.description ? '\n' : '') + note).slice(0, 1000);
238
- m.lastTouchedAt = ts;
239
- // promotion_status is preserved (do not touch it here).
240
- writeBeeManifest({ home }, m);
241
- rebuildIndexFromFs({ home });
242
- return { ok: true };
243
- }
244
- case 'clone-bee': {
245
- const name = positional[1];
246
- if (!name)
247
- return { ok: false, error: 'MISSING_ARG: clone-bee requires <name>' };
248
- const asName = flags.maybeString('as') ?? '';
249
- if (!asName)
250
- return { ok: false, error: 'MISSING_ARG: clone-bee requires --as <new-name>' };
251
- const srcPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
252
- if (!existsSync(srcPath))
253
- return { ok: false, error: 'BEE_NOT_FOUND' };
254
- const src = JSON.parse(readFileSync(srcPath, 'utf-8'));
255
- // Fresh id, reset promotion_status to candidate, rename. The source
256
- // manifest is unchanged on disk.
257
- const clone = {
258
- ...src,
259
- name: asName,
260
- promotion_status: 'candidate',
261
- lastTouchedAt: new Date().toISOString()
262
- };
263
- writeBeeManifest({ home }, clone);
264
- rebuildIndexFromFs({ home });
265
- return { ok: true };
266
- }
267
- case 'promote': {
268
- const name = positional[1];
269
- if (!name)
270
- return { ok: false, error: 'MISSING_ARG: promote requires <name>' };
271
- const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
272
- if (!existsSync(manifestPath))
273
- return { ok: false, error: 'BEE_NOT_FOUND' };
274
- const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
275
- if (m.source === 'system')
276
- return { ok: false, error: 'PROMOTION_SYSTEM_REFUSED' };
277
- // Evaluate the PromotionGate (Task 5). The CLI is a thin shim; the
278
- // humanApproved / smokeTestPresent inputs default to "true" here
279
- // because the LLM-driven peaks-maker workflow has already obtained
280
- // those approvals before calling promote.
281
- const gate = evaluateGate({ home }, m, {
282
- humanApproved: true,
283
- smokeTestPresent: m.promotion.requiresSmokeTest
284
- });
285
- if (!gate.ok) {
286
- return {
287
- ok: false,
288
- error: `PROMOTION_GATE_FAILED: ${gate.failedSubconditions.join(',')}`
289
- };
290
- }
291
- m.promotion_status = 'stable';
292
- m.lastTouchedAt = new Date().toISOString();
293
- writeBeeManifest({ home }, m);
294
- rebuildIndexFromFs({ home });
295
- return { ok: true };
296
- }
297
- case 'retire': {
298
- const name = positional[1];
299
- if (!name)
300
- return { ok: false, error: 'MISSING_ARG: retire requires <name>' };
301
- const reason = flags.maybeString('reason') ?? '';
302
- const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
303
- if (!existsSync(manifestPath))
304
- return { ok: false, error: 'BEE_NOT_FOUND' };
305
- const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
306
- if (m.source === 'system')
307
- return { ok: false, error: 'RETIRE_SYSTEM_REFUSED' };
308
- m.promotion_status = 'retired';
309
- if (reason) {
310
- const ts = new Date().toISOString();
311
- const note = `[retire ${ts}] ${reason}`;
312
- m.description = (m.description + (m.description ? '\n' : '') + note).slice(0, 1000);
313
- }
314
- m.lastTouchedAt = new Date().toISOString();
315
- writeBeeManifest({ home }, m);
316
- rebuildIndexFromFs({ home });
317
- return { ok: true };
318
- }
319
- // --- Task 15c verbs ---
320
- case 'dispose': {
321
- const name = positional[1];
322
- if (!name)
323
- return { ok: false, error: 'MISSING_ARG: dispose requires <name>' };
324
- const decision = flags.maybeString('decision') ?? '';
325
- if (decision !== 'destroy' && decision !== 'retain') {
326
- return { ok: false, error: 'MISSING_ARG: dispose requires --decision destroy|retain' };
327
- }
328
- const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
329
- if (!existsSync(manifestPath))
330
- return { ok: false, error: 'BEE_NOT_FOUND' };
331
- const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
332
- // System bees: silently destroy; refuse retain (Task 9 contract).
333
- if (m.source === 'system') {
334
- if (decision === 'retain')
335
- return { ok: false, error: 'RETAIN_SYSTEM_REFUSED' };
336
- return { ok: true, data: { systemDestroyed: true } };
337
- }
338
- // User bee destroy: remove the manifest dir from the pool. The
339
- // scratch materialization is cleaned up by the dispatch flow
340
- // (its concern), but the pool's bees/<name>/manifest.json entry
341
- // is removed here so the index reflects reality on next read.
342
- if (decision === 'destroy') {
343
- const beeDir = resolveUserBeeDir({ home }, name);
344
- rmSync(beeDir, { recursive: true, force: true });
345
- rebuildIndexFromFs({ home });
346
- return { ok: true, data: { userDestroyed: true, path: beeDir } };
347
- }
348
- // User bee retain: open state.db, call retainRelease.
349
- const version = flags.maybeString('version') ?? '0.1.0';
350
- const scratchDir = flags.maybeString('scratch') ?? join(home, 'scratch');
351
- if (!existsSync(scratchDir))
352
- return { ok: false, error: 'SCRATCH_NOT_FOUND' };
353
- const stateDbPath = resolveStateDbPath({ home });
354
- const blobsDir = resolveBlobsDir({ home });
355
- mkdirSync(blobsDir, { recursive: true });
356
- const db = openStateDb(stateDbPath);
357
- try {
358
- retainRelease({ db, blobsDir, scratchDir, manifest: m, version });
359
- }
360
- finally {
361
- db.close();
362
- }
363
- return { ok: true, data: { retained: true, version } };
364
- }
365
- case 'releases': {
366
- const beeName = positional[1];
367
- if (!beeName)
368
- return { ok: false, error: 'MISSING_ARG: releases requires <bee-name>' };
369
- const stateDbPath = resolveStateDbPath({ home });
370
- const db = openStateDb(stateDbPath);
371
- try {
372
- const rows = db
373
- .prepare('SELECT id, bee_name, version, source, archived_at, archived_by FROM bee_release WHERE bee_name = ? ORDER BY archived_at DESC')
374
- .all(beeName);
375
- return { ok: true, data: rows };
376
- }
377
- finally {
378
- db.close();
379
- }
380
- }
381
- case 'release-show': {
382
- const beeName = positional[1];
383
- const version = flags.maybeString('version') ?? '';
384
- if (!beeName || !version) {
385
- return {
386
- ok: false,
387
- error: 'MISSING_ARG: release-show requires <bee-name> and --version'
388
- };
389
- }
390
- const stateDbPath = resolveStateDbPath({ home });
391
- const db = openStateDb(stateDbPath);
392
- try {
393
- // Cast the row to the typed interface from skillhub/types.ts so
394
- // downstream consumers (LLM agents in peaks-maker, CLI JSON
395
- // renderers) get a structural shape rather than
396
- // Record<string, unknown>. Minor #12 fix.
397
- const row = db
398
- .prepare('SELECT * FROM bee_release WHERE bee_name = ? AND version = ?')
399
- .get(beeName, version);
400
- if (!row)
401
- return { ok: false, error: 'VERSION_NOT_FOUND' };
402
- const id = row.id;
403
- const manifest = db.prepare('SELECT * FROM bee_manifest WHERE release_id = ?').get(id);
404
- const segments = db
405
- .prepare('SELECT * FROM bee_segment_ref WHERE release_id = ?')
406
- .all(id);
407
- const files = db
408
- .prepare('SELECT * FROM bee_file WHERE release_id = ?')
409
- .all(id);
410
- return { ok: true, data: { release: row, manifest, segments, files } };
411
- }
412
- finally {
413
- db.close();
414
- }
415
- }
416
- case 'release-diff': {
417
- const beeName = positional[1];
418
- const fromVersion = flags.maybeString('from') ?? '';
419
- const toVersion = flags.maybeString('to') ?? '';
420
- if (!beeName || !fromVersion || !toVersion) {
421
- return {
422
- ok: false,
423
- error: 'MISSING_ARG: release-diff requires <bee-name> and --from and --to'
424
- };
425
- }
426
- const stateDbPath = resolveStateDbPath({ home });
427
- const db = openStateDb(stateDbPath);
428
- try {
429
- const diff = releaseDiff({ db, beeName, fromVersion, toVersion });
430
- return { ok: true, data: diff };
431
- }
432
- catch (e) {
433
- const msg = e instanceof Error ? e.message : String(e);
434
- return { ok: false, error: msg };
435
- }
436
- finally {
437
- db.close();
438
- }
439
- }
440
- // --- Task 15d verbs ---
441
- case 'export': {
442
- const beeName = positional[1];
443
- const version = flags.maybeString('version') ?? '';
444
- const outPath = flags.maybeString('out') ?? '';
445
- if (!beeName || !version || !outPath) {
446
- return { ok: false, error: 'MISSING_ARG: export requires <bee-name>, --version, --out' };
447
- }
448
- const stateDbPath = resolveStateDbPath({ home });
449
- const blobsDir = resolveBlobsDir({ home });
450
- const db = openStateDb(stateDbPath);
451
- try {
452
- exportRelease({ db, blobsDir, beeName, version, outPath });
453
- }
454
- catch (e) {
455
- const msg = e instanceof Error ? e.message : String(e);
456
- return { ok: false, error: msg };
457
- }
458
- finally {
459
- db.close();
460
- }
461
- // M7 (spec §7A.2 / §10 RL-9): `peaks skill sediment export` is
462
- // an ALIAS of `peaks loop export` for one release cycle. Emit
463
- // the deprecation warning to stderr so downstream tooling can
464
- // upgrade. Future slice removes the alias.
465
- 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");
466
- return { ok: true, data: { outPath } };
467
- }
468
- case 'import': {
469
- const bundlePath = positional[1];
470
- const asNameRaw = flags.maybeString('as');
471
- const asName = asNameRaw && asNameRaw.length > 0 ? asNameRaw : undefined;
472
- if (!bundlePath)
473
- return { ok: false, error: 'MISSING_ARG: import requires <bundle-path>' };
474
- if (!existsSync(bundlePath))
475
- return { ok: false, error: 'BUNDLE_NOT_FOUND' };
476
- const stateDbPath = resolveStateDbPath({ home });
477
- const blobsDir = resolveBlobsDir({ home });
478
- mkdirSync(blobsDir, { recursive: true });
479
- const db = openStateDb(stateDbPath);
480
- try {
481
- if (asName !== undefined) {
482
- importRelease({ db, blobsDir, inPath: bundlePath, asName });
483
- }
484
- else {
485
- importRelease({ db, blobsDir, inPath: bundlePath });
486
- }
487
- }
488
- catch (e) {
489
- const msg = e instanceof Error ? e.message : String(e);
490
- return { ok: false, error: msg };
491
- }
492
- finally {
493
- db.close();
494
- }
495
- // M7 (spec §7A.2): `peaks skill sediment import` is an ALIAS of
496
- // `peaks loop import` for one release cycle. Emit the
497
- // deprecation warning so downstream tooling can upgrade.
498
- 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");
499
- return { ok: true, data: { asName: asName ?? basename(bundlePath) } };
500
- }
501
- case 'gc-blobs': {
502
- const dryRun = flags.bool('dry-run');
503
- const stateDbPath = resolveStateDbPath({ home });
504
- const blobsDir = resolveBlobsDir({ home });
505
- const db = openStateDb(stateDbPath);
506
- try {
507
- const removed = gcBlobs({ db, blobsDir, dryRun });
508
- return { ok: true, data: { removed } };
509
- }
510
- catch (e) {
511
- const msg = e instanceof Error ? e.message : String(e);
512
- return { ok: false, error: msg };
513
- }
514
- finally {
515
- db.close();
516
- }
517
- }
518
- case 'search': {
519
- const query = positional[1] ?? flags.maybeString('q') ?? '';
520
- if (!query)
521
- return { ok: false, error: 'MISSING_ARG: search requires <query>' };
522
- const beesDir = resolveUserBeesDir({ home });
523
- const matches = [];
524
- const warnings = [];
525
- if (existsSync(beesDir)) {
526
- const q = query.toLowerCase();
527
- for (const name of readdirSync(beesDir)) {
528
- const manifestPath = join(beesDir, name, 'manifest.json');
529
- if (!existsSync(manifestPath))
530
- continue;
531
- let m;
532
- try {
533
- m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
534
- }
535
- catch (e) {
536
- const msg = e instanceof Error ? e.message : String(e);
537
- warnings.push(`skipped ${name}: ${msg}`);
538
- continue;
539
- }
540
- const haystack = `${m.name ?? ''} ${m.description ?? ''}`.toLowerCase();
541
- if (haystack.includes(q)) {
542
- matches.push({
543
- name: m.name,
544
- description: m.description,
545
- source: m.source,
546
- promotion_status: m.promotion_status
547
- });
548
- }
549
- }
550
- }
551
- return { ok: true, data: { matches, warnings } };
552
- }
553
- case 'recent': {
554
- const sinceRaw = flags.maybeString('since') ?? '7d';
555
- const m = sinceRaw.match(/^(\d+)d$/);
556
- if (!m)
557
- return { ok: false, error: 'MISSING_ARG: recent requires --since Nd (e.g. 7d)' };
558
- const sinceDays = parseInt(m[1], 10);
559
- const cutoff = new Date(Date.now() - sinceDays * 24 * 60 * 60 * 1000).toISOString();
560
- const beesDir = resolveUserBeesDir({ home });
561
- const matches = [];
562
- const warnings = [];
563
- if (existsSync(beesDir)) {
564
- for (const name of readdirSync(beesDir)) {
565
- const manifestPath = join(beesDir, name, 'manifest.json');
566
- if (!existsSync(manifestPath))
567
- continue;
568
- let b;
569
- try {
570
- b = JSON.parse(readFileSync(manifestPath, 'utf-8'));
571
- }
572
- catch (e) {
573
- const msg = e instanceof Error ? e.message : String(e);
574
- warnings.push(`skipped ${name}: ${msg}`);
575
- continue;
576
- }
577
- if (typeof b.lastTouchedAt === 'string' && b.lastTouchedAt >= cutoff) {
578
- matches.push({
579
- name: b.name,
580
- lastTouchedAt: b.lastTouchedAt,
581
- promotion_status: b.promotion_status
582
- });
583
- }
584
- }
585
- }
586
- return { ok: true, data: { matches, warnings } };
587
- }
588
- case 'show': {
589
- const name = positional[1];
590
- if (!name)
591
- return { ok: false, error: 'MISSING_ARG: show requires <name>' };
592
- const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
593
- if (!existsSync(manifestPath))
594
- return { ok: false, error: 'BEE_NOT_FOUND' };
595
- try {
596
- return { ok: true, data: JSON.parse(readFileSync(manifestPath, 'utf-8')) };
597
- }
598
- catch (e) {
599
- const msg = e instanceof Error ? e.message : String(e);
600
- return { ok: false, error: `MANIFEST_CORRUPT: ${msg}` };
601
- }
602
- }
603
- default:
604
- return { ok: false, error: `UNKNOWN_VERB: ${verb ?? ''}` };
47
+ const handler = verb === undefined ? undefined : VERBS.get(verb);
48
+ if (handler === undefined) {
49
+ return { ok: false, error: `UNKNOWN_VERB: ${verb ?? ''}` };
605
50
  }
51
+ return await handler({ home, positional, flags });
606
52
  }
607
53
  catch (e) {
608
54
  if (e instanceof SYSTEM_PATH_FORBIDDEN) {
@@ -0,0 +1,9 @@
1
+ import type { CliResult, SedimentContext } from './sediment-command-shared.js';
2
+ export declare function addSegment(ctx: SedimentContext): CliResult;
3
+ export declare function addBee(ctx: SedimentContext): CliResult;
4
+ export declare function listPool(ctx: SedimentContext): CliResult;
5
+ export declare function rebuildIndex(ctx: SedimentContext): CliResult;
6
+ export declare function refineBee(ctx: SedimentContext): CliResult;
7
+ export declare function cloneBee(ctx: SedimentContext): CliResult;
8
+ export declare function promote(ctx: SedimentContext): CliResult;
9
+ export declare function retire(ctx: SedimentContext): CliResult;