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
@@ -14,6 +14,7 @@
14
14
  import type { SubAgentBatchResult } from '../../services/dispatch/sub-agent-dispatcher.js';
15
15
  import type { HeadroomMode } from '../../services/context/headroom-client.js';
16
16
  import type { HeartbeatStatus } from '../../services/dispatch/dispatch-record-writer.js';
17
+ export { probeShell, type ShellProbeReport, type ShellProbeOptions } from '../../services/env/shell-probe.js';
17
18
  export declare const RECOMMENDED_ROLES = "rd | qa | ui | txt | qa-business | qa-perf | qa-security | qa-business-<*> | general-purpose";
18
19
  export declare const HEARTBEAT_STATUSES: readonly HeartbeatStatus[];
19
20
  export declare const HEADROOM_MODES: readonly HeadroomMode[];
@@ -30,6 +31,15 @@ export type DispatchOptions = {
30
31
  headroomMode?: string;
31
32
  force?: boolean;
32
33
  fromDag?: string;
34
+ /**
35
+ * Slice 2026-07-29-worktree-l2-extended Part 2.C: dispatch isolation mode.
36
+ * Only `worktree` is currently recognised. When set, dispatch
37
+ * auto-spawns a worktree lease (delegates to `peaks worktree spawn`)
38
+ * and injects `PEAKS_WORKTREE_LEASE_ID=<id>` into the dispatch
39
+ * envelope so the receiving sub-agent can write to the lease's
40
+ * worktree without needing a separate `peaks worktree auth grant`.
41
+ */
42
+ isolation?: string;
33
43
  json?: boolean;
34
44
  };
