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
@@ -0,0 +1,313 @@
1
+ # peaks-cron-scheduler deployment guide
2
+
3
+ > **Slice 2026-07-29-worktree-l2-extended Part 20.** Companion to
4
+ > the scheduler implementation in
5
+ > `src/cli/commands/cron-scheduler-commands.ts`. This file
6
+ > ships the install recipe operators actually run.
7
+
8
+ ## What the scheduler does
9
+
10
+ `peaks cron-scheduler` is a long-running background process
11
+ that wakes up once per minute and runs any task in
12
+ `.peaks/cron/schedule.json` whose `intervalMs` has elapsed
13
+ since the last run. Built-in tasks include `lease-gc-daily`
14
+ (24h interval; sweeps orphan worktree leases). See
15
+ `peaks cron init` to bootstrap the schedule.
16
+
17
+ ## Quick start (manual)
18
+
19
+ ```sh
20
+ # 1. Initialize the schedule (idempotent)
21
+ peaks cron init --project .
22
+
23
+ # 2. Start the scheduler as a detached background process
24
+ peaks cron-scheduler start --project .
25
+
26
+ # 3. Confirm it is alive
27
+ peaks cron-scheduler status --project .
28
+
29
+ # 4. Trigger a one-shot run if you need it
30
+ peaks cron-scheduler run-once --project .
31
+
32
+ # 5. Stop the scheduler (SIGTERM)
33
+ peaks cron-scheduler stop --project .
34
+ ```
35
+
36
+ The pid is written to `.peaks/cron/scheduler.pid` so
37
+ `stop` and `status` can find the process without operator
38
+ guesswork. If the pid file is stale, `stop` removes it
39
+ unconditionally (the `isPidAlive` check filters dead entries).
40
+
41
+ ## Windows service install (NSSM)
42
+
43
+ The scheduler is a normal CLI process. NSSM (the Non-Sucking
44
+ Service Manager) is the recommended wrapper for running it
45
+ as a real Windows service that auto-restarts on crash.
46
+
47
+ ```sh
48
+ # 1. Download NSSM (https://nssm.cc/) and put nssm.exe on PATH.
49
+
50
+ # 2. Install the service. NSSM is happy with node + script
51
+ # args, so the same call works on Windows + POSIX.
52
+ nssm install peaks-cron-scheduler "C:\\Program Files\\nodejs\\node.exe" \
53
+ "C:\\Users\\<you>\\.claude\\skills\\peaks-loop\\bin\\peaks.js" \
54
+ "cron-scheduler" "start" "--project" "C:\\path\\to\\peaks-project"
55
+
56
+ # 3. Set the working directory (NSSM inherits the install
57
+ # caller's cwd by default; that may not be the project).
58
+ nssm set peaks-cron-scheduler AppDirectory "C:\\path\\to\\peaks-project"
59
+
60
+ # 4. Set environment variables (if needed for proxies / mirrors).
61
+ nssm set peaks-cron-scheduler AppEnvironmentExtra "PEAKS_HOME=C:\\Users\\<you>\\.peaks"
62
+
63
+ # 5. Configure auto-restart on crash.
64
+ nssm set peaks-cron-scheduler AppExit Default Restart
65
+ nssm set peaks-cron-scheduler AppRestartDelay 5000
66
+
67
+ # 6. Start the service.
68
+ nssm start peaks-cron-scheduler
69
+
70
+ # 7. Verify.
71
+ nssm status peaks-cron-scheduler
72
+ peaks cron-scheduler status --project .
73
+ ```
74
+
75
+ The same NSSM recipe works on POSIX (use `nssm` from your
76
+ distro's package manager) — NSSM runs the same commands on
77
+ both Windows and Linux. The pid-file pattern is the same.
78
+
79
+ ## Logs
80
+
81
+ `peaks-cron-scheduler.js` writes to its own stdout/stderr;
82
+ NSSM captures them to the Windows Event Log when the
83
+ service is running. For a debug session, run the scheduler
84
+ in the foreground:
85
+
86
+ ```sh
87
+ node bin/peaks.js cron-scheduler start --project . # will not detach; use a tmux/foreground
88
+ ```
89
+
90
+ (This is not the production path — the production path is
91
+ `peaks cron-scheduler start` which uses detached spawn and
92
+ returns immediately. The detached flag means the parent can
93
+ exit cleanly without the child.)
94
+
95
+ ## Troubleshooting
96
+
97
+ - **"scheduler.pid stale"** — `stop` removes the pid file
98
+ unconditionally. Restart with `start`.
99
+ - **"no lease lease lease-id"** — the schedule was created
100
+ with `peaks cron init` but the user's `.peaks/cron/` is
101
+ read-only. Check filesystem permissions.
102
+ - **"docker not found"** — the scheduler runs shell commands
103
+ via `execSync`. If a task is `docker rm --force ...` and
104
+ docker is missing, the task fails (the scheduler does not
105
+ crash — it logs and continues to the next tick).
106
+
107
+ ## When NOT to use this scheduler
108
+
109
+ - **Production with strict timing** — peaks-cron is a
110
+ best-effort CLI scheduler, not a real cron daemon. For
111
+ mission-critical periodic work, use the OS cron / systemd
112
+ timer / Windows Task Scheduler to invoke
113
+ `peaks cron-scheduler run-once --project .` on a precise
114
+ interval. The OS scheduler is reliable; the in-process
115
+ scheduler is portable.
116
+ - **Multi-tenant** — peaks-cron runs all tasks in the
117
+ schedule.json in a single process. If two users have
118
+ conflicting lease-gc schedules, the in-process scheduler
119
+ will collide. The OS scheduler + per-tenant
120
+ `peaks cron-scheduler run-once` is the right shape.
121
+
122
+ ## Source pointer
123
+
124
+ The CLI surface lives in
125
+ `src/cli/commands/cron-scheduler-commands.ts`. The pure
126
+ `runSchedulerLoop` function is the async loop; `start` /
127
+ `stop` / `status` are thin shells around pid-file
128
+ management.
129
+
130
+ ---
131
+
132
+ # Appendix A — NSSM (Non-Sucking Service Manager) detailed install
133
+
134
+ > **Slice 2026-07-29-rid-prose-only-sweep Part 39.** This
135
+ > appendix is the operator-focused, step-by-step NSSM install
136
+ > recipe for `peaks-cron-scheduler` on Windows. NSSM wraps any
137
+ > long-running process as a real Windows service that starts at
138
+ > boot, restarts on crash, and writes to the Windows Event Log.
139
+
140
+ ## Why NSSM (not Windows Task Scheduler)
141
+
142
+ Windows Task Scheduler can run `peaks-cron-scheduler start`
143
+ on a schedule, but it does not manage the long-running process:
144
+ if `node` crashes, Task Scheduler will not restart it until
145
+ the next trigger. NSSM (and node-windows, a Node-native
146
+ alternative) treat the process as a service with auto-restart.
147
+
148
+ ## Install NSSM
149
+
150
+ Download NSSM from <https://nssm.cc/> (the official site
151
+ hosts the binary). NSSM is a single `nssm.exe` (~50 KB); put
152
+ it on PATH (e.g. `C:\Windows\System32` or a custom dir).
153
+
154
+ For a 64-bit Windows host, NSSM ships 32-bit and 64-bit
155
+ binaries in the same zip — use `win64\nssm.exe`. The 32-bit
156
+ binary works for 32-bit services; the 64-bit binary is the
157
+ default for modern systems.
158
+
159
+ ```sh
160
+ # Verify NSSM is on PATH and reports its version
161
+ nssm version
162
+ # NSSM 2.24, 64-bit
163
+ ```
164
+
165
+ If `nssm` is not on PATH, the install will fail with
166
+ `'nssm' is not recognized`. The peaks-cron-scheduler NSSM
167
+ install does not put NSSM on PATH for the operator; it
168
+ expects NSSM to be installed first.
169
+
170
+ ## Install the service
171
+
172
+ ```sh
173
+ # 1. Install the service. NSSM is happy with `node` + script
174
+ # args, so the same call works on Windows + POSIX.
175
+ nssm install peaks-cron-scheduler "C:\Program Files\nodejs\node.exe" \
176
+ "C:\Users\<you>\.claude\skills\peaks-loop\bin\peaks.js" \
177
+ "cron-scheduler" "start" "--project" "C:\path\to\peaks-project"
178
+
179
+ # 2. Set the working directory (NSSM inherits the install
180
+ # caller's cwd by default; that may not be the project).
181
+ nssm set peaks-cron-scheduler AppDirectory "C:\path\to\peaks-project"
182
+
183
+ # 3. Set environment variables (if needed for proxies / mirrors).
184
+ nssm set peaks-cron-scheduler AppEnvironmentExtra "PEAKS_HOME=C:\Users\<you>\.peaks"
185
+
186
+ # 4. Configure auto-restart on crash.
187
+ nssm set peaks-cron-scheduler AppExit Default Restart
188
+ nssm set peaks-cron-scheduler AppRestartDelay 5000
189
+
190
+ # 5. Set log file paths (NSSM redirects stdout/stderr).
191
+ nssm set peaks-cron-scheduler AppStdoutCreationDisposition 4 # OPEN_ALWAYS
192
+ nssm set peaks-cron-scheduler AppStderrCreationDisposition 4
193
+ nssm set peaks-cron-scheduler AppStdout "C:\path\to\logs\peaks-cron-scheduler.out.log"
194
+ nssm set peaks-cron-scheduler AppStderr "C:\path\to\logs\peaks-cron-scheduler.err.log"
195
+ nssm set peaks-cron-scheduler AppRotateFiles 1 # rotate on size
196
+ nssm set peaks-cron-scheduler AppRotateBytes 10485760 # 10 MB per file
197
+
198
+ # 6. Start the service.
199
+ nssm start peaks-cron-scheduler
200
+ ```
201
+
202
+ The same NSSM recipe works on POSIX (use `nssm` from your
203
+ distro's package manager) — NSSM runs the same commands on
204
+ both Windows and Linux. The pid-file pattern is the same.
205
+
206
+ ## Verify
207
+
208
+ ```sh
209
+ # 1. NSSM-level status
210
+ nssm status peaks-cron-scheduler
211
+ # SERVICE_RUNNING
212
+
213
+ # 2. peaks-level status (peaks-cli reads the pid file)
214
+ peaks cron-scheduler status --project C:\path\to\peaks-project
215
+ # {
216
+ # "data": {
217
+ # "alive": true,
218
+ # "pid": 12345,
219
+ # "scheduleEntries": 1,
220
+ # "dueTaskCount": 0
221
+ # }
222
+ # }
223
+
224
+ # 3. Force a one-shot to verify the schedule is reachable
225
+ peaks cron-scheduler run-once --project C:\path\to\peaks-project
226
+ # {
227
+ # "data": {
228
+ # "ran": 1,
229
+ # "records": [{ ... }]
230
+ # }
231
+ # }
232
+ ```
233
+
234
+ If `nssm status` reports `SERVICE_STOPPED`, the service
235
+ crashed on startup. Check the log file at
236
+ `<AppStderr>` (typically `C:\path\to\logs\peaks-cron-scheduler.err.log`).
237
+ The most common cause is `nssm` not finding the node binary
238
+ at `<AppStdout>` — verify with
239
+ `nssm get peaks-cron-scheduler AppStdout` + `AppParameters`.
240
+
241
+ ## Uninstall
242
+
243
+ ```sh
244
+ # 1. Stop the service
245
+ nssm stop peaks-cron-scheduler
246
+
247
+ # 2. Remove the service registration
248
+ nssm remove peaks-cron-scheduler confirm
249
+
250
+ # 3. (Optional) Remove the log files
251
+ rm "C:\path\to\logs\peaks-cron-scheduler.out.log"
252
+ rm "C:\path\to\logs\peaks-cron-scheduler.err.log"
253
+
254
+ # 4. (Optional) Remove the cron-schedule state
255
+ # Note: the peaks-cli schedule lives under .peaks/cron/ and
256
+ # is NOT in NSSM. Removing NSSM does not affect the schedule.
257
+ peaks cron list --project C:\path\to\peaks-project
258
+ ```
259
+
260
+ If the service refuses to stop, escalate:
261
+ `taskkill /F /IM node.exe /FI "WINDOWTITLE eq peaks-cron-scheduler*"`
262
+ or `nssm set peaks-cron-scheduler AppStopMethodSkip 0` to
263
+ force NSSM to honor `Ctrl+C` instead of `WM_CLOSE`.
264
+
265
+ ## Troubleshooting
266
+
267
+ - **"nssm: command not found"** — NSSM is not on PATH.
268
+ Install it (see `Install NSSM` above) and re-run the
269
+ `nssm install` command.
270
+ - **"SERVICE_PAUSED" on startup** — Windows Defender or
271
+ another AV is blocking the binary. Add the node binary
272
+ to the AV exclusion list or sign the peaks-cli install.
273
+ - **Service runs but no log lines** — the AppStdout path is
274
+ wrong, or the directory is not writable. NSSM needs the
275
+ AppStderr file's parent directory to exist before
276
+ service start. `mkdir -p` the log dir before
277
+ `nssm start`.
278
+ - **Auto-restart not firing** — `AppExit Default Restart`
279
+ is set, but Windows also has a per-process recovery
280
+ policy (`sc failure` for native services). For NSSM,
281
+ `AppRestartDelay` is in milliseconds; 5000 is the
282
+ default. 0 means "restart immediately", which can cause
283
+ a crash loop if the underlying issue is fatal.
284
+ - **Schedule has tasks but they don't fire** — verify
285
+ the schedule file is reachable by the service user
286
+ (the user the service runs as, not your interactive
287
+ user). `peaks cron list` from the interactive shell
288
+ may show entries that the service user cannot see
289
+ (different HOME / different `PEAKS_HOME` env).
290
+
291
+ ## Production checklist
292
+
293
+ - [ ] NSSM installed on PATH
294
+ - [ ] Node.js installed at the path NSSM is configured for
295
+ - [ ] peaks-loop installed at the path NSSM is configured for
296
+ - [ ] Project root has a populated `.peaks/cron/schedule.json`
297
+ (run `peaks cron init` from the project dir first)
298
+ - [ ] Log directory exists and is writable by the service user
299
+ - [ ] `nssm status peaks-cron-scheduler` reports `SERVICE_RUNNING`
300
+ - [ ] `peaks cron-scheduler status` reports `alive: true`
301
+ - [ ] `peaks cron-scheduler run-once` runs the lease-gc-daily
302
+ task without error
303
+ - [ ] Service survives a reboot (`shutdown /r` then
304
+ `nssm status peaks-cron-scheduler`)
305
+
306
+ ## Related memory
307
+
308
+ - [[2026-07-29-worktree-l2-extended-part15]] — peaks-cron
309
+ init / list / run / peaks-cron-scheduler start (Part 15)
310
+ - [[2026-07-29-worktree-l2-extended-part20]] — first pass
311
+ NSSM recipe (Part 20)
312
+ - [[2026-07-29-worktree-l2-extended-part14]] — peaks-cron
313
+ schedule.json shape + built-in `lease-gc-daily` task
@@ -70,3 +70,30 @@ When a skill body adds a new external reference, it must include the equivalent
70
70
  3. add the capability discovery clause, the reference-only qualifier, the do-not-execute clause, and the Peaks-authoritative gate to that section;
71
71
  4. for MCP servers, point the LLM at the tool-list self-check (its own `mcp__<server>__*` namespace) instead of describing manual `~/.claude/settings.json` edits;
72
72
  5. rerun the audit.
73
+
74
+ ## Superpowers transition contract (effective 2026-07-24, slice 2026-07-24-peaks-code-bridge-002-rootcause)
75
+
76
+ `peaks-code` cooperates with the **superpowers** skill family under the following contract. This contract sits alongside Stage 1–3 above and is binding on every peaks-code dispatch.
77
+
78
+ ### Trigger
79
+
80
+ When the user (or the active IDE skill picker) suggests invoking `superpowers:brainstorming`, `superpowers:writing-plans`, `superpowers:executing-plans`, or any other superpowers skill during a peaks-code request, the LLM MUST apply the transition steps below before continuing the peaks-code 11-step sequence.
81
+
82
+ ### Transition steps (binding)
83
+
84
+ 1. **Discovery** — confirm the superpowers skill is present via the LLM's own tool list / `peaks capabilities --source access-repo --json`. If absent, surface the install command (`claude install skill superpowers:<skill>`) and stop until the user installs.
85
+ 2. **Reference-only invocation** — invoke the superpowers skill as **reference material**. The output (a brainstorming map, a plan, a TDD recipe, etc.) is read; it is not executed as the workflow body. Quote the methods/surfaces the peaks-rd plan borrows; never persist or "execute" the superpowers output verbatim.
86
+ 3. **Re-author through peaks-rd** — re-author the borrowed plan as a peaks-rd artefact at `.peaks/_runtime/<sessionId>/rd/requests/<rid>.md`. peaks-rd owns the slice contract, the rollback plan, and the test plan. The superpowers output may inform the prose; it does not replace the peaks-rd envelope.
87
+ 4. **Continue peaks-code** — from Step 3 (sub-agent fan-out) onward. Do NOT call `superpowers:executing-plans` or `superpowers:subagent-driven-development` to run the resulting plan; use `peaks sub-agent dispatch rd` / `peaks sub-agent dispatch qa` instead.
88
+ 5. **Do not edit upstream** — the `superpowers:writing-plans` and `superpowers:brainstorming` upstream SKILL.md files are owned by the superpowers npm/Claude-Code skill distribution. Any direct edit is silently overwritten on the next `claude install skill superpowers:<skill>` refresh. If a user-facing bridge is needed, place it in `peaks-code/SKILL.md` (BRIDGE chapter), `peaks-code/references/runbook.md` (Step 2.7), `peaks-code/references/boundaries.md` (superpowers red lines), and this file (transition contract).
89
+ 6. **Mandatory closure** — when the request is complete, run `peaks request transition` through `spec-locked → implemented → qa-handoff → handed-off` and `peaks memory extract`. A half-finished state file under `.peaks/_runtime/<sessionId>/` is treated as pollution.
90
+
91
+ ### What peaks-code MUST NOT do
92
+
93
+ - Dispatch `superpowers:executing-plans` or `superpowers:subagent-driven-development` to replace peaks-rd or peaks-qa.
94
+ - Adopt superpowers' bare worktree convention (`~/.claude/worktrees/<branch>/`) inside peaks-code requests; peaks-loop uses `.peaks/_runtime/<sessionId>/<role>/...` (gitignored) and the active junction at `~/.claude/skills/peaks-*`.
95
+ - Hand-author hook scripts at `~/.claude/skills/peaks-code/hooks/*`. Hook source MUST come from `src/services/hooks/*.sh` in the peaks-loop repo, distributed via `peaks hooks install` (which itself respects the existing `peaks gate enforce` entry and is append-only).
96
+
97
+ ### Phrase the audit looks for
98
+
99
+ When a peaks-code skill body mentions a superpowers skill by name, the body MUST include all four: a "reference only" qualifier, a "do not auto-run" clause, a "re-author through peaks-rd" clause, and a "Peaks artefacts remain authoritative" clause. The `tests/unit/skills/peaks-code-superpowers-bridge.test.ts` guard test enforces this on every peaks-* SKILL.md.
@@ -0,0 +1,224 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>peaks lease-stats dashboard</title>
6
+ <style>
7
+ :root {
8
+ --bg: #0f1115;
9
+ --fg: #e6e6e6;
10
+ --muted: #9aa0a6;
11
+ --accent: #6cc4ff;
12
+ --ok: #6ee787;
13
+ --warn: #f0c674;
14
+ --err: #ff6b6b;
15
+ --card: #1a1d24;
16
+ --border: #2a2e36;
17
+ }
18
+ * { box-sizing: border-box; }
19
+ body {
20
+ margin: 0;
21
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
22
+ background: var(--bg);
23
+ color: var(--fg);
24
+ line-height: 1.5;
25
+ }
26
+ header {
27
+ padding: 1.5rem 2rem;
28
+ border-bottom: 1px solid var(--border);
29
+ background: var(--card);
30
+ }
31
+ header h1 {
32
+ margin: 0 0 .25rem 0;
33
+ font-size: 1.1rem;
34
+ letter-spacing: .04em;
35
+ }
36
+ header .sub {
37
+ color: var(--muted);
38
+ font-size: .85rem;
39
+ }
40
+ main {
41
+ max-width: 960px;
42
+ margin: 0 auto;
43
+ padding: 2rem;
44
+ display: grid;
45
+ gap: 1.5rem;
46
+ }
47
+ .card {
48
+ background: var(--card);
49
+ border: 1px solid var(--border);
50
+ border-radius: 8px;
51
+ padding: 1.25rem 1.5rem;
52
+ }
53
+ .card h2 {
54
+ margin: 0 0 1rem 0;
55
+ font-size: 0.95rem;
56
+ color: var(--accent);
57
+ text-transform: uppercase;
58
+ letter-spacing: .08em;
59
+ }
60
+ .stat {
61
+ display: flex;
62
+ justify-content: space-between;
63
+ align-items: baseline;
64
+ padding: .35rem 0;
65
+ border-bottom: 1px dashed var(--border);
66
+ }
67
+ .stat:last-child { border-bottom: none; }
68
+ .stat .label { color: var(--muted); font-size: .9rem; }
69
+ .stat .value { font-size: 1.05rem; font-weight: 600; }
70
+ .stat .value.ok { color: var(--ok); }
71
+ .stat .value.warn { color: var(--warn); }
72
+ .stat .value.err { color: var(--err); }
73
+ .bar {
74
+ height: 6px;
75
+ background: var(--bg);
76
+ border-radius: 3px;
77
+ overflow: hidden;
78
+ margin-top: .75rem;
79
+ }
80
+ .bar .fill { height: 100%; background: var(--accent); }
81
+ .bar .fill.warn { background: var(--warn); }
82
+ .bar .fill.err { background: var(--err); }
83
+ table { width: 100%; border-collapse: collapse; font-size: .9rem; }
84
+ th, td { text-align: left; padding: .4rem .6rem; border-bottom: 1px solid var(--border); }
85
+ th { color: var(--muted); font-weight: 500; }
86
+ td.num { text-align: right; font-variant-numeric: tabular-nums; }
87
+ .empty { color: var(--muted); font-style: italic; }
88
+ code { background: var(--bg); padding: 1px 6px; border-radius: 3px; font-size: .85em; }
89
+ .footer { text-align: center; color: var(--muted); font-size: .8rem; margin-top: 2rem; }
90
+ </style>
91
+ </head>
92
+ <body>
93
+ <header>
94
+ <h1>peaks lease-stats dashboard</h1>
95
+ <div class="sub">auto-refreshes every 30s. Source: <code>peaks lease-stats --json</code></div>
96
+ </header>
97
+ <main>
98
+ <section class="card" id="rates">
99
+ <h2>lease lifecycle (project-wide)</h2>
100
+ <div class="stat"><span class="label">leases spawned</span><span class="value" id="stat-spawn">—</span></div>
101
+ <div class="stat"><span class="label">leases released (manual)</span><span class="value" id="stat-release">—</span></div>
102
+ <div class="stat"><span class="label">leases auto-released</span><span class="value" id="stat-auto">—</span></div>
103
+ <div class="stat"><span class="label">leases gc'd</span><span class="value" id="stat-gc">—</span></div>
104
+ <div class="stat"><span class="label">auto-release failures</span><span class="value" id="stat-fail">—</span></div>
105
+ </section>
106
+
107
+ <section class="card" id="rate">
108
+ <h2>leak rate</h2>
109
+ <div class="stat"><span class="label">estimated active</span><span class="value" id="stat-active">—</span></div>
110
+ <div class="stat"><span class="label">estimated leaked</span><span class="value" id="stat-leaked">—</span></div>
111
+ <div class="bar"><div class="fill" id="bar-leaked"></div></div>
112
+ <div class="stat" id="row-lifetimes" style="display:none"><span class="label">avg lease lifetime</span><span class="value" id="stat-avglife">—</span></div>
113
+ <div class="stat" id="row-p99" style="display:none"><span class="label">p99 lease lifetime</span><span class="value" id="stat-p99">—</span></div>
114
+ </section>
115
+
116
+ <section class="card" id="rid-table">
117
+ <h2>top rids (by event count)</h2>
118
+ <table>
119
+ <thead><tr><th>rid</th><th class="num">events</th></tr></thead>
120
+ <tbody id="rid-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
121
+ </table>
122
+ </section>
123
+
124
+ <section class="card" id="role-table">
125
+ <h2>by role</h2>
126
+ <table>
127
+ <thead><tr><th>role</th><th class="num">events</th></tr></thead>
128
+ <tbody id="role-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
129
+ </table>
130
+ </section>
131
+
132
+ <section class="card" id="iso-table">
133
+ <h2>by isolation mode</h2>
134
+ <table>
135
+ <thead><tr><th>isolation</th><th class="num">events</th></tr></thead>
136
+ <tbody id="iso-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
137
+ </table>
138
+ </section>
139
+ </main>
140
+ <div class="footer">part 26 — open <code>lease-dashboard.html</code> in a browser served by a static file server</div>
141
+ <script>
142
+ // Part 26 dashboard. Fetches the live peaks lease-stats
143
+ // envelope every 30s and re-renders the cards. The endpoint
144
+ // is a sibling field to `node bin/peaks.js audit red-lines`
145
+ // — any project root that has a populated .peaks/observability
146
+ // stream will render correctly.
147
+ //
148
+ // Use: serve this file via `python3 -m http.server 8080` and
149
+ // configure the peaks CLI to expose a JSON endpoint on the
150
+ // same port. (The simplest local setup is a tiny shell script
151
+ // that wraps `peaks lease-stats --project . --json | jq .`.)
152
+ async function refresh() {
153
+ try {
154
+ const res = await fetch('./lease-stats.json', { cache: 'no-store' });
155
+ if (!res.ok) throw new Error('HTTP ' + res.status);
156
+ const env = await res.json();
157
+ render(env.data);
158
+ } catch (err) {
159
+ // Render a soft error: the page stays useful as a static
160
+ // reference even when the JSON endpoint is down.
161
+ document.getElementById('stat-spawn').textContent = 'err: ' + err.message;
162
+ }
163
+ }
164
+ function render(d) {
165
+ if (!d) return;
166
+ const c = d.counts || {};
167
+ document.getElementById('stat-spawn').textContent = c.spawn ?? '—';
168
+ document.getElementById('stat-release').textContent = c.release ?? '—';
169
+ document.getElementById('stat-auto').textContent = c.autoRelease ?? '—';
170
+ document.getElementById('stat-gc').textContent = c.gc ?? '—';
171
+ document.getElementById('stat-fail').textContent = c['autoRelease-failed'] ?? '—';
172
+ if (d.rate) {
173
+ const active = d.rate.estimatedActive ?? 0;
174
+ const leaked = d.rate.estimatedLeaked ?? 0;
175
+ const denom = Math.max(active, 1);
176
+ const pct = Math.round((leaked / denom) * 100);
177
+ const cls = leaked === 0 ? 'ok' : (pct < 10 ? 'warn' : 'err');
178
+ const aEl = document.getElementById('stat-active');
179
+ const lEl = document.getElementById('stat-leaked');
180
+ aEl.textContent = active;
181
+ aEl.className = 'value ' + cls;
182
+ lEl.textContent = leaked + ' (' + pct + '%)';
183
+ lEl.className = 'value ' + cls;
184
+ const bar = document.getElementById('bar-leaked');
185
+ bar.style.width = pct + '%';
186
+ bar.className = 'fill ' + cls;
187
+ if (d.rate.avgLifetimeMs !== null && d.rate.avgLifetimeMs !== undefined) {
188
+ document.getElementById('row-lifetimes').style.display = 'flex';
189
+ document.getElementById('stat-avglife').textContent = formatMs(d.rate.avgLifetimeMs);
190
+ }
191
+ if (d.rate.p99LifetimeMs !== null && d.rate.p99LifetimeMs !== undefined) {
192
+ document.getElementById('row-p99').style.display = 'flex';
193
+ document.getElementById('stat-p99').textContent = formatMs(d.rate.p99LifetimeMs);
194
+ }
195
+ }
196
+ fillTable('rid-body', d.perRid || [], (r) => [r.rid, r.count]);
197
+ fillTable('role-body', d.perRole || [], (r) => [r.role, r.count]);
198
+ fillTable('iso-body', d.perIsolation || [], (r) => [r.isolation, r.count]);
199
+ }
200
+ function fillTable(id, rows, mapper) {
201
+ const body = document.getElementById(id);
202
+ if (rows.length === 0) {
203
+ body.innerHTML = '<tr><td colspan="2" class="empty">no events recorded</td></tr>';
204
+ return;
205
+ }
206
+ body.innerHTML = rows.map((r) => {
207
+ const [a, b] = mapper(r);
208
+ return '<tr><td>' + escape(a) + '</td><td class="num">' + b + '</td></tr>';
209
+ }).join('');
210
+ }
211
+ function escape(s) {
212
+ return String(s).replace(/[&<>"]/g, (c) => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
213
+ }
214
+ function formatMs(ms) {
215
+ if (ms < 1000) return ms + 'ms';
216
+ if (ms < 60_000) return (ms / 1000).toFixed(1) + 's';
217
+ if (ms < 3_600_000) return (ms / 60_000).toFixed(1) + 'm';
218
+ return (ms / 3_600_000).toFixed(1) + 'h';
219
+ }
220
+ refresh();
221
+ setInterval(refresh, 30_000);
222
+ </script>
223
+ </body>
224
+ </html>
@@ -0,0 +1,26 @@
1
+ {
2
+ "ok": true,
3
+ "command": "lease.stats",
4
+ "data": {
5
+ "projectRoot": ".",
6
+ "sessionCount": 0,
7
+ "totalLeaseEvents": 0,
8
+ "rate": {
9
+ "totalSpawn": 0,
10
+ "totalTerminal": 0,
11
+ "estimatedActive": 0,
12
+ "estimatedLeaked": 0,
13
+ "completedLifetimes": 0,
14
+ "avgLifetimeMs": null,
15
+ "p99LifetimeMs": null
16
+ },
17
+ "perRid": [],
18
+ "perRole": [],
19
+ "perIsolation": []
20
+ },
21
+ "warnings": [],
22
+ "nextActions": [
23
+ "0 lease events across 0 session(s); 0 estimated active, 0 estimated leaked.",
24
+ "Pipe to `jq` or paste into a dashboard for visual rendering."
25
+ ]
26
+ }