peaks-loop 4.0.0-beta.9 → 4.0.3

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 +572 -234
  2. package/README-en.md +67 -30
  3. package/README.md +67 -30
  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 +91 -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
package/dist/cli/index.js CHANGED
@@ -1,30 +1,75 @@
1
1
  import { CommanderError } from 'commander';
2
2
  import { createProgram } from './program.js';
3
- import { getErrorMessage } from '../shared/result.js';
3
+ import { getErrorMessage } from 'peaks-loop-shared/result';
4
+ import { printErrorEnvelope } from './cli-helpers.js';
5
+ const defaultIo = {
6
+ stdout: (text) => process.stdout.write(`${text}\n`),
7
+ stderr: (text) => process.stderr.write(`${text}\n`)
8
+ };
9
+ // D-013 wrapper exit-code fix (PART 2): Commander's `--help` short-circuit
10
+ // fires BEFORE `commander.unknownCommand` is raised, so `peaks xxx --help`
11
+ // (where `xxx` is not a registered command) prints the help banner and
12
+ // exits 0 instead of 1. Detect this case BEFORE Commander runs by scanning
13
+ // `process.argv` for a non-option positional token. If present AND
14
+ // `--help` is also present, the user asked for help on an unknown command
15
+ // — emit `COMMAND_NOT_FOUND` envelope + exit 1.
16
+ //
17
+ // This pre-check is intentionally conservative: only fires when BOTH a
18
+ // positional token AND `--help`/`-h` are present. Bare `--help` (no
19
+ // positional) is legitimate help → exit 0. Positional without `--help`
20
+ // is handled by the root `.action()` in `program.ts`.
21
+ //
22
+ // Fix-5 (2026-07-26): skip the pre-check when the first positional token
23
+ // matches a REGISTERED subcommand. `peaks slice --help` is legitimate
24
+ // help on a registered command (slice IS in the program.commands list) —
25
+ // the prior blind pre-check was a false positive that printed
26
+ // `COMMAND_NOT_FOUND` + exit 1 alongside the slice help banner. We
27
+ // still catch true unknowns (`peaks unknown-cmd --help`): `firstPositional`
28
+ // won't be in the registered set, so the pre-check fires and exits 1.
29
+ const argv = process.argv.slice(2);
30
+ const hasHelp = argv.some((arg) => arg === '--help' || arg === '-h');
31
+ const firstPositional = argv.find((arg) => !arg.startsWith('-'));
32
+ if (hasHelp && firstPositional !== undefined) {
33
+ const program = createProgram();
34
+ const registered = new Set(program.commands.map((c) => c.name()));
35
+ if (!registered.has(firstPositional)) {
36
+ // Defer the check by 0ms so Commander's own help handler runs first
37
+ // (it will print help text + try to exit 0). We then override.
38
+ setImmediate(() => {
39
+ printErrorEnvelope(defaultIo, 'cli', 'COMMAND_NOT_FOUND', `Unknown command: ${firstPositional}. Run \`peaks --help\` for available commands.`, { argv: firstPositional, combinedWithHelp: true }, ['Run `peaks --help` to list available commands.']);
40
+ process.exit(1);
41
+ });
42
+ }
43
+ }
4
44
  createProgram().parseAsync(process.argv).catch((error) => {
5
45
  if (error instanceof CommanderError && error.code === 'commander.version') {
6
46
  return;
7
47
  }
8
- // exitOverride() also throws for help; suppress those — the text already went
9
- // to stdout/stderr, the error envelope confuses newcomers. --help is success
10
- // (exit 0); a bad command/option is an error (exit 1).
48
+ // D-013 wrapper exit-code fix: distinguish "bare `peaks --help` /
49
+ // `peaks help <cmd>`" (legitimate help, exit 0) from
50
+ // "`peaks <unknown> --help`" (user typed a non-existent command,
51
+ // even if they added --help, the command itself is invalid → exit 1).
52
+ // Commander only emits `commander.helpDisplayed` for the LEGITIMATE
53
+ // help path (bare `--help` or a registered subcommand's help). For
54
+ // unknown commands, Commander throws `commander.unknownCommand`
55
+ // BEFORE the help text is rendered, so we route that case to the
56
+ // unknownCommand branch below. This preserves the historical behavior
57
+ // for valid help while fixing the unknown-command exit code.
11
58
  if (error instanceof CommanderError) {
12
59
  if (error.code === 'commander.help' || error.code === 'commander.helpDisplayed') {
13
60
  return;
14
61
  }
15
62
  if (error.code === 'commander.missingArgument' || error.code === 'commander.unknownCommand' || error.code === 'commander.unknownOption') {
63
+ // Emit a `COMMAND_NOT_FOUND` JSON envelope for the unknown-command
64
+ // path. The error text already went to stderr via Commander's
65
+ // default handler; we add a structured envelope for LLM-side
66
+ // consumers (Human-NL-Choice-Only: don't tell the human to type
67
+ // a CLI verb — say what the LLM can coordinate).
68
+ printErrorEnvelope(defaultIo, 'cli', 'COMMAND_NOT_FOUND', getErrorMessage(error), {}, ['Run `peaks --help` to list available commands.']);
16
69
  process.exitCode = 1;
17
70
  return;
18
71
  }
19
72
  }
20
- console.error(JSON.stringify({
21
- ok: false,
22
- command: 'cli',
23
- code: 'UNHANDLED_ERROR',
24
- message: getErrorMessage(error),
25
- data: {},
26
- warnings: [],
27
- nextActions: []
28
- }, null, 2));
73
+ printErrorEnvelope(defaultIo, 'cli', 'UNHANDLED_ERROR', getErrorMessage(error), {}, []);
29
74
  process.exitCode = 1;
30
75
  });
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
- import type { ProgramIO } from './cli-helpers.js';
3
- export { printResult, type ProgramIO } from './cli-helpers.js';
2
+ import { type ProgramIO } from './cli-helpers.js';
3
+ export { printErrorEnvelope, printResult, type ProgramIO } from './cli-helpers.js';
4
4
  export declare function __resetBootstrapForTests(): void;
