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
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-compact orchestrator (v2.13.0 AC-2 + AC-3 + AC-4).
3
3
  *
4
- * Closes the loop between `peaks context now` (AC-1) and the IDE's
4
+ * Closes the loop between `peaks compact auto` (AC-1) and the IDE's
5
5
  * native compact capability (AC-3). peaks-loop is project-aware: it
6
6
  * knows the current plan, open questions, recent decisions, in-flight
7
7
  * batches, todo state, git status, and active skills. That context is
@@ -16,7 +16,7 @@
16
16
  * 3. If 0.85 ≤ ratio < 0.95 (pre-compact zone): peaks-loop prepares
17
17
  * the convergence toolkit (checkpoint + auto-decisions log +
18
18
  * IDE-dispatch handle) and surfaces it to the LLM. The LLM
19
- * DECIDES when to fire `peaks code auto-compact --execute`;
19
+ * DECIDES when to fire `peaks compact auto --execute`;
20
20
  * peaks-loop does NOT auto-fire. The toolkit is ready so the
21
21
  * LLM doesn't lose context to a last-second `/compact` panic.
22
22
  * 4. If ratio < 0.85: skip — return a one-line info row.
@@ -28,43 +28,69 @@
28
28
  * the LLM-runner keeps working with context < 95% without human
29
29
  * intervention.
30
30
  */
31
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
31
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs';
32
32
  import { dirname, join } from 'node:path';
33
33
  import { getSessionIdCanonical } from '../session/session-manager.js';
34
- import { AUTO_COMPACT_PRE_COMPACT_RATIO, AUTO_COMPACT_RED_LINE_RATIO, AUTO_COMPACT_THRESHOLD_RATIO } from '../context/auto-compact-types.js';
34
+ import { AUTO_COMPACT_THRESHOLD_RATIO } from '../context/auto-compact-types.js';
35
+ import { describeMode, thresholdFor } from './auto-compact-modes.js';
36
+ import { read24hState } from '../24h-mode/store.js';
35
37
  const PRE_COMPACT_REASON = 'pre-compact-auto';
36
38
  /**
37
39
  * Map a context ratio to a `CompactTrigger` action. Pure; the side
38
40
  * effects (checkpoint + IDE dispatch) live in `runAutoCompact`. Two
39
- * tiers:
41
+ * tiers (standard mode; partial mode shifts both thresholds):
40
42
  *
41
- * - ratio < 0.85 → 'none' or 'soft-warn'
42
- * - ratio ≥ 0.85 → 'pre-compact' (async-friendly path)
43
- * - ratio ≥ 0.95 → 'red-line' (synchronous gate)
43
+ * - ratio < preCompact → 'none' or 'soft-warn'
44
+ * - ratio ≥ preCompact → 'pre-compact' (async-friendly path)
45
+ * - ratio ≥ redLine → 'red-line' (synchronous gate)
46
+ *
47
+ * Slice 2026-07-28 (rid-027): `mode` selects the threshold table.
48
+ * Default `'standard'` (0.85/0.95). `'partial'` (0.70/0.85) is used
49
+ * when 24h long-run mode is active or `--mode partial` is passed.
44
50
  */
