peaks-loop 4.0.0-beta.9 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/CHANGELOG.md +910 -141
  2. package/README-en.md +26 -7
  3. package/README.md +75 -6
  4. package/agents/karpathy-reviewer.md +33 -0
  5. package/bin/peaks.js +0 -0
  6. package/dist/cli/cli-helpers.d.ts +31 -6
  7. package/dist/cli/cli-helpers.js +48 -25
  8. package/dist/cli/commands/_register.d.ts +3 -0
  9. package/dist/cli/commands/_register.js +139 -0
  10. package/dist/cli/commands/_super.d.ts +10 -0
  11. package/dist/cli/commands/_super.js +97 -0
  12. package/dist/cli/commands/adapter-commands-s2a.js +1 -1
  13. package/dist/cli/commands/asset-commands.js +33 -16
  14. package/dist/cli/commands/audit-commands.js +2 -2
  15. package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
  16. package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
  17. package/dist/cli/commands/bee-commands.js +1 -1
  18. package/dist/cli/commands/capability-commands.js +1 -1
  19. package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
  20. package/dist/cli/commands/changeset-commands.d.ts +13 -0
  21. package/dist/cli/commands/changeset-commands.js +46 -0
  22. package/dist/cli/commands/code-commands.d.ts +11 -1
  23. package/dist/cli/commands/code-commands.js +19 -699
  24. package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
  25. package/dist/cli/commands/code-job-shape-commands.js +164 -0
  26. package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
  27. package/dist/cli/commands/code-mode-gate-commands.js +223 -0
  28. package/dist/cli/commands/code-review-commands.js +2 -2
  29. package/dist/cli/commands/code-run-command.d.ts +12 -0
  30. package/dist/cli/commands/code-run-command.js +68 -0
  31. package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
  32. package/dist/cli/commands/code-runtime-commands.js +391 -0
  33. package/dist/cli/commands/codegraph-commands.js +1 -1
  34. package/dist/cli/commands/compact-command.js +53 -1
  35. package/dist/cli/commands/complexity-commands.js +1 -1
  36. package/dist/cli/commands/config-commands.js +4 -75
  37. package/dist/cli/commands/container-commands.d.ts +28 -0
  38. package/dist/cli/commands/container-commands.js +221 -0
  39. package/dist/cli/commands/context-commands.js +3 -2
  40. package/dist/cli/commands/core/artifacts-command.js +1 -1
  41. package/dist/cli/commands/core/binding-commands.js +1 -1
  42. package/dist/cli/commands/core/doctor-command.js +63 -3
  43. package/dist/cli/commands/core/memory-command.js +1 -1
  44. package/dist/cli/commands/core/profile-command.js +1 -1
  45. package/dist/cli/commands/core/proxy-command.js +1 -1
  46. package/dist/cli/commands/core/session-command.js +9 -7
  47. package/dist/cli/commands/core/skill-command.js +7 -4
  48. package/dist/cli/commands/core/standards-command.js +1 -1
  49. package/dist/cli/commands/cron-commands.d.ts +57 -0
  50. package/dist/cli/commands/cron-commands.js +257 -0
  51. package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
  52. package/dist/cli/commands/cron-scheduler-commands.js +284 -0
  53. package/dist/cli/commands/dashboard-commands.d.ts +4 -0
  54. package/dist/cli/commands/dashboard-commands.js +10 -0
  55. package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
  56. package/dist/cli/commands/dashboard-long-run.js +122 -0
  57. package/dist/cli/commands/dashboard-summary.d.ts +12 -0
  58. package/dist/cli/commands/dashboard-summary.js +58 -0
  59. package/dist/cli/commands/dispatch-commands.d.ts +0 -7
  60. package/dist/cli/commands/dispatch-commands.js +372 -8
  61. package/dist/cli/commands/dispatch-from-dag.js +4 -1
  62. package/dist/cli/commands/doc-commands.js +1 -1
  63. package/dist/cli/commands/ecc-commands.d.ts +30 -0
  64. package/dist/cli/commands/ecc-commands.js +119 -0
  65. package/dist/cli/commands/evolution-commands.js +1 -1
  66. package/dist/cli/commands/feedback-commands.js +1 -1
  67. package/dist/cli/commands/final-review-commands.js +1 -1
  68. package/dist/cli/commands/fixture-commands.js +1 -1
  69. package/dist/cli/commands/fork-commands.js +1 -1
  70. package/dist/cli/commands/gate-commands.js +128 -6
  71. package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
  72. package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
  73. package/dist/cli/commands/heartbeat-commands.js +76 -5
  74. package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
  75. package/dist/cli/commands/heartbeat-watch-command.js +146 -0
  76. package/dist/cli/commands/hook-handle.js +1 -1
  77. package/dist/cli/commands/hooks-commands.js +126 -10
  78. package/dist/cli/commands/ide-commands.js +1 -1
  79. package/dist/cli/commands/impact-commands.js +1 -1
  80. package/dist/cli/commands/job-commands.js +34 -1
  81. package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
  82. package/dist/cli/commands/lease-metrics-commands.js +231 -0
  83. package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
  84. package/dist/cli/commands/lease-stats-commands.js +107 -0
  85. package/dist/cli/commands/legacy-commands.js +1 -1
  86. package/dist/cli/commands/log-commands.js +1 -1
  87. package/dist/cli/commands/loop-commands.js +1 -1
  88. package/dist/cli/commands/loop-eval-commands.js +1 -1
  89. package/dist/cli/commands/memory-commands.js +1 -1
  90. package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
  91. package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
  92. package/dist/cli/commands/mut-commands.d.ts +1 -1
  93. package/dist/cli/commands/mut-commands.js +1 -5
  94. package/dist/cli/commands/observability-commands.js +1 -1
  95. package/dist/cli/commands/openspec-commands.js +65 -4
  96. package/dist/cli/commands/perf-audit-commands.js +3 -3
  97. package/dist/cli/commands/perf-commands.js +1 -1
  98. package/dist/cli/commands/polyrepo-commands.js +1 -1
  99. package/dist/cli/commands/prd-blocks-commands.js +1 -1
  100. package/dist/cli/commands/prd-commands.js +4 -2
  101. package/dist/cli/commands/preferences-commands.js +23 -3
  102. package/dist/cli/commands/project-commands.js +1 -1
  103. package/dist/cli/commands/qa-business-review-commands.js +1 -1
  104. package/dist/cli/commands/qa-commands.d.ts +1 -1
  105. package/dist/cli/commands/qa-commands.js +39 -3
  106. package/dist/cli/commands/release-commands.d.ts +15 -0
  107. package/dist/cli/commands/release-commands.js +113 -21
  108. package/dist/cli/commands/request-commands.js +1 -1
  109. package/dist/cli/commands/retrospective-commands.js +1 -1
  110. package/dist/cli/commands/reviewer-commands.js +1 -1
  111. package/dist/cli/commands/role-commands.js +1 -1
  112. package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
  113. package/dist/cli/commands/runtime-commands-helpers.js +24 -0
  114. package/dist/cli/commands/runtime-commands.js +1 -2
  115. package/dist/cli/commands/sc-commands.js +4 -2
  116. package/dist/cli/commands/scan-commands.js +1 -1
  117. package/dist/cli/commands/security-audit-commands.js +3 -3
  118. package/dist/cli/commands/sediment-commands.js +10 -1
  119. package/dist/cli/commands/session-24h-mode.d.ts +26 -0
  120. package/dist/cli/commands/session-24h-mode.js +196 -0
  121. package/dist/cli/commands/share-commands.d.ts +19 -0
  122. package/dist/cli/commands/share-commands.js +121 -2
  123. package/dist/cli/commands/skill-conformance-commands.js +1 -1
  124. package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
  125. package/dist/cli/commands/skill-search-commands.js +4 -1
  126. package/dist/cli/commands/slice-commands.js +1 -1
  127. package/dist/cli/commands/slice-integrate-commands.js +1 -1
  128. package/dist/cli/commands/slice-review-commands.js +1 -1
  129. package/dist/cli/commands/smoke-commands.js +1 -1
  130. package/dist/cli/commands/sop-commands.js +1 -1
  131. package/dist/cli/commands/spill-demo-command.d.ts +7 -0
  132. package/dist/cli/commands/spill-demo-command.js +29 -0
  133. package/dist/cli/commands/statusline-commands.d.ts +12 -0
  134. package/dist/cli/commands/statusline-commands.js +79 -17
  135. package/dist/cli/commands/sub-agent-commands.js +2 -1
  136. package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
  137. package/dist/cli/commands/sub-agent-shared.js +24 -1
  138. package/dist/cli/commands/swarm-commands.d.ts +13 -0
  139. package/dist/cli/commands/swarm-commands.js +77 -0
  140. package/dist/cli/commands/tech-commands.d.ts +64 -0
  141. package/dist/cli/commands/tech-commands.js +195 -0
  142. package/dist/cli/commands/understand-commands.js +1 -1
  143. package/dist/cli/commands/upgrade-commands.d.ts +2 -0
  144. package/dist/cli/commands/upgrade-commands.js +40 -5
  145. package/dist/cli/commands/user-touchpoint-commands.js +1 -1
  146. package/dist/cli/commands/verdict-aggregate-command.js +1 -1
  147. package/dist/cli/commands/vm-commands.d.ts +31 -0
  148. package/dist/cli/commands/vm-commands.js +274 -0
  149. package/dist/cli/commands/workflow-commands.js +24 -1
  150. package/dist/cli/commands/workflow-plan-commands.js +1 -1
  151. package/dist/cli/commands/workspace/init-command.js +1 -1
  152. package/dist/cli/commands/workspace/migrate-command.js +1 -1
  153. package/dist/cli/commands/workspace/reconcile-command.js +1 -1
  154. package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
  155. package/dist/cli/commands/worktree-auth-commands.js +652 -0
  156. package/dist/cli/index.js +58 -13
  157. package/dist/cli/program.d.ts +2 -2
  158. package/dist/cli/program.js +86 -281
  159. package/dist/services/24h-mode/decider.d.ts +103 -0
  160. package/dist/services/24h-mode/decider.js +144 -0
  161. package/dist/services/24h-mode/index.d.ts +12 -0
  162. package/dist/services/24h-mode/index.js +12 -0
  163. package/dist/services/24h-mode/state.d.ts +48 -0
  164. package/dist/services/24h-mode/state.js +51 -0
  165. package/dist/services/24h-mode/store.d.ts +27 -0
  166. package/dist/services/24h-mode/store.js +119 -0
  167. package/dist/services/artifacts/artifact-prerequisites.js +1 -1
  168. package/dist/services/artifacts/request-artifact-service.js +1 -1
  169. package/dist/services/artifacts/workspace-service.js +1 -1
  170. package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
  171. package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
  172. package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
  173. package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
  174. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
  175. package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
  176. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
  177. package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
  178. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
  179. package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
  180. package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
  181. package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
  182. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
  183. package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
  184. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
  185. package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
  186. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
  187. package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
  188. package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
  189. package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
  190. package/dist/services/audit/static-service.d.ts +32 -25
  191. package/dist/services/audit/static-service.js +30 -109
  192. package/dist/services/audit-independent/index.d.ts +2 -0
  193. package/dist/services/audit-independent/index.js +2 -0
  194. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
  195. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
  196. package/dist/services/changeset/changeset-check-service.d.ts +22 -0
  197. package/dist/services/changeset/changeset-check-service.js +47 -0
  198. package/dist/services/code/auto-compact-modes.d.ts +30 -0
  199. package/dist/services/code/auto-compact-modes.js +38 -0
  200. package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
  201. package/dist/services/code/auto-compact-orchestrator.js +101 -21
  202. package/dist/services/code/dag-orchestrator.d.ts +30 -1
  203. package/dist/services/code/dag-orchestrator.js +106 -1
  204. package/dist/services/code/status-line-renderer.d.ts +2 -0
  205. package/dist/services/code/status-line-renderer.js +21 -3
  206. package/dist/services/code-review/ocr-service.d.ts +1 -1
  207. package/dist/services/code-review/ocr-service.js +6 -3
  208. package/dist/services/compact-history/compact-history-service.d.ts +41 -0
  209. package/dist/services/compact-history/compact-history-service.js +62 -0
  210. package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
  211. package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
  212. package/dist/services/config/config-service.d.ts +1 -12
  213. package/dist/services/config/config-service.js +3 -72
  214. package/dist/services/config/config-types.d.ts +2 -4
  215. package/dist/services/config/config-types.js +1 -1
  216. package/dist/services/container/container-lease.d.ts +67 -0
  217. package/dist/services/container/container-lease.js +135 -0
  218. package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
  219. package/dist/services/context/auto-compact-dispatcher.js +32 -102
  220. package/dist/services/context/auto-compact-reader.js +1 -1
  221. package/dist/services/context/auto-compact-types.d.ts +27 -2
  222. package/dist/services/context/auto-compact-types.js +8 -1
  223. package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
  224. package/dist/services/context/build-dispatch-system-prompt.js +117 -0
  225. package/dist/services/context/collector.d.ts +2 -2
  226. package/dist/services/context/context-builder.d.ts +4 -4
  227. package/dist/services/context/context-schema.d.ts +48 -48
  228. package/dist/services/context/ide-detect.d.ts +4 -0
  229. package/dist/services/context/ide-detect.js +24 -0
  230. package/dist/services/context/main-session-monitor.d.ts +1 -4
  231. package/dist/services/context/main-session-monitor.js +1 -24
  232. package/dist/services/context/memory-index-reader.d.ts +8 -0
  233. package/dist/services/context/memory-index-reader.js +57 -0
  234. package/dist/services/context/memory-lru-cache.d.ts +12 -0
  235. package/dist/services/context/memory-lru-cache.js +60 -0
  236. package/dist/services/context/memory-preflight-config.d.ts +19 -0
  237. package/dist/services/context/memory-preflight-config.js +25 -0
  238. package/dist/services/context/memory-preflight-service.d.ts +19 -0
  239. package/dist/services/context/memory-preflight-service.js +120 -0
  240. package/dist/services/context/spillover-store.d.ts +23 -0
  241. package/dist/services/context/spillover-store.js +155 -0
  242. package/dist/services/context/spillover-types.d.ts +18 -0
  243. package/dist/services/context/spillover-types.js +1 -0
  244. package/dist/services/crystallization/crystallization-service.d.ts +22 -5
  245. package/dist/services/crystallization/crystallization-service.js +8 -14
  246. package/dist/services/crystallization/crystallization-types.d.ts +6 -6
  247. package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
  248. package/dist/services/crystallization/index.d.ts +13 -0
  249. package/dist/services/crystallization/index.js +13 -0
  250. package/dist/services/dashboard/project-dashboard-service.js +2 -2
  251. package/dist/services/dispatch/await-batch.d.ts +70 -0
  252. package/dist/services/dispatch/await-batch.js +272 -0
  253. package/dist/services/dispatch/batch-counter.js +1 -1
  254. package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
  255. package/dist/services/dispatch/dispatch-record-writer.js +239 -9
  256. package/dist/services/dispatch/slice-dag.d.ts +46 -0
  257. package/dist/services/dispatch/slice-dag.js +6 -0
  258. package/dist/services/dispatch/stage-enum.d.ts +27 -0
  259. package/dist/services/dispatch/stage-enum.js +48 -0
  260. package/dist/services/dispatch/startup-timeout.d.ts +86 -0
  261. package/dist/services/dispatch/startup-timeout.js +97 -0
  262. package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
  263. package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
  264. package/dist/services/dispatch/test-tool-detection.js +80 -0
  265. package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
  266. package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
  267. package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
  268. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
  269. package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
  270. package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
  271. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
  272. package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
  273. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
  274. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
  275. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
  276. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
  277. package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
  278. package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
  279. package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
  280. package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
  281. package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
  282. package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
  283. package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
  284. package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
  285. package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
  286. package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
  287. package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
  288. package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
  289. package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
  290. package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
  291. package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
  292. package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
  293. package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
  294. package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
  295. package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
  296. package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
  297. package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
  298. package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
  299. package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
  300. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
  301. package/dist/services/doctor/doctor-service/index.d.ts +48 -0
  302. package/dist/services/doctor/doctor-service/index.js +254 -0
  303. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
  304. package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
  305. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
  306. package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
  307. package/dist/services/doctor/doctor-service/types.d.ts +245 -0
  308. package/dist/services/doctor/doctor-service/types.js +15 -0
  309. package/dist/services/doctor/doctor-service.d.ts +15 -146
  310. package/dist/services/doctor/doctor-service.js +22 -926
  311. package/dist/services/doctor/index.d.ts +22 -0
  312. package/dist/services/doctor/index.js +22 -0
  313. package/dist/services/env/shell-probe.d.ts +71 -0
  314. package/dist/services/env/shell-probe.js +161 -0
  315. package/dist/services/evolution/evolution-types.d.ts +39 -39
  316. package/dist/services/final-review/final-review-service.d.ts +11 -1
  317. package/dist/services/final-review/index.d.ts +2 -0
  318. package/dist/services/final-review/index.js +1 -0
  319. package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
  320. package/dist/services/hooks/auto-compact-hook-install.js +4 -5
  321. package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
  322. package/dist/services/hooks/worktree-authorization-gate.js +492 -0
  323. package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
  324. package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
  325. package/dist/services/ide/adapters/qoder-adapter.js +57 -0
  326. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
  327. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
  328. package/dist/services/ide/ide-registry.js +6 -0
  329. package/dist/services/ide/ide-types.d.ts +1 -1
  330. package/dist/services/job/job-types.d.ts +56 -56
  331. package/dist/services/job-snapshot/index.d.ts +8 -0
  332. package/dist/services/job-snapshot/index.js +7 -0
  333. package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
  334. package/dist/services/job-snapshot/types.d.ts +7 -0
  335. package/dist/services/job-snapshot/types.js +1 -0
  336. package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
  337. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
  338. package/dist/services/log/retention.d.ts +16 -0
  339. package/dist/services/log/retention.js +17 -0
  340. package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
  341. package/dist/services/loop/loop-release-types.d.ts +24 -24
  342. package/dist/services/loop/monotonic-runner.d.ts +17 -11
  343. package/dist/services/loop/monotonic-runner.js +118 -79
  344. package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
  345. package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
  346. package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
  347. package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
  348. package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
  349. package/dist/services/memory/project-memory-service/index/search.js +194 -0
  350. package/dist/services/memory/project-memory-service/index.d.ts +9 -0
  351. package/dist/services/memory/project-memory-service/index.js +24 -0
  352. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
  353. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
  354. package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
  355. package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
  356. package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
  357. package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
  358. package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
  359. package/dist/services/memory/project-memory-service/store/paths.js +116 -0
  360. package/dist/services/memory/project-memory-service/types.d.ts +128 -0
  361. package/dist/services/memory/project-memory-service/types.js +9 -0
  362. package/dist/services/memory/project-memory-service.d.ts +1 -167
  363. package/dist/services/memory/project-memory-service.js +19 -816
  364. package/dist/services/migrate-skill-name/schema.d.ts +2 -2
  365. package/dist/services/observability/aggregation.d.ts +27 -0
  366. package/dist/services/observability/aggregation.js +72 -0
  367. package/dist/services/observability/observability-service.d.ts +73 -7
  368. package/dist/services/observability/observability-service.js +87 -1
  369. package/dist/services/openspec/artifact-boundary.d.ts +138 -0
  370. package/dist/services/openspec/artifact-boundary.js +150 -0
  371. package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
  372. package/dist/services/openspec/coverage-evidence-reader.js +386 -0
  373. package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
  374. package/dist/services/openspec/openspec-archive-service.js +320 -8
  375. package/dist/services/openspec/openspec-bridge-service.js +1 -1
  376. package/dist/services/openspec/openspec-init-service.js +1 -1
  377. package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
  378. package/dist/services/openspec/openspec-render-service.js +7 -4
  379. package/dist/services/openspec/openspec-scan-service.js +1 -1
  380. package/dist/services/openspec/openspec-validate-service.js +5 -4
  381. package/dist/services/preferences/preferences-service.js +10 -0
  382. package/dist/services/preferences/preferences-types.d.ts +13 -0
  383. package/dist/services/preferences/preferences-types.js +11 -0
  384. package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
  385. package/dist/services/qa/screenshot-archive-service.js +134 -0
  386. package/dist/services/rd/rd-service.js +10 -11
  387. package/dist/services/rd/types.d.ts +32 -32
  388. package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
  389. package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
  390. package/dist/services/recommendations/capability-seed-items.js +0 -1
  391. package/dist/services/recommendations/capability-seed-mappings.js +0 -1
  392. package/dist/services/recommendations/capability-seed-sources.js +0 -1
  393. package/dist/services/release/version-precheck-service.d.ts +51 -0
  394. package/dist/services/release/version-precheck-service.js +257 -0
  395. package/dist/services/scan/acceptance-coverage-service.js +1 -1
  396. package/dist/services/scan/archetype-service.js +1 -1
  397. package/dist/services/scan/existing-system-service.js +1 -1
  398. package/dist/services/scan/libraries-service.js +1 -1
  399. package/dist/services/sediment/json-schema.d.ts +40 -40
  400. package/dist/services/share/bundle-types.d.ts +12 -12
  401. package/dist/services/share/run-state-contract.d.ts +2 -2
  402. package/dist/services/skill/skill-search-service.d.ts +12 -7
  403. package/dist/services/skill/skill-search-service.js +8 -4
  404. package/dist/services/skillhub/migrations/001-initial.sql +71 -0
  405. package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
  406. package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
  407. package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
  408. package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
  409. package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
  410. package/dist/services/skills/hooks-settings-service.d.ts +75 -0
  411. package/dist/services/skills/hooks-settings-service.js +230 -2
  412. package/dist/services/skills/skill-registry.d.ts +1 -0
  413. package/dist/services/skills/skill-registry.js +6 -4
  414. package/dist/services/skills/skill-runbook-service.js +1 -1
  415. package/dist/services/slice/slice-check-service.js +1 -1
  416. package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
  417. package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
  418. package/dist/services/standards/missing-standards-detector.d.ts +25 -0
  419. package/dist/services/standards/missing-standards-detector.js +43 -12
  420. package/dist/services/tech/tech-change-id-service.d.ts +82 -0
  421. package/dist/services/tech/tech-change-id-service.js +117 -0
  422. package/dist/services/understand/understand-hybrid-service.js +1 -1
  423. package/dist/services/understand/understand-scan-service.js +2 -2
  424. package/dist/services/upgrade/upgrade-service.js +4 -3
  425. package/dist/services/verdict/envelopes.d.ts +2 -2
  426. package/dist/services/verdict/envelopes.js +2 -2
  427. package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
  428. package/dist/services/vm/vm-lease.d.ts +40 -0
  429. package/dist/services/vm/vm-lease.js +137 -0
  430. package/dist/services/workflow/autonomous-resume-writer.js +1 -1
  431. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
  432. package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
  433. package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
  434. package/dist/services/workflow/pipeline-verify-service.js +42 -218
  435. package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
  436. package/dist/services/workflow/pipeline-verify-types.js +10 -0
  437. package/dist/services/workflow/plan-reader.d.ts +1 -1
  438. package/dist/services/workflow/plan-reader.js +1 -1
  439. package/dist/services/workflow/plan-refresher.d.ts +1 -1
  440. package/dist/services/workflow/plan-refresher.js +1 -1
  441. package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
  442. package/dist/services/workflow/plan-trigger-detector.js +1 -1
  443. package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
  444. package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
  445. package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
  446. package/dist/services/workflow/workflow-autonomous-types.js +21 -0
  447. package/dist/services/workflow/workflow-router-service.js +18 -16
  448. package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
  449. package/dist/services/workflow/workflow-spec-lint.js +75 -0
  450. package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
  451. package/dist/services/workflow/workflow-spec-types.js +13 -0
  452. package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
  453. package/dist/services/workflow/workflow-spec-yaml.js +88 -0
  454. package/dist/services/workflow/workflow-spec.d.ts +11 -91
  455. package/dist/services/workflow/workflow-spec.js +16 -145
  456. package/dist/services/workspace/migrate-service.js +1 -1
  457. package/dist/services/workspace/workspace-service.js +1 -1
  458. package/dist/services/worktree/worktree-lease.d.ts +170 -0
  459. package/dist/services/worktree/worktree-lease.js +242 -0
  460. package/package.json +47 -51
  461. package/scripts/clean-dist.mjs +31 -1
  462. package/scripts/copy-templates.mjs +16 -0
  463. package/scripts/sync-version.mjs +53 -2
  464. package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
  465. package/skills/bee/peaks-prd/SKILL.md +16 -0
  466. package/skills/bee/peaks-prd/test-prompts.json +12 -0
  467. package/skills/bee/peaks-qa/SKILL.md +16 -1
  468. package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
  469. package/skills/bee/peaks-qa/test-prompts.json +12 -0
  470. package/skills/bee/peaks-rd/SKILL.md +29 -20
  471. package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
  472. package/skills/bee/peaks-rd/test-prompts.json +12 -0
  473. package/skills/bee/peaks-reviewer/SKILL.md +17 -0
  474. package/skills/bee/peaks-sc/SKILL.md +16 -0
  475. package/skills/bee/peaks-security-audit/SKILL.md +17 -0
  476. package/skills/bee/peaks-txt/SKILL.md +16 -0
  477. package/skills/bee/peaks-txt/test-prompts.json +12 -0
  478. package/skills/bee/peaks-ui/SKILL.md +49 -43
  479. package/skills/bee/peaks-ui/test-prompts.json +12 -0
  480. package/skills/peaks-code/SKILL.md +54 -109
  481. package/skills/peaks-code/references/boundaries.md +15 -1
  482. package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
  483. package/skills/peaks-code/references/external-skill-invocation.md +27 -0
  484. package/skills/peaks-code/references/lease-dashboard.html +224 -0
  485. package/skills/peaks-code/references/lease-stats.sample.json +26 -0
  486. package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
  487. package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
  488. package/skills/peaks-code/references/runbook.md +63 -1
  489. package/skills/peaks-code/references/startup-sequence.md +110 -0
  490. package/skills/peaks-code/references/step-0-8-gate.md +1 -1
  491. package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
  492. package/skills/peaks-code/references/worktree-governance.md +123 -0
  493. package/skills/peaks-code/test-prompts.json +12 -0
  494. package/skills/peaks-doctor/SKILL.md +1 -1
  495. package/skills/peaks-ide/SKILL.md +1 -1
  496. package/skills/peaks-solo/SKILL.md +21 -0
  497. package/skills/peaks-solo/references/triage-decision-table.md +6 -0
  498. package/skills/peaks-sop/test-prompts.json +17 -0
  499. package/dist/cli/commands/agent-commands.d.ts +0 -20
  500. package/dist/cli/commands/agent-commands.js +0 -48
  501. package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
  502. package/dist/cli/commands/classify-classify-commands.js +0 -151
  503. package/dist/cli/commands/contract-commands.d.ts +0 -26
  504. package/dist/cli/commands/contract-commands.js +0 -114
  505. package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
  506. package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
  507. package/dist/cli/commands/worker-commands.d.ts +0 -3
  508. package/dist/cli/commands/worker-commands.js +0 -52
  509. package/dist/services/agent/ecc-agent-service.d.ts +0 -47
  510. package/dist/services/agent/ecc-agent-service.js +0 -143
  511. package/dist/services/config/provider-service.d.ts +0 -48
  512. package/dist/services/config/provider-service.js +0 -143
  513. package/dist/services/context/dispatch-context-guard.d.ts +0 -27
  514. package/dist/services/context/dispatch-context-guard.js +0 -192
  515. package/dist/services/context/shared-channel.d.ts +0 -93
  516. package/dist/services/context/shared-channel.js +0 -308
  517. package/dist/services/filesystem/file-lock.d.ts +0 -11
  518. package/dist/services/filesystem/file-lock.js +0 -152
  519. package/dist/services/mut/assert-scanner.d.ts +0 -6
  520. package/dist/services/mut/assert-scanner.js +0 -116
  521. package/dist/services/mut/index.d.ts +0 -8
  522. package/dist/services/mut/index.js +0 -7
  523. package/dist/services/mut/mut-runner.d.ts +0 -39
  524. package/dist/services/mut/mut-runner.js +0 -29
  525. package/dist/services/mut/production-stryker.d.ts +0 -2
  526. package/dist/services/mut/production-stryker.js +0 -75
  527. package/dist/services/mut/report-builder.d.ts +0 -11
  528. package/dist/services/mut/report-builder.js +0 -110
  529. package/dist/services/mut/report-loader.d.ts +0 -31
  530. package/dist/services/mut/report-loader.js +0 -78
  531. package/dist/services/mut/thresholds.d.ts +0 -21
  532. package/dist/services/mut/thresholds.js +0 -22
  533. package/dist/services/mut/types.d.ts +0 -336
  534. package/dist/services/mut/types.js +0 -59
  535. package/dist/services/providers/minimax-provider-service.d.ts +0 -24
  536. package/dist/services/providers/minimax-provider-service.js +0 -143
  537. package/dist/services/providers/minimax-worker-service.d.ts +0 -21
  538. package/dist/services/providers/minimax-worker-service.js +0 -83
  539. package/dist/shared/fs.d.ts +0 -4
  540. package/dist/shared/fs.js +0 -26
  541. package/dist/shared/paths.d.ts +0 -6
  542. package/dist/shared/paths.js +0 -50
  543. package/dist/shared/result.d.ts +0 -22
  544. package/dist/shared/result.js +0 -46
  545. package/dist/shared/version.d.ts +0 -1
  546. package/dist/shared/version.js +0 -1
  547. package/examples/video-demo/README.md +0 -142
  548. package/examples/video-demo/out/en-closing-960.png +0 -0
  549. package/examples/video-demo/out/zh-closing-960.png +0 -0
  550. package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
  551. package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
  552. /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * Per-IDE contract: given a sub-agent role + prompt + request/session ids,