5
5
  export declare function createProgram(io?: ProgramIO): Command;
@@ -1,107 +1,41 @@
1
- import { readdirSync, existsSync } from 'node:fs';
2
- import { join } from 'node:path';
3
1
  import { Command } from 'commander';
4
- import { skillsDir, repoRoot } from '../shared/paths.js';
5
- import { CLI_VERSION } from '../shared/version.js';
2
+ import { repoRoot } from 'peaks-loop-shared/paths';
3
+ import { CLI_VERSION } from 'peaks-loop-shared/version';
4
+ import { autoRegisterAllCommands } from './commands/_register.js';
5
+ import { registerSuperCommands } from './commands/_super.js';
6
6
  import { registerCoreAndArtifactCommands } from './commands/core-artifact-commands.js';
7
7
  import { registerWorkflowCommands } from './commands/workflow-commands.js';
8
8
  import { registerCapabilityWorkerConfigAndSCCommands } from './commands/capability-worker-config-sc-commands.js';
9
- import { registerCodegraphCommands } from './commands/codegraph-commands.js';
10
- import { registerOpenSpecCommands } from './commands/openspec-commands.js';
11
- import { registerPerfCommands } from './commands/perf-commands.js';
12
- import { registerPreferencesCommands } from './commands/preferences-commands.js';
13
- // Slice #014: peaks progress * CLI surface deleted (replaced by sub-agent
14
- // dispatch + heartbeat, slice #009 + #010). Sub-agent progress is
15
- // surfaced via `peaks sub-agent dispatch|heartbeat|share`.
16
- import { registerProjectCommands } from './commands/project-commands.js';
17
- import { registerPrdCommands } from './commands/prd-commands.js';
18
- import { registerRequestCommands } from './commands/request-commands.js';
19
- import { registerRetrospectiveCommands } from './commands/retrospective-commands.js';
20
- import { registerScanCommands } from './commands/scan-commands.js';
21
- import { registerSliceCommands } from './commands/slice-commands.js';
22
- import { registerSopCommands } from './commands/sop-commands.js';
23
- // v2.15.0 slice 002 AC-3: feedback-promotion CLI (`peaks feedback promote`
24
- // + `peaks feedback check-unpromoted`). See
25
- // `sops/feedback-promotion-sop.md`.
26
- import { registerFeedbackCommands } from './commands/feedback-commands.js';
27
- import { registerForkCommands } from './commands/fork-commands.js';
28
- import { registerImpactCommands } from './commands/impact-commands.js';
29
- import { registerSmokeCommands } from './commands/smoke-commands.js';
30
- import { registerReleaseCommands } from './commands/release-commands.js';
31
- import { registerPrdBlocksCommands } from './commands/prd-blocks-commands.js';
32
- import { registerUserTouchpointCommands } from './commands/user-touchpoint-commands.js';
33
- import { registerSliceReviewCommands } from './commands/slice-review-commands.js';
34
- import { registerQaBusinessReviewCommands } from './commands/qa-business-review-commands.js';
35
- import { registerSliceIntegrateCommands } from './commands/slice-integrate-commands.js';
36
- import { registerDocCommands } from './commands/doc-commands.js';
37
- import { registerLegacyCommands } from './commands/legacy-commands.js';
38
- import { registerRoleCommands } from './commands/role-commands.js';
39
- import { registerComplexityCommands } from './commands/complexity-commands.js';
40
9
  import { registerSubAgentCommands } from './commands/sub-agent-commands.js';