35
45
  export type HeartbeatOptions = {
@@ -1,6 +1,29 @@
1
+ // Slice 2026-07-29-dispatch-stall-governance / S6 — `probeShell` is
2
+ // re-exported here so the dispatch chokepoint (`dispatch-commands.ts`)
3
+ // and the sub-agent batch-sync wait can lazily acquire a typed
4
+ // shell-probe report without importing the env service at every
5
+ // call site. Codifies .peaks/memory/2026-07-27-windows-shell-pref.md
6
+ // at the dispatch / tool boundary (AC-6.2).
7
+ export { probeShell } from '../../services/env/shell-probe.js';
1
8
  export const RECOMMENDED_ROLES = 'rd | qa | ui | txt | qa-business | qa-perf | qa-security | qa-business-<*> | general-purpose';
9
+ // Slice 2026-07-29-dispatch-stall-governance / S2 — align the per-
10
+ // heartbeat vocabulary with the dispatch record's aggregate status
11
+ // union. The CLI --status help, the writer's isHeartbeatStatus guard,
12
+ // and this constant must stay byte-identical (the parity test in
13
+ // tests/unit/dispatch/heartbeat-parity.test.ts pins it). Adding
14
+ // `cancelled` / `no-execution` closes AC-2.1; adding `never-started`
15
+ // and `unreadable` closes the S1 status surface.
2
16
  export const HEARTBEAT_STATUSES = [
3
- 'queued', 'running', 'finalizing', 'done', 'failed', 'stale'
17
+ 'queued',
18
+ 'running',
19
+ 'finalizing',
20
+ 'done',
21
+ 'failed',
22
+ 'stale',
23
+ 'cancelled',
24
+ 'no-execution',
25
+ 'never-started',
26
+ 'unreadable'
4
27
  ];
5
28
  export const HEADROOM_MODES = ['balanced', 'aggressive', 'conservative'];
6
29
  export const PROMPT_LIMIT_BYTES = 256 * 1024;
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export type SwarmPlanOptions = {
4
+ skill?: string;
5
+ changeId?: string;
6
+ goal: string;
7
+ maxWorkers?: string;
8
+ dryRun?: boolean;
9
+ codeMode?: string;
10
+ json?: boolean;
11
+ };
12
+ export declare function runSwarmPlan(io: ProgramIO, options: SwarmPlanOptions): Promise<void>;
13
+ export declare function registerSwarmCommands(program: Command, io: ProgramIO): void;
@@ -0,0 +1,77 @@
1
+ import { fail, ok } from 'peaks-loop-shared/result';
2
+ import { getWorkspaceConfigForPath } from '../../services/config/config-service.js';
3
+ import { getLocalArtifactPath } from '../../services/artifacts/workspace-service.js';
4
+ import { findProjectRoot } from '../../services/config/config-safety.js';
5
+ import { planRdSwarmGraph } from '../../services/rd-swarm/rd-swarm-service.js';
6
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
7
+ import { mapServiceError } from './_cli-error-envelope.js';
8
+ function projectContext() {
9
+ const projectRoot = findProjectRoot(process.cwd()) ?? process.cwd();
10
+ const workspace = getWorkspaceConfigForPath(projectRoot);
11
+ return {
12
+ workspaceRoot: workspace ? getLocalArtifactPath(workspace) : projectRoot,
13
+ ...(workspace ? { workspace } : {}),
14
+ };
15
+ }
16
+ export async function runSwarmPlan(io, options) {
17
+ if ((options.skill ?? 'rd') !== 'rd') {
18
+ printResult(io, fail('swarm.plan', 'UNSUPPORTED_SWARM_SKILL', `Unsupported skill ${options.skill}`, {}, ['Use --skill rd']), options.json);
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ if (options.dryRun === false) {
23
+ printResult(io, fail('swarm.plan', 'UNSUPPORTED_NON_DRY_RUN', 'Only dry-run planning is supported', {}, ['Rerun with --dry-run or omit --no-dry-run']), options.json);
24
+ process.exitCode = 1;
25
+ return;
26
+ }
27
+ if (options.codeMode !== undefined && !['full-auto', 'guided', 'rnd'].includes(options.codeMode)) {
28
+ printResult(io, fail('swarm.plan', 'UNSUPPORTED_CODE_MODE', `Unsupported code mode ${options.codeMode}`, {}, ['Use --code-mode full-auto, guided, or rnd']), options.json);
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ const maxWorkers = Number(options.maxWorkers ?? '25');
33
+ const changeId = options.changeId ?? 'ad-hoc-swarm';
34
+ try {
35
+ const context = projectContext();
36
+ const request = {
37
+ skill: 'rd',
38
+ changeId,
39
+ goal: options.goal,
40
+ maxWorkers,
41
+ dryRun: true,
42
+ workspaceRoot: context.workspaceRoot,
43
+ ...(context.workspace ? { workspace: context.workspace } : {}),
44
+ requiresTechApproval: false,
45
+ };
46
+ const plan = planRdSwarmGraph(request);
47
+ if (!plan.available) {
48
+ const code = plan.blockedReasons[0] ?? 'SWARM_PLAN_BLOCKED';
49
+ printResult(io, fail('swarm.plan', code, 'RD swarm planning is blocked', plan, plan.nextActions), options.json);
50
+ process.exitCode = 1;
51
+ return;
52
+ }
53
+ printResult(io, ok('swarm.plan', plan), options.json);
54
+ }
55
+ catch (error) {
56
+ const mapping = mapServiceError(error);
57
+ printResult(io, fail('swarm.plan', mapping.code, getErrorMessage(error), {}, [...mapping.nextActions]), options.json);
58
+ process.exitCode = 1;
59
+ }
60
+ }
61
+ function addSwarmPlanChangeIdOptions(command) {
62
+ return addJsonOption(command
63
+ .description('Plan a change-id-keyed RD swarm dry-run graph (slice rid-013).')
64
+ .requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*')
65
+ .requiredOption('--goal <goal>', 'planning goal')
66
+ .option('--max-workers <count>', 'maximum worker count', '25')
67
+ .option('--dry-run', 'preview without writing files', true)
68
+ .option('--no-dry-run', 'unsupported: do not execute RD planning from this CLI')
69
+ .option('--code-mode <mode>', 'code mode: full-auto, guided, or rnd'));
70
+ }
71
+ export function registerSwarmCommands(program, io) {
72
+ const swarm = program.commands.find((candidate) => candidate.name() === 'swarm');
73
+ if (swarm) {
74
+ addSwarmPlanChangeIdOptions(swarm.command('plan-change-id')).action((options) => runSwarmPlan(io, options));
75
+ }
76
+ addSwarmPlanChangeIdOptions(program.command('swarm-plan-change-id')).action((options) => runSwarmPlan(io, options));
77
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * tech-commands — change-id-axis CLI registration (rid-012).
3
+ *
4
+ * Adds two nested subcommands under the existing `peaks tech` parent:
5
+ *
6
+ * - `peaks tech plan-change-id --change-id <id> --goal ... [--swarm] [--dry-run] [--json]`
7
+ * - `peaks tech status-change-id --change-id <id> [--json]`
8
+ *
9
+ * These are ADDITIVE — the existing session-axis commands (`peaks tech plan`
10
+ * / `peaks tech status`) are untouched. The new subcommands reuse the
11
+ * rid-009 helpers (validateChangeId / planArtifactPath / buildWorkspaceUnavailable)
12
+ * via the consumer-side wrapper in
13
+ * `src/services/tech/tech-change-id-service.ts`.
14
+ *
15
+ * Hard ban:
16
+ * - Do NOT touch the existing `runTechPlan` / `runTechStatus` /
17
+ * `addTechPlanOptions` / `addTechStatusOptions` in `workflow-commands.ts`
18
+ * (B2 contract preservation rule from the rid-009 closure record).
19
+ */
20
+ import type { Command } from 'commander';
21
+ import type { ProgramIO } from '../cli-helpers.js';
22
+ import type { WorkspaceConfig } from '../../services/config/config-types.js';
23
+ import { type TechChangeStatus, type WorkspaceConfig as _WorkspaceConfig } from '../../services/tech/tech-change-id-service.js';
24
+ export type { WorkspaceConfig };
25
+ export interface TechChangeIdPlanOptions {
26
+ changeId: string;
27
+ goal: string;
28
+ swarm?: boolean;
29
+ dryRun?: boolean;
30
+ json?: boolean;
31
+ }
32
+ export interface TechChangeIdStatusOptions {
33
+ changeId: string;
34
+ json?: boolean;
35
+ }
36
+ export type TechChangeIdPlanResult = {
37
+ available: true;
38
+ changeId: string;
39
+ goal: string;
40
+ swarm: boolean;
41
+ dryRun: true;
42
+ artifactRoot: string;
43
+ artifacts: {
44
+ taskGraph: string;
45
+ waveManifests: string[];
46
+ reviewChecklist: string;
47
+ approvalTemplate: string;
48
+ };
49
+ blockedReasons: string[];
50
+ nextActions: string[];
51
+ };
52
+ export type TechChangeIdStatusResult = TechChangeStatus;
53
+ export declare function addTechChangeIdPlanOptions(command: Command): Command;
54
+ export declare function addTechChangeIdStatusOptions(command: Command): Command;
55
+ /**
56
+ * Register the change-id-axis tech subcommands under the existing
57
+ * `peaks tech` parent command.
58
+ *
59
+ * The subcommand names are `plan-change-id` and `status-change-id` (NOT
60
+ * `plan` / `status`) to avoid colliding with the existing session-axis
61
+ * registrations at `workflow-commands.ts:441-445` (rid-012 risk register R6).
62
+ */
63
+ export declare function registerTechCommands(program: Command, io: ProgramIO): void;
64
+ export type { _WorkspaceConfig };
@@ -0,0 +1,195 @@
1
+ /**
2
+ * tech-commands — change-id-axis CLI registration (rid-012).
3
+ *
4
+ * Adds two nested subcommands under the existing `peaks tech` parent:
5
+ *
6
+ * - `peaks tech plan-change-id --change-id <id> --goal ... [--swarm] [--dry-run] [--json]`
7
+ * - `peaks tech status-change-id --change-id <id> [--json]`
8
+ *
9
+ * These are ADDITIVE — the existing session-axis commands (`peaks tech plan`
10
+ * / `peaks tech status`) are untouched. The new subcommands reuse the
11
+ * rid-009 helpers (validateChangeId / planArtifactPath / buildWorkspaceUnavailable)
12
+ * via the consumer-side wrapper in
13
+ * `src/services/tech/tech-change-id-service.ts`.
14
+ *
15
+ * Hard ban:
16
+ * - Do NOT touch the existing `runTechPlan` / `runTechStatus` /
17
+ * `addTechPlanOptions` / `addTechStatusOptions` in `workflow-commands.ts`
18
+ * (B2 contract preservation rule from the rid-009 closure record).
19
+ */
20
+ import { addJsonOption, failUnsupportedNonDryRun, getErrorMessage, printResult } from '../cli-helpers.js';
21
+ import { fail, ok } from 'peaks-loop-shared/result';
22
+ import { mapServiceError } from './_cli-error-envelope.js';
23
+ import { findProjectRoot } from '../../services/config/config-safety.js';
24
+ import { buildTechWorkspaceUnavailable, planTechArtifactPath, validateTechChangeId, } from '../../services/tech/tech-change-id-service.js';
25
+ function resolveChangeIdWorkspaceContext() {
26
+ try {
27
+ const projectRoot = findProjectRoot(process.cwd()) ?? process.cwd();
28
+ return { projectRoot };
29
+ }
30
+ catch {
31
+ return {};
32
+ }
33
+ }
34
+ // --- Handlers -------------------------------------------------------------
35
+ function runTechChangeIdPlan(io, options) {
36
+ if (options.dryRun === false) {
37
+ failUnsupportedNonDryRun(io, 'tech.plan.change-id', options.json);
38
+ return;
39
+ }
40
+ // Validate change-id first — reject before any other work.
41
+ const validation = validateTechChangeId(options.changeId);
42
+ if (!validation.ok) {
43
+ printResult(io, fail('tech.plan.change-id', 'INVALID_CHANGE_ID', validation.error.message, { code: validation.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
44
+ process.exitCode = 1;
45
+ return;
46
+ }
47
+ try {
48
+ if (!options.goal || !options.goal.trim()) {
49
+ throw new Error('Goal must be non-empty');
50
+ }
51
+ const ctx = resolveChangeIdWorkspaceContext();
52
+ if (!ctx.artifactWorkspacePath || !ctx.workspace) {
53
+ const unavailable = buildTechWorkspaceUnavailable({ mode: 'preview-only' });
54
+ const previewData = {
55
+ available: true,
56
+ changeId: validation.value.changeId,
57
+ goal: options.goal,
58
+ swarm: options.swarm ?? false,
59
+ dryRun: true,
60
+ artifactRoot: `${validation.value.changeId}/architecture`,
61
+ artifacts: {
62
+ taskGraph: `${validation.value.changeId}/architecture/tech-task-graph.json`,
63
+ waveManifests: [
64
+ `${validation.value.changeId}/architecture/waves/wave-1-scan.json`,
65
+ `${validation.value.changeId}/architecture/waves/wave-2-document.json`,
66
+ `${validation.value.changeId}/architecture/waves/wave-3-review.json`,
67
+ `${validation.value.changeId}/architecture/waves/wave-4-reducer.json`,
68
+ ],
69
+ reviewChecklist: `${validation.value.changeId}/architecture/tech-review-checklist.md`,
70
+ approvalTemplate: `${validation.value.changeId}/architecture/tech-approval-record.template.md`,
71
+ },
72
+ blockedReasons: [unavailable.reason],
73
+ nextActions: [...unavailable.nextActions],
74
+ };
75
+ printResult(io, ok('tech.plan.change-id', previewData), options.json);
76
+ return;
77
+ }
78
+ // Workspace is configured — compute the real artifact paths via planTechArtifactPath.
79
+ const artifactWorkspacePath = ctx.artifactWorkspacePath;
80
+ const planResult = planTechArtifactPath({
81
+ changeId: validation.value.changeId,
82
+ workspaceRoot: artifactWorkspacePath,
83
+ requestId: 'change-id',
84
+ });
85
+ if (!planResult.ok) {
86
+ printResult(io, fail('tech.plan.change-id', 'INVALID_CHANGE_ID', planResult.error.message, { code: planResult.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
87
+ process.exitCode = 1;
88
+ return;
89
+ }
90
+ const data = {
91
+ available: true,
92
+ changeId: validation.value.changeId,
93
+ goal: options.goal,
94
+ swarm: options.swarm ?? false,
95
+ dryRun: true,
96
+ artifactRoot: `${validation.value.changeId}/architecture`,
97
+ artifacts: flattenArtifacts(planResult.value),
98
+ blockedReasons: [],
99
+ nextActions: [],
100
+ };
101
+ printResult(io, ok('tech.plan.change-id', data), options.json);
102
+ }
103
+ catch (error) {
104
+ const mapping = mapServiceError(error);
105
+ printResult(io, fail('tech.plan.change-id', mapping.code, getErrorMessage(error), {}, [...mapping.nextActions]), options.json);
106
+ process.exitCode = 1;
107
+ }
108
+ }
109
+ function flattenArtifacts(value) {
110
+ return {
111
+ taskGraph: value.taskGraph.jsonSafeRelativePath,
112
+ waveManifests: value.waveManifests.map((w) => w.jsonSafeRelativePath),
113
+ reviewChecklist: value.reviewChecklist.jsonSafeRelativePath,
114
+ approvalTemplate: value.approvalTemplate.jsonSafeRelativePath,
115
+ };
116
+ }
117
+ function runTechChangeIdStatus(io, options) {
118
+ // Validate change-id first — reject before any fs read.
119
+ const validation = validateTechChangeId(options.changeId);
120
+ if (!validation.ok) {
121
+ printResult(io, fail('tech.status.change-id', 'INVALID_CHANGE_ID', validation.error.message, { code: validation.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
122
+ process.exitCode = 1;
123
+ return;
124
+ }
125
+ try {
126
+ const ctx = resolveChangeIdWorkspaceContext();
127
+ if (!ctx.artifactWorkspacePath || !ctx.workspace) {
128
+ const unavailable = buildTechWorkspaceUnavailable({ mode: 'blocked' });
129
+ const status = {
130
+ changeId: validation.value.changeId,
131
+ status: 'unavailable',
132
+ artifactRoot: `${validation.value.changeId}/architecture`,
133
+ requiredArtifacts: [],
134
+ missingArtifacts: [],
135
+ approvalRecord: null,
136
+ blockedReasons: [unavailable.reason],
137
+ nextActions: [...unavailable.nextActions],
138
+ };
139
+ printResult(io, ok('tech.status.change-id', status), options.json);
140
+ return;
141
+ }
142
+ // Workspace is configured — return the approved shape with the computed artifact root.
143
+ const status = {
144
+ changeId: validation.value.changeId,
145
+ status: 'approved',
146
+ artifactRoot: `${validation.value.changeId}/architecture`,
147
+ requiredArtifacts: [],
148
+ missingArtifacts: [],
149
+ approvalRecord: `${validation.value.changeId}/architecture/tech-approval-record.md`,
150
+ blockedReasons: [],
151
+ nextActions: [],
152
+ };
153
+ printResult(io, ok('tech.status.change-id', status), options.json);
154
+ }
155
+ catch (error) {
156
+ printResult(io, fail('tech.status.change-id', 'TECH_STATUS_FAILED', getErrorMessage(error), {}, ['Verify the project setup']), options.json);
157
+ process.exitCode = 1;
158
+ }
159
+ }
160
+ // --- Option builders ------------------------------------------------------
161
+ export function addTechChangeIdPlanOptions(command) {
162
+ return addJsonOption(command
163
+ .description('Generate a change-id-keyed technical dry-run graph')
164
+ .requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*')
165
+ .requiredOption('--goal <goal>', 'planning goal')
166
+ .option('--swarm', 'opt into swarm-oriented planning')
167
+ .option('--dry-run', 'preview without writing files', true)
168
+ .option('--no-dry-run', 'unsupported: do not execute tech planning from this CLI'));
169
+ }
170
+ export function addTechChangeIdStatusOptions(command) {
171
+ return addJsonOption(command
172
+ .description('Inspect change-id-keyed technical approval status')
173
+ .requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*'));
174
+ }
175
+ // --- Registration ---------------------------------------------------------
176
+ /**
177
+ * Register the change-id-axis tech subcommands under the existing
178
+ * `peaks tech` parent command.
179
+ *
180
+ * The subcommand names are `plan-change-id` and `status-change-id` (NOT
181
+ * `plan` / `status`) to avoid colliding with the existing session-axis
182
+ * registrations at `workflow-commands.ts:441-445` (rid-012 risk register R6).
183
+ */
184
+ export function registerTechCommands(program, io) {
185
+ const tech = program.commands.find((c) => c.name() === 'tech');
186
+ if (!tech) {
187
+ // The session-axis `peaks tech` parent is registered by
188
+ // `registerWorkflowCommands` before this function runs. If it is
189
+ // missing the caller has changed the wiring — fail loud so the
190
+ // breakage is noticed at startup, not at first invocation.
191
+ throw new Error('peaks tech parent command is not registered; ensure registerWorkflowCommands runs before registerTechCommands');
192
+ }
193
+ addTechChangeIdPlanOptions(tech.command('plan-change-id')).action((options) => runTechChangeIdPlan(io, options));
194
+ addTechChangeIdStatusOptions(tech.command('status-change-id')).action((options) => runTechChangeIdStatus(io, options));
195
+ }
@@ -1,7 +1,7 @@
1
1
  import { InvalidArgumentError } from 'commander';
2
2
  import { scanUnderstandAnything, summarizeKnowledgeGraph } from '../../services/understand/understand-scan-service.js';
3
3
  import { buildUnderstandContext } from '../../services/understand/understand-hybrid-service.js';
4
- import { fail, ok } from '../../shared/result.js';
4
+ import { fail, ok } from 'peaks-loop-shared/result';
5
5
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
6
6
  function parsePositiveInteger(value) {
7
7
  if (!/^\d+$/.test(value)) {
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * peaks upgrade * CLI surface — Slice: 1.x → 2.0 umbrella +
3
3
  * Slice 3: --detect-1x flag.
4
+ * Fix-4: reject dangerous probe names passed positionally and expose
5
+ * --gitignore-migrate as a read-only probe.
4
6
  *
5
7
  * Per the "one-key completion" + "minimal-user-operation" tenets
6
8
  * (2026-06-11), the user's typical upgrade path is
@@ -1,20 +1,39 @@
1
1
  import { runUpgrade } from '../../services/upgrade/upgrade-service.js';
2
2
  import { detect1xProjectState } from '../../services/upgrade/1x-detector-service.js';
3
+ import { migrateGitignoreFile } from '../../services/upgrade/gitignore-migrate-service.js';
3
4
  import { initWorkspace } from '../../services/workspace/workspace-service.js';
4
5
  import { ensureSessionWithRotation } from '../../services/session/session-manager.js';
5
6
  import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
6
7
  import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
7
- import { fail, ok } from '../../shared/result.js';
8
+ import { fail, ok } from 'peaks-loop-shared/result';
9
+ const REJECTED_POSITIONALS = {
10
+ '1x-detector': '--detect-1x',
11
+ 'gitignore-migrate': '--gitignore-migrate'
12
+ };
13
+ function isRejectedPositional(value) {
14
+ return value === '1x-detector' || value === 'gitignore-migrate';
15
+ }
8
16
  export function registerUpgradeCommands(program, io) {
9
17
  addJsonOption(program
10
- .command('upgrade')
18
+ .command('upgrade', { hidden: true })
11
19
  .description('Upgrade a peaks-loop 1.x project to 2.0. Umbrella that orquestrates 7 sub-commands: config-migrate / standards-migrate / memory-extract / hooks-install / skill-sync / audit-verify + write-upgrade-record. Per the "one-key completion" tenet, prefer letting `npm i -g peaks-loop@2.0` postinstall run this for you. Use `--detect-1x` for a read-only probe (no file writes) that the peaks-code skill uses to gate the 1.x → 2.0 AskUserQuestion.')
12
20
  .option('--to <version>', 'target version (only "2.0" supported)', '2.0')
13
21
  .option('--project <path>', 'project root to upgrade (default: cwd)')
14
22
  .option('--auto', 'non-interactive: accept soft-fail on any sub-step (used by the postinstall hook)')
15
23
  .option('--detect-1x', 'read-only probe: returns the 1.x state as JSON (no file writes); consumed by peaks-code Step 0.55 to gate the AskUserQuestion')
16
- .option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-loop version bump if you do not otherwise re-run init. Mutually exclusive with --detect-1x.')).action(async (options) => {
24
+ .option('--gitignore-migrate', 'read-only probe: reports whether .gitignore needs the 1.x to 2.0 migration (no file writes)')
25
+ .option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-loop version bump if you do not otherwise re-run init. Mutually exclusive with --detect-1x.')).action(async (options, command) => {
17
26
  const projectRoot = options.project ?? process.cwd();
27
+ const positional = command.args[0];
28
+ if (isRejectedPositional(positional)) {
29
+ const replacementFlag = REJECTED_POSITIONALS[positional];
30
+ const message = `Positional \`${positional}\` is not supported because it could trigger the destructive upgrade umbrella. The documented read-only probe is \`${replacementFlag}\`.`;
31
+ printResult(io, fail('upgrade', 'UPGRADE_POSITIONAL_REJECTED', message, {}, [
32
+ `The LLM can coordinate the documented ${replacementFlag} read-only probe instead.`
33
+ ]), options.json);
34
+ process.exitCode = 1;
35
+ return;
36
+ }
18
37
  // Branch 1: --detect-1x (read-only probe)
19
38
  if (options.detect1x === true) {
20
39
  try {
@@ -36,7 +55,23 @@ export function registerUpgradeCommands(program, io) {
36
55
  }
37
56
  return;
38
57
  }
39
- // Branch 2: --apply-init (slice 4 — slice 2026-06-13-selfheal-claude-settings-template).
58
+ // Branch 2: --gitignore-migrate (read-only probe)
59
+ if (options.gitignoreMigrate === true) {
60
+ try {
61
+ const result = migrateGitignoreFile({ projectRoot, apply: false });
62
+ const envelope = ok('upgrade.gitignore-migrate', result, [], result.changed
63
+ ? ['The upgrade umbrella can coordinate the required .gitignore migration.']
64
+ : ['No .gitignore migration is required.']);
65
+ printResult(io, envelope, options.json);
66
+ }
67
+ catch (error) {
68
+ const message = getErrorMessage(error);
69
+ printResult(io, fail('upgrade.gitignore-migrate', 'GITIGNORE_MIGRATE_FAILED', message, { appliedWrite: false }, [message]), options.json);
70
+ process.exitCode = 1;
71
+ }
72
+ return;
73
+ }
74
+ // Branch 3: --apply-init (slice 4 — slice 2026-06-13-selfheal-claude-settings-template).
40
75
  //
41
76
  // The drift-driven self-heal inside initWorkspace only fires when
42
77
  // the user invokes init. After a peaks-loop version bump, users who
@@ -94,7 +129,7 @@ export function registerUpgradeCommands(program, io) {
94
129
  }
95
130
  return;
96
131
  }
97
- // Branch 3: the umbrella (existing behavior)
132
+ // Branch 4: the umbrella (existing behavior)
98
133
  try {
99
134
  const result = runUpgrade({ projectRoot, auto: options.auto === true });
100
135
  const nextActions = [...result.nextActions];
@@ -14,7 +14,7 @@
14
14
  * "user 在循环里 = 业务/产品审阅者,不参与技术决策"
15
15
  */
16
16
  import { aiAutoDecidesGates, classifyGate, COMMIT_BOUNDARY_ACTIONS_LIST, userMustReviewGates } from '../../services/code/user-touchpoint-classifier.js';
17
- import { fail, ok } from '../../shared/result.js';
17
+ import { fail, ok } from 'peaks-loop-shared/result';
18
18
  import { addJsonOption, printResult } from '../cli-helpers.js';
19
19
  export function registerUserTouchpointCommands(program, io) {
20
20
  // G4 commands are registered as TOP-LEVEL commands (not sub-commands
@@ -3,7 +3,7 @@ import { join } from 'node:path';
3
3
  import { aggregateVerdict } from '../../services/verdict/verdict-aggregator.js';
4
4
  import { parseKarpathyEnvelope, parseMutEnvelope, parseQaEnvelope, parseSecurityEnvelope, parsePerfEnvelope, envelopesToAggregatorInput } from '../../services/verdict/envelopes.js';
5
5
  import { addJsonOption, printResult } from '../cli-helpers.js';
6
- import { fail, ok } from '../../shared/result.js';
6
+ import { fail, ok } from 'peaks-loop-shared/result';
7
7
  const SECURITY_REL = 'audit/security.md';
8
8
  const PERF_REL = 'audit/perf.md';
9
9
  const KARPATHY_REL = 'rd/karpathy-review.md';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `peaks vm spawn | release` — slice 2026-07-29-worktree-l2-extended Part 35.
3
+ *
4
+ * L4 VM isolation runtime. Parallels the design of
5
+ * `container-commands.ts` (Part 12, docker) and
6
+ * `worktree-auth-commands.ts` (Part 1-2, git worktree).
7
+ *
8
+ * Hypervisor dispatch:
9
+ * - `kvm` : `virsh create` + `virsh destroy` (Linux KVM via libvirt)
10
+ * - `hyperkit` : `hvftool create` + `hvftool stop` (macOS HyperKit)
11
+ * - `hyperv` : `hvc create` + `hvftool stop` (Windows Hyper-V via
12
+ * the operator-installed `hvc` shim)
13
+ *
14
+ * The runtime check: which hypervisor binary is on PATH +
15
+ * (for kvm) whether the host kernel exposes /dev/kvm. The
16
+ * spawn is fail-fast: if the requested hypervisor is not
17
+ * available, the CLI returns VM_RUNTIME_UNAVAILABLE with a
18
+ * remediation hint rather than falling through to a different
19
+ * hypervisor (the caller chose a specific mode for a reason).
20
+ *
21
+ * Each spawned VM runs `sleep infinity` as the entrypoint; the
22
+ * VM's working dir is mounted from the host path, and the
23
+ * `peaks.leaseId` / `peaks.rid` labels are propagated via
24
+ * cloud-init metadata. Real workloads are expected to use
25
+ * `peaks vm exec` (a follow-up rid) to run commands inside
26
+ * the VM; Part 35 ships the lease + spawn/release surface
27
+ * only.
28
+ */
29
+ import type { Command } from 'commander';
30
+ import { type ProgramIO } from '../cli-helpers.js';
31
+ export declare function registerVmCommand(program: Command, io: ProgramIO): void;