11
11
  * return a tool-call descriptor that the calling LLM should execute in
12
- * its native environment. The CLI is IDE-agnostic; per-IDE tool names
12
+ * its own environment. The CLI is IDE-agnostic; per-IDE tool names
13
13
  * (Claude Code's `Task`, Trae's UNVERIFIED placeholder) are encapsulated
14
14
  * here, never leaked to SKILL.md.
15
15
  *
@@ -27,6 +27,13 @@
27
27
  * Cross-reference: PRD #002 G1 (AC-1..AC-5); RD tech-doc-002 §2.
28
28
  */
29
29
  import { existsSync, readFileSync } from 'node:fs';
30
+ // Slice 2026-07-29-dispatch-stall-governance / S4 — the two near-
31
+ // identical poll loops in this file are now thin wrappers around
32
+ // `awaitBatch` (the unified implementation in ./await-batch.ts). The
33
+ // back-compat envelopes are preserved so the pre-S4 S3 character-
34
+ // ization tests + the existing call sites do not have to migrate in
35
+ // the same slice.
36
+ import { awaitBatch as awaitBatchUnified } from './await-batch.js';
30
37
  /**
31
38
  * Claude Code dispatcher. Real, byte-level implementation.
32
39
  *
@@ -233,52 +240,26 @@ const claudeCodeBatchAwaiters = new Map();
233
240
  * for the MVP; the real cross-process version uses heartbeat polling).
234
241
  */