41
- import { registerSubAgentDispatchGuard } from './commands/sub-agent-dispatch-guard.js';
42
- import { registerGateCommands } from './commands/gate-commands.js';
43
- import { registerHookHandleCommand } from './commands/hook-handle.js';
44
- import { registerHooksCommands } from './commands/hooks-commands.js';
45
- import { registerStatusLineCommands } from './commands/statusline-commands.js';
46
- import { registerUnderstandCommands } from './commands/understand-commands.js';
10
+ import { registerLeaseMetricsCommand } from './commands/lease-metrics-commands.js';
11
+ import { registerLeaseStatsCommand } from './commands/lease-stats-commands.js';
12
+ import { registerContainerCommand } from './commands/container-commands.js';
13
+ import { registerVmCommand } from './commands/vm-commands.js';
14
+ import { registerCronCommand } from './commands/cron-commands.js';
15
+ import { registerCronSchedulerCommand } from './commands/cron-scheduler-commands.js';
47
16
  import { registerWorkspaceCommands } from './commands/workspace-commands.js';
48
- import { registerWorkflowPlanCommands } from './commands/workflow-plan-commands.js';
49
- import { registerAuditCommands } from './commands/audit-commands.js';
50
- import { registerFinalReviewCommands } from './commands/final-review-commands.js';
51
- import { registerClassifyCommands } from './commands/classify-classify-commands.js';
52
- import { registerContextCommands } from './commands/context-commands.js';
53
- import { registerContractCommands } from './commands/contract-commands.js';
54
- import { registerSkillConformanceCommands } from './commands/skill-conformance-commands.js';
55
- import { registerSkillLoopEngineeringReadinessCommands } from './commands/skill-loop-engineering-readiness-commands.js';
56
- import { registerLoopCommands } from './commands/loop-commands.js';
57
- import { registerWorkflowEvalCommands } from './commands/loop-eval-commands.js';
58
- import { registerEvolutionCommands } from './commands/evolution-commands.js';
59
- import { registerAssetCommands } from './commands/asset-commands.js';
60
- import { registerBeeCommands } from './commands/bee-commands.js';
61
- import { registerAgentCommands } from './commands/agent-commands.js';
62
- import { registerUpgradeCommands } from './commands/upgrade-commands.js';
63
- import { registerCodeReviewCommands } from './commands/code-review-commands.js';
64
- import { registerSecurityAuditCommands } from './commands/security-audit-commands.js';
65
- import { registerPerfAuditCommands } from './commands/perf-audit-commands.js';
66
- import { registerVerdictAggregateCommands } from './commands/verdict-aggregate-command.js';
67
- import { registerLogCommands } from './commands/log-commands.js';
68
- import { registerQaCommands } from './commands/qa-commands.js';
69
- import { registerTestCommands } from './commands/test-commands.js';
70
- import { registerPlaywrightCommands } from './commands/playwright-commands.js';
71
- import { registerCodeCommands } from './commands/code-commands.js';
72
- import { registerMutCommands } from './commands/mut-commands.js';
73
- import { registerFixtureCommands } from './commands/fixture-commands.js';
74
- import { registerReviewerCommands } from './commands/reviewer-commands.js';
75
- import { registerObservabilityCommands } from './commands/observability-commands.js';
76
- // Slice 2026-07-09 add-zcode-adapter (Slice C): `peaks ide model --current` —
77
- // read-only runtime model probe surfaced via the registered IDE adapter
78
- // chain. See src/services/ide/current-model-detector.ts.
79
- import { registerIdeCommands } from './commands/ide-commands.js';
80
- // Slice 2026-07-01-strategic-compact-cli: peaks compact
81
- // (suggest | recommend | survival | dry-run | force) — strategic-compact
82
- // CLI primitives. See src/services/compact/ and
83
- // src/cli/commands/compact-command.ts.
84
- import { registerCompactCommands } from './commands/compact-command.js';
85
- // Slice 2026-07-01-job-m3.1: `peaks job init|status|...` — Job orchestration CLI surface.
86
- import { registerJobCommands } from './commands/job-commands.js';
87
- // Slice 2026-07-04-cli-15a: `peaks skill sediment <verb>` + `peaks skill adapter <verb>`
88
- // — Task 15a 4-verb subset (add-segment / add-bee / list / rebuild-index).
89
- // 15b / 15c / 15d will extend sediment-commands.ts with the remaining 14 verbs.
90
- import { registerSedimentCommands } from './commands/sediment-commands.js';
91
- import { registerAdapterCommands } from './commands/adapter-commands.js';
92
- // Slice RD-2 S2-a: `peaks runtime *` (detect / list / compact) +
93
- // `peaks adapter *` (list / register). See src/services/runtime/ and
94
- // src/services/adapter/adapter-registry.ts. Coexists with the older
95
- // `peaks skill adapter` surface (slice 2026-07-04-cli-15a) which is
96
- // for skill materialization, not vendor-adapter registry.
97
- import { registerRuntimeCommands } from './commands/runtime-commands.js';
98
- import { registerAdapterS2ACommands } from './commands/adapter-commands-s2a.js';
99
- // Slice RD-2 S2-b: `peaks polyrepo *` (init / status / dispatch).
100
- import { registerPolyrepoCommands } from './commands/polyrepo-commands.js';
17
+ import { registerSopCommands } from './commands/sop-commands.js';
101
18
  import { registerSkillVisibilityCommand } from './commands/skill-visibility.js';
