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
@@ -1,7 +1,7 @@
1
1
  import { stat } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
- import { isDirectory, pathExists, readText } from '../../shared/fs.js';
4
- import { getErrorMessage } from '../../shared/result.js';
3
+ import { isDirectory, pathExists, readText } from 'peaks-loop-shared/fs';
4
+ import { getErrorMessage } from 'peaks-loop-shared/result';
5
5
  import { loadPreferences } from '../preferences/preferences-service.js';
6
6
  function defaultArtifactDir(projectRoot) {
7
7
  return join(projectRoot, '.understand-anything');
@@ -271,10 +271,11 @@ export function runUpgrade(input) {
271
271
  // a Unix-style environment that can run the shim directly.
272
272
  const here = dirname(fileURLToPath(import.meta.url));
273
273
  // Walk up from the compiled location to find bin/peaks.js.
274
- // The compiled service lives at dist/src/services/upgrade/upgrade-service.js;
275
- // bin/peaks.js is at the peaks-loop root.
274
+ // The compiled service lives at dist/services/upgrade/upgrade-service.js
275
+ // (rootDir=src in tsconfig.build.json trims the "src" segment); bin/peaks.js
276
+ // is at the peaks-loop root, 3 dirs up.
276
277
  const peaksBin = input.peaksBin ??
277
- resolve(here, '..', '..', '..', '..', 'bin', 'peaks.js');
278
+ resolve(here, '..', '..', '..', 'bin', 'peaks.js');
278
279
  const fallbackPeaks = 'peaks';
279
280
  const resolvedPeaksBin = existsSync(peaksBin) ? peaksBin : fallbackPeaks;
280
281
  // Resolve the executor once at the top of runUpgrade so every
@@ -23,8 +23,8 @@
23
23
  * "missing → null" contract). Callers can detect "envelope missing"
24
24
  * without throwing.
25
25
  */
26
- import { type SecurityAuditEnvelope } from '../audit-independent/security-audit-service.js';
27
- import { type PerfAuditEnvelope } from '../audit-independent/perf-audit-service.js';
26
+ import { type SecurityAuditEnvelope } from '../audit-independent/index.js';
27
+ import { type PerfAuditEnvelope } from '../audit-independent/index.js';
28
28
  import { type KarpathyEnvelope, type MutEnvelope, type QaEnvelope, type AggregatorInput } from './verdict-aggregator.js';
29
29
  /**
30
30
  * `kind` is the discriminator. The on-disk file format is unchanged;
@@ -23,8 +23,8 @@
23
23
  * "missing → null" contract). Callers can detect "envelope missing"
24
24
  * without throwing.
25
25
  */
26
- import { isSecurityAuditEnvelope } from '../audit-independent/security-audit-service.js';
27
- import { isPerfAuditEnvelope } from '../audit-independent/perf-audit-service.js';
26
+ import { isSecurityAuditEnvelope } from '../audit-independent/index.js';
27
+ import { isPerfAuditEnvelope } from '../audit-independent/index.js';
28
28
  // ─── 5 parsers (pure, never throw) ─────────────────────────────────────
29
29
  /**
30
30
  * v2.13.3 AC-1 — parse real v2.12.0 audit markdown.
@@ -27,9 +27,9 @@
27
27
  * SecurityAuditEnvelope / PerfAuditEnvelope type re-exports.
28
28
  * - hard precedence; no scoring, no weighting, no RFC voting.
29
29
  */
30
- import type { SecurityAuditEnvelope } from '../audit-independent/security-audit-service.js';
31
- import type { PerfAuditEnvelope } from '../audit-independent/perf-audit-service.js';
32
- import type { ThresholdViolation } from '../mut/thresholds.js';
30
+ import type { SecurityAuditEnvelope } from '../audit-independent/index.js';
31
+ import type { PerfAuditEnvelope } from '../audit-independent/index.js';
32
+ import type { ThresholdViolation } from 'peaks-loop-mut';
33
33
  export interface KarpathyViolation {
34
34
  readonly guideline: 'think-before-coding' | 'simplicity-first' | 'surgical-changes' | 'goal-driven-execution';
35
35
  readonly severity: 'CRITICAL' | 'HIGH' | 'MED' | 'LOW';
@@ -0,0 +1,40 @@
1
+ export type VmHypervisor = 'kvm' | 'hyperkit' | 'hyperv';
2
+ export declare const VM_HYPERVISORS: ReadonlyArray<VmHypervisor>;
3
+ export declare const DEFAULT_TTL_BY_ROLE: Readonly<Record<string, number>>;
4
+ export declare const DEFAULT_TTL_MS: number | undefined;
5
+ export declare const DEFAULT_VM_IMAGE = "peaks-base:22-slim";
6
+ export type VmLeaseStatus = 'active' | 'released' | 'expired' | 'gc';
7
+ export interface VmLease {
8
+ readonly leaseId: string;
9
+ readonly rid: string;
10
+ readonly role: string;
11
+ /** Host path mounted into the VM working dir. */
12
+ readonly path: string;
13
+ /** Hypervisor the VM runs under (kvm | hyperkit | hyperv). */
14
+ readonly hypervisor: VmHypervisor;
15
+ /** VM image name (e.g. 'peaks-base:22-slim'). */
16
+ readonly image: string;
17
+ /** VM domain id reported by virsh / hvftool / hvc. */
18
+ readonly vmId: string;
19
+ /** Unix epoch ms when the lease was created. */
20
+ readonly createdAt: number;
21
+ /** Unix epoch ms when the lease expires. */
22
+ readonly expiresAt: number;
23
+ /** Operator-supplied purpose text (audit log). */
24
+ readonly purpose: string;
25
+ readonly status: VmLeaseStatus;
26
+ readonly consumedBySubAgents: ReadonlyArray<string>;
27
+ }
28
+ export type VmLeaseDraft = Omit<VmLease, 'status' | 'consumedBySubAgents'>;
29
+ export declare function vmLeaseStoreDir(sessionRuntimeDir: string): string;
30
+ export declare function vmLeaseFilePath(sessionRuntimeDir: string, leaseId: string): string;
31
+ export declare function generateVmLeaseId(): string;
32
+ export declare function ttlForVmRole(role: string): number;
33
+ export declare function finalizeVmLease(draft: VmLeaseDraft): VmLease;
34
+ export declare function markVmReleased(lease: VmLease): VmLease;
35
+ export declare function markVmExpired(lease: VmLease): VmLease;
36
+ export declare function markVmGc(lease: VmLease): VmLease;
37
+ export declare function recordVmConsumption(lease: VmLease, subAgentId: string): VmLease;
38
+ export declare function isVmLeaseActive(lease: VmLease, now?: number): boolean;
39
+ export declare function serializeVmLease(lease: VmLease): string;
40
+ export declare function deserializeVmLease(raw: string): VmLease;
@@ -0,0 +1,137 @@
1
+ /**
2
+ * vm-lease — pure-function lease store for `peaks vm spawn`.
3
+ *
4
+ * Slice 2026-07-29-worktree-l2-extended Part 35 (L4 VM runtime).
5
+ * Parallels the design of `worktree-lease.ts` (Part 1) and
6
+ * `container-lease.ts` (Part 12). The L4 VM isolation mode
7
+ * (`--isolation vm` in dispatch) needs its own lease surface
8
+ * so the PreToolUse gate can grant `docker`-class operations
9
+ * to sub-agents that own a VM lease.
10
+ *
11
+ * Hypervisor support:
12
+ * - kvm: virsh create + virsh destroy (Linux KVM via libvirt)
13
+ * - hyperkit: hvftool create + hvftool stop (macOS HyperKit)
14
+ * - hyperv: hvc create + hvc stop (Windows Hyper-V via the
15
+ * Hyper-V cmdlets; the operator wires the entry shim)
16
+ *
17
+ * Each hypervisor has its own spawn pattern; the lease file
18
+ * records which hypervisor was used so `peaks vm release`
19
+ * can dispatch to the right cleanup command.
20
+ */
21
+ import { randomBytes } from 'node:crypto';
22
+ import { posix as path } from 'node:path';
23
+ export const VM_HYPERVISORS = Object.freeze([
24
+ 'kvm', 'hyperkit', 'hyperv'
25
+ ]);
26
+ export const DEFAULT_TTL_BY_ROLE = Object.freeze({
27
+ rd: 30 * 60 * 1_000,
28
+ qa: 15 * 60 * 1_000,
29
+ ui: 60 * 60 * 1_000,
30
+ sc: 30 * 60 * 1_000,
31
+ prd: 15 * 60 * 1_000,
32
+ general: 30 * 60 * 1_000
33
+ });
34
+ export const DEFAULT_TTL_MS = DEFAULT_TTL_BY_ROLE.rd;
35
+ export const DEFAULT_VM_IMAGE = 'peaks-base:22-slim';
36
+ export function vmLeaseStoreDir(sessionRuntimeDir) {
37
+ return joinPath(sessionRuntimeDir, 'vm-leases');
38
+ }
39
+ export function vmLeaseFilePath(sessionRuntimeDir, leaseId) {
40
+ return joinPath(vmLeaseStoreDir(sessionRuntimeDir), `${leaseId}.json`);
41
+ }
42
+ export function generateVmLeaseId() {
43
+ return randomBytes(8).toString('hex');
44
+ }
45
+ export function ttlForVmRole(role) {
46
+ const normalized = role.toLowerCase();
47
+ const candidate = DEFAULT_TTL_BY_ROLE[normalized];
48
+ const fallback = DEFAULT_TTL_BY_ROLE['rd'] ?? 30 * 60 * 1_000;
49
+ return candidate ?? fallback;
50
+ }
51
+ export function finalizeVmLease(draft) {
52
+ return { ...draft, status: 'active', consumedBySubAgents: [] };
53
+ }
54
+ export function markVmReleased(lease) {
55
+ return { ...lease, status: 'released' };
56
+ }
57
+ export function markVmExpired(lease) {
58
+ return { ...lease, status: 'expired' };
59
+ }
60
+ export function markVmGc(lease) {
61
+ return { ...lease, status: 'gc' };
62
+ }
63
+ export function recordVmConsumption(lease, subAgentId) {
64
+ if (lease.consumedBySubAgents.includes(subAgentId))
65
+ return lease;
66
+ return { ...lease, consumedBySubAgents: [...lease.consumedBySubAgents, subAgentId] };
67
+ }
68
+ export function isVmLeaseActive(lease, now = Date.now()) {
69
+ return lease.status === 'active' && lease.expiresAt > now;
70
+ }
71
+ export function serializeVmLease(lease) {
72
+ return JSON.stringify(lease, null, 2) + '\n';
73
+ }
74
+ export function deserializeVmLease(raw) {
75
+ const parsed = JSON.parse(raw);
76
+ if (typeof parsed !== 'object' || parsed === null) {
77
+ throw new Error('vm lease file must contain a JSON object');
78
+ }
79
+ const obj = parsed;
80
+ const required = [
81
+ 'leaseId', 'rid', 'role', 'path', 'hypervisor', 'image', 'vmId',
82
+ 'createdAt', 'expiresAt', 'purpose', 'status', 'consumedBySubAgents'
83
+ ];
84
+ for (const k of required) {
85
+ if (!(k in obj))
86
+ throw new Error(`vm lease missing field: ${k}`);
87
+ }
88
+ if (!VM_HYPERVISORS.includes(obj.hypervisor)) {
89
+ throw new Error(`vm lease hypervisor invalid: ${String(obj.hypervisor)}`);
90
+ }
91
+ if (typeof obj.leaseId !== 'string')
92
+ throw new Error('leaseId missing');
93
+ if (typeof obj.rid !== 'string')
94
+ throw new Error('rid missing');
95
+ if (typeof obj.role !== 'string')
96
+ throw new Error('role missing');
97
+ if (typeof obj.path !== 'string')
98
+ throw new Error('path missing');
99
+ if (typeof obj.image !== 'string')
100
+ throw new Error('image missing');
101
+ if (typeof obj.vmId !== 'string')
102
+ throw new Error('vmId missing');
103
+ if (typeof obj.createdAt !== 'number')
104
+ throw new Error('createdAt missing');
105
+ if (typeof obj.expiresAt !== 'number')
106
+ throw new Error('expiresAt missing');
107
+ if (typeof obj.purpose !== 'string')
108
+ throw new Error('purpose missing');
109
+ if (typeof obj.status !== 'string')
110
+ throw new Error('status missing');
111
+ if (!Array.isArray(obj.consumedBySubAgents))
112
+ throw new Error('consumedBySubAgents missing');
113
+ return {
114
+ leaseId: obj.leaseId,
115
+ rid: obj.rid,
116
+ role: obj.role,
117
+ path: obj.path,
118
+ hypervisor: obj.hypervisor,
119
+ image: obj.image,
120
+ vmId: obj.vmId,
121
+ createdAt: obj.createdAt,
122
+ expiresAt: obj.expiresAt,
123
+ purpose: obj.purpose,
124
+ status: obj.status,
125
+ consumedBySubAgents: obj.consumedBySubAgents
126
+ };
127
+ }
128
+ function joinPath(...segments) {
129
+ if (segments.length === 0)
130
+ return '';
131
+ const normalized = segments.map((s) => s.replace(/\\/g, '/'));
132
+ let acc = normalized[0];
133
+ for (let i = 1; i < normalized.length; i++) {
134
+ acc = path.join(acc, normalized[i]);
135
+ }
136
+ return acc;
137
+ }
@@ -1,7 +1,7 @@
1
1
  import { mkdir, writeFile } from 'node:fs/promises';
2
2
  import { dirname, join } from 'node:path';
3
3
  import { getSessionDir } from '../session/getSessionDir.js';
4
- import { pathExists } from '../../shared/fs.js';
4
+ import { pathExists } from 'peaks-loop-shared/fs';
5
5
  import { isUnsafePathInput } from '../../shared/path-safety.js';
6
6
  function defaultClock() {
7
7
  return new Date().toISOString();
@@ -0,0 +1,47 @@
1
+ /**
2
+ * peaks-workflow — internal support helpers for pipeline verification.
3
+ *
4
+ * Private helpers used by the slimmed `pipeline-verify-service.ts`
5
+ * orchestrator. NOT publicly re-exported; not part of the public API
6
+ * surface. Kept in a sibling file so the orchestrator can stay under
7
+ * the 400-line file-size cap (rid-006 split).
8
+ *
9
+ * File budget: ≤ 400 lines (rid-006 split).
10
+ */
11
+ import type { RequestType } from '../artifacts/artifact-prerequisites.js';
12
+ import type { PipelineGate } from './pipeline-verify-types.js';
13
+ export declare function extractState(markdown: string): string;
14
+ /**
15
+ * As of slice 2026-06-05-change-id-as-unit-of-work, the file's durable
16
+ * scope is the change-id (the `.peaks/_runtime/<sessionId>/` dir the file lives
17
+ * in), NOT the session-id. We resolve the on-disk location via
18
+ * `showRequestArtifact` (which scans all top-level dirs and returns the
19
+ * actual dir the file was found in) instead of assuming
20
+ * `.peaks/_runtime/<sessionId>/<role>/requests/`.
21
+ */
22
+ export declare function findRequestFile(projectRoot: string, role: string, rid: string): Promise<{
23
+ path: string;
24
+ content: string;
25
+ sessionId: string;
26
+ } | null>;
27
+ export declare function rdGatesForType(requestType: RequestType): PipelineGate[];
28
+ export declare function qaGatesForType(requestType: RequestType): PipelineGate[];
29
+ export declare const RD_QA_HANDOFF_STATES: Set<string>;
30
+ export declare const QA_COMPLETE_STATES: Set<string>;
31
+ /** Tracker for canonical-path compliance (slice 2026-06-28-code-mode-bypass-fix). */
32
+ export interface CanonicalPathTracker {
33
+ anyEvidenceResolved: boolean;
34
+ allResolvedPathsCanonical: boolean;
35
+ }
36
+ /** Resolve RD evidence files (tech-doc / bug-analysis / code-review / security-review)
37
+ * by probing canonical + legacy paths for each gate. Mutates the gate.passed /
38
+ * gate.detail fields in place and pushes violations / nextActions. Returns the
39
+ * updated tracker. Verbatim-move from `pipeline-verify-service.ts`. */
40
+ export declare function resolveRdEvidencePaths(gates: PipelineGate[], rdEvidenceDir: string, projectRoot: string, violations: string[], nextActions: string[], tracker: CanonicalPathTracker): CanonicalPathTracker;
41
+ /** Resolve QA evidence files (test-cases / test-report / security-findings /
42
+ * performance-findings) by probing canonical + legacy paths for each gate.
43
+ * For security/perf findings, delegates to the artifact-paths resolver.
44
+ * Mutates the gate.passed / gate.detail fields in place and pushes
45
+ * violations / nextActions. Returns the updated tracker. Verbatim-move
46
+ * from `pipeline-verify-service.ts`. */
47
+ export declare function resolveQaEvidencePaths(gates: PipelineGate[], projectRoot: string, rdEvidenceDir: string, changeIdForResolver: string, rid: string, violations: string[], nextActions: string[], tracker: CanonicalPathTracker): CanonicalPathTracker;
@@ -0,0 +1,194 @@
1
+ /**
2
+ * peaks-workflow — internal support helpers for pipeline verification.
3
+ *
4
+ * Private helpers used by the slimmed `pipeline-verify-service.ts`
5
+ * orchestrator. NOT publicly re-exported; not part of the public API
6
+ * surface. Kept in a sibling file so the orchestrator can stay under
7
+ * the 400-line file-size cap (rid-006 split).
8
+ *
9
+ * File budget: ≤ 400 lines (rid-006 split).
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { showRequestArtifact } from '../artifacts/request-artifact-service.js';
14
+ import { resolveSecurityFindingsPath, resolvePerformanceFindingsPath } from './artifact-paths.js';
15
+ export function extractState(markdown) {
16
+ for (const rawLine of markdown.split(/\r?\n/)) {
17
+ const match = /^-\s*state:\s*(.+?)\s*$/.exec(rawLine.trim());
18
+ if (match?.[1])
19
+ return match[1];
20
+ }
21
+ return 'unknown';
22
+ }
23
+ /**
24
+ * As of slice 2026-06-05-change-id-as-unit-of-work, the file's durable
25
+ * scope is the change-id (the `.peaks/_runtime/<sessionId>/` dir the file lives
26
+ * in), NOT the session-id. We resolve the on-disk location via
27
+ * `showRequestArtifact` (which scans all top-level dirs and returns the
28
+ * actual dir the file was found in) instead of assuming
29
+ * `.peaks/_runtime/<sessionId>/<role>/requests/`.
30
+ */
31
+ export async function findRequestFile(projectRoot, role, rid) {
32
+ const artifact = await showRequestArtifact({ projectRoot, role: role, requestId: rid });
33
+ if (artifact === null)
34
+ return null;
35
+ // Slice 2026-06-28-code-mode-bypass-fix (defect #3): the legacy
36
+ // `showRequestArtifact` returns the FULL SCOPE (`_runtime/<sid>`)
37
+ // as `sessionId`, not just the trailing id segment. The canonical
38
+ // evidence lookup needs only the bare id (`.peaks/_runtime/change/<id>/`).
39
+ // When the scope starts with `_runtime/`, strip that prefix so the
40
+ // path resolver builds the right canonical location.
41
+ let sessionId = artifact.sessionId;
42
+ if (sessionId.startsWith('_runtime/') || sessionId.startsWith('_runtime\\')) {
43
+ sessionId = sessionId.replace(/^_runtime[\\/]/, '');
44
+ }
45
+ return { path: artifact.path, content: artifact.content, sessionId };
46
+ }
47
+ export function rdGatesForType(requestType) {
48
+ const gates = [
49
+ { name: 'rd-request-exists', description: 'RD request artifact created', passed: false, detail: '' }
50
+ ];
51
+ if (requestType === 'feature' || requestType === 'refactor') {
52
+ gates.push({ name: 'tech-doc', description: 'Technical design doc', passed: false, detail: '' });
53
+ }
54
+ if (requestType === 'bugfix') {
55
+ gates.push({ name: 'bug-analysis', description: 'Bug root-cause analysis', passed: false, detail: '' });
56
+ }
57
+ if (requestType !== 'docs' && requestType !== 'chore' && requestType !== 'config') {
58
+ gates.push({ name: 'code-review', description: 'Code review evidence', passed: false, detail: '' });
59
+ }
60
+ if (requestType === 'feature' || requestType === 'refactor' || requestType === 'bugfix' || requestType === 'config') {
61
+ gates.push({ name: 'security-review', description: 'Security review evidence', passed: false, detail: '' });
62
+ }
63
+ return gates;
64
+ }
65
+ export function qaGatesForType(requestType) {
66
+ const gates = [
67
+ { name: 'qa-request-exists', description: 'QA request artifact created', passed: false, detail: '' }
68
+ ];
69
+ if (requestType === 'feature' || requestType === 'refactor' || requestType === 'bugfix') {
70
+ gates.push({ name: 'test-cases', description: 'QA test cases', passed: false, detail: '' });
71
+ gates.push({ name: 'test-report', description: 'QA test report with execution results', passed: false, detail: '' });
72
+ }
73
+ if (requestType === 'feature' || requestType === 'refactor' || requestType === 'bugfix' || requestType === 'config') {
74
+ gates.push({ name: 'security-findings', description: 'QA security findings', passed: false, detail: '' });
75
+ }
76
+ if (requestType === 'feature' || requestType === 'refactor') {
77
+ gates.push({ name: 'performance-findings', description: 'QA performance findings', passed: false, detail: '' });
78
+ }
79
+ return gates;
80
+ }
81
+ export const RD_QA_HANDOFF_STATES = new Set(['qa-handoff', 'handed-off', 'implemented']);
82
+ export const QA_COMPLETE_STATES = new Set(['verdict-issued']);
83
+ /** Resolve RD evidence files (tech-doc / bug-analysis / code-review / security-review)
84
+ * by probing canonical + legacy paths for each gate. Mutates the gate.passed /
85
+ * gate.detail fields in place and pushes violations / nextActions. Returns the
86
+ * updated tracker. Verbatim-move from `pipeline-verify-service.ts`. */
87
+ export function resolveRdEvidencePaths(gates, rdEvidenceDir, projectRoot, violations, nextActions, tracker) {
88
+ const RD_EVIDENCE_FILE = {
89
+ 'tech-doc': 'tech-doc.md',
90
+ 'bug-analysis': 'bug-analysis.md',
91
+ 'code-review': 'code-review.md',
92
+ 'security-review': 'security-review.md'
93
+ };
94
+ let anyEvidenceResolved = tracker.anyEvidenceResolved;
95
+ let allResolvedPathsCanonical = tracker.allResolvedPathsCanonical;
96
+ for (const gate of gates.slice(1)) {
97
+ const fileName = RD_EVIDENCE_FILE[gate.name];
98
+ const canonicalPath = join(projectRoot, '.peaks', '_runtime', rdEvidenceDir, 'rd', fileName);
99
+ const legacyMisplacedPath = join(projectRoot, '.peaks', rdEvidenceDir, 'rd', fileName);
100
+ const legacyChangeAxisPath = join(projectRoot, '.peaks', '_runtime', 'change', rdEvidenceDir, 'rd', fileName);
101
+ let resolvedPath = null;
102
+ let usedLegacy = false;
103
+ for (const candidate of [canonicalPath, legacyMisplacedPath, legacyChangeAxisPath]) {
104
+ if (existsSync(candidate)) {
105
+ resolvedPath = candidate;
106
+ usedLegacy = candidate !== canonicalPath;
107
+ break;
108
+ }
109
+ }
110
+ if (resolvedPath !== null) {
111
+ anyEvidenceResolved = true;
112
+ if (usedLegacy)
113
+ allResolvedPathsCanonical = false;
114
+ gate.passed = true;
115
+ gate.detail = resolvedPath + (usedLegacy ? ' [DEPRECATION_LEGACY_PATH_USED]' : '');
116
+ if (usedLegacy) {
117
+ violations.push(`DEPRECATION_LEGACY_PATH_USED: ${resolvedPath} — move the file into .peaks/_runtime/${rdEvidenceDir}/rd/ (the canonical location) so subsequent runs resolve on the canonical path. The legacy \`peaks workspace migrate-change-scope\` helper was removed in v2.19.0; use \`peaks workspace migrate\` to relocate misplaced content.`);
118
+ }
119
+ }
120
+ else {
121
+ gate.detail = `missing: ${canonicalPath}`;
122
+ violations.push(`RD evidence missing: ${gate.description} (${fileName})`);
123
+ nextActions.push(`Create .peaks/_runtime/${rdEvidenceDir}/rd/${fileName}`);
124
+ }
125
+ }
126
+ return { anyEvidenceResolved, allResolvedPathsCanonical };
127
+ }
128
+ /** Resolve QA evidence files (test-cases / test-report / security-findings /
129
+ * performance-findings) by probing canonical + legacy paths for each gate.
130
+ * For security/perf findings, delegates to the artifact-paths resolver.
131
+ * Mutates the gate.passed / gate.detail fields in place and pushes
132
+ * violations / nextActions. Returns the updated tracker. Verbatim-move
133
+ * from `pipeline-verify-service.ts`. */
134
+ export function resolveQaEvidencePaths(gates, projectRoot, rdEvidenceDir, changeIdForResolver, rid, violations, nextActions, tracker) {
135
+ const QA_EVIDENCE_FILE = {
136
+ 'test-cases': `test-cases/${rid}.md`,
137
+ 'test-report': `test-reports/${rid}.md`,
138
+ 'security-findings': '',
139
+ 'performance-findings': ''
140
+ };
141
+ let anyEvidenceResolved = tracker.anyEvidenceResolved;
142
+ let allResolvedPathsCanonical = tracker.allResolvedPathsCanonical;
143
+ for (const gate of gates.slice(1)) {
144
+ if (gate.name === 'security-findings' || gate.name === 'performance-findings') {
145
+ const resolver = gate.name === 'security-findings' ? resolveSecurityFindingsPath : resolvePerformanceFindingsPath;
146
+ const resolved = resolver({ projectRoot, sessionId: changeIdForResolver, rid });
147
+ if (existsSync(resolved.path)) {
148
+ anyEvidenceResolved = true;
149
+ if (resolved.form === 'legacy')
150
+ allResolvedPathsCanonical = false;
151
+ gate.passed = true;
152
+ gate.detail = resolved.path;
153
+ if (resolved.form === 'legacy') {
154
+ violations.push(`QA evidence accepted in legacy form (will be rejected after next minor release): ${resolved.path} — re-run peaks workflow plan refresh to migrate`);
155
+ }
156
+ }
157
+ else {
158
+ gate.detail = `missing: ${resolved.path}`;
159
+ violations.push(`QA evidence missing: ${gate.description} (${resolved.path})`);
160
+ nextActions.push(`Create ${resolved.path} (or use the legacy non-suffixed form during the 1-minor-release back-compat window)`);
161
+ }
162
+ continue;
163
+ }
164
+ const fileName = QA_EVIDENCE_FILE[gate.name];
165
+ const canonicalQaPath = join(projectRoot, '.peaks', '_runtime', rdEvidenceDir, 'qa', fileName);
166
+ const legacyMisplacedQaPath = join(projectRoot, '.peaks', rdEvidenceDir, 'qa', fileName);
167
+ const legacyChangeAxisQaPath = join(projectRoot, '.peaks', '_runtime', 'change', rdEvidenceDir, 'qa', fileName);
168
+ let resolvedQaPath = null;
169
+ let usedLegacyQa = false;
170
+ for (const candidate of [canonicalQaPath, legacyMisplacedQaPath, legacyChangeAxisQaPath]) {
171
+ if (existsSync(candidate)) {
172
+ resolvedQaPath = candidate;
173
+ usedLegacyQa = candidate !== canonicalQaPath;
174
+ break;
175
+ }
176
+ }
177
+ if (resolvedQaPath !== null) {
178
+ anyEvidenceResolved = true;
179
+ if (usedLegacyQa)
180
+ allResolvedPathsCanonical = false;
181
+ gate.passed = true;
182
+ gate.detail = resolvedQaPath + (usedLegacyQa ? ' [DEPRECATION_LEGACY_PATH_USED]' : '');
183
+ if (usedLegacyQa) {
184
+ violations.push(`DEPRECATION_LEGACY_PATH_USED: ${resolvedQaPath} — move the file into .peaks/_runtime/${rdEvidenceDir}/qa/ (the canonical location) so subsequent runs resolve on the canonical path. The legacy \`peaks workspace migrate-change-scope\` helper was removed in v2.19.0; use \`peaks workspace migrate\` to relocate misplaced content.`);
185
+ }
186
+ }
187
+ else {
188
+ gate.detail = `missing: ${canonicalQaPath}`;
189
+ violations.push(`QA evidence missing: ${gate.description} (${fileName})`);
190
+ nextActions.push(`Create .peaks/_runtime/${rdEvidenceDir}/qa/${fileName}`);
191
+ }
192
+ }
193
+ return { anyEvidenceResolved, allResolvedPathsCanonical };
194
+ }
@@ -1,84 +1,19 @@
1
- import type { RequestType } from '../artifacts/artifact-prerequisites.js';
2
- export type PipelineGate = {
3
- name: string;
4
- description: string;
5
- passed: boolean;
6
- detail: string;
7
- /**
8
- * Slice 2026-06-13-peaks-workflow-skip: optional status that
9
- * distinguishes a gate that was BYPASSED via `peaks workflow skip`
10
- * from one that actually passed evaluation. When set, the gate
11
- * was NOT evaluated by `evaluateGate` — the user/CLI explicitly
12
- * marked it as skipped. The boolean `passed` is set to `true` so
13
- * existing consumers (which only check `passed`) treat a skipped
14
- * gate as "satisfied", but downstream consumers that need
15
- * audit-grade distinction (e.g. CI badges, dashboards) can read
16
- * `status` to tell pass / fail / skipped apart.
17
- *
18
- * - omitted (default): not set, gate was evaluated; treat as legacy.
19
- * - 'pass': gate evaluated and passed.
20
- * - 'fail': gate evaluated and failed.
21
- * - 'skipped': gate was bypassed; never evaluated.
22
- */
23
- status?: 'pass' | 'fail' | 'skipped';
24
- };
25
- export type PipelineVerification = {
26
- rid: string;
27
- sessionId: string;
28
- requestType: RequestType;
29
- complete: boolean;
30
- rdPhase: {
31
- invoked: boolean;
32
- state: string;
33
- gates: PipelineGate[];
34
- };
35
- qaPhase: {
36
- invoked: boolean;
37
- state: string;
38
- gates: PipelineGate[];
39
- };
40
- /**
41
- * Slice 002 (v2.15.0) AC-3: Gate H "feedback-promotion". Always
42
- * present (single-element array). Evaluates whether every
43
- * `metadata.type === 'feedback'` memory in `.peaks/memory/`
44
- * carries a promotion marker (comment OR sidecar). Failures
45
- * block the `complete` verdict via the `gateH` field below; the
46
- * pipeline only completes when every gate in this array passes.
47
- */
48
- feedbackPhase?: {
49
- gates: PipelineGate[];
50
- };
51
- violations: string[];
52
- nextActions: string[];
53
- /** Form of the security/performance findings artifacts Gate C accepted
54
- * (slice 025). `'suffixed'` for the new per-rid form, `'legacy'` for the
55
- * pre-slice-025 non-suffixed form, `'none'` when neither was found. */
56
- acceptedForm?: 'suffixed' | 'legacy' | 'none';
57
- /** `gateC` is the pre-computed verdict string (AC7 dogfood shape). */
58
- gateC?: 'pass' | 'fail';
59
- /**
60
- * Slice 002 (v2.15.0) AC-3: Gate H verdict string. `'pass'` when
61
- * all feedback memories are promoted; `'fail'` when at least one
62
- * unpromoted feedback memory was found.
63
- */
64
- gateH?: 'pass' | 'fail';
65
- /**
66
- * Slice 2026-06-28-code-mode-bypass-fix (defect #3): `true` when
67
- * every evidence file resolved on the canonical path
68
- * (`.peaks/_runtime/change/<sessionId>/...`). `false` when at least
69
- * one evidence file resolved via a legacy fallback (`.peaks/<sessionId>/...`
70
- * or `.peaks/_runtime/<sessionId>/...`). QA / TXT surface the value
71
- * so users know to move misplaced evidence into the canonical
72
- * location.
73
- *
74
- * Slice 2026-06-29-change-id-root-removal: the legacy
75
- * `peaks workspace migrate-change-scope` migration tool is gone;
76
- * users must now move misplaced content into the canonical
77
- * `.peaks/_runtime/change/<sessionId>/<role>/` dir manually (or via
78
- * `peaks workspace migrate`).
79
- */
80
- usedCanonicalPath?: boolean;
81
- };
1
+ /**
2
+ * peaks-workflow — pipeline verification orchestrator (slimmed per rid-006).
3
+ *
4
+ * `verifyPipeline` resolves RD / QA evidence files for a given rid and
5
+ * returns a structured `PipelineVerification` envelope. Type
6
+ * declarations live in `pipeline-verify-types.ts`; private gate
7
+ * helpers (`rdGatesForType`, `qaGatesForType`, `extractState`,
8
+ * `findRequestFile`, the `_runtime/` prefix strip, the RD/QA handoff
9
+ * state sets, and the RD/QA evidence path probes) live in
10
+ * `pipeline-verify-gate-support.ts`. The re-export shim at the
11
+ * bottom preserves the original public surface so existing import
12
+ * paths compile unchanged.
13
+ *
14
+ * File budget: ≤ 400 lines (rid-006 split).
15
+ */
16
+ import type { PipelineVerification } from './pipeline-verify-types.js';
82
17
  export declare function verifyPipeline(options: {
83
18
  projectRoot: string;
84
19
  rid: string;
@@ -88,3 +23,4 @@ export declare function verifyPipeline(options: {
88
23
  sessionId?: string;
89
24
  requestType?: string;
90
25
  }): Promise<PipelineVerification>;
26
+ export type { PipelineGate, PipelineVerification } from './pipeline-verify-types.js';