235
242
  export async function awaitClaudeCodeBatch(input) {
236
- const { batchId, dispatchCount, recordPaths, timeoutMs } = input;
237
- if (dispatchCount <= 0 || recordPaths.length === 0) {
238
- return [];
239
- }
240
- const startedAt = Date.now();
241
- const pollIntervalMs = 50;
242
- const deadline = timeoutMs ?? 60_000;
243
- const capped = Math.min(deadline, 120_000);
244
- // MVP: race the deadline against a simple polling loop. Real per-IDE
245
- // implementations land in slice 1.3.
246
- const results = [];
247
- const remaining = new Map();
248
- for (let i = 0; i < recordPaths.length; i += 1) {
249
- const recordPath = recordPaths[i] ?? '';
250
- remaining.set(i, { recordPath, status: 'timeout', note: null, finishedAt: null });
251
- }
252
- while (remaining.size > 0 && Date.now() - startedAt < capped) {
253
- for (const [idx, slot] of remaining) {
254
- if (slot.finishedAt !== null)
255
- continue;
256
- const outcome = readDispatchOutcome(slot.recordPath);
257
- if (outcome === null)
258
- continue;
259
- slot.status = outcome.status;
260
- slot.note = outcome.note;
261
- slot.finishedAt = Date.now();
262
- }
263
- if (Array.from(remaining.values()).every((s) => s.finishedAt !== null))
264
- break;
265
- await new Promise((r) => setTimeout(r, pollIntervalMs));
266
- }
267
- for (const [idx, slot] of remaining) {
268
- const finishedAt = slot.finishedAt ?? startedAt + capped;
269
- results.push({
270
- dispatchIndex: idx,
271
- recordPath: slot.recordPath,
272
- status: slot.status,
273
- durationMs: finishedAt - startedAt,
274
- note: slot.note
275
- });
276
- }
277
- results.sort((a, b) => a.dispatchIndex - b.dispatchIndex);
278
- // Touch batchId so the parameter is "used" — keeps the linter happy when
279
- // the in-process queue (claudeCodeBatchAwaiters) is later wired up.
280
- void batchId;
281
- return results;
243
+ // Slice 2026-07-29-dispatch-stall-governance / S4 (G8) — this
244
+ // function is now a thin wrapper around the unified `awaitBatch`
245
+ // service. The back-compat envelope shape is preserved (one
246
+ // `SubAgentBatchResult` per record path) so the S3 characterization
247
+ // test stays green; the underlying loop is identical to the trae /
248
+ // trae-cn / codex / cursor wrappers below. The new typed outcome
249
+ // lives on the unified service; the S4 fail-fast test pins it.
250
+ //
251
+ // Slice 2026-07-30-nightshift: claude-code does NOT use a
252
+ // per-IDE note prefix. The 1.4 dogfood contract says the done
253
+ // note is `null` (raw outcome) and the failed note is the raw
254
+ // `outcome` string with no prefix. The 4 non-Claude IDEs
255
+ // (trae / trae-cn / codex / cursor) prefix the note with their
256
+ // per-IDE label so cross-IDE attribution is visible to the LLM.
257
+ // Passing no `notePrefix` here keeps the legacy contract.
258
+ const unified = await awaitBatchUnified(input.dispatchCount, input.recordPaths, input.timeoutMs, { defaultTimeoutMs: 60_000 });
259
+ // Touch batchId so the parameter remains in scope for any future
260
+ // in-process queue wiring.
261
+ void input.batchId;
262
+ return unified.results;
282
263
  }