102
- import { applyRetention } from '../services/log/retention.js';
19
+ import { applyRetention, cleanupEccCache } from '../services/log/retention.js';
103
20
  import { writeLogEntry, maybeWriteStderr } from '../services/log/logger.js';
104
- export { printResult } from './cli-helpers.js';
21
+ import { printSuperCommandCatalog } from './cli-helpers.js';
22
+ export { printErrorEnvelope, printResult } from './cli-helpers.js';
23
+ // Slice rid-001 (P0-1 envelope closure, fix #4): the prior default
24
+ // `ProgramIO` funneled Commander's `configureOutput().writeErr` callback
25
+ // through raw `console.error`, which bypassed the canonical envelope
26
+ // path and left a `// TODO(g2): legacy console.error without envelope`
27
+ // grace comment. Default io now routes stdout through `process.stdout`
28
+ // and stderr through `process.stderr` (matching the `defaultIo` built
29
+ // in `src/cli/index.ts`). When a caller passes its own `ProgramIO`
30
+ // (vitest, programmatic dispatch) the closure-side `printErrorEnvelope`
31
+ // helper in `src/cli/cli-helpers.ts` mints a real `fail()` envelope,
32
+ // so the canonical shape is preserved end-to-end.
33
+ function defaultStderrSink(text) {
34
+ process.stderr.write(`${text}\n`);
35
+ }
36
+ function defaultStdoutSink(text) {
37
+ process.stdout.write(`${text}\n`);
38
+ }
105
39
  /**
106
40
  * Slice 2026-06-16-cli-logging (G1, G2, G3, G7). One structured
107
41
  * `peaks-loop start` entry per CLI invocation, plus a 7-day
@@ -120,6 +54,13 @@ function bootstrapLogger(verbose) {
120
54
  catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
121
55
  /* best-effort retention sweep; never block the CLI */
122
56
  }
57
+ // Slice 3 (on-demand-ecc): 7-day TTL sweep over ecc-<sha>/ cache dirs.
58
+ try {
59
+ cleanupEccCache({ retentionDays: 7, nowMs: Date.now() });
60
+ }
61
+ catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
62
+ /* best-effort ECC retention sweep; never block the CLI */
63
+ }
123
64
  const dateOverride = process.env.PEAKS_LOG_DATE_OVERRIDE;
124
65
  const entry = {
125
66
  ts: new Date().toISOString(),
@@ -148,7 +89,7 @@ let bootstrapRan = false;
148
89
  export function __resetBootstrapForTests() {
149
90
  bootstrapRan = false;
150
91
  }
151
- export function createProgram(io = { stdout: (text) => console.log(text), stderr: (text) => console.error(text) }) {
92
+ export function createProgram(io = { stdout: defaultStdoutSink, stderr: defaultStderrSink }) {
152
93
  const program = new Command();
153
94
  program
154
95
  .name('peaks')
@@ -200,6 +141,40 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
200
141
  }
201
142
  })
202
143
  .action(() => {
144
+ // D-013 wrapper exit-code fix: when the user typed a command token but
145
+ // it didn't match any registered subcommand, exit non-zero with a JSON
146
+ // `COMMAND_NOT_FOUND` envelope. Without this check, Commander's root
147
+ // `.action()` runs whenever no subcommand matches (including unknown
148
+ // commands) and prints the help banner with exit 0 — which violates
149
+ // the PRD AC3.9/AC3.10 contract for `peaks agent run/list` and any
150
+ // other deleted/hidden command.
151
+ //
152
+ // Detection: use `program.args` (Commander's parsed argv) for the
153
+ // first non-option token. If it's present and Commander didn't route
154
+ // to a subcommand (we got here, so it didn't), the user typed an
155
+ // unknown command. Exit 1. `program.args` works correctly under both
156
+ // `parseAsync(['node', 'peaks', ...])` (real CLI) and direct in-process
157
+ // calls (vitest integration tests), unlike `process.argv` which is
158
+ // the test runner's argv.
159
+ //
160
+ // --help and --version bypass this path entirely (handled below).
161
+ const firstNonOption = program.args.find((arg) => !arg.startsWith('-'));
162
+ if (firstNonOption !== undefined) {
163
+ // Commander reached this `.action()` despite a positional token,
164
+ // which means the token was NOT routed to any subcommand. This is
165
+ // the unknown-command path. Emit a JSON envelope + exit 1.
166
+ io.stdout(JSON.stringify({
167
+ ok: false,
168
+ command: 'cli',
169
+ code: 'COMMAND_NOT_FOUND',
170
+ message: `Unknown command: ${firstNonOption}. Run \`peaks --help\` for available commands.`,
171
+ data: { argv: firstNonOption },
172
+ warnings: [],
173
+ nextActions: ['Run `peaks --help` to list available commands.']
174
+ }, null, 2));
175
+ process.exitCode = 1;
176
+ return;
177
+ }
203
178
  const opts = program.opts();
204
179
  if (opts.V || opts.version) {
205
180
  // AC1: write the peaks-loop start log line BEFORE printing the
@@ -212,197 +187,27 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
212
187
  io.stdout(CLI_VERSION);
213
188
  return;
214
189
  }
215
- // Count bundled skills by reading the skills dir directly (synchronous so
216
- // the quickstart renders instantly — no import/async overhead on startup).
217
- let skillCount = 0;
218
- const skillsPath = skillsDir;
219
- try {
220
- if (existsSync(skillsPath)) {
221
- skillCount = readdirSync(skillsPath, { withFileTypes: true })
222
- .filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
223
- .filter((entry) => existsSync(join(skillsPath, entry.name, 'SKILL.md')))
224
- .length;
225
- }
226
- }
227
- catch { /* disk read is best-effort; zero skills is still truthful */ } // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
228
- io.stdout(`Peaks Loop ${CLI_VERSION} · ${skillCount} skills ready
229
-
230
- Peaks is a loop-engineering CLI + skill family for Claude Code.
231
- It turns "don't skip steps" into hard enforcement — gates that block
232
- advancement in-conversation, un-bypassably.
233
-
234
- Before diving into a project, two things worth doing now:
235
-
236
- peaks doctor check your environment in one glance
237
- peaks-sop <<< ask this skill to author your first SOP
238
-
239
- Or jump straight in:
240
- peaks sop init --id my-flow --apply && peaks hooks install
241
- `);
190
+ printSuperCommandCatalog(io);
242
191
  })