45
- export function evaluateCompactTrigger(ratio) {
46
- if (ratio < AUTO_COMPACT_PRE_COMPACT_RATIO) {
51
+ export function evaluateCompactTrigger(ratio, mode = 'standard') {
52
+ const autoFire = thresholdFor(mode, 'autoFire');
53
+ const preCompact = thresholdFor(mode, 'preCompact');
54
+ const redLine = thresholdFor(mode, 'redLine');
55
+ if (ratio < autoFire) {
47
56
  return ratio < 0.5
48
57
  ? { kind: 'none' }
49
58
  : {
50
59
  kind: 'soft-warn',
51
60
  ratio,
52
- message: `Context at ${(ratio * 100).toFixed(1)}%; below the 85% pre-compact threshold.`
61
+ message: `Context at ${(ratio * 100).toFixed(1)}%; below the ${(autoFire * 100).toFixed(0)}% auto-fire threshold (mode=${mode}).`
53
62
  };
54
63
  }
55
- if (ratio >= AUTO_COMPACT_RED_LINE_RATIO) {
64
+ if (ratio >= redLine) {
56
65
  return {
57
66
  kind: 'red-line',
58
67
  ratio,
59
- message: `Context at ${(ratio * 100).toFixed(1)}% ≥ 95% red line. Synchronous compact REQUIRED (LLM cannot opt out).`
68
+ message: `Context at ${(ratio * 100).toFixed(1)}% ≥ ${(redLine * 100).toFixed(0)}% red line (mode=${mode}). Synchronous compact REQUIRED (LLM cannot opt out).`
69
+ };
70
+ }
71
+ if (ratio < preCompact) {
72
+ // Part 22: auto-fire zone (0.80 ≤ ratio < 0.85). peaks-loop
73
+ // preempts and runs `peaks compact auto --execute` itself
74
+ // without LLM involvement. The LLM is not asked to "decide";
75
+ // the toolkit is applied synchronously. Closes the
76
+ // LLM-misjudges-context window that previously let the
77
+ // ratio drift to 0.95 before the auto-fire kicked in.
78
+ return {
79
+ kind: 'auto-fire',
80
+ ratio,
81
+ message: `Context at ${(ratio * 100).toFixed(1)}% in auto-fire zone (≥${(autoFire * 100).toFixed(0)}% / <${(preCompact * 100).toFixed(0)}%, mode=${mode}). peaks-loop will fire compact without LLM confirmation.`
60
82
  };
61
83
  }
62
- // 0.85 ≤ ratio < 0.95: pre-compact zone — toolkit ready, LLM decides.
84
+ // pre-compact zone (0.85 ≤ ratio < 0.95): kept for backward
85
+ // compat with operators who configured the higher threshold.
86
+ // In practice peaks-loop already auto-fired at the lower
87
+ // threshold; the pre-compact zone today is the "already fired"
88
+ // zone.
63
89
  return {
64
90
  kind: 'pre-compact',
65
91
  ratio,
66
92
  toolkitReady: true,
67
- message: `Context at ${(ratio * 100).toFixed(1)}% in pre-compact zone (0.85–0.95). Convergence toolkit is ready; LLM decides when to fire \`peaks code auto-compact --execute\`.`
93
+ message: `Context at ${(ratio * 100).toFixed(1)}% in pre-compact zone (≥${(preCompact * 100).toFixed(0)}% / <${(redLine * 100).toFixed(0)}%, mode=${mode}). peaks-loop already fired the auto-compact pathway at the auto-fire threshold; the LLM does not need to act.`
68
94
  };
69
95
  }
70
96
  /**
@@ -80,7 +106,7 @@ export function evaluateCompactTrigger(ratio) {
80
106
  * regardless of in-flight batch.
81
107
  */
82
108
  export function evaluateAutoCompactDecision(input) {
83
- const trigger = evaluateCompactTrigger(input.ratio);
109
+ const trigger = evaluateCompactTrigger(input.ratio, input.mode ?? 'standard');
84
110
  if (trigger.kind === 'none' || trigger.kind === 'soft-warn') {
85
111
  return { shouldCompact: false, reason: 'below-threshold', trigger };
86
112
  }
@@ -206,6 +232,22 @@ function writePreCompactCheckpoint(input) {
206
232
  writeFileSync(path, JSON.stringify(content, null, 2), 'utf8');
207
233
  return path;
208
234
  }
235
+ /**
236
+ * Slice 2026-07-28 (rid-027): resolve the auto-compact mode from
237
+ * 24h-mode awareness. Returns `'partial'` when the session is
238
+ * `24H_ACTIVE`, otherwise `'standard'`. The CLI flag `--mode` takes
239
+ * precedence (caller passes `input.mode` directly), so this helper is
240
+ * only consulted when the flag is absent.
241
+ */
242
+ function resolveAutoCompactMode(projectRoot, sessionId) {
243
+ try {
244
+ const snap = read24hState(projectRoot, sessionId);
245
+ return snap.state === '24H_ACTIVE' ? 'partial' : 'standard';
246
+ }
247
+ catch {
248
+ return 'standard';
249
+ }
250
+ }
209
251
  /**
210
252
  * Execute the auto-compact flow.
211
253
  *
@@ -235,6 +277,10 @@ export async function runAutoCompact(input) {
235
277
  nextActions: ['Run `peaks workspace init --change-id <id>` to bind a session']
236
278
  };
237
279
  }
280
+ // Slice 2026-07-28 (rid-027): resolve mode. CLI flag `--mode` wins;
281
+ // 24h-mode awareness yields 'partial' when 24h_ACTIVE; default
282
+ // 'standard' preserves v2.13.0 zero-pause contract.
283
+ const mode = input.mode ?? resolveAutoCompactMode(input.projectRoot, sessionId);
238
284
  // Lazy import to avoid the AC-1 module depending on the orchestrator.
239
285
  const { readContextPercent } = await import('../context/auto-compact-reader.js');
240
286
  const probe = readContextPercent({
@@ -246,7 +292,8 @@ export async function runAutoCompact(input) {
246
292
  ratio: probe.ratio,
247
293
  inFlightBatch: input.inFlightBatch,
248
294
  force: input.force,
249
- bypassRedLine: input.bypassRedLine
295
+ bypassRedLine: input.bypassRedLine,
296
+ mode
250
297
  });
251
298
  if (!decision.shouldCompact) {
252
299
  return {
@@ -277,12 +324,12 @@ export async function runAutoCompact(input) {
277
324
  ? [
278
325
  'RED-LINE compact dispatched — further sub-agent dispatch BLOCKED until ratio < 0.85',
279
326
  'Post-compact resume picks up the convergence plan from auto-decisions.md',
280
- 'Next `peaks context now` probe will confirm ratio dropped below 0.85'
327
+ 'Next `peaks compact auto` probe will confirm ratio dropped below 0.85'
281
328
  ]
282
329
  : [
283
330
  'Pre-compact dispatched — IDE compact in progress (async)',
284
331
  'Post-compact resume picks up the convergence plan from auto-decisions.md',
285
- 'Next `peaks context now` probe will confirm ratio dropped below 0.85'
332
+ 'Next `peaks compact auto` probe will confirm ratio dropped below 0.85'
286
333
  ];
287
334
  const plan = buildConvergencePlan({
288
335
  sessionId,
@@ -316,6 +363,31 @@ export async function runAutoCompact(input) {
316
363
  env: input.env,
317
364
  target
318
365
  });
366
+ // Slice 2026-07-30-compact-visibility: append a compact-history
367
+ // event so the new 'peaks compact history' CLI and the
368
+ // 'peaks statusline compact' indicator have a record. The
369
+ // append is best-effort: a write failure must NOT block the
370
+ // compact return envelope.
371
+ try {
372
+ appendCompactHistoryEvent({
373
+ projectRoot: input.projectRoot,
374
+ sessionId,
375
+ event: {
376
+ schemaVersion: 1,
377
+ ts: now.toISOString(),
378
+ target,
379
+ mode,
380
+ ide: dispatch.ide,
381
+ pathway: dispatch.pathway,
382
+ beforeRatio: probe.ratio,
383
+ redLine: isRedLine,
384
+ ok: dispatch.ok,
385
+ checkpointPath,
386
+ dispatchMessage: dispatch.message,
387
+ },
388
+ });
389
+ }
390
+ catch { /* best-effort; do not fail the compact return */ }
319
391
  return {
320
392
  ok: dispatch.ok,
321
393
  code: dispatch.ok
@@ -323,8 +395,8 @@ export async function runAutoCompact(input) {
323
395
  : 'AUTO_COMPACT_DISPATCH_FAILED',
324
396
  message: dispatch.ok
325
397
  ? isRedLine
326
- ? `RED-LINE compact dispatched (${dispatch.ide} / ${dispatch.pathway} / target=${target}); checkpoint at ${checkpointPath}. Further sub-agent dispatch is BLOCKED until ratio < 0.85.`
327
- : `Auto-compact dispatched (${dispatch.ide} / ${dispatch.pathway} / target=${target}); checkpoint at ${checkpointPath}.`
398
+ ? `RED-LINE compact dispatched (${dispatch.ide} / ${dispatch.pathway} / target=${target} / mode=${mode} — ${describeMode(mode)}); checkpoint at ${checkpointPath}. Further sub-agent dispatch is BLOCKED until ratio < 0.85.`
399
+ : `Auto-compact dispatched (${dispatch.ide} / ${dispatch.pathway} / target=${target} / mode=${mode} — ${describeMode(mode)}); checkpoint at ${checkpointPath}.`
328
400
  : `Auto-compact checkpoint written but IDE dispatch failed: ${dispatch.message}`,
329
401
  data: {
330
402
  sessionId,
@@ -334,10 +406,18 @@ export async function runAutoCompact(input) {
334
406
  convergencePlan: plan,
335
407
  dispatch,
336
408
  target,
409
+ mode,
337
410
  redLineGated: isRedLine
338
411
  }
339
412
  };
340
413
  }
414
+ export function appendCompactHistoryEvent(input) {
415
+ const dir = join(input.projectRoot, '.peaks', '_runtime', input.sessionId);
416
+ if (!existsSync(dir))
417
+ mkdirSync(dir, { recursive: true });
418
+ const path = join(dir, 'compact-history.jsonl');
419
+ appendFileSync(path, JSON.stringify(input.event) + '\n', 'utf8');
420
+ }
341
421
  // Keep dirname import live for symmetry with sibling services that
342
422
  // use it for path joins; tree-shaking removes it in builds.
343
423
  void dirname;
@@ -25,7 +25,7 @@
25
25
  * dispatch --from-dag`) consumes the planner's output but the planner
26
26
  * itself is a library.
27
27
  */
28
- import { type SliceDag } from '../dispatch/slice-dag.js';
28
+ import { type SliceDag, type Wave, type WaveArtifact, type WaveOptions } from '../dispatch/slice-dag.js';
29
29
  import { type SliceContract } from '../dispatch/contract-store.js';
30
30
  export interface DispatchSpec {
31
31
  readonly sliceId: string;
@@ -126,3 +126,32 @@ export declare function runDag(dag: SliceDag, opts: RunDagOptions): Promise<DagR
126
126
  * peaks-code LLM) executes the per-IDE tool calls.
127
127
  */
128
128
  export declare function runLayeredDag(dag: SliceDag, opts: RunDagOptions): Promise<DagRunResult>;
129
+ /**
130
+ * Plan a slice DAG into ordered dispatch Waves.
131
+ *
132
+ * Each topological level is split into chunks of at most
133
+ * `opts.maxConcurrency` slice IDs (default 6). Wave ordering follows
134
+ * topological level order; within each level, slices preserve
135
+ * `topologicalLevels`'s foundation / upstreamSync / id-asc priority sort.
136
+ */
137
+ export declare function planDispatchWaves(dag: SliceDag, opts?: WaveOptions): readonly Wave[];
138
+ /**
139
+ * Backward-compat wrapper: flatten `planDispatchWaves(dag)` into a flat
140
+ * sequence of stub `DispatchSpec`s. The original `runDag` /
141
+ * `runLayeredDag` do NOT consume this; the wrapper exists only so
142
+ * external callers that imported `planDispatch(dag)` keep their shape.
143
+ */
144
+ export declare function planDispatch(dag: SliceDag): readonly DispatchSpec[];
145
+ /**
146
+ * Run a single Wave: dispatch `wave.slices` in parallel, return a
147
+ * `WaveArtifact` envelope on success. On any per-slice failure or
148
+ * cancellation, REJECTS with `DagPlanError` — caller treats the
149
+ * rejection as a barrier violation and rolls back siblings.
150
+ *
151
+ * `passArtifacts`: when true, the returned envelope includes each
152
+ * slice's public surface (callers splice into downstream Wave prompts).
153
+ *
154
+ * `priorArtifacts` is reserved for future artifact-injection. This MVP
155
+ * accepts the shape but does not yet splice it into the prompt.
156
+ */
157
+ export declare function runWaveWithArtifacts(dag: SliceDag, wave: Wave, runner: (spec: DispatchSpec) => Promise<SliceOutcome>, priorArtifacts?: readonly WaveArtifact[], opts?: WaveOptions): Promise<WaveArtifact>;
@@ -25,7 +25,7 @@
25
25
  * dispatch --from-dag`) consumes the planner's output but the planner
26
26
  * itself is a library.
27
27
  */
28
- import { hashDag, InvalidSliceDagError, topologicalLevels, validateDag } from '../dispatch/slice-dag.js';
28
+ import { hashDag, InvalidSliceDagError, topologicalLevels, validateDag, DEFAULT_WAVE_OPTIONS } from '../dispatch/slice-dag.js';
29
29
  import { formatContractInjection, writeContract } from '../dispatch/contract-store.js';
30
30
  import { formatTestToolDetection } from '../dispatch/test-tool-detection.js';
31
31
  /** Thrown when the DAG has no feasible plan (validation error). */
@@ -302,3 +302,108 @@ export async function runLayeredDag(dag, opts) {
302
302
  contracts
303
303
  };
304
304
  }
305
+ /* ──────────────────────────────────────────────────────────────────────────
306
+ * Slice 2026-07-28 — DAG wave + barrier (rid-029 E direction).
307
+ *
308
+ * The original `runDag` + `runLayeredDag` above dispatch an ENTIRE
309
+ * topological level in one `Promise.all` burst. For 24-hour scenarios
310
+ * with >=20 sub-agents this saturates the host. The wave planner below
311
+ * chunks each level into Waves of at most `maxConcurrency` slice IDs,
312
+ * and `runWaveWithArtifacts` runs one Wave at a time, returning a
313
+ * `WaveArtifact` envelope that downstream Waves can consume.
314
+ *
315
+ * Backward-compat: the original flat-dispatch APIs above are untouched;
316
+ * `planDispatchWaves` + `runWaveWithArtifacts` are purely additive.
317
+ * ────────────────────────────────────────────────────────────────────────── */
318
+ /**
319
+ * Plan a slice DAG into ordered dispatch Waves.
320
+ *
321
+ * Each topological level is split into chunks of at most
322
+ * `opts.maxConcurrency` slice IDs (default 6). Wave ordering follows
323
+ * topological level order; within each level, slices preserve
324
+ * `topologicalLevels`'s foundation / upstreamSync / id-asc priority sort.
325
+ */
326
+ export function planDispatchWaves(dag, opts = DEFAULT_WAVE_OPTIONS) {
327
+ validateDag(dag);
328
+ if (opts.maxConcurrency <= 0) {
329
+ throw new DagPlanError(`WaveOptions.maxConcurrency must be > 0 (got ${opts.maxConcurrency})`);
330
+ }
331
+ const levels = topologicalLevels(dag);
332
+ const waves = [];
333
+ let waveIndex = 0;
334
+ for (const level of levels) {
335
+ for (let i = 0; i < level.length; i += opts.maxConcurrency) {
336
+ const chunk = level.slice(i, i + opts.maxConcurrency);
337
+ waves.push({ waveIndex, slices: chunk });
338
+ waveIndex += 1;
339
+ }
340
+ }
341
+ return waves;
342
+ }
343
+ /**
344
+ * Backward-compat wrapper: flatten `planDispatchWaves(dag)` into a flat
345
+ * sequence of stub `DispatchSpec`s. The original `runDag` /
346
+ * `runLayeredDag` do NOT consume this; the wrapper exists only so
347
+ * external callers that imported `planDispatch(dag)` keep their shape.
348
+ */
349
+ export function planDispatch(dag) {
350
+ const waves = planDispatchWaves(dag);
351
+ const out = [];
352
+ for (const w of waves) {
353
+ for (const sliceId of w.slices) {
354
+ out.push({ sliceId, role: '', label: null, prompt: '', contractBlock: '' });
355
+ }
356
+ }
357
+ return out;
358
+ }
359
+ /**
360
+ * Run a single Wave: dispatch `wave.slices` in parallel, return a
361
+ * `WaveArtifact` envelope on success. On any per-slice failure or
362
+ * cancellation, REJECTS with `DagPlanError` — caller treats the
363
+ * rejection as a barrier violation and rolls back siblings.
364
+ *
365
+ * `passArtifacts`: when true, the returned envelope includes each
366
+ * slice's public surface (callers splice into downstream Wave prompts).
367
+ *
368
+ * `priorArtifacts` is reserved for future artifact-injection. This MVP
369
+ * accepts the shape but does not yet splice it into the prompt.
370
+ */
371
+ export async function runWaveWithArtifacts(dag, wave, runner, priorArtifacts = [], opts = DEFAULT_WAVE_OPTIONS) {
372
+ validateDag(dag);
373
+ if (wave.slices.length === 0) {
374
+ throw new DagPlanError(`runWaveWithArtifacts: wave ${wave.waveIndex} has no slices`);
375
+ }
376
+ const collectedContracts = {};
377
+ const completedLeaves = [];
378
+ const settled = await Promise.all(wave.slices.map(async (sliceId) => {
379
+ const spec = buildDispatchSpec(dag, sliceId, []);
380
+ try {
381
+ const outcome = await runner(spec);
382
+ return { sliceId, outcome };
383
+ }
384
+ catch (err) {
385
+ return {
386
+ sliceId,
387
+ outcome: { status: 'failed', reason: err.message }
388
+ };
389
+ }
390
+ }));
391
+ for (const { sliceId, outcome } of settled) {
392
+ if (outcome.status === 'done') {
393
+ completedLeaves.push(sliceId);
394
+ if (opts.passArtifacts) {
395
+ collectedContracts[sliceId] = outcome.publicSurface;
396
+ }
397
+ }
398
+ else {
399
+ void priorArtifacts;
400
+ throw new DagPlanError(`wave ${wave.waveIndex} aborted on slice ${sliceId}: ${outcome.status === 'failed' ? outcome.reason : outcome.status}`);
401
+ }
402
+ }
403
+ return {
404
+ waveIndex: wave.waveIndex,
405
+ completedLeaves,
406
+ contracts: collectedContracts,
407
+ passedAt: new Date().toISOString()
408
+ };
409
+ }
@@ -18,6 +18,8 @@ export type SubAgentLiveView = {
18
18
  readonly progress: number | null;
19
19
  readonly lastBeatAgoSec: number | null;
20
20
  readonly isStale: boolean;
21
+ readonly isNeverStarted: boolean;
22
+ readonly stage: string | null;
21
23
  };
22
24
  export type SwarmSummary = {
23
25
  readonly total: number;
@@ -6,12 +6,23 @@ export function viewSubAgent(record, now = () => new Date()) {
6
6
  ? Math.max(0, Math.floor((now().getTime() - new Date(record.lastBeatAt).getTime()) / 1000))
7
7
  : null;
8
8
  const isStale = lastBeatAgo !== null && lastBeatAgo > STALE_THRESHOLD_SEC;
9
+ // Slice 2026-07-29-dispatch-stall-governance / S2 (AC-2.3) — never-
10
+ // started: no heartbeat ever landed (lastBeatAgo is null AND the
11
+ // record has not been promoted by a startup-timeout marker).
12
+ const isNeverStarted = lastBeatAgo === null && record.status === 'queued';
9
13
  return {
10
14
  role: record.role,
11
15
  status: record.status,
12
16
  progress: latest ? latest.progress : null,
13
17
  lastBeatAgoSec: lastBeatAgo,
14
- isStale
18
+ isStale,
19
+ isNeverStarted,
20
+ // S5 — surface the optional stage label so a long-running agent is
21
+ // legible. Reads from the record's `stage` field (added in the
22
+ // same slice); undefined on legacy records degrades to null.
23
+ stage: typeof record.stage === 'string'
24
+ ? (record.stage ?? null)
25
+ : null
15
26
  };
16
27
  }
17
28
  /** Aggregate swarm summary. */
@@ -50,6 +61,13 @@ function renderOne(record, now) {
50
61
  const view = viewSubAgent(record, now);
51
62
  const pct = view.progress !== null ? `${view.progress}%` : '?%';
52
63
  const ago = view.lastBeatAgoSec !== null ? `${view.lastBeatAgoSec}s ago` : 'no beat';
53
- const stale = view.isStale ? ' ⚠ stale' : '';
54
- return `${view.role} ${pct} (${ago})${stale}`;
64
+ // Slice 2026-07-29-dispatch-stall-governance / S2 (AC-2.3) — render
65
+ // never-started distinctly from stale so the orchestrator's eye can
66
+ // tell a sub-agent that never picked up the work apart from one that
67
+ // has gone quiet after starting.
68
+ const marker = view.isNeverStarted ? ' ⚠ never-started' : view.isStale ? ' ⚠ stale' : '';
69
+ // S5 (AC-5.2) — surface the optional stage label inline so a long-
70
+ // `running` agent is legible. Empty stage is omitted silently.
71
+ const stageSuffix = view.stage && view.stage.length > 0 ? ` [${view.stage}]` : '';
72
+ return `${view.role} ${pct} (${ago})${marker}${stageSuffix}`;
55
73
  }
@@ -52,7 +52,7 @@ export interface SubprocessRunner {
52
52
  * present (peaks-loop was installed but its dependency tree is
53
53
  * corrupt, or the user removed it).
54
54
  *
55
- * Walks up from this file (dist/src/services/code-review/) to
55
+ * Walks up from this file (dist/services/code-review/) to
56
56
  * find the project root, then checks node_modules.
57
57
  */
58
58
  export declare function resolveOcrLauncher(searchRoots: readonly string[]): string | null;
@@ -101,7 +101,7 @@ const DEFAULT_RUNNER = {
101
101
  * present (peaks-loop was installed but its dependency tree is
102
102
  * corrupt, or the user removed it).
103
103
  *
104
- * Walks up from this file (dist/src/services/code-review/) to
104
+ * Walks up from this file (dist/services/code-review/) to
105
105
  * find the project root, then checks node_modules.
106
106
  */
107
107
  export function resolveOcrLauncher(searchRoots) {
@@ -122,8 +122,11 @@ export function resolveOcrLauncher(searchRoots) {
122
122
  * (2) the user's cwd.
123
123
  */
124
124
  export function defaultOcrSearchRoots(currentDirPath, cwd) {
125
- // currentDirPath is dist/src/services/code-review/; walk up 4 to repo root.
126
- const peaksRoot = join(currentDirPath, '..', '..', '..', '..');
125
+ // currentDirPath is dist/services/code-review/ under tsc rootDir=src;
126
+ // walk up 3 to repo root. If tsconfig.build.json#rootDir ever reverts
127
+ // to "." (emits dist/src/services/code-review/), this must become
128
+ // walk-4 — keep these two in lockstep.
129
+ const peaksRoot = join(currentDirPath, '..', '..', '..');
127
130
  return [peaksRoot, cwd];
128
131
  }
129
132
  /**
@@ -0,0 +1,41 @@
1
+ export interface CompactHistoryEvent {
2
+ readonly schemaVersion: 1;
3
+ readonly ts: string;
4
+ readonly target: 'main' | 'sub-agent' | 'worker';
5
+ readonly mode: 'standard' | 'partial' | 'aggressive';
6
+ readonly ide: string;
7
+ readonly pathway: string;
8
+ readonly beforeRatio: number;
9
+ readonly redLine: boolean;
10
+ readonly ok: boolean;
11
+ readonly checkpointPath: string;
12
+ readonly dispatchMessage: string;
13
+ }
14
+ export type CompactHistoryReadResult = {
15
+ readonly kind: 'file-missing';
16
+ readonly path: string;
17
+ } | {
18
+ readonly kind: 'empty';
19
+ readonly path: string;
20
+ } | {
21
+ readonly kind: 'ok';
22
+ readonly path: string;
23
+ readonly events: ReadonlyArray<CompactHistoryEvent>;
24
+ readonly parseErrors: ReadonlyArray<{
25
+ readonly line: number;
26
+ readonly raw: string;
27
+ }>;
28
+ };
29
+ export declare function readCompactHistory(input: {
30
+ readonly projectRoot: string;
31
+ readonly sessionId: string;
32
+ }): CompactHistoryReadResult;
33
+ export interface CompactHistorySummary {
34
+ readonly totalCompacts: number;
35
+ readonly lastTs: string | null;
36
+ readonly lastBeforeRatio: number | null;
37
+ readonly lastRedLine: boolean;
38
+ readonly redLineCount: number;
39
+ readonly failedCount: number;
40
+ }
41
+ export declare function summarizeCompactHistory(events: ReadonlyArray<CompactHistoryEvent>): CompactHistorySummary;
@@ -0,0 +1,62 @@
1
+ // src/services/compact-history/compact-history-service.ts
2
+ //
3
+ // Slice 2026-07-30-compact-visibility (slice 1/4). Pure-function
4
+ // reader for the .peaks/_runtime/<sessionId>/compact-history.jsonl
5
+ // file that auto-compact-orchestrator now appends to on every
6
+ // dispatch. The CLI surface `peaks compact history` and the
7
+ // statusline indicator both consume this service.
8
+ //
9
+ // The file is one JSON event per line. Malformed lines are
10
+ // surfaced as { kind: 'parse-error', line, raw } records so the
11
+ // caller (CLI / statusline) can warn without aborting the whole
12
+ // read.
13
+ import { existsSync, readFileSync } from 'node:fs';
14
+ import { join } from 'node:path';
15
+ export function readCompactHistory(input) {
16
+ const path = join(input.projectRoot, '.peaks', '_runtime', input.sessionId, 'compact-history.jsonl');
17
+ if (!existsSync(path)) {
18
+ return { kind: 'file-missing', path };
19
+ }
20
+ const raw = readFileSync(path, 'utf8');
21
+ const lines = raw.split(/\r?\n/).filter((l) => l.length > 0);
22
+ if (lines.length === 0) {
23
+ return { kind: 'empty', path };
24
+ }
25
+ const events = [];
26
+ const parseErrors = [];
27
+ lines.forEach((line, idx) => {
28
+ try {
29
+ const parsed = JSON.parse(line);
30
+ if (typeof parsed.beforeRatio !== 'number' || typeof parsed.ts !== 'string') {
31
+ parseErrors.push({ line: idx + 1, raw: line });
32
+ return;
33
+ }
34
+ events.push(parsed);
35
+ }
36
+ catch {
37
+ parseErrors.push({ line: idx + 1, raw: line });
38
+ }
39
+ });
40
+ return { kind: 'ok', path, events, parseErrors };
41
+ }
42
+ export function summarizeCompactHistory(events) {
43
+ if (events.length === 0) {
44
+ return {
45
+ totalCompacts: 0,
46
+ lastTs: null,
47
+ lastBeforeRatio: null,
48
+ lastRedLine: false,
49
+ redLineCount: 0,
50
+ failedCount: 0,
51
+ };
52
+ }
53
+ const last = events[events.length - 1];
54
+ return {
55
+ totalCompacts: events.length,
56
+ lastTs: last.ts,
57
+ lastBeforeRatio: last.beforeRatio,
58
+ lastRedLine: last.redLine,
59
+ redLineCount: events.filter((e) => e.redLine).length,
60
+ failedCount: events.filter((e) => !e.ok).length,
61
+ };
62
+ }
@@ -0,0 +1,16 @@
1
+ export interface CompactStatuslineState {
2
+ readonly kind: 'missing' | 'idle' | 'pending' | 'red-line' | 'just-compacted';
3
+ readonly label: string;
4
+ readonly detail?: string;
5
+ }
6
+ export declare function decideCompactStatusline(input: {
7
+ readonly projectRoot: string;
8
+ readonly sessionId: string | null;
9
+ readonly now: number;
10
+ }): CompactStatuslineState;
11
+ /**
12
+ * Plain-text render: just the label. The LLM embeds this in
13
+ * the Claude Code statusline. Pure: no side effects, no I/O
14
+ * beyond the two file reads.
15
+ */
16
+ export declare function renderCompactStatusline(state: CompactStatuslineState): string;