283
264
  /** Best-effort outcome read for a dispatch record. Returns null if pending. */
284
265
  function readDispatchOutcome(recordPath) {
@@ -305,48 +286,18 @@ function readDispatchOutcome(recordPath) {
305
286
  }
306
287
  }
307
288
  export async function pollDispatchRecords(input, opts) {
308
- const { dispatchCount, recordPaths, timeoutMs } = input;
309
- if (dispatchCount <= 0 || recordPaths.length === 0) {
310
- return [];
311
- }
312
- const startedAt = Date.now();
313
- const pollIntervalMs = 50;
314
- const deadline = timeoutMs ?? opts.defaultTimeoutMs;
315
- const capped = Math.min(Math.max(deadline, 0), 120_000);
316
- const results = [];
317
- const remaining = new Map();
318
- for (let i = 0; i < recordPaths.length; i += 1) {
319
- const recordPath = recordPaths[i] ?? '';
320
- remaining.set(i, { recordPath, status: 'timeout', note: null, finishedAt: null });
321
- }
322
- while (remaining.size > 0 && Date.now() - startedAt < capped) {
323
- for (const [idx, slot] of remaining) {
324
- if (slot.finishedAt !== null)
325
- continue;
326
- const outcome = readDispatchOutcome(slot.recordPath);
327
- if (outcome === null)
328
- continue;
329
- slot.status = outcome.status;
330
- slot.note = outcome.note;
331
- slot.finishedAt = Date.now();
332
- }
333
- if (Array.from(remaining.values()).every((s) => s.finishedAt !== null))
334
- break;
335
- await new Promise((r) => setTimeout(r, pollIntervalMs));
336
- }
337
- for (const [idx, slot] of remaining) {
338
- const finishedAt = slot.finishedAt ?? startedAt + capped;
339
- const baseNote = slot.status === 'timeout' ? `${opts.notePrefix} (timeout)` : opts.notePrefix;
340
- results.push({
341
- dispatchIndex: idx,
342
- recordPath: slot.recordPath,
343
- status: slot.status,
344
- durationMs: finishedAt - startedAt,
345
- note: slot.note !== null ? `${baseNote} — ${slot.note}` : baseNote
346
- });
347
- }
348
- results.sort((a, b) => a.dispatchIndex - b.dispatchIndex);
349
- return results;
289
+ // Slice 2026-07-29-dispatch-stall-governance / S4 (G8) — this
290
+ // function is now a thin wrapper around the unified `awaitBatch`
291
+ // service. Pre-S4 it diverged from `awaitClaudeCodeBatch` in
292
+ // (a) the default-fallback source and (b) the `Math.max(deadline, 0)`
293
+ // step; the divergence is gone. The back-compat envelope (one
294
+ // `SubAgentBatchResult` per record path, with the IDE-prefixed
295
+ // note) is preserved.
296
+ const unified = await awaitBatchUnified(input.dispatchCount, input.recordPaths, input.timeoutMs, {
297
+ defaultTimeoutMs: opts.defaultTimeoutMs,
298
+ notePrefix: opts.notePrefix
299
+ });
300
+ return unified.results;
350
301
  }
