peaks-loop 4.0.0-beta.9 → 4.0.1

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 (552) hide show
  1. package/CHANGELOG.md +910 -141
  2. package/README-en.md +26 -7
  3. package/README.md +75 -6
  4. package/agents/karpathy-reviewer.md +33 -0
  5. package/bin/peaks.js +0 -0
  6. package/dist/cli/cli-helpers.d.ts +31 -6
  7. package/dist/cli/cli-helpers.js +48 -25
  8. package/dist/cli/commands/_register.d.ts +3 -0
  9. package/dist/cli/commands/_register.js +139 -0
  10. package/dist/cli/commands/_super.d.ts +10 -0
  11. package/dist/cli/commands/_super.js +97 -0
  12. package/dist/cli/commands/adapter-commands-s2a.js +1 -1
  13. package/dist/cli/commands/asset-commands.js +33 -16
  14. package/dist/cli/commands/audit-commands.js +2 -2
  15. package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
  16. package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
  17. package/dist/cli/commands/bee-commands.js +1 -1
  18. package/dist/cli/commands/capability-commands.js +1 -1
  19. package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
  20. package/dist/cli/commands/changeset-commands.d.ts +13 -0
  21. package/dist/cli/commands/changeset-commands.js +46 -0
  22. package/dist/cli/commands/code-commands.d.ts +11 -1
  23. package/dist/cli/commands/code-commands.js +19 -699
  24. package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
  25. package/dist/cli/commands/code-job-shape-commands.js +164 -0
  26. package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
  27. package/dist/cli/commands/code-mode-gate-commands.js +223 -0
  28. package/dist/cli/commands/code-review-commands.js +2 -2
  29. package/dist/cli/commands/code-run-command.d.ts +12 -0
  30. package/dist/cli/commands/code-run-command.js +68 -0
  31. package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
  32. package/dist/cli/commands/code-runtime-commands.js +391 -0
  33. package/dist/cli/commands/codegraph-commands.js +1 -1
  34. package/dist/cli/commands/compact-command.js +53 -1
  35. package/dist/cli/commands/complexity-commands.js +1 -1
  36. package/dist/cli/commands/config-commands.js +4 -75
  37. package/dist/cli/commands/container-commands.d.ts +28 -0
  38. package/dist/cli/commands/container-commands.js +221 -0
  39. package/dist/cli/commands/context-commands.js +3 -2
  40. package/dist/cli/commands/core/artifacts-command.js +1 -1
  41. package/dist/cli/commands/core/binding-commands.js +1 -1
  42. package/dist/cli/commands/core/doctor-command.js +63 -3
  43. package/dist/cli/commands/core/memory-command.js +1 -1
  44. package/dist/cli/commands/core/profile-command.js +1 -1
  45. package/dist/cli/commands/core/proxy-command.js +1 -1
  46. package/dist/cli/commands/core/session-command.js +9 -7
  47. package/dist/cli/commands/core/skill-command.js +7 -4
  48. package/dist/cli/commands/core/standards-command.js +1 -1
  49. package/dist/cli/commands/cron-commands.d.ts +57 -0
  50. package/dist/cli/commands/cron-commands.js +257 -0
  51. package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
  52. package/dist/cli/commands/cron-scheduler-commands.js +284 -0
  53. package/dist/cli/commands/dashboard-commands.d.ts +4 -0
  54. package/dist/cli/commands/dashboard-commands.js +10 -0
  55. package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
  56. package/dist/cli/commands/dashboard-long-run.js +122 -0
  57. package/dist/cli/commands/dashboard-summary.d.ts +12 -0
  58. package/dist/cli/commands/dashboard-summary.js +58 -0
  59. package/dist/cli/commands/dispatch-commands.d.ts +0 -7
  60. package/dist/cli/commands/dispatch-commands.js +372 -8
  61. package/dist/cli/commands/dispatch-from-dag.js +4 -1
  62. package/dist/cli/commands/doc-commands.js +1 -1
  63. package/dist/cli/commands/ecc-commands.d.ts +30 -0
  64. package/dist/cli/commands/ecc-commands.js +119 -0
  65. package/dist/cli/commands/evolution-commands.js +1 -1
  66. package/dist/cli/commands/feedback-commands.js +1 -1
  67. package/dist/cli/commands/final-review-commands.js +1 -1
  68. package/dist/cli/commands/fixture-commands.js +1 -1
  69. package/dist/cli/commands/fork-commands.js +1 -1
  70. package/dist/cli/commands/gate-commands.js +128 -6
  71. package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
  72. package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
  73. package/dist/cli/commands/heartbeat-commands.js +76 -5
  74. package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
  75. package/dist/cli/commands/heartbeat-watch-command.js +146 -0
  76. package/dist/cli/commands/hook-handle.js +1 -1
  77. package/dist/cli/commands/hooks-commands.js +126 -10
  78. package/dist/cli/commands/ide-commands.js +1 -1
  79. package/dist/cli/commands/impact-commands.js +1 -1
  80. package/dist/cli/commands/job-commands.js +34 -1
  81. package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
  82. package/dist/cli/commands/lease-metrics-commands.js +231 -0
  83. package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
  84. package/dist/cli/commands/lease-stats-commands.js +107 -0
  85. package/dist/cli/commands/legacy-commands.js +1 -1
  86. package/dist/cli/commands/log-commands.js +1 -1
  87. package/dist/cli/commands/loop-commands.js +1 -1
  88. package/dist/cli/commands/loop-eval-commands.js +1 -1
  89. package/dist/cli/commands/memory-commands.js +1 -1
  90. package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
  91. package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
  92. package/dist/cli/commands/mut-commands.d.ts +1 -1
  93. package/dist/cli/commands/mut-commands.js +1 -5
  94. package/dist/cli/commands/observability-commands.js +1 -1
  95. package/dist/cli/commands/openspec-commands.js +65 -4
  96. package/dist/cli/commands/perf-audit-commands.js +3 -3
  97. package/dist/cli/commands/perf-commands.js +1 -1
  98. package/dist/cli/commands/polyrepo-commands.js +1 -1
  99. package/dist/cli/commands/prd-blocks-commands.js +1 -1
  100. package/dist/cli/commands/prd-commands.js +4 -2
  101. package/dist/cli/commands/preferences-commands.js +23 -3
  102. package/dist/cli/commands/project-commands.js +1 -1
  103. package/dist/cli/commands/qa-business-review-commands.js +1 -1
  104. package/dist/cli/commands/qa-commands.d.ts +1 -1
  105. package/dist/cli/commands/qa-commands.js +39 -3
  106. package/dist/cli/commands/release-commands.d.ts +15 -0
  107. package/dist/cli/commands/release-commands.js +113 -21
  108. package/dist/cli/commands/request-commands.js +1 -1
  109. package/dist/cli/commands/retrospective-commands.js +1 -1
  110. package/dist/cli/commands/reviewer-commands.js +1 -1
  111. package/dist/cli/commands/role-commands.js +1 -1
  112. package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
  113. package/dist/cli/commands/runtime-commands-helpers.js +24 -0
  114. package/dist/cli/commands/runtime-commands.js +1 -2
  115. package/dist/cli/commands/sc-commands.js +4 -2
  116. package/dist/cli/commands/scan-commands.js +1 -1
  117. package/dist/cli/commands/security-audit-commands.js +3 -3
  118. package/dist/cli/commands/sediment-commands.js +10 -1
  119. package/dist/cli/commands/session-24h-mode.d.ts +26 -0
  120. package/dist/cli/commands/session-24h-mode.js +196 -0
  121. package/dist/cli/commands/share-commands.d.ts +19 -0
  122. package/dist/cli/commands/share-commands.js +121 -2
  123. package/dist/cli/commands/skill-conformance-commands.js +1 -1
  124. package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
  125. package/dist/cli/commands/skill-search-commands.js +4 -1
  126. package/dist/cli/commands/slice-commands.js +1 -1
  127. package/dist/cli/commands/slice-integrate-commands.js +1 -1
  128. package/dist/cli/commands/slice-review-commands.js +1 -1
  129. package/dist/cli/commands/smoke-commands.js +1 -1
  130. package/dist/cli/commands/sop-commands.js +1 -1
  131. package/dist/cli/commands/spill-demo-command.d.ts +7 -0
  132. package/dist/cli/commands/spill-demo-command.js +29 -0
  133. package/dist/cli/commands/statusline-commands.d.ts +12 -0
  134. package/dist/cli/commands/statusline-commands.js +79 -17
  135. package/dist/cli/commands/sub-agent-commands.js +2 -1
  136. package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
  137. package/dist/cli/commands/sub-agent-shared.js +24 -1
  138. package/dist/cli/commands/swarm-commands.d.ts +13 -0
  139. package/dist/cli/commands/swarm-commands.js +77 -0
  140. package/dist/cli/commands/tech-commands.d.ts +64 -0
  141. package/dist/cli/commands/tech-commands.js +195 -0
  142. package/dist/cli/commands/understand-commands.js +1 -1
  143. package/dist/cli/commands/upgrade-commands.d.ts +2 -0
  144. package/dist/cli/commands/upgrade-commands.js +40 -5
  145. package/dist/cli/commands/user-touchpoint-commands.js +1 -1
  146. package/dist/cli/commands/verdict-aggregate-command.js +1 -1
  147. package/dist/cli/commands/vm-commands.d.ts +31 -0
  148. package/dist/cli/commands/vm-commands.js +274 -0
  149. package/dist/cli/commands/workflow-commands.js +24 -1
  150. package/dist/cli/commands/workflow-plan-commands.js +1 -1
  151. package/dist/cli/commands/workspace/init-command.js +1 -1
  152. package/dist/cli/commands/workspace/migrate-command.js +1 -1
  153. package/dist/cli/commands/workspace/reconcile-command.js +1 -1
  154. package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
  155. package/dist/cli/commands/worktree-auth-commands.js +652 -0
  156. package/dist/cli/index.js +58 -13
  157. package/dist/cli/program.d.ts +2 -2
  158. package/dist/cli/program.js +86 -281
  159. package/dist/services/24h-mode/decider.d.ts +103 -0
  160. package/dist/services/24h-mode/decider.js +144 -0
  161. package/dist/services/24h-mode/index.d.ts +12 -0
  162. package/dist/services/24h-mode/index.js +12 -0
  163. package/dist/services/24h-mode/state.d.ts +48 -0
  164. package/dist/services/24h-mode/state.js +51 -0
  165. package/dist/services/24h-mode/store.d.ts +27 -0
  166. package/dist/services/24h-mode/store.js +119 -0
  167. package/dist/services/artifacts/artifact-prerequisites.js +1 -1
  168. package/dist/services/artifacts/request-artifact-service.js +1 -1
  169. package/dist/services/artifacts/workspace-service.js +1 -1
  170. package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
  171. package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
  172. package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
  173. package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
  174. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
  175. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
  176. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
  177. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
  178. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
  179. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
  180. package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
  181. package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
  182. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
  183. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
  184. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
  185. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
  186. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
  187. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
  188. package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
  189. package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
  190. package/dist/services/audit/static-service.d.ts +32 -25
  191. package/dist/services/audit/static-service.js +30 -109
  192. package/dist/services/audit-independent/index.d.ts +2 -0
  193. package/dist/services/audit-independent/index.js +2 -0
  194. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
  195. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
  196. package/dist/services/changeset/changeset-check-service.d.ts +22 -0
  197. package/dist/services/changeset/changeset-check-service.js +47 -0
  198. package/dist/services/code/auto-compact-modes.d.ts +30 -0
  199. package/dist/services/code/auto-compact-modes.js +38 -0
  200. package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
  201. package/dist/services/code/auto-compact-orchestrator.js +101 -21
  202. package/dist/services/code/dag-orchestrator.d.ts +30 -1
  203. package/dist/services/code/dag-orchestrator.js +106 -1
  204. package/dist/services/code/status-line-renderer.d.ts +2 -0
  205. package/dist/services/code/status-line-renderer.js +21 -3
  206. package/dist/services/code-review/ocr-service.d.ts +1 -1
  207. package/dist/services/code-review/ocr-service.js +6 -3
  208. package/dist/services/compact-history/compact-history-service.d.ts +41 -0
  209. package/dist/services/compact-history/compact-history-service.js +62 -0
  210. package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
  211. package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
  212. package/dist/services/config/config-service.d.ts +1 -12
  213. package/dist/services/config/config-service.js +3 -72
  214. package/dist/services/config/config-types.d.ts +2 -4
  215. package/dist/services/config/config-types.js +1 -1
  216. package/dist/services/container/container-lease.d.ts +67 -0
  217. package/dist/services/container/container-lease.js +135 -0
  218. package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
  219. package/dist/services/context/auto-compact-dispatcher.js +32 -102
  220. package/dist/services/context/auto-compact-reader.js +1 -1
  221. package/dist/services/context/auto-compact-types.d.ts +27 -2
  222. package/dist/services/context/auto-compact-types.js +8 -1
  223. package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
  224. package/dist/services/context/build-dispatch-system-prompt.js +117 -0
  225. package/dist/services/context/collector.d.ts +2 -2
  226. package/dist/services/context/context-builder.d.ts +4 -4
  227. package/dist/services/context/context-schema.d.ts +48 -48
  228. package/dist/services/context/ide-detect.d.ts +4 -0
  229. package/dist/services/context/ide-detect.js +24 -0
  230. package/dist/services/context/main-session-monitor.d.ts +1 -4
  231. package/dist/services/context/main-session-monitor.js +1 -24
  232. package/dist/services/context/memory-index-reader.d.ts +8 -0
  233. package/dist/services/context/memory-index-reader.js +57 -0
  234. package/dist/services/context/memory-lru-cache.d.ts +12 -0
  235. package/dist/services/context/memory-lru-cache.js +60 -0
  236. package/dist/services/context/memory-preflight-config.d.ts +19 -0
  237. package/dist/services/context/memory-preflight-config.js +25 -0
  238. package/dist/services/context/memory-preflight-service.d.ts +19 -0
  239. package/dist/services/context/memory-preflight-service.js +120 -0
  240. package/dist/services/context/spillover-store.d.ts +23 -0
  241. package/dist/services/context/spillover-store.js +155 -0
  242. package/dist/services/context/spillover-types.d.ts +18 -0
  243. package/dist/services/context/spillover-types.js +1 -0
  244. package/dist/services/crystallization/crystallization-service.d.ts +22 -5
  245. package/dist/services/crystallization/crystallization-service.js +8 -14
  246. package/dist/services/crystallization/crystallization-types.d.ts +6 -6
  247. package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
  248. package/dist/services/crystallization/index.d.ts +13 -0
  249. package/dist/services/crystallization/index.js +13 -0
  250. package/dist/services/dashboard/project-dashboard-service.js +2 -2
  251. package/dist/services/dispatch/await-batch.d.ts +70 -0
  252. package/dist/services/dispatch/await-batch.js +272 -0
  253. package/dist/services/dispatch/batch-counter.js +1 -1
  254. package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
  255. package/dist/services/dispatch/dispatch-record-writer.js +239 -9
  256. package/dist/services/dispatch/slice-dag.d.ts +46 -0
  257. package/dist/services/dispatch/slice-dag.js +6 -0
  258. package/dist/services/dispatch/stage-enum.d.ts +27 -0
  259. package/dist/services/dispatch/stage-enum.js +48 -0
  260. package/dist/services/dispatch/startup-timeout.d.ts +86 -0
  261. package/dist/services/dispatch/startup-timeout.js +97 -0
  262. package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
  263. package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
  264. package/dist/services/dispatch/test-tool-detection.js +80 -0
  265. package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
  266. package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
  267. package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
  268. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
  269. package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
  270. package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
  271. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
  272. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
  273. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
  274. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
  275. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
  276. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
  277. package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
  278. package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
  279. package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
  280. package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
  281. package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
  282. package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
  283. package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
  284. package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
  285. package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
  286. package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
  287. package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
  288. package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
  289. package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
  290. package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
  291. package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
  292. package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
  293. package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
  294. package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
  295. package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
  296. package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
  297. package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
  298. package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
  299. package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
  300. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
  301. package/dist/services/doctor/doctor-service/index.d.ts +48 -0
  302. package/dist/services/doctor/doctor-service/index.js +254 -0
  303. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
  304. package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
  305. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
  306. package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
  307. package/dist/services/doctor/doctor-service/types.d.ts +245 -0
  308. package/dist/services/doctor/doctor-service/types.js +15 -0
  309. package/dist/services/doctor/doctor-service.d.ts +15 -146
  310. package/dist/services/doctor/doctor-service.js +22 -926
  311. package/dist/services/doctor/index.d.ts +22 -0
  312. package/dist/services/doctor/index.js +22 -0
  313. package/dist/services/env/shell-probe.d.ts +71 -0
  314. package/dist/services/env/shell-probe.js +161 -0
  315. package/dist/services/evolution/evolution-types.d.ts +39 -39
  316. package/dist/services/final-review/final-review-service.d.ts +11 -1
  317. package/dist/services/final-review/index.d.ts +2 -0
  318. package/dist/services/final-review/index.js +1 -0
  319. package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
  320. package/dist/services/hooks/auto-compact-hook-install.js +4 -5
  321. package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
  322. package/dist/services/hooks/worktree-authorization-gate.js +492 -0
  323. package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
  324. package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
  325. package/dist/services/ide/adapters/qoder-adapter.js +57 -0
  326. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
  327. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
  328. package/dist/services/ide/ide-registry.js +6 -0
  329. package/dist/services/ide/ide-types.d.ts +1 -1
  330. package/dist/services/job/job-types.d.ts +56 -56
  331. package/dist/services/job-snapshot/index.d.ts +8 -0
  332. package/dist/services/job-snapshot/index.js +7 -0
  333. package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
  334. package/dist/services/job-snapshot/types.d.ts +7 -0
  335. package/dist/services/job-snapshot/types.js +1 -0
  336. package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
  337. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
  338. package/dist/services/log/retention.d.ts +16 -0
  339. package/dist/services/log/retention.js +17 -0
  340. package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
  341. package/dist/services/loop/loop-release-types.d.ts +24 -24
  342. package/dist/services/loop/monotonic-runner.d.ts +17 -11
  343. package/dist/services/loop/monotonic-runner.js +118 -79
  344. package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
  345. package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
  346. package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
  347. package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
  348. package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
  349. package/dist/services/memory/project-memory-service/index/search.js +194 -0
  350. package/dist/services/memory/project-memory-service/index.d.ts +9 -0
  351. package/dist/services/memory/project-memory-service/index.js +24 -0
  352. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
  353. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
  354. package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
  355. package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
  356. package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
  357. package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
  358. package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
  359. package/dist/services/memory/project-memory-service/store/paths.js +116 -0
  360. package/dist/services/memory/project-memory-service/types.d.ts +128 -0
  361. package/dist/services/memory/project-memory-service/types.js +9 -0
  362. package/dist/services/memory/project-memory-service.d.ts +1 -167
  363. package/dist/services/memory/project-memory-service.js +19 -816
  364. package/dist/services/migrate-skill-name/schema.d.ts +2 -2
  365. package/dist/services/observability/aggregation.d.ts +27 -0
  366. package/dist/services/observability/aggregation.js +72 -0
  367. package/dist/services/observability/observability-service.d.ts +73 -7
  368. package/dist/services/observability/observability-service.js +87 -1
  369. package/dist/services/openspec/artifact-boundary.d.ts +138 -0
  370. package/dist/services/openspec/artifact-boundary.js +150 -0
  371. package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
  372. package/dist/services/openspec/coverage-evidence-reader.js +386 -0
  373. package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
  374. package/dist/services/openspec/openspec-archive-service.js +320 -8
  375. package/dist/services/openspec/openspec-bridge-service.js +1 -1
  376. package/dist/services/openspec/openspec-init-service.js +1 -1
  377. package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
  378. package/dist/services/openspec/openspec-render-service.js +7 -4
  379. package/dist/services/openspec/openspec-scan-service.js +1 -1
  380. package/dist/services/openspec/openspec-validate-service.js +5 -4
  381. package/dist/services/preferences/preferences-service.js +10 -0
  382. package/dist/services/preferences/preferences-types.d.ts +13 -0
  383. package/dist/services/preferences/preferences-types.js +11 -0
  384. package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
  385. package/dist/services/qa/screenshot-archive-service.js +134 -0
  386. package/dist/services/rd/rd-service.js +10 -11
  387. package/dist/services/rd/types.d.ts +32 -32
  388. package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
  389. package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
  390. package/dist/services/recommendations/capability-seed-items.js +0 -1
  391. package/dist/services/recommendations/capability-seed-mappings.js +0 -1
  392. package/dist/services/recommendations/capability-seed-sources.js +0 -1
  393. package/dist/services/release/version-precheck-service.d.ts +51 -0
  394. package/dist/services/release/version-precheck-service.js +257 -0
  395. package/dist/services/scan/acceptance-coverage-service.js +1 -1
  396. package/dist/services/scan/archetype-service.js +1 -1
  397. package/dist/services/scan/existing-system-service.js +1 -1
  398. package/dist/services/scan/libraries-service.js +1 -1
  399. package/dist/services/sediment/json-schema.d.ts +40 -40
  400. package/dist/services/share/bundle-types.d.ts +12 -12
  401. package/dist/services/share/run-state-contract.d.ts +2 -2
  402. package/dist/services/skill/skill-search-service.d.ts +12 -7
  403. package/dist/services/skill/skill-search-service.js +8 -4
  404. package/dist/services/skillhub/migrations/001-initial.sql +71 -0
  405. package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
  406. package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
  407. package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
  408. package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
  409. package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
  410. package/dist/services/skills/hooks-settings-service.d.ts +75 -0
  411. package/dist/services/skills/hooks-settings-service.js +230 -2
  412. package/dist/services/skills/skill-registry.d.ts +1 -0
  413. package/dist/services/skills/skill-registry.js +6 -4
  414. package/dist/services/skills/skill-runbook-service.js +1 -1
  415. package/dist/services/slice/slice-check-service.js +1 -1
  416. package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
  417. package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
  418. package/dist/services/standards/missing-standards-detector.d.ts +25 -0
  419. package/dist/services/standards/missing-standards-detector.js +43 -12
  420. package/dist/services/tech/tech-change-id-service.d.ts +82 -0
  421. package/dist/services/tech/tech-change-id-service.js +117 -0
  422. package/dist/services/understand/understand-hybrid-service.js +1 -1
  423. package/dist/services/understand/understand-scan-service.js +2 -2
  424. package/dist/services/upgrade/upgrade-service.js +4 -3
  425. package/dist/services/verdict/envelopes.d.ts +2 -2
  426. package/dist/services/verdict/envelopes.js +2 -2
  427. package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
  428. package/dist/services/vm/vm-lease.d.ts +40 -0
  429. package/dist/services/vm/vm-lease.js +137 -0
  430. package/dist/services/workflow/autonomous-resume-writer.js +1 -1
  431. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
  432. package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
  433. package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
  434. package/dist/services/workflow/pipeline-verify-service.js +42 -218
  435. package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
  436. package/dist/services/workflow/pipeline-verify-types.js +10 -0
  437. package/dist/services/workflow/plan-reader.d.ts +1 -1
  438. package/dist/services/workflow/plan-reader.js +1 -1
  439. package/dist/services/workflow/plan-refresher.d.ts +1 -1
  440. package/dist/services/workflow/plan-refresher.js +1 -1
  441. package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
  442. package/dist/services/workflow/plan-trigger-detector.js +1 -1
  443. package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
  444. package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
  445. package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
  446. package/dist/services/workflow/workflow-autonomous-types.js +21 -0
  447. package/dist/services/workflow/workflow-router-service.js +18 -16
  448. package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
  449. package/dist/services/workflow/workflow-spec-lint.js +75 -0
  450. package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
  451. package/dist/services/workflow/workflow-spec-types.js +13 -0
  452. package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
  453. package/dist/services/workflow/workflow-spec-yaml.js +88 -0
  454. package/dist/services/workflow/workflow-spec.d.ts +11 -91
  455. package/dist/services/workflow/workflow-spec.js +16 -145
  456. package/dist/services/workspace/migrate-service.js +1 -1
  457. package/dist/services/workspace/workspace-service.js +1 -1
  458. package/dist/services/worktree/worktree-lease.d.ts +170 -0
  459. package/dist/services/worktree/worktree-lease.js +242 -0
  460. package/package.json +47 -51
  461. package/scripts/clean-dist.mjs +31 -1
  462. package/scripts/copy-templates.mjs +16 -0
  463. package/scripts/sync-version.mjs +53 -2
  464. package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
  465. package/skills/bee/peaks-prd/SKILL.md +16 -0
  466. package/skills/bee/peaks-prd/test-prompts.json +12 -0
  467. package/skills/bee/peaks-qa/SKILL.md +16 -1
  468. package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
  469. package/skills/bee/peaks-qa/test-prompts.json +12 -0
  470. package/skills/bee/peaks-rd/SKILL.md +29 -20
  471. package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
  472. package/skills/bee/peaks-rd/test-prompts.json +12 -0
  473. package/skills/bee/peaks-reviewer/SKILL.md +17 -0
  474. package/skills/bee/peaks-sc/SKILL.md +16 -0
  475. package/skills/bee/peaks-security-audit/SKILL.md +17 -0
  476. package/skills/bee/peaks-txt/SKILL.md +16 -0
  477. package/skills/bee/peaks-txt/test-prompts.json +12 -0
  478. package/skills/bee/peaks-ui/SKILL.md +49 -43
  479. package/skills/bee/peaks-ui/test-prompts.json +12 -0
  480. package/skills/peaks-code/SKILL.md +54 -109
  481. package/skills/peaks-code/references/boundaries.md +15 -1
  482. package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
  483. package/skills/peaks-code/references/external-skill-invocation.md +27 -0
  484. package/skills/peaks-code/references/lease-dashboard.html +224 -0
  485. package/skills/peaks-code/references/lease-stats.sample.json +26 -0
  486. package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
  487. package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
  488. package/skills/peaks-code/references/runbook.md +63 -1
  489. package/skills/peaks-code/references/startup-sequence.md +110 -0
  490. package/skills/peaks-code/references/step-0-8-gate.md +1 -1
  491. package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
  492. package/skills/peaks-code/references/worktree-governance.md +123 -0
  493. package/skills/peaks-code/test-prompts.json +12 -0
  494. package/skills/peaks-doctor/SKILL.md +1 -1
  495. package/skills/peaks-ide/SKILL.md +1 -1
  496. package/skills/peaks-solo/SKILL.md +21 -0
  497. package/skills/peaks-solo/references/triage-decision-table.md +6 -0
  498. package/skills/peaks-sop/test-prompts.json +17 -0
  499. package/dist/cli/commands/agent-commands.d.ts +0 -20
  500. package/dist/cli/commands/agent-commands.js +0 -48
  501. package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
  502. package/dist/cli/commands/classify-classify-commands.js +0 -151
  503. package/dist/cli/commands/contract-commands.d.ts +0 -26
  504. package/dist/cli/commands/contract-commands.js +0 -114
  505. package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
  506. package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
  507. package/dist/cli/commands/worker-commands.d.ts +0 -3
  508. package/dist/cli/commands/worker-commands.js +0 -52
  509. package/dist/services/agent/ecc-agent-service.d.ts +0 -47
  510. package/dist/services/agent/ecc-agent-service.js +0 -143
  511. package/dist/services/config/provider-service.d.ts +0 -48
  512. package/dist/services/config/provider-service.js +0 -143
  513. package/dist/services/context/dispatch-context-guard.d.ts +0 -27
  514. package/dist/services/context/dispatch-context-guard.js +0 -192
  515. package/dist/services/context/shared-channel.d.ts +0 -93
  516. package/dist/services/context/shared-channel.js +0 -308
  517. package/dist/services/filesystem/file-lock.d.ts +0 -11
  518. package/dist/services/filesystem/file-lock.js +0 -152
  519. package/dist/services/mut/assert-scanner.d.ts +0 -6
  520. package/dist/services/mut/assert-scanner.js +0 -116
  521. package/dist/services/mut/index.d.ts +0 -8
  522. package/dist/services/mut/index.js +0 -7
  523. package/dist/services/mut/mut-runner.d.ts +0 -39
  524. package/dist/services/mut/mut-runner.js +0 -29
  525. package/dist/services/mut/production-stryker.d.ts +0 -2
  526. package/dist/services/mut/production-stryker.js +0 -75
  527. package/dist/services/mut/report-builder.d.ts +0 -11
  528. package/dist/services/mut/report-builder.js +0 -110
  529. package/dist/services/mut/report-loader.d.ts +0 -31
  530. package/dist/services/mut/report-loader.js +0 -78
  531. package/dist/services/mut/thresholds.d.ts +0 -21
  532. package/dist/services/mut/thresholds.js +0 -22
  533. package/dist/services/mut/types.d.ts +0 -336
  534. package/dist/services/mut/types.js +0 -59
  535. package/dist/services/providers/minimax-provider-service.d.ts +0 -24
  536. package/dist/services/providers/minimax-provider-service.js +0 -143
  537. package/dist/services/providers/minimax-worker-service.d.ts +0 -21
  538. package/dist/services/providers/minimax-worker-service.js +0 -83
  539. package/dist/shared/fs.d.ts +0 -4
  540. package/dist/shared/fs.js +0 -26
  541. package/dist/shared/paths.d.ts +0 -6
  542. package/dist/shared/paths.js +0 -50
  543. package/dist/shared/result.d.ts +0 -22
  544. package/dist/shared/result.js +0 -46
  545. package/dist/shared/version.d.ts +0 -1
  546. package/dist/shared/version.js +0 -1
  547. package/examples/video-demo/README.md +0 -142
  548. package/examples/video-demo/out/en-closing-960.png +0 -0
  549. package/examples/video-demo/out/zh-closing-960.png +0 -0
  550. package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
  551. package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
  552. /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { findProjectRoot } from '../../services/config/config-safety.js';
