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,75 @@
1
+ /**
2
+ * Check: skill presence current + freshness
3
+ * (`skill-presence:current` and `skill-presence:freshness`).
4
+ *
5
+ * Two checks sharing one read of the `presence` context field.
6
+ * - `skill-presence:current` is informational: passes when the
7
+ * presence is wired, with a message describing the active
8
+ * skill / mode / gate / setAt. When no presence is wired, it
9
+ * also passes (absence is the common case outside peaks-qa
10
+ * flows).
11
+ * - `skill-presence:freshness` is the operational gate: fails
12
+ * when the presence's `setAt` is older than the freshness
13
+ * threshold (default 24h) OR when `setAt` is unparsable. When
14
+ * no presence is wired it passes trivially ("nothing to age-
15
+ * check").
16
+ *
17
+ * Both checks share the presence signal computed once in
18
+ * `index.ts`; the legacy monolithic function probed it inline.
19
+ */
20
+ const SKILL_PRESENCE_FRESHNESS_THRESHOLD_MS = 24 * 60 * 60 * 1000;
21
+ function run({ options, presence }) {
22
+ const freshnessThresholdMs = options.skillPresenceFreshnessThresholdMs ?? SKILL_PRESENCE_FRESHNESS_THRESHOLD_MS;
23
+ if (presence === null) {
24
+ return [
25
+ {
26
+ id: 'skill-presence:current',
27
+ ok: true,
28
+ message: 'No active Peaks skill presence (.peaks/.active-skill.json absent or invalid)'
29
+ },
30
+ {
31
+ id: 'skill-presence:freshness',
32
+ ok: true,
33
+ message: 'No active Peaks skill presence to age-check'
34
+ }
35
+ ];
36
+ }
37
+ const modePart = presence.mode !== undefined ? `, mode ${presence.mode}` : '';
38
+ const gatePart = presence.gate !== undefined ? `, gate ${presence.gate}` : '';
39
+ const checks = [{
40
+ id: 'skill-presence:current',
41
+ ok: true,
42
+ message: `Active Peaks skill presence: ${presence.skill}${modePart}${gatePart} (set ${presence.setAt})`
43
+ }];
44
+ const setAtMs = Date.parse(presence.setAt);
45
+ if (Number.isNaN(setAtMs)) {
46
+ checks.push({
47
+ id: 'skill-presence:freshness',
48
+ ok: false,
49
+ message: `Skill presence ${presence.skill} has invalid setAt: ${presence.setAt}`
50
+ });
51
+ }
52
+ else {
53
+ const ageMs = Date.now() - setAtMs;
54
+ if (ageMs > freshnessThresholdMs) {
55
+ const ageHours = Math.round(ageMs / (60 * 60 * 1000));
56
+ checks.push({
57
+ id: 'skill-presence:freshness',
58
+ ok: false,
59
+ message: `Skill presence ${presence.skill} is stale (set ${presence.setAt}, ~${ageHours}h ago); run peaks skill presence:clear if the role has ended`
60
+ });
61
+ }
62
+ else {
63
+ checks.push({
64
+ id: 'skill-presence:freshness',
65
+ ok: true,
66
+ message: `Skill presence ${presence.skill} is fresh (set ${presence.setAt})`
67
+ });
68
+ }
69
+ }
70
+ return checks;
71
+ }
72
+ export const check = {
73
+ name: 'skill-presence',
74
+ run
75
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Check: required skill declares a `## Default runbook` section
3
+ * (`skill-runbook:<skill-name>`).
4
+ *
5
+ * Emits one `DoctorCheck` per *required* skill (we don't gate
6
+ * user-added skills; only the ones the doctor guarantees exist).
7
+ * Passes when the SKILL.md body contains a `## Default runbook`
8
+ * heading; fails with an actionable "missing a ## Default runbook
9
+ * section" message. Read failures degrade to a single
10
+ * `skill-runbook:<name>` fail (no second `skill-apply-note`
11
+ * emitted for the same skill).
12
+ */
13
+ import type { DoctorCheckPlugin } from '../types.js';
14
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Check: required skill declares a `## Default runbook` section
3
+ * (`skill-runbook:<skill-name>`).
4
+ *
5
+ * Emits one `DoctorCheck` per *required* skill (we don't gate
6
+ * user-added skills; only the ones the doctor guarantees exist).
7
+ * Passes when the SKILL.md body contains a `## Default runbook`
8
+ * heading; fails with an actionable "missing a ## Default runbook
9
+ * section" message. Read failures degrade to a single
10
+ * `skill-runbook:<name>` fail (no second `skill-apply-note`
11
+ * emitted for the same skill).
12
+ */
13
+ import { readText } from 'peaks-loop-shared/fs';
14
+ import { requiredSkillNames } from 'peaks-loop-shared/paths';
15
+ import { getErrorMessage } from 'peaks-loop-shared/result';
16
+ const REQUIRED_SKILL_NAMES = new Set(requiredSkillNames);
17
+ async function run({ registry }) {
18
+ const checks = [];
19
+ for (const skill of registry.skills) {
20
+ if (!REQUIRED_SKILL_NAMES.has(skill.name)) {
21
+ continue;
22
+ }
23
+ try {
24
+ const body = await readText(skill.skillPath);
25
+ const hasRunbook = /## Default runbook\s/.test(body);
26
+ checks.push({
27
+ id: `skill-runbook:${skill.name}`,
28
+ ok: hasRunbook,
29
+ message: hasRunbook
30
+ ? `Skill ${skill.name} declares a Default runbook`
31
+ : `Skill ${skill.name} is missing a ## Default runbook section`
32
+ });
33
+ }
34
+ catch (error) {
35
+ checks.push({
36
+ id: `skill-runbook:${skill.name}`,
37
+ ok: false,
38
+ message: `Skill ${skill.name} runbook check failed: ${getErrorMessage(error)}`
39
+ });
40
+ }
41
+ }
42
+ return checks;
43
+ }
44
+ export const check = {
45
+ name: 'skill-runbook',
46
+ run
47
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Check: statusline install discovery nudge (`statusline:install`).
3
+ *
4
+ * Informational only (always passes). When a Peaks skill is active
5
+ * but the statusLine is not installed, the message suggests running
6
+ * `peaks statusline install` so the active skill shows in the
7
+ * terminal status bar. When no skill is active, the message
8
+ * downgrades to "install is optional".
9
+ *
10
+ * The check is non-failing because the statusline is a UI
11
+ * accelerator — its absence does not break the doctor pipeline.
12
+ */
13
+ import type { DoctorCheckPlugin } from '../types.js';
14
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Check: statusline install discovery nudge (`statusline:install`).
3
+ *
4
+ * Informational only (always passes). When a Peaks skill is active
5
+ * but the statusLine is not installed, the message suggests running
6
+ * `peaks statusline install` so the active skill shows in the
7
+ * terminal status bar. When no skill is active, the message
8
+ * downgrades to "install is optional".
9
+ *
10
+ * The check is non-failing because the statusline is a UI
11
+ * accelerator — its absence does not break the doctor pipeline.
12
+ */
13
+ function run({ presence, statusLineInstalled }) {
14
+ if (presence !== null && !statusLineInstalled) {
15
+ return [{
16
+ id: 'statusline:install',
17
+ ok: true,
18
+ message: 'A Peaks skill is active but the statusLine is not installed; run `peaks statusline install` so the active skill shows in the terminal status bar'
19
+ }];
20
+ }
21
+ return [{
22
+ id: 'statusline:install',
23
+ ok: true,
24
+ message: statusLineInstalled
25
+ ? 'Peaks statusLine is installed'
26
+ : 'Peaks statusLine not installed (no active skill; install optional)'
27
+ }];
28
+ }
29
+ export const check = {
30
+ name: 'statusline-install',
31
+ run
32
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Check: statusline runtime diagnostic (`statusline:runtime`).
3
+ *
4
+ * Informational only (always passes). Reports the running peaks
5
+ * version + platform string. On Windows, adds a hint that the
6
+ * statusLine shows nothing in git bash when `peaks` is not on PATH
7
+ * in the shell Claude Code spawns — the user must reinstall
8
+ * globally if the version is older than `CLI_VERSION` and reload
9
+ * Claude Code. On other platforms, the message is a short platform
10
+ * marker.
11
+ */
12
+ import type { DoctorCheckPlugin } from '../types.js';
13
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Check: statusline runtime diagnostic (`statusline:runtime`).
3
+ *
4
+ * Informational only (always passes). Reports the running peaks
5
+ * version + platform string. On Windows, adds a hint that the
6
+ * statusLine shows nothing in git bash when `peaks` is not on PATH
7
+ * in the shell Claude Code spawns — the user must reinstall
8
+ * globally if the version is older than `CLI_VERSION` and reload
9
+ * Claude Code. On other platforms, the message is a short platform
10
+ * marker.
11
+ */
12
+ import { CLI_VERSION } from 'peaks-loop-shared/version';
13
+ function run({ platform }) {
14
+ if (platform === 'win32') {
15
+ return [{
16
+ id: 'statusline:runtime',
17
+ ok: true,
18
+ message: `peaks ${CLI_VERSION} (win32): if the statusLine shows nothing in git bash, verify \`peaks\` resolves on PATH in the shell Claude Code uses (run \`peaks -v\` there), reinstall globally with \`npm i -g peaks-loop@latest\` if the version is older than ${CLI_VERSION}, then re-run \`peaks statusline install\` and reload Claude Code`
19
+ }];
20
+ }
21
+ return [{
22
+ id: 'statusline:runtime',
23
+ ok: true,
24
+ message: `peaks ${CLI_VERSION} (${platform}): statusLine command is \`peaks statusline\``
25
+ }];
26
+ }
27
+ export const check = {
28
+ name: 'statusline-runtime',
29
+ run
30
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Check: optional user config presence (`config:user`).
3
+ *
4
+ * Single informational check that flags whether the user has a
5
+ * personal `~/.peaks/config.json`. This check NEVER fails
6
+ * (presence is optional) — it just tells the operator the file
7
+ * is present vs absent so they can correlate it with later
8
+ * "user-config says X" surprises.
9
+ */
10
+ import type { DoctorCheckPlugin } from '../types.js';
11
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Check: optional user config presence (`config:user`).
3
+ *
4
+ * Single informational check that flags whether the user has a
5
+ * personal `~/.peaks/config.json`. This check NEVER fails
6
+ * (presence is optional) — it just tells the operator the file
7
+ * is present vs absent so they can correlate it with later
8
+ * "user-config says X" surprises.
9
+ */
10
+ import { existsSync } from 'node:fs';
11
+ import { homedir } from 'node:os';
12
+ import { join } from 'node:path';
13
+ function run() {
14
+ const userConfigPath = join(homedir(), '.peaks', 'config.json');
15
+ const hasUserConfig = existsSync(userConfigPath);
16
+ return [{
17
+ id: 'config:user',
18
+ ok: true,
19
+ message: hasUserConfig
20
+ ? 'User config exists at ~/.peaks/config.json'
21
+ : 'Optional user config not found at ~/.peaks/config.json'
22
+ }];
23
+ }
24
+ export const check = {
25
+ name: 'user-config',
26
+ run
27
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Check: workspace initialization guard (`skill-presence:workspace`).
3
+ *
4
+ * Fail-closed rule: when a skill is actively orchestrating AND the
5
+ * workspace session binding is absent, the check fails and tells the
6
+ * operator to run `peaks workspace init --project <repo>`. This is
7
+ * the #1 reported failure mode where `.peaks/` artifacts are never
8
+ * created — the SKILL.md "MUST create the workspace" prose turned
9
+ * into an executable check.
10
+ *
11
+ * When no skill is active, the check passes (workspace guard is
12
+ * N/A). When a skill IS active AND the workspace session exists,
13
+ * it also passes (the happy path).
14
+ */
15
+ import type { DoctorCheckPlugin } from '../types.js';
16
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Check: workspace initialization guard (`skill-presence:workspace`).
3
+ *
4
+ * Fail-closed rule: when a skill is actively orchestrating AND the
5
+ * workspace session binding is absent, the check fails and tells the
6
+ * operator to run `peaks workspace init --project <repo>`. This is
7
+ * the #1 reported failure mode where `.peaks/` artifacts are never
8
+ * created — the SKILL.md "MUST create the workspace" prose turned
9
+ * into an executable check.
10
+ *
11
+ * When no skill is active, the check passes (workspace guard is
12
+ * N/A). When a skill IS active AND the workspace session exists,
13
+ * it also passes (the happy path).
14
+ */
15
+ function run({ presence, workspaceInitialized }) {
16
+ if (presence !== null && !workspaceInitialized) {
17
+ return [{
18
+ id: 'skill-presence:workspace',
19
+ ok: false,
20
+ message: `Skill ${presence.skill} is active but no workspace session exists (.peaks/_runtime/session.json missing); run \`peaks workspace init --project <repo>\` — peaks-code Step 0 must anchor the workspace before any work`
21
+ }];
22
+ }
23
+ return [{
24
+ id: 'skill-presence:workspace',
25
+ ok: true,
26
+ message: presence === null
27
+ ? 'No active skill presence; workspace guard not applicable'
28
+ : `Workspace session present for active skill ${presence.skill}`
29
+ }];
30
+ }
31
+ export const check = {
32
+ name: 'workspace-init',
33
+ run
34
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Check: workspace layout is post-F3 canonical
3
+ * (`build:workspace-layout-canonical`).
4
+ *
5
+ * Build-hygiene check that surfaces any leftover top-level session
6
+ * dirs (`.peaks/<YYYY-MM-DD-session-<hex>>/`), the legacy runtime
7
+ * dotfiles (`.peaks/.session.json`, `.peaks/.active-skill.json`),
8
+ * OR per-change-id top-level dirs (`.peaks/NNN-YYYY-MM-DD-<slug>/`).
9
+ *
10
+ * The post-F3 canonical layout puts session dirs under
11
+ * `.peaks/_runtime/<sid>/` and the runtime binding at
12
+ * `.peaks/_runtime/session.json`. The legacy paths must be absent.
13
+ *
14
+ * The pure `inspectWorkspaceLayout` helper is exported so tests
15
+ * can drive the filesystem walk without monkey-patching
16
+ * `process.cwd()` or `findProjectRoot`. Both scanners fail-soft
17
+ * (return `[]` on read errors) so a flaky filesystem read on a
18
+ * non-fatal probe path never escalates into a doctor failure.
19
+ */
20
+ import type { DoctorCheckPlugin, WorkspaceLayoutInspection } from '../types.js';
21
+ /**
22
+ * Pure helper that inspects the on-disk workspace layout for
23
+ * post-F3-canonical violations. Exported so tests can drive the
24
+ * filesystem walk without monkey-patching `process.cwd()` or
25
+ * `findProjectRoot`.
26
+ */
27
+ export declare function inspectWorkspaceLayout(opts: {
28
+ projectRoot: string;
29
+ topLevelScanner?: (root: string) => string[];
30
+ dotfileScanner?: (root: string) => string[];
31
+ perChangeIdScanner?: (root: string) => string[];
32
+ }): WorkspaceLayoutInspection;
33
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Check: workspace layout is post-F3 canonical
3
+ * (`build:workspace-layout-canonical`).
4
+ *
5
+ * Build-hygiene check that surfaces any leftover top-level session
6
+ * dirs (`.peaks/<YYYY-MM-DD-session-<hex>>/`), the legacy runtime
7
+ * dotfiles (`.peaks/.session.json`, `.peaks/.active-skill.json`),
8
+ * OR per-change-id top-level dirs (`.peaks/NNN-YYYY-MM-DD-<slug>/`).
9
+ *
10
+ * The post-F3 canonical layout puts session dirs under
11
+ * `.peaks/_runtime/<sid>/` and the runtime binding at
12
+ * `.peaks/_runtime/session.json`. The legacy paths must be absent.
13
+ *
14
+ * The pure `inspectWorkspaceLayout` helper is exported so tests
15
+ * can drive the filesystem walk without monkey-patching
16
+ * `process.cwd()` or `findProjectRoot`. Both scanners fail-soft
17
+ * (return `[]` on read errors) so a flaky filesystem read on a
18
+ * non-fatal probe path never escalates into a doctor failure.
19
+ */
20
+ import { existsSync, lstatSync, readdirSync } from 'node:fs';
21
+ import { join } from 'node:path';
22
+ import { getErrorMessage } from 'peaks-loop-shared/result';
23
+ const SESSION_DIR_PATTERN = /^\d{4}-\d{2}-\d{2}-session-[a-f0-9]+$/;
24
+ /**
25
+ * Slice 007 — per-change-id top-level dir pattern. Matches the
26
+ * F3-canonical (pre-canonicalization) layout the 5 already-shipped
27
+ * slices left behind, e.g. `.peaks/001-2026-06-06-doctor-dist-version-check/`.
28
+ * The pattern is intentionally narrow so it does NOT match the
29
+ * post-F3 system dirs (`_runtime/`, `_dogfood/`, `retrospective/`,
30
+ * `memory/`, `perf-baseline/`, `project-scan/`, `sops/`,
31
+ * `0NN-session-...`, `YYYY-MM-DD-session-...`).
32
+ */
33
+ const PER_CHANGE_ID_PATTERN = /^\d{3}-\d{4}-\d{2}-\d{2}-[a-z][a-z0-9-]*[a-z0-9]$/;
34
+ const LEGACY_DOTFILES = ['.session.json', '.active-skill.json'];
35
+ /**
36
+ * Pure helper that inspects the on-disk workspace layout for
37
+ * post-F3-canonical violations. Exported so tests can drive the
38
+ * filesystem walk without monkey-patching `process.cwd()` or
39
+ * `findProjectRoot`.
40
+ */
41
+ export function inspectWorkspaceLayout(opts) {
42
+ const topLevel = opts.topLevelScanner ?? defaultTopLevelSessionDirScanner;
43
+ const dotfiles = opts.dotfileScanner ?? defaultLegacyDotfileScanner;
44
+ const perChangeId = opts.perChangeIdScanner ?? defaultPerChangeIdDirScanner;
45
+ return {
46
+ topLevelSessionDirs: safeList(() => topLevel(opts.projectRoot)),
47
+ legacyDotfiles: safeList(() => dotfiles(opts.projectRoot)),
48
+ perChangeIdDirs: safeList(() => perChangeId(opts.projectRoot))
49
+ };
50
+ }
51
+ function safeList(reader) {
52
+ try {
53
+ const out = reader();
54
+ return Array.isArray(out) ? out : [];
55
+ }
56
+ catch {
57
+ return [];
58
+ }
59
+ }
60
+ function defaultTopLevelSessionDirScanner(projectRoot) {
61
+ const peaksRoot = join(projectRoot, '.peaks');
62
+ if (!existsSync(peaksRoot))
63
+ return [];
64
+ let names;
65
+ try {
66
+ names = readdirSync(peaksRoot);
67
+ }
68
+ catch {
69
+ return [];
70
+ }
71
+ const offenders = [];
72
+ for (const name of names) {
73
+ if (!SESSION_DIR_PATTERN.test(name))
74
+ continue;
75
+ const full = join(peaksRoot, name);
76
+ try {
77
+ const stat = existsSync(full) ? lstatSync(full) : null;
78
+ if (stat === null)
79
+ continue;
80
+ // Directories only — the regex should never match a dotfile or
81
+ // regular file, but be defensive against weird filesystem state
82
+ // (e.g. someone manually created a file whose name happens to
83
+ // match the session-id pattern).
84
+ if (stat.isDirectory()) {
85
+ offenders.push(join('.peaks', name) + '/');
86
+ }
87
+ }
88
+ catch {
89
+ continue;
90
+ }
91
+ }
92
+ return offenders;
93
+ }
94
+ function defaultLegacyDotfileScanner(projectRoot) {
95
+ const peaksRoot = join(projectRoot, '.peaks');
96
+ if (!existsSync(peaksRoot))
97
+ return [];
98
+ const offenders = [];
99
+ for (const name of LEGACY_DOTFILES) {
100
+ if (existsSync(join(peaksRoot, name))) {
101
+ offenders.push(join('.peaks', name));
102
+ }
103
+ }
104
+ return offenders;
105
+ }
106
+ function defaultPerChangeIdDirScanner(projectRoot) {
107
+ const peaksRoot = join(projectRoot, '.peaks');
108
+ if (!existsSync(peaksRoot))
109
+ return [];
110
+ let names;
111
+ try {
112
+ names = readdirSync(peaksRoot);
113
+ }
114
+ catch {
115
+ return [];
116
+ }
117
+ const offenders = [];
118
+ for (const name of names) {
119
+ if (!PER_CHANGE_ID_PATTERN.test(name))
120
+ continue;
121
+ const full = join(peaksRoot, name);
122
+ try {
123
+ const stat = existsSync(full) ? lstatSync(full) : null;
124
+ if (stat === null)
125
+ continue;
126
+ if (stat.isDirectory()) {
127
+ offenders.push(join('.peaks', name) + '/');
128
+ }
129
+ }
130
+ catch {
131
+ continue;
132
+ }
133
+ }
134
+ return offenders;
135
+ }
136
+ function defaultWorkspaceLayoutProbe(projectRootResolver) {
137
+ const projectRoot = projectRootResolver();
138
+ if (projectRoot === null) {
139
+ return { topLevelSessionDirs: [], legacyDotfiles: [], perChangeIdDirs: [] };
140
+ }
141
+ return inspectWorkspaceLayout({ projectRoot });
142
+ }
143
+ function run({ options, projectRootResolver }) {
144
+ const probe = options.workspaceLayoutProbe ?? (() => defaultWorkspaceLayoutProbe(projectRootResolver));
145
+ try {
146
+ const layout = probe();
147
+ // Back-compat: probes injected by older tests (pre-slice-007)
148
+ // return a 2-field shape (no perChangeIdDirs). Treat missing
149
+ // field as empty.
150
+ const perChangeIdDirs = layout.perChangeIdDirs ?? [];
151
+ if (layout.topLevelSessionDirs.length === 0 && layout.legacyDotfiles.length === 0 && perChangeIdDirs.length === 0) {
152
+ return [{
153
+ id: 'build:workspace-layout-canonical',
154
+ ok: true,
155
+ message: 'Workspace layout is canonical: no top-level session dirs, no legacy runtime dotfiles, no per-change-id top-level dirs'
156
+ }];
157
+ }
158
+ const offenders = [
159
+ ...layout.topLevelSessionDirs.map((p) => `top-level session dir: ${p}`),
160
+ ...layout.legacyDotfiles.map((p) => `legacy dotfile: ${p}`),
161
+ ...perChangeIdDirs.map((p) => `per-change-id top-level dir: ${p}`)
162
+ ];
163
+ return [{
164
+ id: 'build:workspace-layout-canonical',
165
+ ok: false,
166
+ message: `Workspace layout is not canonical. Offenders: ${offenders.join('; ')}. Run \`peaks workspace migrate --to-runtime --project <repo> --apply\` to consolidate.`
167
+ }];
168
+ }
169
+ catch (error) {
170
+ return [{
171
+ id: 'build:workspace-layout-canonical',
172
+ ok: false,
173
+ message: `Workspace layout check failed: ${getErrorMessage(error)}`
174
+ }];
175
+ }
176
+ }
177
+ export const check = {
178
+ name: 'workspace-layout',
179
+ run
180
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * doctor-service facade (slice rid-004).
3
+ *
4
+ * Public entrypoint for the code-driven fixed-registry doctor
5
+ * pipeline. Replaces the legacy 1309-line monolithic `runDoctor`
6
+ * with a thin dispatcher that:
7
+ *
8
+ * 1. Resolves all cross-domain injections (project-root resolver,
9
+ * skill loader, sid validator, schema root, presence, etc.)
10
+ * and builds a read-only `DoctorContext` once.
11
+ * 2. Walks the `PLUGINS` array in `plugin-registry.ts` in order,
12
+ * calling each plugin's `run(context)`, flattening the
13
+ * returned `DoctorCheck[]` into the accumulator.
14
+ * 3. Updates `context.accumulatedChecks` after each plugin so the
15
+ * `check-id-schema` self-validation plugin observes the full
16
+ * prior list.
17
+ * 4. Hands the accumulated checks to `report/final-summary.ts`
18
+ * which builds the public `DoctorReport`.
19
+ *
20
+ * The `runDoctor` signature is unchanged from the legacy version;
21
+ * main peaks-loop package imports it via
22
+ * `import { runDoctor } from '../index.js'`.
23
+ *
24
+ * slice-3b Option C: the doctor package stays standalone by
25
+ * accepting the cross-domain utilities as injectable probes. When
26
+ * no injection is provided, the doctor falls back to a safe
27
+ * "no-op / assume healthy" probe so the standalone test suite
28
+ * does not depend on the main package. The CLI wires the main-
29
+ * package implementations at call-site
30
+ * (`src/cli/commands/core/doctor-command.ts`).
31
+ */
32
+ import type { DoctorOptions, DoctorReport } from './types.js';
33
+ /**
34
+ * Pure helper extracted so tests can drive the filesystem check
35
+ * without monkey-patching `process.cwd()` or `findProjectRoot`.
36
+ * Returns `true` when EITHER the canonical
37
+ * `.peaks/_runtime/session.json` OR the legacy
38
+ * `.peaks/.session.json` exists.
39
+ */
40
+ export declare function isWorkspaceInitializedAt(projectRoot: string): boolean;
41
+ /**
42
+ * Public entrypoint. Walks the `PLUGINS` array, building the
43
+ * `DoctorContext` once at the top and threading it through every
44
+ * plugin. The accumulator is a mutable list shared via
45
+ * `context.accumulatedChecks` so plugins like `check-id-schema`
46
+ * that need to observe the prior list can do so.
47
+ */
48
+ export declare function runDoctor(options?: DoctorOptions): Promise<DoctorReport>;