351
302
  /**
352
303
  * 1.2 fallback for trae / trae-cn / codex / cursor. Deprecated by
@@ -27,10 +27,34 @@
27
27
  * the dispatch CLI always prepends it. This is a guarantee, not a
28
28
  * suggestion.
29
29
  */
30
- export declare const TEST_TOOL_DETECTION_BLOCK = "## Test Tool Detection (mandatory)\n\nBefore running any test, read `package.json#scripts.test` to identify the project's test framework. Use the project-local runner \u2014 do NOT invoke `npx <runner>`:\n\n- **vitest** \u2192 `./node_modules/.bin/vitest run <file>` (or `pnpm test -- <file>`)\n- **jest** \u2192 `./node_modules/.bin/jest <file>` (or `pnpm test -- <file>`)\n- **mocha** \u2192 `./node_modules/.bin/mocha <file>` (or `pnpm test -- <file>`)\n\nIf unsure which framework the consumer project uses, run `peaks test --json` first to introspect the resolved framework + argv. Only as a last resort, ask the user before assuming a runner. The CLI command `peaks test <file>` already resolves the local binary for you (Windows-aware).";
30
+ export declare const TEST_TOOL_DETECTION_BLOCK = "## Test Tool Detection (mandatory)\n\nBefore running any test, read `package.json#scripts.test` to identify the project's test framework. Use the project-local runner \u2014 do NOT invoke `npx <runner>`:\n\n- **vitest** \u2192 `./node_modules/.bin/vitest run <file>` (or `pnpm test -- <file>`)\n- **jest** \u2192 `./node_modules/.bin/jest <file>` (or `pnpm test -- <file>`)\n- **mocha** \u2192 `./node_modules/.bin/mocha <file>` (or `pnpm test -- <file>`)\n\n## Test Scope (mandatory)\n\nThe dispatched test command MUST be **scoped** to a single file or pattern. An unscoped `./node_modules/.bin/vitest run` (no path filter) is **refused** because the 483-file suite is one keystroke from a 36-minute wall clock:\n\n- **scoped** \u2192 `./node_modules/.bin/vitest run tests/unit/foo.test.ts` (or any explicit file/pattern)\n- **intentional full run** \u2192 prefix with the explicit opt-in token `PEAKS_FULL_TEST=1` to override the scope gate. Use only for CI / release verification, never for routine verification during a slice.\n- **refused** \u2192 bare `./node_modules/.bin/vitest run` (no argument after `run`) without the opt-in token.\n\n`pnpm test` / `pnpm test:unit` / `pnpm test:cli` / `pnpm test:integration` and any repo-defined `test*` script remain the **human / LLM direct path** and are not gated by this rule (PB-5).\n\nIf unsure which framework the consumer project uses, run `peaks test --json` first to introspect the resolved framework + argv. Only as a last resort, ask the user before assuming a runner. The CLI command `peaks test <file>` already resolves the local binary for you (Windows-aware).";
31
31
  /**
32
32
  * Pure helper that returns the block. Exists as a function (not just an
33
33
  * exported constant) so future variants can take a runtime parameter
34
34
  * (e.g. projectRoot for context) without churning every call site.
35
35
  */