243
192
  .exitOverride();
244
193
  registerCoreAndArtifactCommands(program, io);
245
194
  registerWorkflowCommands(program, io);
246
195
  registerCapabilityWorkerConfigAndSCCommands(program, io);
247
- registerCodegraphCommands(program, io);
248
- registerOpenSpecCommands(program, io);
249
- registerPerfCommands(program, io);
250
- registerPreferencesCommands(program);
251
- registerProjectCommands(program, io);
252
- registerPrdCommands(program, io);
253
- registerRequestCommands(program, io);
254
- registerRetrospectiveCommands(program, io);
255
- registerScanCommands(program, io);
256
- registerSliceCommands(program, io);
257
- registerSopCommands(program, io);
258
- // v2.15.0 slice 002 AC-3: feedback promotion CLI.
259
- registerFeedbackCommands(program, io);
260
- // v2.15.0 follow-up G11: fork sync CLI (status / upstream-check / sync-plan / sync / sync-verify).
261
- registerForkCommands(program, io);
262
- // v2.15.0 follow-up G13: impact scan CLI (scan / must-check).
263
- registerImpactCommands(program, io);
264
- // v2.15.0 follow-up G14: smoke regression CLI (define / run / run-and-repair / add-path).
265
- registerSmokeCommands(program, io);
266
- // v2.15.0 follow-up G15: release / hotfix CLI (plan / canary / promote / watch / done / rollback / hotfix).
267
- registerReleaseCommands(program, io);
268
- // v2.15.0 follow-up G3: prd 4 必填块 CLI (check-blocks).
269
- registerPrdBlocksCommands(program, io);
270
- // v2.15.0 follow-up G4: user touchpoint CLI (gate-classify / user-touchpoints / commit-boundary-actions).
271
- registerUserTouchpointCommands(program, io);
272
- // v2.15.0 follow-up G1: slice business review CLI (review / score / accept / reject).
273
- registerSliceReviewCommands(program, io);
274
- // v2.15.0 follow-up G5: QA business review CLI (business-review / score / accept / reject).
275
- registerQaBusinessReviewCommands(program, io);
276
- // v2.15.0 follow-up G6: slice cross-integration verifier (slice-integrate).
277
- registerSliceIntegrateCommands(program, io);
278
- // v2.15.0 follow-up G7: doc auto-generation (generate-skill / changelog-suggest).
279
- registerDocCommands(program, io);
280
- // v2.15.0 follow-up G8: legacy code smell detector (legacy-detect).
281
- registerLegacyCommands(program, io);
282
- // v2.15.0 follow-up G9: lightweight role registry (role list/add/grant/check).
283
- registerRoleCommands(program, io);
284
- // v2.15.0 follow-up G10: complexity estimator (complexity-estimate).
285
- registerComplexityCommands(program, io);
286
196
  registerSubAgentCommands(program, io);
287
- registerContractCommands(program, io);
288
- // Slice #010 G9.5: register the hook-only internal atom. Hidden from
289
- // `peaks --help` (no description text); used by `peaks hooks install`
290
- // to wire the PreToolUse hook chain.
291
- registerSubAgentDispatchGuard(program);
292
- registerGateCommands(program, io);
293
- registerHookHandleCommand(program, io);
294
- registerHooksCommands(program, io);
295
- registerStatusLineCommands(program, io);
296
- registerUnderstandCommands(program, io);
297
197
  registerWorkspaceCommands(program, io);