17
17
  import { checkPrdBlocks } from '../../services/prd/prd-blocks-checker.js';
18
- import { ok } from '../../shared/result.js';
18
+ import { ok } from 'peaks-loop-shared/result';
19
19
  import { addJsonOption, printResult } from '../cli-helpers.js';
20
20
  export function registerPrdBlocksCommands(program, io) {
21
21
  // Find existing `prd` top-level command (registered by prd-commands.ts).
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { readFile } from 'node:fs/promises';
17
17
  import { initHandoff, readHandoff, showHandoff, verifyHandoff, writeHandoff } from '../../services/prd/handoff-service.js';
18
- import { fail, ok } from '../../shared/result.js';
18
+ import { fail, ok } from 'peaks-loop-shared/result';
19
19
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
20
20
  /** Split a comma-separated string into a trimmed, non-empty list.
21
21
  * Empty / undefined input → empty array. */
@@ -37,7 +37,9 @@ async function resolveBody(bodyArg) {
37
37
  return bodyArg;
38
38
  }
39
39
  export function registerPrdCommands(program, io) {
40
- const prd = program.command('prd').description('peaks-prd role: artifact + handoff primitives');
40
+ const prd = program
41
+ .command('prd', { hidden: true })
42
+ .description('peaks-prd role: artifact + handoff primitives');
41
43
  const handoff = prd.command('handoff').description('Write / verify / show the immutable PRD handoff (sha256-locked, schemaVersion: 2)');
42
44
  // peaks prd handoff init
43
45
  addJsonOption(handoff
@@ -12,6 +12,26 @@ const ALLOWED_KEYS = new Set([
12
12
  'swarmSpeculative',
13
13
  'loopAutonomousEnabled',
14
14
  ]);
15
+ /**
16
+ * Stable, sorted list of allowed preference keys. Used in error messages
17
+ * so a PREFERENCES_KEY_UNKNOWN throw is self-documenting (the operator
18
+ * sees exactly which keys are valid without reading the source).
19
+ */
20
+ const ALLOWED_KEYS_LIST = Array.from(ALLOWED_KEYS).sort();
21
+ /**
22
+ * Build a PREFERENCES_KEY_UNKNOWN error with the allowed-keys list baked
23
+ * in. Throwing a plain Error here is the legacy path that the CLI
24
+ * surfaces verbatim on stderr; the helper exists so all three sites
25
+ * (`get` / `set` / `reset`) emit the same operator-facing message.
26
+ *
27
+ * Stage-3 follow-up (ice-cola surface check 2026-07-22, follow-on to
28
+ * report item 5.3): previously the message was just `PREFERENCES_KEY_UNKNOWN:
29
+ * <key>` which forced the operator to look up valid keys elsewhere. The
30
+ * new message lists the valid keys inline so the response is actionable.
31
+ */
32
+ function unknownKeyError(key) {
33
+ return new Error(`PREFERENCES_KEY_UNKNOWN: ${key}. Allowed keys: ${ALLOWED_KEYS_LIST.join(', ')}.`);
34
+ }
15
35
  export function registerPreferencesCommands(program) {
16
36
  const prefs = program
17
37
  .command('preferences')
@@ -25,7 +45,7 @@ export function registerPreferencesCommands(program) {
25
45
  .action((opts) => {
26
46
  try {
27
47
  if (!ALLOWED_KEYS.has(opts.key)) {
28
- throw new Error(`PREFERENCES_KEY_UNKNOWN: ${opts.key}`);
48
+ throw unknownKeyError(opts.key);
29
49
  }
30
50
  const all = loadPreferences(opts.project);
31
51
  const value = all[opts.key];
@@ -71,7 +91,7 @@ export function registerPreferencesCommands(program) {
71
91
  .action((opts) => {
72
92
  try {
73
93
  if (!ALLOWED_KEYS.has(opts.key)) {
74
- throw new Error(`PREFERENCES_KEY_UNKNOWN: ${opts.key}`);
94
+ throw unknownKeyError(opts.key);
75
95
  }
76
96
  let parsed = opts.value;
77
97
  try {
@@ -106,7 +126,7 @@ export function registerPreferencesCommands(program) {
106
126
  .action((opts) => {
107
127
  try {
108
128
  if (!ALLOWED_KEYS.has(opts.key)) {
109
- throw new Error(`PREFERENCES_KEY_UNKNOWN: ${opts.key}`);
129
+ throw unknownKeyError(opts.key);
110
130
  }
111
131
  const filePath = preferencesPath(opts.project);
112
132
  // Read raw on-disk state (not the merged view) so removing a key
@@ -4,7 +4,7 @@ import { extractSessionMemories, readMemoryIndex, readProjectMemories, readProje
4
4
  import { readBusinessKnowledge } from '../../services/prd/project-scan-reader.js';
5
5
  import { applyStalePolicy, DEFAULT_STALE_DAYS } from '../../shared/stale-policy.js';
6
6
  import { formatMdCompact } from '../../shared/format-md-compact.js';
7
- import { fail, ok } from '../../shared/result.js';
7
+ import { fail, ok } from 'peaks-loop-shared/result';
8
8
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
9
9
  export function registerProjectCommands(program, io) {
10
10
  const project = program.command('project').description('Aggregate Peaks state for a target project (read-only)');
@@ -15,7 +15,7 @@
15
15
  import { findProjectRoot } from '../../services/config/config-safety.js';
16
16
  import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
17
17
  import { acceptQaReview, buildEmptyQaReview, deriveQaDecision, QA_BUSINESS_ITEMS, readQaReview, rejectQaReview, scoreQaItem, writeQaReview } from '../../services/qa/qa-business-review-state.js';
18
- import { fail, ok } from '../../shared/result.js';
18
+ import { fail, ok } from 'peaks-loop-shared/result';
19
19
  import { addJsonOption, printResult } from '../cli-helpers.js';
20
20
  export function registerQaBusinessReviewCommands(program, io) {
21
21
  // G5 commands registered as TOP-LEVEL commands prefixed with `qa-business-`
@@ -28,7 +28,7 @@
28
28
  import { Command } from 'commander';
29
29
  import { type ProgramIO } from '../cli-helpers.js';
30
30
  import { type BrowserEvent } from '../../services/qa/browser-restart-detector.js';
31
- import type { MutReportJson } from '../../services/mut/types.js';
31
+ import { type MutReportJson } from 'peaks-loop-mut';
32
32
  export type QaRunOptions = {
33
33
  project: string;
34
34
  browser?: boolean;
@@ -26,8 +26,11 @@
26
26
  * backend-only or already-covered-by-unit-tests work.
27
27
  */
28
28
  import { join } from 'node:path';
29
+ import { resolve } from 'node:path';
29
30
  import { addJsonOption, printResult } from '../cli-helpers.js';
30
- import { fail, ok } from '../../shared/result.js';
31
+ import { fail, ok } from 'peaks-loop-shared/result';
32
+ import { archiveScreenshots } from '../../services/qa/screenshot-archive-service.js';
33
+ import { getSessionId } from '../../services/session/session-manager.js';
31
34
  import { BrowserRestartDetector } from '../../services/qa/browser-restart-detector.js';
32
35
  import { BrowserEventLogger } from '../../services/qa/browser-event-logger.js';
33
36
  import { BROWSER_REUSE_HINT } from '../../services/qa/browser-reuse-hint.js';
@@ -36,7 +39,7 @@ import { buildContext } from '../../services/context/context-builder.js';
36
39
  // Plan 1 / Task 10 — production fetcher (replaces mockFetcher).
37
40
  import { createHeadroomFetcher } from '../../services/context/headroom-fetcher.js';
38
41
  // Plan 2 / Task 8 — consume MUT.sig from peaks-mut into verdict envelope.
39
- import { loadMutReport, mutReportPath } from '../../services/mut/index.js';
42
+ import { loadMutReport, mutReportPath } from 'peaks-loop-mut';
40
43
  function buildHeadroomFetcher(sid) {
41
44
  return createHeadroomFetcher({
42
45
  cacheDir: `.peaks/_runtime/${sid}/doc-cache`,
@@ -200,7 +203,7 @@ export function readQaRunOptions(options) {
200
203
  }
201
204
  export function registerQaCommands(program, io) {
202
205
  const qa = program
203
- .command('qa')
206
+ .command('qa', { hidden: true })
204
207
  .description('peaks-qa slice: run QA gates (functional / security / browser E2E / mutation) for the active project');
205
208
  addJsonOption(qa
206
209
  .command('run')
@@ -268,4 +271,37 @@ export function registerQaCommands(program, io) {
268
271
  process.exitCode = 1;
269
272
  }
270
273
  });
274
+ // rid-012 (2026-07-27) — screenshot archive.
275
+ // Enforces peaks-qa SKILL.md "Hard contracts for browser validation"
276
+ // Contract 1: every Playwright `browser_take_screenshot` MUST land under
277
+ // `.peaks/_runtime/<sessionId>/qa/screenshots/`, not at the project root.
278
+ // When the LLM forgets to pass `filename`, Playwright MCP scatters
279
+ // `.png` files at the repo top level. This subcommand is the
280
+ // remediation: scan `--source` (default: project root) and move stray
281
+ // screenshots into `.peaks/_runtime/<session-id>/qa/screenshots/`.
282
+ addJsonOption(qa
283
+ .command('archive-screenshots')
284
+ .description('Move stray Playwright screenshots (.png/.jpg/.jpeg) from the ' +
285
+ 'project root into .peaks/_runtime/<session-id>/qa/screenshots/. ' +
286
+ 'Enforces peaks-qa SKILL.md Contract 1.')
287
+ .option('--source <dir>', 'directory to scan for stray screenshots (default: project root)', '.')
288
+ .option('--project <path>', 'project root (default: cwd)', '.')
289
+ .option('--session-id <sid>', 'target session id; defaults to the active session', '')).action((options) => {
290
+ try {
291
+ const projectRoot = resolve(options.project);
292
+ const sid = options.sessionId?.trim() || getSessionId(projectRoot) || 'ad-hoc';
293
+ const targetDir = join(projectRoot, '.peaks', '_runtime', sid, 'qa', 'screenshots');
294
+ const envelope = archiveScreenshots({ sourceDir: options.source, targetDir });
295
+ printResult(io, ok('qa.archive-screenshots', envelope, [], envelope.moved.length === 0
296
+ ? ['No stray screenshots found in ' + envelope.scannedSource]
297
+ : [
298
+ `Moved ${envelope.moved.length} file(s) to ${envelope.targetDir}`,
299
+ 'Re-run peaks qa run to verify the gate passes'
300
+ ]), options.json);
301
+ }
302
+ catch (error) {
303
+ process.exitCode = 1;
304
+ printResult(io, fail('qa.archive-screenshots', 'ARCHIVE_FAILED', error instanceof Error ? error.message : 'Unknown error', { project: options.project, source: options.source }, ['Verify the source dir exists and is readable']), options.json);
305
+ }
306
+ });
271
307
  }
@@ -19,6 +19,21 @@
19
19
  */
20
20
  import type { Command } from 'commander';
21
21
  import { isReleaseStage } from '../../services/release/release-state.js';
22
+ import { type LayerResult } from '../../services/release/version-precheck-service.js';
22
23
  import { type ProgramIO } from '../cli-helpers.js';
24
+ export declare function executeCanaryAction(opts: {
25
+ percent: string;
26
+ note?: string;
27
+ project?: string;
28
+ json?: boolean;
29
+ }, io: ProgramIO, projectRoot: string): {
30
+ ok: boolean;
31
+ payload: Readonly<Record<string, unknown>>;
32
+ status: 'PRECHECK_BLOCKER' | 'INVALID_PERCENT' | 'INVALID_TRANSITION' | 'OK';
33
+ blockerLayer?: {
34
+ name: string;
35
+ result: LayerResult;
36
+ };
37
+ };
23
38
  export declare function registerReleaseCommands(program: Command, io: ProgramIO): void;
24
39
  export { isReleaseStage };
@@ -19,12 +19,74 @@
19
19
  */
20
20
  import { findProjectRoot } from '../../services/config/config-safety.js';
21
21
  import { hotfixRelease, isReleaseStage, planRelease, readReleaseState, rollbackRelease, transitionRelease, watchWindow, writeReleaseState } from '../../services/release/release-state.js';
22
- import { fail, ok } from '../../shared/result.js';
22
+ import { runAllLayers } from '../../services/release/version-precheck-service.js';
23
+ import { runChangesetHardGate } from '../../services/changeset/changeset-check-service.js';
24
+ import { fail, ok } from 'peaks-loop-shared/result';
23
25
  import { addJsonOption, printResult } from '../cli-helpers.js';
24
26
  const CANARY_PERCENTS = {
25
27
  10: 'canary-10',
26
28
  50: 'canary-50'
27
29
  };
30
+ // rid-010 — extracted canary action handler so AC-8 can drive the canary
31
+ // precheck-guard via direct function call (not via program.parseAsync with a
32
+ // mocked service). Returns the result envelope for the caller to print.
33
+ export function executeCanaryAction(opts, io, projectRoot) {
34
+ // rid-010 — precheck guard (Layer A or Layer B blocker refuses canary).
35
+ // rid-011 — changeset hard gate runs inline in the canary closure BEFORE
36
+ // this function is called (step 0 short-circuits with CHANGESET_BLOCKED).
37
+ // Layers C/D default warning → do not block canary; --strict upgrade would
38
+ // be a separate flag (out of scope for rid-011).
39
+ // Layers C/D default warning → do not block canary; --strict upgrade would
40
+ // be a separate flag (out of scope for rid-010).
41
+ const precheck = runAllLayers({ projectRoot, strict: false });
42
+ const blockerEntry = Object.entries(precheck.layers).find(([, l]) => l.status === 'blocker');
43
+ if (blockerEntry !== undefined) {
44
+ const [name, result] = blockerEntry;
45
+ return {
46
+ ok: false,
47
+ status: 'PRECHECK_BLOCKER',
48
+ blockerLayer: { name, result },
49
+ payload: {
50
+ projectRoot,
51
+ precheckSnapshotAt: precheck.snapshotAt,
52
+ layer: name,
53
+ message: result.message,
54
+ remediation: result.remediation
55
+ }
56
+ };
57
+ }
58
+ const percent = Number.parseInt(opts.percent, 10);
59
+ if (percent !== 10 && percent !== 50) {
60
+ return {
61
+ ok: false,
62
+ status: 'INVALID_PERCENT',
63
+ payload: { projectRoot, got: opts.percent }
64
+ };
65
+ }
66
+ const state = readReleaseState(projectRoot);
67
+ const targetStage = CANARY_PERCENTS[percent];
68
+ const result = transitionRelease(state, targetStage, opts.note);
69
+ if ('error' in result) {
70
+ return {
71
+ ok: false,
72
+ status: 'INVALID_TRANSITION',
73
+ payload: { projectRoot, error: result.error }
74
+ };
75
+ }
76
+ writeReleaseState(projectRoot, result.state);
77
+ return {
78
+ ok: true,
79
+ status: 'OK',
80
+ payload: {
81
+ projectRoot,
82
+ percent,
83
+ currentStage: targetStage,
84
+ nextAction: percent === 10
85
+ ? 'peaks release canary --percent 50'
86
+ : 'peaks release promote'
87
+ }
88
+ };
89
+ }
28
90
  export function registerReleaseCommands(program, io) {
29
91
  const release = program
30
92
  .command('release')
@@ -53,37 +115,43 @@ export function registerReleaseCommands(program, io) {
53
115
  'Run `peaks release canary --percent 10` to begin the canary phase.'
54
116
  ]), opts.json ?? false);
55
117
  });
56
- // 2. canary
118
+ // 2. canary — rid-010 wires precheck as the first step via executeCanaryAction
57
119
  addJsonOption(release
58
120
  .command('canary')
59
121
  .description('Advance the active release to a canary stage. Two percent values supported: ' +
60
122
  '10 (first canary, requires stage=planned) and 50 (second canary, requires ' +
61
- 'stage=canary-10). Use `peaks release promote` to complete.')
123
+ 'stage=canary-10). Runs `peaks release precheck` first and refuses with ' +
124
+ 'PRECHECK_BLOCKER if any blocker layer (rootVsShared or tagCollision) fails.')
62
125
  .requiredOption('--percent <10|50>', 'canary percent (10 or 50)')
63
126
  .option('--note <text>', 'optional note for the stage transition')
64
127
  .option('--project <path>', 'project root (default: cwd)')).action((opts) => {
65
- const percent = Number.parseInt(opts.percent, 10);
66
- if (percent !== 10 && percent !== 50) {
67
- printResult(io, fail('release.canary', 'INVALID_PERCENT', `--percent must be 10 or 50 (got "${opts.percent}")`, {}, []), opts.json ?? false);
128
+ const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
129
+ // rid-011 — changeset hard gate (step 0).
130
+ const gate = runChangesetHardGate(projectRoot);
131
+ if (gate.state === 'staged-present') {
132
+ process.exitCode = 1;
133
+ printResult(io, fail('release.canary', 'CHANGESET_BLOCKED', `${gate.stagedFiles.length} staged .changeset/*.md file(s) — refusing canary`, { projectRoot, state: gate.state, stagedFiles: [...gate.stagedFiles], snapshotAt: gate.snapshotAt }, [`Drain pending changesets (coordinating LLM: drain via the standard changeset consumption path), then re-run \`peaks changeset check --project ${projectRoot}\` to confirm clean state.`]), opts.json ?? false);
68
134
  return;
69
135
  }
70
- const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
71
- const state = readReleaseState(projectRoot);
72
- const targetStage = CANARY_PERCENTS[percent];
73
- const result = transitionRelease(state, targetStage, opts.note);
74
- if ('error' in result) {
75
- printResult(io, fail('release.canary', 'INVALID_TRANSITION', result.error, { projectRoot }, []), opts.json ?? false);
136
+ const result = executeCanaryAction(opts, io, projectRoot);
137
+ if (result.status === 'PRECHECK_BLOCKER') {
138
+ const layer = result.blockerLayer;
139
+ printResult(io, fail('release.canary', 'PRECHECK_BLOCKER', `precheck blocker on layer '${layer?.name ?? 'unknown'}': ${layer?.result.message ?? ''}`, result.payload, [
140
+ `Run 'peaks release precheck --project ${projectRoot}' for the full 4-layer envelope.`,
141
+ `Run 'peaks release precheck --strict' to also surface warning-layer issues.`,
142
+ `Remediation: ${layer?.result.remediation ?? ''}`
143
+ ]), opts.json ?? false);
76
144
  return;
77
145
  }
78
- writeReleaseState(projectRoot, result.state);
79
- printResult(io, ok('release.canary', {
80
- projectRoot,
81
- percent,
82
- currentStage: targetStage,
83
- nextAction: percent === 10
84
- ? 'peaks release canary --percent 50'
85
- : 'peaks release promote'
86
- }, [], []), opts.json ?? false);
146
+ if (result.status === 'INVALID_PERCENT') {
147
+ printResult(io, fail('release.canary', 'INVALID_PERCENT', `--percent must be 10 or 50 (got "${opts.percent}")`, result.payload, []), opts.json ?? false);
148
+ return;
149
+ }
150
+ if (result.status === 'INVALID_TRANSITION') {
151
+ printResult(io, fail('release.canary', 'INVALID_TRANSITION', String(result.payload['error'] ?? ''), result.payload, []), opts.json ?? false);
152
+ return;
153
+ }
154
+ printResult(io, ok('release.canary', result.payload, [], []), opts.json ?? false);
87
155
  });
88
156
  // 3. promote
89
157
  addJsonOption(release
@@ -211,6 +279,13 @@ export function registerReleaseCommands(program, io) {
211
279
  .option('--note <text>', 'optional hotfix note')
212
280
  .option('--project <path>', 'project root (default: cwd)')).action((version, opts) => {
213
281
  const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
282
+ // rid-011 — changeset hard gate (step 0). No --skip-changeset-check override.
283
+ const changesetGate = runChangesetHardGate(projectRoot);
284
+ if (changesetGate.state === 'staged-present') {
285
+ process.exitCode = 1;
286
+ printResult(io, fail('release.hotfix', 'CHANGESET_BLOCKED', `${changesetGate.stagedFiles.length} staged .changeset/*.md file(s) — refusing to start hotfix`, { projectRoot, stagedFiles: [...changesetGate.stagedFiles], snapshotAt: changesetGate.snapshotAt }, [`Drain pending changesets (coordinating LLM: drain via the standard changeset consumption path), then re-run \`peaks changeset check --project ${projectRoot}\` to confirm clean state.`]), opts.json ?? false);
287
+ return;
288
+ }
214
289
  const state = readReleaseState(projectRoot);
215
290
  const result = hotfixRelease(state, version, opts.note);
216
291
  if ('error' in result) {
@@ -226,6 +301,23 @@ export function registerReleaseCommands(program, io) {
226
301
  'Hotfix started at canary-10. Run `peaks release canary --percent 50` to advance.'
227
302
  ]), opts.json ?? false);
228
303
  });
304
+ // 8. precheck — rid-010 (Phase 4 slice 1) — 4-layer version precheck.
305
+ addJsonOption(release
306
+ .command('precheck')
307
+ .description('Run the 4-layer version precheck (rootVsShared / tagCollision / ' +
308
+ 'changesetStaged / workspaceLockstep). Layer A+B are blockers by default; ' +
309
+ 'Layer C+D are warnings unless --strict is passed (CI parity mode). ' +
310
+ 'Shared with publish.yml gate-cli-version step §(A).')
311
+ .option('--strict', 'treat warnings as blockers (CI parity mode)')
312
+ .option('--project <path>', 'project root (default: cwd)')).action((opts) => {
313
+ const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
314
+ const envelope = runAllLayers({ projectRoot, strict: opts.strict === true });
315
+ process.exitCode = envelope.ok ? 0 : 1;
316
+ const warningLines = envelope.overall === 'warning'
317
+ ? ['Warning layers reported but did not block. Re-run with --strict to upgrade.']
318
+ : [];
319
+ printResult(io, ok('release.precheck', envelope, [], warningLines), opts.json ?? false);
320
+ });
229
321
  }
230
322
  // Re-export for tests / external consumers.
231
323
  export { isReleaseStage };
@@ -4,7 +4,7 @@ import { ConfirmationRequiredError } from '../../services/mode/mode-enforcement.
4
4
  import { recordBypass, isBypassLimitReached, MAX_BYPASSES_PER_SESSION } from '../../services/mode/bypass-tracker.js';
5
5
  import { lintRequestArtifact } from '../../services/artifacts/artifact-lint-service.js';
6
6
  import { getRepairCycleStatus } from '../../services/artifacts/repair-cycle-service.js';
7
- import { fail, ok } from '../../shared/result.js';
7
+ import { fail, ok } from 'peaks-loop-shared/result';
8
8
  import { formatMdCompact } from '../../shared/format-md-compact.js';
9
9
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
10
10
  /**
@@ -5,7 +5,7 @@ import { loadRetrospectiveIndex } from '../../services/retrospective/retrospecti
5
5
  import { showRetrospective } from '../../services/retrospective/retrospective-show.js';
6
6
  import { searchRetrospective } from '../../services/retrospective/retrospective-search-service.js';
7
7
  import { pickFromList } from '../../services/fuzzy-matching/fzf-pick-service.js';
8
- import { fail, ok } from '../../shared/result.js';
8
+ import { fail, ok } from 'peaks-loop-shared/result';
9
9
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
10
10
  const VALID_RETRO_TYPES = ['refactor', 'feature', 'bugfix', 'config', 'docs', 'chore'];
11
11
  const VALID_RETRO_OUTCOMES = ['shipped', 'blocked', 'in-flight', 'cancelled'];
@@ -2,7 +2,7 @@ import { runReviewer, REVIEWER_ID } from '../../services/reviewer/reviewer-servi
2
2
  import { loadReviewerConfig } from '../../services/reviewer/reviewer-config.js';
3
3
  import { deriveModelFamily } from '../../services/reviewer/model-family.js';
4
4
  import { addJsonOption, printResult } from '../cli-helpers.js';
5
- import { fail, ok } from '../../shared/result.js';
5
+ import { fail, ok } from 'peaks-loop-shared/result';
6
6
  export function registerReviewerCommands(program, io) {
7
7
  const reviewer = program
8
8
  .command('reviewer')
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { findProjectRoot } from '../../services/config/config-safety.js';
12
12
  import { DEFAULT_SENIOR_FE_ROLE, grantPermission, readRoleRegistry, roleHasPermission, upsertRole, writeRoleRegistry } from '../../services/role/role-registry.js';
13
- import { fail, ok } from '../../shared/result.js';
13
+ import { fail, ok } from 'peaks-loop-shared/result';
14
14
  import { addJsonOption, printResult } from '../cli-helpers.js';
15
15
  export function registerRoleCommands(program, io) {
16
16
  const role = program
@@ -0,0 +1,7 @@
1
+ /** Internal helper exposed for tests + future programmatic callers:
2
+ * resolve the registry file location, ensuring the parent dir
3
+ * exists. Idempotent. */
4
+ export declare function ensureRegistryDir(registryFile: string): void;
5
+ /** Internal helper for tests: locate the registry file under the
6
+ * given project root. Thin wrapper so tests can stub the resolution. */
7
+ export declare function registryFileFor(projectRoot: string): string;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Internal helpers for the adapter-registry path used by
3
+ * `peaks adapter register|list`. Extracted from runtime-commands.ts
4
+ * after Task 1.7 (design §13.1) retired the `peaks runtime compact`
5
+ * dispatch — the registry plumbing is still used by the
6
+ * adapter-registration CLI, so it lives here as a stand-alone module
7
+ * rather than re-attaching to the retired dispatch surface.
8
+ */
9
+ import { mkdirSync } from 'node:fs';
10
+ import { dirname } from 'node:path';
11
+ import { AdapterRegistry } from '../../services/adapter/adapter-registry.js';
12
+ /** Internal helper exposed for tests + future programmatic callers:
13
+ * resolve the registry file location, ensuring the parent dir
14
+ * exists. Idempotent. */
15
+ export function ensureRegistryDir(registryFile) {
16
+ mkdirSync(dirname(registryFile), { recursive: true });
17
+ }
18
+ /** Internal helper for tests: locate the registry file under the
19
+ * given project root. Thin wrapper so tests can stub the resolution. */
20
+ export function registryFileFor(projectRoot) {
21
+ const f = AdapterRegistry.defaultFile(projectRoot);
22
+ ensureRegistryDir(f);
23
+ return f;
24
+ }
@@ -1,8 +1,7 @@
1
1
  import { existsSync, mkdirSync } from 'node:fs';
2
2
  import { join, dirname } from 'node:path';
3
3
  import { addJsonOption, printResult } from '../cli-helpers.js';
4
- import { fail, ok } from '../../shared/result.js';
5
- import { getErrorMessage } from '../../shared/result.js';
4
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
6
5
  import { detectRuntime } from '../../services/runtime/runtime-detector.js';
7
6
  import { RuntimeService } from '../../services/runtime/runtime-service.js';
8
7
  import { AdapterRegistry } from '../../services/adapter/adapter-registry.js';
@@ -1,8 +1,10 @@
1
1
  import { createArtifactRetentionReport, createChangeImpact, getChangeTraceabilityStatus, getScHelpText, recordCommitBoundary, validateArtifactRetention } from '../../services/sc/sc-service.js';
2
- import { ok } from '../../shared/result.js';
2
+ import { ok } from 'peaks-loop-shared/result';
3
3
  import { addJsonOption, multipleOption, printResult } from '../cli-helpers.js';
4
4
  export function registerSCCommands(program, io) {
5
- const sc = program.command('sc').description('Source control and change traceability (peaks-sc integration)');
5
+ const sc = program
6
+ .command('sc', { hidden: true })
7
+ .description('Source control and change traceability (peaks-sc integration)');
6
8
  registerSCStatusCommands(sc, io);
7
9
  registerSCArtifactCommands(sc, io);
8
10
  }
@@ -10,7 +10,7 @@ import { scanApiSurface, formatApiSurfaceMarkdown } from '../../services/scan/ap
10
10
  import { scanOrphans, formatOrphanMarkdown } from '../../services/scan/orphan-service.js';
11
11
  import { scanKarpathy, formatKarpathyMarkdown } from '../../services/scan/karpathy-service.js';
12
12
  import { isRequestType, VALID_REQUEST_TYPES } from '../../services/artifacts/artifact-prerequisites.js';
13
- import { fail, ok } from '../../shared/result.js';
13
+ import { fail, ok } from 'peaks-loop-shared/result';
14
14
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
15
15
  function parsePositiveInt(value, fallback) {
16
16
  if (value === undefined)
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { detectSecurityAudit, isSecurityAuditEnvelope, runSecurityAudit, } from '../../services/audit-independent/security-audit-service.js';
2
+ import { detectSecurityAudit, isSecurityAuditEnvelope, runSecurityAudit, } from '../../services/audit-independent/index.js';
3
3
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
4
- import { fail, ok } from '../../shared/result.js';
4
+ import { fail, ok } from 'peaks-loop-shared/result';
5
5
  function resolveEnvelope(envelopePath) {
6
6
  if (envelopePath === undefined || envelopePath === '-') {
7
7
  // Read from stdin
@@ -36,7 +36,7 @@ function readStdinSync() {
36
36
  }
37
37
  export function registerSecurityAuditCommands(program, io) {
38
38
  const securityAudit = program
39
- .command('security-audit')
39
+ .command('security-audit', { hidden: true })
40
40
  .description('Independent security audit skill driver. Reads the immutable peaks-prd handoff (sha256-locked) + the project-level security-template.md, then writes a structured security-<rid>.md artifact. Decoupled from peaks-rd 5-way fan-out per slice v2.12.0 (Group A, Tier 2). See skills/bee/peaks-security-audit/SKILL.md for the full workflow.');
41
41
  addJsonOption(securityAudit
42
42
  .command('detect')
@@ -27,6 +27,7 @@
27
27
  import { writeFileSync, mkdirSync, readFileSync, existsSync, readdirSync, rmSync } from "node:fs";
28
28
  import { join, basename } from "node:path";
29
29
  import { SYSTEM_PATH_FORBIDDEN, assertNotSystemPath, resolveSegmentsDir, resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir, } from "../../services/sediment/pool-paths.js";
30
+ import { peaksHome } from "../../services/sop/sop-paths.js";
30
31
  import { writeBeeManifest } from "../../services/sediment/pool-write.js";
31
32
  import { readPool } from "../../services/sediment/pool-read.js";
32
33
  import { rebuildIndexFromFs } from "../../services/sediment/pool-rebuild-index.js";
@@ -636,7 +637,15 @@ export function registerSedimentCommands(program, io) {
636
637
  .command("sediment <args...>")
637
638
  .description("Sediment pool operations (LLM-coordinated; see peaks-maker skill)")
638
639
  .action(async (args) => {
639
- const home = process.env.HOME ?? process.env.USERPROFILE ?? process.cwd();
640
+ // D-018: peaks-loop's `state.db` (loop engineering + bee sediment pool)
641
+ // lives at PEAKS_HOME-based path, NOT under the project root. The
642
+ // original `process.env.HOME ?? USERPROFILE ?? process.cwd()` would
643
+ // resolve `home` to cwd when invoked from a project (e.g.
644
+ // `peaks skill sediment list` from peaks-loop/), producing
645
+ // `<project>/.peaks/state.db` — wrong. Per design contract
646
+ // (peaks-maker SKILL.md §22 + sop-paths.ts §29), the canonical
647
+ // home is `~/.peaks` (or PEAKS_HOME override for test isolation).
648
+ const home = peaksHome();
640
649
  const r = await runSediment(args, { home });
641
650
  // Delegate the JSON rendering AND the process.exitCode side-effect
642
651
  // to the shared CLI shim helper (Critical #1 fix). The library
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `peaks session 24h-mode` — state-only CLI for the 24h mode backbone.
3
+ *
4
+ * Rid-020a (state-only slice). Exposes four sub-actions so the LLM
5
+ * orchestrator can introspect, transition, audit retry attempts, and
6
+ * reset the 24h state machine without touching the JSON file
7
+ * directly. The LLM is the decision-maker; the CLI is the muscle
8
+ * (same contract as `peaks session checkpoint`).
9
+ *
10
+ * Sub-actions (all accept --json for machine-readable envelopes):
11
+ * - `peaks session 24h-mode state` — read snapshot
12
+ * - `peaks session 24h-mode transition` — move to a new state
13
+ * - `peaks session 24h-mode attempts` — read attempts map
14
+ * - `peaks session 24h-mode reset` — wipe the snapshot
15
+ *
16
+ * peaks-code is the skill that should drive this CLI; we do not
17
+ * add a new top-level verb (peaks-loop is enhancement, not a new
18
+ * CLI surface — see `.peaks/memory/peaks-loop-is-enhancement-not-new-cli.md`).
19
+ */
20
+ import type { Command } from 'commander';
21
+ import { type ProgramIO } from '../cli-helpers.js';
22
+ export declare function registerSession24hModeCommand(session: Command, io: ProgramIO): void;
23
+ export declare const SESSION_24H_MODE_CONSTANTS: {
24
+ readonly STATES: readonly ["IDLE", "BRAINSTORM", "USER_CONFIRM", "24H_ACTIVE", "WAITING_USER", "HANDOFF"];
25
+ readonly HANDOFF_EXIT_CONDITIONS: readonly ["user_abort", "all_triggers_resolved", "b3_unresolvable"];
26
+ };