36
36
  export declare function formatTestToolDetection(): string;
37
+ /**
38
+ * Slice 2026-07-29-dispatch-stall-governance / S5 (AC-4.1 / AC-4.2) —
39
+ * pure scope classifier. Returns a typed result so callers (the
40
+ * dispatch prompt template, future test-runner bridges) can decide
41
+ * whether the command is allowed, refused, or requires the explicit
42
+ * opt-in.
43
+ *
44
+ * - 'scoped' — the command names a file/pattern after `run`
45
+ * - 'opt-in' — the user/LLM set PEAKS_FULL_TEST=1 to override
46
+ * - 'refused' — bare `vitest run` with no path and no opt-in
47
+ * - 'unsupported' — the command is not a vitest/jest/mocha run at
48
+ * all (the static block does not gate it; the caller decides)
49
+ *
50
+ * Pure: no I/O, no process spawn, no env reads. The dispatcher
51
+ * passes `env` explicitly so the test seam can assert behavior
52
+ * without mutating process.env.
53
+ */
54
+ export type TestScopeClassification = 'scoped' | 'opt-in' | 'refused' | 'unsupported';
55
+ export interface TestScopeDecision {
56
+ readonly classification: TestScopeClassification;
57
+ readonly reason: string;
58
+ readonly extractedPath: string | null;
59
+ }
60
+ export declare function classifyTestCommand(command: string, env?: Readonly<Record<string, string | undefined>>): TestScopeDecision;
@@ -35,6 +35,16 @@ Before running any test, read \`package.json#scripts.test\` to identify the proj
35
35
  - **jest** → \`./node_modules/.bin/jest <file>\` (or \`pnpm test -- <file>\`)
36
36
  - **mocha** → \`./node_modules/.bin/mocha <file>\` (or \`pnpm test -- <file>\`)
37
37
 
38
+ ## Test Scope (mandatory)
39
+
40
+ The dispatched test command MUST be **scoped** to a single file or pattern. An unscoped \`./node_modules/.bin/vitest run\` (no path filter) is **refused** because the 483-file suite is one keystroke from a 36-minute wall clock:
41
+
42
+ - **scoped** → \`./node_modules/.bin/vitest run tests/unit/foo.test.ts\` (or any explicit file/pattern)
43
+ - **intentional full run** → prefix with the explicit opt-in token \`PEAKS_FULL_TEST=1\` to override the scope gate. Use only for CI / release verification, never for routine verification during a slice.
44
+ - **refused** → bare \`./node_modules/.bin/vitest run\` (no argument after \`run\`) without the opt-in token.
45
+
46
+ \`pnpm test\` / \`pnpm test:unit\` / \`pnpm test:cli\` / \`pnpm test:integration\` and any repo-defined \`test*\` script remain the **human / LLM direct path** and are not gated by this rule (PB-5).
47
+
38
48
  If unsure which framework the consumer project uses, run \`peaks test --json\` first to introspect the resolved framework + argv. Only as a last resort, ask the user before assuming a runner. The CLI command \`peaks test <file>\` already resolves the local binary for you (Windows-aware).`;