298
- registerWorkflowPlanCommands(program, io);
299
- // Slice L2.1: peaks audit * — red-line audit framework.
300
- registerAuditCommands(program, io);
301
- // Slice 2026-06-25-slice-topology-multipass (Fix M2): peaks prepare-final-review CLI wrapper.
302
- registerFinalReviewCommands(program, io);
303
- // Slice #2: peaks classify * — L1a task classification + L1b per-level gate sets.
304
- registerClassifyCommands(program, io);
305
- // Slice #3: peaks context * — L1c context 4-layer loader.
306
- registerContextCommands(program, io);
307
- // Slice #12: peaks skills:audit-conformance — skill family alignment pass.
308
- registerSkillConformanceCommands(program, io);
309
- // M6 (2026-07-07 spec §7.5 / §8.4): peaks skill lint --category
310
- // loop-engineering-readiness — readiness gate for any new peaks-*
311
- // skill that participates in Loop Engineering.
312
- registerSkillLoopEngineeringReadinessCommands(program, io);
313
- // Slice #13: peaks swarm * — additional subcommands (pipeline /
314
- // dispatch / verify / loop) are added inline in workflow-commands.ts
315
- // alongside the existing swarm.plan. This avoids the duplicate top-level
316
- // command conflict (peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first).
317
- // Slice #14: peaks loop * + peaks goal compose — L4 Agent Loop sub-features.
318
- registerLoopCommands(program, io);
319
- // Slice v3.0.0 loop-eng-native-code-a-b: peaks workflow run|plan|lint
320
- // + peaks loop eval. Wraps the existing workflow + loop groups so the
321
- // add-a-new-subcommand-check-for-existing-top-level-first rule is honoured.
322
- registerWorkflowEvalCommands(program, io);
323
- // M4 (2026-07-07 spec): `peaks evolution propose|evaluate|revert|status|mark-keep`
324
- // — Darwin-style ratchet CLI surface.
325
- registerEvolutionCommands(program, io);
326
- // M5 (2026-07-07 spec): `peaks asset crystallize|dispose|status` —
327
- // umbrella cross-asset crystallization surface.
328
- registerAssetCommands(program, io);
329
- // M7 (2026-07-07 spec §7A.2 / §10 RL-9): `peaks bee export|import`
330
- // — cross-user share surface for bee_release rows.
331
- registerBeeCommands(program, io);
332
- // Slice: ECC 64 agents soft-optional (per spec §7.2 line 818).
333
- registerAgentCommands(program, io);
334
- // Slice: 1.x → 2.0 umbrella (per "one-key completion" + "minimal-user-operation" tenets).
335
- registerUpgradeCommands(program, io);
336
- // Slice: ocr soft-optional integration (peaks-rd Gate B3 augmentation).
337
- registerCodeReviewCommands(program, io);
338
- // Slice v2.12.0 Group A Tier 2: `peaks security-audit` (independent security audit skill driver).
339
- registerSecurityAuditCommands(program, io);
340
- // Slice v2.12.0 Group A Tier 3: `peaks perf-audit` (independent perf audit skill driver).
341
- registerPerfAuditCommands(program, io);
342
- // Slice v2.13.2 AC-2: `peaks verdict aggregate` (cross-source verdict aggregator CLI surface).
343
- registerVerdictAggregateCommands(program, io);
344
- // Slice 2026-06-16-cli-logging (G4): `peaks log tail` / `peaks log ls`.
345
- registerLogCommands(program, io);
346
- // Slice 2026-06-16-playwright-restart-loop (G5 + AC4): `peaks qa run`.
347
- registerQaCommands(program, io);
348
- // Slice 2026-06-17-2.5.0-sub-fix-B: `peaks test` (user-invoked, smart
349
- // fingerprint-cache wrapper around jest/vitest/mocha).
350
- registerTestCommands(program, io);
351
- // Slice 2026-06-17-2.5.0-sub-fix-C: `peaks playwright start|ls|stop`
352
- // (multi-terminal Playwright MCP lifecycle).
353
- registerPlaywrightCommands(program, io);
354
- // Slice 2 (peaks-code fast mode): `peaks code plan [--fast] <change-id>`
355
- // v2.11.0 Group F (D5 + D7): also registers `peaks code should-pause` and
356
- // `peaks code post-compact-detect` for runtime-friction probes.
357
- registerCodeCommands(program, io);
358
- // Plan 2 / Task 6: `peaks mut run|mutants|asserts|report` — mutation
359
- // testing + assertion validity scan (spec §4.2 / §7). The
360
- // production Stryker invoker is wired here; tests use the
361
- // `createMutCommands({ invokeStryker })` factory directly with a
362
- // mock to keep @stryker-mutator/core out of the unit-test path.
363
- registerMutCommands(program, io);
364
- // Slice v2.14.0 G1 AC-1.4: `peaks fixture capture` — fixture-replay
365
- // anti-fake-green test suite producer. Sanitizes + checksums the
366
- // captured envelope and writes a co-located fixture.meta.json.
367
- registerFixtureCommands(program, io);
368
- // Slice v2.14.0 G4 AC-4.1: `peaks reviewer run|status` — third-party
369
- // reviewer CLI. The reviewer modelFamily MUST differ from the
370
- // karpathy-reviewer modelFamily (AC-4.4); see
371
- // src/services/reviewer/model-family.ts. The THIRD_PARTY_REVIEW prereq
372
- // is wired into src/services/artifacts/artifact-prerequisites.ts.
373
- registerReviewerCommands(program, io);
374
- // Slice B of v2.11.1: `peaks observability status|slices|fanout|repair-cycles`
375
- // (read-only queries over the JSONL metrics emitted from the
376
- // peaks request transition hook in Slice A).
377
- // Slice 2026-07-09 add-zcode-adapter (C.6): `peaks ide model --current`
378
- // (read-only runtime model probe via the registered IDE adapter chain).
379
- registerIdeCommands(program, io);
380
- registerObservabilityCommands(program, io);
381
- // Slice 2026-07-01-strategic-compact-cli: `peaks compact
382
- // suggest|recommend|survival|dry-run|force` — strategic-compact CLI
383
- // primitives. See src/cli/commands/compact-command.ts.
384
- registerCompactCommands(program, io);
385
- // Slice 2026-07-01-job-m3.1: `peaks job init|status|...` — Job
386
- // orchestration CLI surface. M3.1 wires init + status + 2 stubs;
387
- // the remaining 5 subcommands land in M3.2.
388
- registerJobCommands(program, io);
389
- // Slice 2026-07-04-cli-15a: `peaks skill sediment <verb>` — Task 15a
390
- // 4-verb subset. Dispatches to runSediment; remaining verbs land in 15b/15c/15d.
391
- registerSedimentCommands(program, io);
392
- // Slice 2026-07-04-cli-15a: `peaks skill adapter <verb>` — adapter list / set-active.
393
- registerAdapterCommands(program, io);
394
- // Slice RD-2 S2-a: `peaks runtime *` (detect / list / compact) +
395
- // `peaks adapter *` (list / register). Vendor verbs live ONLY in
396
- // src/services/runtime/vendors/<vendor>.ts (AC-1 enforcement).
397
- registerRuntimeCommands(program, io);
398
- registerAdapterS2ACommands(program, io);
399
- // Slice RD-2 S2-b: `peaks polyrepo *` (init / status / dispatch).
400
- registerPolyrepoCommands(program, io);
401
- // Slice 2026-07-05-peaks-code-to-peaks-code (Task 1): `peaks skill:visibility --list --json`
402
- // — read .claude-plugin/marketplace.json and report each skill's
403
- // visibility (public vs internal). Used to surface which skills are
404
- // user-invocable vs LLM-only internal role skills. See
405
- // src/cli/commands/skill-visibility.ts.
198
+ registerSopCommands(program, io);
199
+ registerSuperCommands(program, io);
200
+ registerLeaseMetricsCommand(program, io);
201
+ registerLeaseStatsCommand(program, io);
202
+ registerContainerCommand(program, io);
203
+ registerVmCommand(program, io);
204
+ registerCronCommand(program, io);
205
+ registerCronSchedulerCommand(program, io);
206
+ // Auto-route the remaining 60+ commands after the orchestrators so the
207
+ // lazy `skill` parent (used by adapter-commands / sediment-commands)
208
+ // finds the existing `peaks skill` group registered by
209
+ // registerCoreAndArtifactCommands instead of being created twice.
210
+ autoRegisterAllCommands(program, io);
406
211
  registerSkillVisibilityCommand(program, repoRoot);