39
49
  /**
40
50
  * Pure helper that returns the block. Exists as a function (not just an
@@ -44,3 +54,73 @@ If unsure which framework the consumer project uses, run \`peaks test --json\` f
44
54
  export function formatTestToolDetection() {
45
55
  return TEST_TOOL_DETECTION_BLOCK;
46
56
  }
57
+ export function classifyTestCommand(command, env = process.env) {
58
+ if (typeof command !== 'string') {
59
+ return {
60
+ classification: 'unsupported',
61
+ reason: 'command is not a string',
62
+ extractedPath: null
63
+ };
64
+ }
65
+ const trimmed = command.trim();
66
+ // Only vitest / jest / mocha runner invocations are in scope; other
67
+ // commands (e.g. node, curl) are out of the scope-rule's reach
68
+ // (PB-5: ordinary direct human project scripts are not gated).
69
+ const lower = trimmed.toLowerCase();
70
+ const isRunnerInvocation = /(?:\.\/node_modules\/\.bin\/|\b)(?:vitest|jest|mocha)\b/.test(lower);
71
+ if (!isRunnerInvocation) {
72
+ return {
73
+ classification: 'unsupported',
74
+ reason: 'command is not a vitest/jest/mocha runner invocation',
75
+ extractedPath: null
76
+ };
77
+ }
78
+ // Split into tokens. Quoted paths (e.g. "tests/unit/foo bar.test.ts")
79
+ // are preserved as a single token by the simple `match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g)`
80
+ // approach; the static block does not need shell-level fidelity,
81
+ // only the existence of at least one non-flag, non-runner path
82
+ // token.
83
+ const tokens = trimmed.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) ?? [];
84
+ // Find the runner token and look for arguments after it.
85
+ const runnerIdx = tokens.findIndex((t) => /(^|\/)(vitest|jest|mocha)(\.cmd|\.exe)?$/.test(t.toLowerCase()));
86
+ if (runnerIdx < 0) {
87
+ return {
88
+ classification: 'unsupported',
89
+ reason: 'runner token not found in command',
90
+ extractedPath: null
91
+ };
92
+ }
93
+ const after = tokens.slice(runnerIdx + 1);
94
+ // Strip flags (e.g. --config, --reporter, --coverage). A flag is
95
+ // any token starting with `-`. The path we care about is the first
96
+ // non-flag, non-runner, non-keyword token after the runner.
97
+ const PATH_KEYWORDS = new Set(['run', 'watch', 'test', 'c', 'ci', 'r', 'reporter', 't', 'u', 'coverage']);
98
+ const pathTokens = [];
99
+ for (const tok of after) {
100
+ if (tok.startsWith('-'))
101
+ continue;
102
+ if (PATH_KEYWORDS.has(tok.toLowerCase()))
103
+ continue;
104
+ pathTokens.push(tok);
105
+ }
106
+ if (pathTokens.length === 0) {
107
+ // No path at all. The opt-in token flips this to 'opt-in'.
108
+ if (env.PEAKS_FULL_TEST === '1' || env.PEAKS_FULL_TEST === 'true') {
109
+ return {
110
+ classification: 'opt-in',
111
+ reason: 'bare run command with PEAKS_FULL_TEST=1 opt-in',
112
+ extractedPath: null
113
+ };
114
+ }
115
+ return {
116
+ classification: 'refused',
117
+ reason: 'bare runner invocation with no path filter and no PEAKS_FULL_TEST opt-in',
118
+ extractedPath: null
119
+ };
120
+ }
121
+ return {
122
+ classification: 'scoped',
123
+ reason: `runner invocation scoped to ${pathTokens.length} path token(s)`,
124
+ extractedPath: pathTokens[0] ?? null
125
+ };
126
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Check: every emitted check ID matches the `doctor-report.schema.json`
3
+ * check.id pattern (`doctor-self:check-id-pattern`).
4
+ *
5
+ * Self-validation gate that runs after every other check so it can
6
+ * observe the full list of emitted IDs. Fails when:
7
+ * - The schema file is missing / unreadable.
8
+ * - The schema does not declare a `checks.items.properties.id.pattern`.
9
+ * - Any emitted check ID does not match the declared pattern.
10
+ *
11
+ * The accumulator is passed via the `DoctorContext` (see types.ts:
12
+ * `accumulatedChecks`). The plugin dispatcher in `index.ts` builds
13
+ * the accumulator incrementally and updates it before each plugin
14
+ * runs, so by the time this check fires every prior check's IDs are
15
+ * visible.
16
+ */
17
+ import type { DoctorCheckPlugin } from '../types.js';
18
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Check: every emitted check ID matches the `doctor-report.schema.json`
3
+ * check.id pattern (`doctor-self:check-id-pattern`).
4
+ *
5
+ * Self-validation gate that runs after every other check so it can
6
+ * observe the full list of emitted IDs. Fails when:
7
+ * - The schema file is missing / unreadable.
8
+ * - The schema does not declare a `checks.items.properties.id.pattern`.
9
+ * - Any emitted check ID does not match the declared pattern.
10
+ *
11
+ * The accumulator is passed via the `DoctorContext` (see types.ts:
12
+ * `accumulatedChecks`). The plugin dispatcher in `index.ts` builds
13
+ * the accumulator incrementally and updates it before each plugin
14
+ * runs, so by the time this check fires every prior check's IDs are
15
+ * visible.
16
+ */
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { join } from 'node:path';
19
+ import { getErrorMessage } from 'peaks-loop-shared/result';
20
+ function runSelfCheck(schemaRoot, emittedIds) {
21
+ const schemaPath = join(schemaRoot, 'doctor-report.schema.json');
22
+ if (!existsSync(schemaPath)) {
23
+ return [{
24
+ id: 'doctor-self:check-id-pattern',
25
+ ok: false,
26
+ message: `Failed to load doctor-report.schema.json for self-validation: ${getErrorMessage(new Error(`ENOENT: ${schemaPath}`))}`
27
+ }];
28
+ }
29
+ try {
30
+ const schemaText = readFileSync(schemaPath, 'utf8');
31
+ const schema = JSON.parse(schemaText);
32
+ const patternSource = schema.properties?.checks?.items?.properties?.id?.pattern;
33
+ if (typeof patternSource !== 'string') {
34
+ return [{
35
+ id: 'doctor-self:check-id-pattern',
36
+ ok: false,
37
+ message: 'doctor-report.schema.json does not declare a check.id pattern'
38
+ }];
39
+ }
40
+ const pattern = new RegExp(patternSource);
41
+ const mismatches = emittedIds.filter((id) => !pattern.test(id));
42
+ return [{
43
+ id: 'doctor-self:check-id-pattern',
44
+ ok: mismatches.length === 0,
45
+ message: mismatches.length === 0
46
+ ? 'All doctor check IDs match the doctor-report schema pattern'
47
+ : `Doctor check IDs missing from schema pattern: ${mismatches.join(', ')}`
48
+ }];
49
+ }
50
+ catch (error) {
51
+ return [{
52
+ id: 'doctor-self:check-id-pattern',
53
+ ok: false,
54
+ message: `Failed to load doctor-report.schema.json for self-validation: ${getErrorMessage(error)}`
55
+ }];
56
+ }
57
+ }
58
+ function run({ schemaRoot, accumulatedChecks }) {
59
+ return runSelfCheck(schemaRoot, accumulatedChecks.map((check) => check.id));
60
+ }
61
+ export const check = {
62
+ name: 'check-id-schema',
63
+ run
64
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Check: codegraph capability (`capability:codegraph`).
3
+ *
4
+ * Verifies that `@colbymchenry/codegraph` resolves at the pinned
5
+ * version AND that the binary exists at the expected on-disk path.
6
+ * Fails when the version drifts, when the binary is missing, or
7
+ * when the package is not resolvable at all.
8
+ *
9
+ * The probe is injected so tests do not depend on the real
10
+ * `node_modules` resolution; the default probe uses
11
+ * `createRequire(import.meta.url)` to find the package.
12
+ */
13
+ import type { DoctorCheckPlugin } from '../types.js';
14
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Check: codegraph capability (`capability:codegraph`).
3
+ *
4
+ * Verifies that `@colbymchenry/codegraph` resolves at the pinned
5
+ * version AND that the binary exists at the expected on-disk path.
6
+ * Fails when the version drifts, when the binary is missing, or
7
+ * when the package is not resolvable at all.
8
+ *
9
+ * The probe is injected so tests do not depend on the real
10
+ * `node_modules` resolution; the default probe uses
11
+ * `createRequire(import.meta.url)` to find the package.
12
+ */
13
+ import { existsSync } from 'node:fs';
14
+ import { dirname, resolve as resolvePath } from 'node:path';
15
+ import { createRequire } from 'node:module';
16
+ import { getErrorMessage } from 'peaks-loop-shared/result';
17
+ const CODEGRAPH_EXPECTED_VERSION = '0.7.10';
18
+ function defaultCodegraphProbe() {
19
+ const require = createRequire(import.meta.url);
20
+ const packagePath = require.resolve('@colbymchenry/codegraph/package.json');
21
+ const pkg = require(packagePath);
22
+ const binaryPath = resolvePath(dirname(packagePath), 'dist', 'bin', 'codegraph.js');
23
+ return {
24
+ packagePath,
25
+ version: pkg.version ?? 'unknown',
26
+ binaryPath,
27
+ binaryExists: existsSync(binaryPath)
28
+ };
29
+ }
30
+ function runCheck(probe) {
31
+ try {
32
+ const result = probe();
33
+ const versionOk = result.version === CODEGRAPH_EXPECTED_VERSION;
34
+ if (!versionOk) {
35
+ return [{
36
+ id: 'capability:codegraph',
37
+ ok: false,
38
+ message: `@colbymchenry/codegraph version mismatch: expected ${CODEGRAPH_EXPECTED_VERSION}, resolved ${result.version} at ${result.packagePath}`
39
+ }];
40
+ }
41
+ if (!result.binaryExists) {
42
+ return [{
43
+ id: 'capability:codegraph',
44
+ ok: false,
45
+ message: `@colbymchenry/codegraph@${result.version} resolved at ${result.packagePath} but binary is missing at ${result.binaryPath}`
46
+ }];
47
+ }
48
+ return [{
49
+ id: 'capability:codegraph',
50
+ ok: true,
51
+ message: `@colbymchenry/codegraph@${result.version} resolves with binary at ${result.binaryPath}`
52
+ }];
53
+ }
54
+ catch (error) {
55
+ return [{
56
+ id: 'capability:codegraph',
57
+ ok: false,
58
+ message: `@colbymchenry/codegraph not resolvable: ${getErrorMessage(error)}`
59
+ }];
60
+ }
61
+ }
62
+ function run({ options }) {
63
+ const probe = options.codegraphProbe ?? defaultCodegraphProbe;
64
+ return runCheck(probe);
65
+ }
66
+ export const check = {
67
+ name: 'codegraph-capability',
68
+ run
69
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Check: dist CLI_VERSION matches source `package.json#version`
3
+ * (`build:dist-version-matches-source`).
4
+ *
5
+ * Build-hygiene check that surfaces the silent-stale-CLI failure
6
+ * mode where the user runs `npx peaks` / `node bin/peaks.js` after
7
+ * `pnpm install` but before `pnpm build`. A missing dist/ is treated
8
+ * as informational (fresh clone, not broken) so the check does not
9
+ * flip the summary to red on a clean checkout.
10
+ *
11
+ * IMPORTANT: the on-disk path is `dist/shared/version.js` (NOT
12
+ * `dist/src/shared/version.js`) because `tsconfig.build.json#rootDir
13
+ * = "src"` trims the `src/` segment from emitted output.
14
+ *
15
+ * The pure compare helper is exported as `compareDistVersion` so
16
+ * tests can drive the filesystem reads without monkey-patching
17
+ * `process.cwd()`.
18
+ */
19
+ import type { DistVersionComparison, DoctorCheckPlugin } from '../types.js';
20
+ /**
21
+ * Pure helper that compares the published dist `CLI_VERSION` against
22
+ * the source-of-truth `package.json#version`. Default readers fail-
23
+ * soft to `null` on missing/unreadable/malformed input. Exported so
24
+ * tests can drive the filesystem reads without monkey-patching
25
+ * `process.cwd()`.
26
+ */
27
+ export declare function compareDistVersion(opts: {
28
+ projectRoot: string;
29
+ distVersionReader?: (root: string) => string | null;
30
+ sourceVersionReader?: (root: string) => string | null;
31
+ }): DistVersionComparison;
32
+ export declare const check: DoctorCheckPlugin;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Check: dist CLI_VERSION matches source `package.json#version`
3
+ * (`build:dist-version-matches-source`).
4
+ *
5
+ * Build-hygiene check that surfaces the silent-stale-CLI failure
6
+ * mode where the user runs `npx peaks` / `node bin/peaks.js` after
7
+ * `pnpm install` but before `pnpm build`. A missing dist/ is treated
8
+ * as informational (fresh clone, not broken) so the check does not
9
+ * flip the summary to red on a clean checkout.
10
+ *
11
+ * IMPORTANT: the on-disk path is `dist/shared/version.js` (NOT
12
+ * `dist/src/shared/version.js`) because `tsconfig.build.json#rootDir
13
+ * = "src"` trims the `src/` segment from emitted output.
14
+ *
15
+ * The pure compare helper is exported as `compareDistVersion` so
16
+ * tests can drive the filesystem reads without monkey-patching
17
+ * `process.cwd()`.
18
+ */
19
+ import { existsSync, readFileSync } from 'node:fs';
20
+ import { join } from 'node:path';
21
+ import { getErrorMessage } from 'peaks-loop-shared/result';
22
+ /**
23
+ * Pure helper that compares the published dist `CLI_VERSION` against
24
+ * the source-of-truth `package.json#version`. Default readers fail-
25
+ * soft to `null` on missing/unreadable/malformed input. Exported so
26
+ * tests can drive the filesystem reads without monkey-patching
27
+ * `process.cwd()`.
28
+ */
29
+ export function compareDistVersion(opts) {
30
+ const distReader = opts.distVersionReader ?? defaultDistVersionReader;
31
+ const sourceReader = opts.sourceVersionReader ?? defaultSourceVersionReader;
32
+ const dist = safeRead(() => distReader(opts.projectRoot));
33
+ const source = safeRead(() => sourceReader(opts.projectRoot)) ?? 'unknown';
34
+ const distReadable = dist !== null;
35
+ return {
36
+ dist,
37
+ source,
38
+ match: distReadable && dist === source,
39
+ distReadable
40
+ };
41
+ }
42
+ function safeRead(reader) {
43
+ try {
44
+ return reader();
45
+ }
46
+ catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
47
+ return null;
48
+ }
49
+ }
50
+ function defaultDistVersionReader(projectRoot) {
51
+ const distPath = join(projectRoot, 'dist', 'shared', 'version.js');
52
+ if (!existsSync(distPath)) {
53
+ return null;
54
+ }
55
+ const body = readFileSync(distPath, 'utf8');
56
+ const match = /export\s+const\s+CLI_VERSION\s*=\s*["']([^"']+)["']/.exec(body);
57
+ return match?.[1] ?? null;
58
+ }
59
+ function defaultSourceVersionReader(projectRoot) {
60
+ const pkgPath = join(projectRoot, 'package.json');
61
+ if (!existsSync(pkgPath)) {
62
+ return null;
63
+ }
64
+ const body = readFileSync(pkgPath, 'utf8');
65
+ const parsed = JSON.parse(body);
66
+ return typeof parsed.version === 'string' ? parsed.version : null;
67
+ }
68
+ function defaultDistVersionProbe(projectRootResolver) {
69
+ const projectRoot = projectRootResolver();
70
+ if (projectRoot === null) {
71
+ return { dist: null, source: 'unknown', match: false, distReadable: false };
72
+ }
73
+ return compareDistVersion({ projectRoot });
74
+ }
75
+ function run({ options, projectRootResolver }) {
76
+ const probe = options.distVersionProbe ?? (() => defaultDistVersionProbe(projectRootResolver));
77
+ try {
78
+ const result = probe();
79
+ if (!result.distReadable) {
80
+ return [{
81
+ id: 'build:dist-version-matches-source',
82
+ ok: true,
83
+ message: `dist/ is not present; run \`pnpm build\` to populate dist/shared/version.js (source version ${result.source})`
84
+ }];
85
+ }
86
+ if (result.match) {
87
+ return [{
88
+ id: 'build:dist-version-matches-source',
89
+ ok: true,
90
+ message: `dist/shared/version.js ships CLI_VERSION ${result.dist} matching source ${result.source}`
91
+ }];
92
+ }
93
+ return [{
94
+ id: 'build:dist-version-matches-source',
95
+ ok: false,
96
+ message: `dist/shared/version.js ships CLI_VERSION ${result.dist} but source ${result.source} is in src/shared/version.ts; run \`pnpm build\` to refresh dist/`
97
+ }];
98
+ }
99
+ catch (error) {
100
+ return [{
101
+ id: 'build:dist-version-matches-source',
102
+ ok: false,
103
+ message: `dist version check failed: ${getErrorMessage(error)}`
104
+ }];
105
+ }
106
+ }
107
+ export const check = {
108
+ name: 'dist-source-version',
109
+ run
110
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Check: gateguard-fact-force hook does not intercept `.peaks/`
3
+ * writes (`integration:gateguard-peaks-conflict`).
4
+ *
5
+ * 2026-06-10 — the `gateguard-fact-force` hook is a third-party
6
+ * PreToolUse hook (NOT peaks-loop) that fires on Edit/Write and
7
+ * demands a 4-fact questionnaire before allowing the edit. When
8
+ * the LLM is in a peaks-qa flow and edits
9
+ * `.peaks/_runtime/<sid>/qa/requests/*.md`, the questionnaire
10
+ * demands facts that do not apply. We warn when the hook is
11
+ * installed and no `.peaks/**` skip is configured.
12
+ *
13
+ * Probing is split out of the check so the check itself stays a
14
+ * pure mapping over `GateguardProbeResult`. Tests inject the probe
15
+ * to keep `~/.claude/settings.json` from leaking into fixtures.
16
+ */
17
+ import type { DoctorCheckPlugin, GateguardHookLocation, GateguardProbeResult } from '../types.js';
18
+ /**
19
+ * Pure mapping over a `GateguardProbeResult`. Exported so tests
20
+ * can drive the entry extraction without monkey-patching
21
+ * `~/.claude/settings.json`.
22
+ */
23
+ export declare function collectGateguardEntries(probe: GateguardProbeResult): GateguardHookLocation[];
24
+ export declare const check: DoctorCheckPlugin;