407
212
  return program;
408
213
  }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 24h mode B3 trigger evaluation + attempts counter.
3
+ *
4
+ * Rid-020a (state-only slice). `fireB3` is the single mutating
5
+ * primitive: it increments the per-key counter and escalates with a
6
+ * `B3Escalation` when the count reaches `B3_THRESHOLD` (3). The
7
+ * counter is **per-key** — AC-T3 mandates B1 and B2 retries do not
8
+ * share a global counter. The T3/T4 auto-24H_ACTIVE path is encoded
9
+ * in `isAutoEngageTrigger` (BRAINSTORM is bypassed for these
10
+ * triggers so an offline-resumed session does not deadlock in
11
+ * WAITING_USER — proposal §1 T3/T4 exception).
12
+ */
13
+ import { type DecisionKey, type State } from './state.js';
14
+ import type { AutoCompactMode } from '../code/auto-compact-modes.js';
15
+ export type AttemptsMap = Record<DecisionKey, number>;
16
+ export declare const B3_TRIGGER_REASONS: readonly ["prd_direction_change", "blocker_3_consecutive_slices", "registry_affecting_failure", "destructive_irreversible_op", "any_B1_B2_failure_3x_non_converging", "runtime_or_shared_version_mismatch", "sub-agent_stale_5min_x3"];
17
+ export type B3Reason = (typeof B3_TRIGGER_REASONS)[number];
18
+ export declare class B3Escalation extends Error {
19
+ readonly reason: B3Reason;
20
+ readonly attempts: number;
21
+ constructor(reason: B3Reason, attempts: number);
22
+ }
23
+ /**
24
+ * Result envelope for `fireB3`. We return a discriminated union
25
+ * (instead of throwing) so callers can branch on `kind` without
26
+ * try/catch ceremony. The B3Escalation class is still exported for
27
+ * backward compatibility with callers that prefer the throw style.
28
+ */
29
+ export type FireB3Result = {
30
+ kind: 'continue';
31
+ reason: B3Reason;
32
+ attempts: number;
33
+ } | {
34
+ kind: 'escalate';
35
+ reason: B3Reason;
36
+ attempts: number;
37
+ };
38
+ export declare function isB3Reason(value: string): value is B3Reason;
39
+ export declare function isValidReason(value: string): value is DecisionKey;
40
+ export declare function freshAttempts(): AttemptsMap;
41
+ /**
42
+ * Per AC-T1 (attempts=1 continue, no B3) and AC-T2 (attempts=3
43
+ * escalate), the 3rd call escalates. The threshold is intentionally
44
+ * NOT configurable — the proposal pins the constant so QA v3 can
45
+ * assert it. Returns a FireB3Result instead of throwing so test
46
+ * code can read the `attempts` field via plain property access
47
+ * (Error-subclass property access through vitest 4.1.10 matchers
48
+ * is unreliable; the discriminated union sidesteps that).
49
+ */
50
+ export declare function fireB3(reason: B3Reason, attempts: AttemptsMap): FireB3Result;
51
+ /**
52
+ * T3 (runaway recovery) and T4 (offline resume) auto-engage
53
+ * `24H_ACTIVE` without forcing `USER_CONFIRM` — the deferred
54
+ * AskUserQuestion fires at the first 10min checkpoint instead, so
55
+ * a T4 session does not deadlock in `WAITING_USER` while the
56
+ * user is offline (proposal §1 T3/T4 exception).
57
+ */
58
+ export declare const AUTO_ENGAGE_TRIGGERS: readonly ["T3", "T4"];
59
+ export type AutoEngageTrigger = (typeof AUTO_ENGAGE_TRIGGERS)[number];
60
+ export declare function isAutoEngageTrigger(t: string): t is AutoEngageTrigger;
61
+ /**
62
+ * Five trigger conditions (T1-T5) from proposal §1 + companion
63
+ * trigger-and-decision-autonomy sediment. T1/T2/T5 flow through
64
+ * BRAINSTORM; T3/T4 auto-engage and skip the gate.
65
+ */
66
+ export interface TriggerCheck {
67
+ triggered: boolean;
68
+ trigger: 'T1' | 'T2' | 'T3' | 'T4' | 'T5' | null;
69
+ reason: string;
70
+ }
71
+ export declare const T1_KEYWORDS: string[];
72
+ export declare const T2_MIN_SLICES = 30;
73
+ export declare const T2_MIN_WALL_HOURS = 6;
74
+ export declare const T3_MIN_MONOTONIC_GUARDS = 3;
75
+ export declare const T3_MIN_REMAINING_SLICES = 10;
76
+ export declare const T4_SESSION_GAP_HOURS = 4;
77
+ export declare const T5_MIN_ACTIVE_SLICES = 3;
78
+ export declare function checkTriggers(input: {
79
+ userMessage: string;
80
+ sliceListSize: number;
81
+ estimatedWallHours: number;
82
+ monotonicGuards: number;
83
+ remainingSlices: number;
84
+ sessionGapHours: number;
85
+ activeSlicesAcrossServices: number;
86
+ }): TriggerCheck;
87
+ /**
88
+ * HANDOFF is reachable via three exit conditions per proposal §1:
89
+ * - user abort
90
+ * - all-trigger-resolved
91
+ * - B3 unresolvable (B3Escalation that the user dismisses)
92
+ */
93
+ export declare const HANDOFF_EXIT_CONDITIONS: readonly ["user_abort", "all_triggers_resolved", "b3_unresolvable"];
94
+ export type HandoffExitCondition = (typeof HANDOFF_EXIT_CONDITIONS)[number];
95
+ export declare function isHandoffExitCondition(s: string): s is HandoffExitCondition;
96
+ export declare function isHandoffState(s: State): boolean;
97
+ /**
98
+ * Slice 2026-07-28 (rid-027): resolve the auto-compact mode from
99
+ * 24h-mode awareness. Returns `'partial'` when the session is
100
+ * `24H_ACTIVE`, otherwise `'standard'`. This is the CLI-side default;
101
+ * the explicit `--mode` flag in `peaks compact auto` overrides it.
102
+ */
103
+ export declare function getAutoCompactMode(projectRoot: string, sessionId: string): AutoCompactMode;