peaks-loop 4.1.1 → 4.1.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 (1066) hide show
  1. package/.claude-plugin/marketplace.json +136 -47
  2. package/CHANGELOG.md +106 -0
  3. package/README-en.md +4 -4
  4. package/README.md +25 -4
  5. package/bin/node-floor.mjs +59 -0
  6. package/bin/peaks.js +13 -0
  7. package/config/eslint/tsconfig.lint.json +2 -1
  8. package/contracts/readonly-argv-whitelist.json +211 -0
  9. package/dist/cli/cli-helpers.d.ts +0 -1
  10. package/dist/cli/cli-helpers.js +0 -1
  11. package/dist/cli/commands/_cli-error-envelope.js +0 -3
  12. package/dist/cli/commands/adapter-commands-s2a.d.ts +0 -1
  13. package/dist/cli/commands/adapter-commands.d.ts +0 -1
  14. package/dist/cli/commands/api-diff-commands.d.ts +0 -1
  15. package/dist/cli/commands/api-diff-commands.js +0 -1
  16. package/dist/cli/commands/audit-artifact-runners.d.ts +16 -0
  17. package/dist/cli/commands/audit-artifact-runners.js +170 -0
  18. package/dist/cli/commands/audit-command-shared.d.ts +97 -0
  19. package/dist/cli/commands/audit-command-shared.js +60 -0
  20. package/dist/cli/commands/audit-commands.d.ts +7 -31
  21. package/dist/cli/commands/audit-commands.js +65 -477
  22. package/dist/cli/commands/audit-goal-runners.d.ts +17 -0
  23. package/dist/cli/commands/audit-goal-runners.js +114 -0
  24. package/dist/cli/commands/audit-red-lines-runners.d.ts +11 -0
  25. package/dist/cli/commands/audit-red-lines-runners.js +43 -0
  26. package/dist/cli/commands/audit-refusal-data.d.ts +23 -0
  27. package/dist/cli/commands/audit-refusal-data.js +69 -0
  28. package/dist/cli/commands/audit-static-runners.d.ts +13 -0
  29. package/dist/cli/commands/audit-static-runners.js +139 -0
  30. package/dist/cli/commands/autonomous-swarm-commands.js +0 -1
  31. package/dist/cli/commands/await-runners.d.ts +11 -0
  32. package/dist/cli/commands/await-runners.js +148 -0
  33. package/dist/cli/commands/bee-commands.d.ts +0 -2
  34. package/dist/cli/commands/bee-commands.js +0 -2
  35. package/dist/cli/commands/best-practice-scan-command.d.ts +0 -1
  36. package/dist/cli/commands/best-practice-scan-helpers.js +0 -1
  37. package/dist/cli/commands/changeset-commands.d.ts +0 -2
  38. package/dist/cli/commands/changeset-commands.js +0 -2
  39. package/dist/cli/commands/code-auto-compact-command.d.ts +3 -0
  40. package/dist/cli/commands/code-auto-compact-command.js +124 -0
  41. package/dist/cli/commands/code-auto-compact-envelope.d.ts +22 -0
  42. package/dist/cli/commands/code-auto-compact-envelope.js +39 -0
  43. package/dist/cli/commands/code-commands.d.ts +0 -3
  44. package/dist/cli/commands/code-commands.js +0 -3
  45. package/dist/cli/commands/code-context-audit-command.d.ts +3 -0
  46. package/dist/cli/commands/code-context-audit-command.js +68 -0
  47. package/dist/cli/commands/code-context-now-command.d.ts +3 -0
  48. package/dist/cli/commands/code-context-now-command.js +124 -0
  49. package/dist/cli/commands/code-context-now-envelope.d.ts +66 -0
  50. package/dist/cli/commands/code-context-now-envelope.js +136 -0
  51. package/dist/cli/commands/code-context-now-mapping.d.ts +27 -0
  52. package/dist/cli/commands/code-context-now-mapping.js +43 -0
  53. package/dist/cli/commands/code-emit-handoff-command.d.ts +3 -0
  54. package/dist/cli/commands/code-emit-handoff-command.js +99 -0
  55. package/dist/cli/commands/code-gate-command.d.ts +0 -1
  56. package/dist/cli/commands/code-gate-command.js +0 -1
  57. package/dist/cli/commands/code-gate-step-08-command.d.ts +3 -0
  58. package/dist/cli/commands/code-gate-step-08-command.js +139 -0
  59. package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +0 -1
  60. package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +0 -1
  61. package/dist/cli/commands/code-job-shape-commands.d.ts +0 -2
  62. package/dist/cli/commands/code-job-shape-commands.js +0 -3
  63. package/dist/cli/commands/code-mode-gate-commands.d.ts +0 -2
  64. package/dist/cli/commands/code-mode-gate-commands.js +0 -3
  65. package/dist/cli/commands/code-mode-gate-should-pause-command.js +0 -4
  66. package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +0 -1
  67. package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +0 -2
  68. package/dist/cli/commands/code-mode-status-command.d.ts +0 -1
  69. package/dist/cli/commands/code-mode-status-command.js +0 -1
  70. package/dist/cli/commands/code-orchestrator-can-do.d.ts +0 -1
  71. package/dist/cli/commands/code-orchestrator-can-do.js +0 -1
  72. package/dist/cli/commands/code-post-compact-detect-command.d.ts +3 -0
  73. package/dist/cli/commands/code-post-compact-detect-command.js +50 -0
  74. package/dist/cli/commands/code-run-command.js +0 -1
  75. package/dist/cli/commands/code-runtime-commands.d.ts +9 -46
  76. package/dist/cli/commands/code-runtime-commands.js +20 -687
  77. package/dist/cli/commands/code-runtime-session.d.ts +1 -0
  78. package/dist/cli/commands/code-runtime-session.js +15 -0
  79. package/dist/cli/commands/codegraph-command-runtime.d.ts +6 -0
  80. package/dist/cli/commands/codegraph-command-runtime.js +19 -7
  81. package/dist/cli/commands/codegraph-commands.js +20 -193
  82. package/dist/cli/commands/codegraph-init-command.d.ts +8 -0
  83. package/dist/cli/commands/codegraph-init-command.js +162 -0
  84. package/dist/cli/commands/codegraph-status-command.js +5 -6
  85. package/dist/cli/commands/compact-command.d.ts +6 -3
  86. package/dist/cli/commands/compact-command.js +12 -563
  87. package/dist/cli/commands/compact-dry-run-command.d.ts +3 -0
  88. package/dist/cli/commands/compact-dry-run-command.js +87 -0
  89. package/dist/cli/commands/compact-force-command.d.ts +3 -0
  90. package/dist/cli/commands/compact-force-command.js +98 -0
  91. package/dist/cli/commands/compact-harness-window-command.d.ts +3 -0
  92. package/dist/cli/commands/compact-harness-window-command.js +174 -0
  93. package/dist/cli/commands/compact-history-command.d.ts +3 -0
  94. package/dist/cli/commands/compact-history-command.js +89 -0
  95. package/dist/cli/commands/compact-read-commands.d.ts +3 -0
  96. package/dist/cli/commands/compact-read-commands.js +123 -0
  97. package/dist/cli/commands/compact-settle-command.d.ts +3 -0
  98. package/dist/cli/commands/compact-settle-command.js +130 -0
  99. package/dist/cli/commands/compact-shared.d.ts +9 -0
  100. package/dist/cli/commands/compact-shared.js +26 -0
  101. package/dist/cli/commands/container-commands.d.ts +0 -1
  102. package/dist/cli/commands/container-commands.js +0 -1
  103. package/dist/cli/commands/context-commands.d.ts +0 -1
  104. package/dist/cli/commands/context-commands.js +0 -1
  105. package/dist/cli/commands/core/doctor-command.d.ts +0 -1
  106. package/dist/cli/commands/core/doctor-command.js +0 -9
  107. package/dist/cli/commands/core/memory-command.js +0 -1
  108. package/dist/cli/commands/core/session-command.js +0 -14
  109. package/dist/cli/commands/core/skill-command.d.ts +1 -44
  110. package/dist/cli/commands/core/skill-command.js +13 -550
  111. package/dist/cli/commands/core/skill-context-verdict.d.ts +38 -0
  112. package/dist/cli/commands/core/skill-context-verdict.js +63 -0
  113. package/dist/cli/commands/core/skill-generated-config-notice.d.ts +41 -0
  114. package/dist/cli/commands/core/skill-generated-config-notice.js +75 -0
  115. package/dist/cli/commands/core/skill-heartbeat-commands.d.ts +3 -0
  116. package/dist/cli/commands/core/skill-heartbeat-commands.js +50 -0
  117. package/dist/cli/commands/core/skill-presence-commands.d.ts +3 -0
  118. package/dist/cli/commands/core/skill-presence-commands.js +123 -0
  119. package/dist/cli/commands/core/skill-presence-housekeeping-commands.d.ts +3 -0
  120. package/dist/cli/commands/core/skill-presence-housekeeping-commands.js +165 -0
  121. package/dist/cli/commands/core/skill-registry-commands.d.ts +3 -0
  122. package/dist/cli/commands/core/skill-registry-commands.js +117 -0
  123. package/dist/cli/commands/core/skill-runbook-command.d.ts +3 -0
  124. package/dist/cli/commands/core/skill-runbook-command.js +29 -0
  125. package/dist/cli/commands/core-artifact-commands.d.ts +0 -1
  126. package/dist/cli/commands/core-artifact-commands.js +0 -1
  127. package/dist/cli/commands/cron-commands-actions.d.ts +0 -1
  128. package/dist/cli/commands/cron-commands-actions.js +0 -2
  129. package/dist/cli/commands/cron-commands-schedule.d.ts +0 -3
  130. package/dist/cli/commands/cron-commands-schedule.js +0 -1
  131. package/dist/cli/commands/cron-commands.d.ts +0 -1
  132. package/dist/cli/commands/cron-commands.js +0 -2
  133. package/dist/cli/commands/cron-scheduler-commands.d.ts +0 -1
  134. package/dist/cli/commands/cron-scheduler-commands.js +0 -1
  135. package/dist/cli/commands/cron-scheduler-persist.d.ts +0 -5
  136. package/dist/cli/commands/cron-scheduler-persist.js +0 -5
  137. package/dist/cli/commands/dashboard-summary.d.ts +0 -1
  138. package/dist/cli/commands/dispatch-command-spec.d.ts +2 -0
  139. package/dist/cli/commands/dispatch-command-spec.js +62 -0
  140. package/dist/cli/commands/dispatch-commands.d.ts +0 -1
  141. package/dist/cli/commands/dispatch-commands.js +159 -802
  142. package/dist/cli/commands/dispatch-detached-branch.d.ts +3 -0
  143. package/dist/cli/commands/dispatch-detached-branch.js +58 -0
  144. package/dist/cli/commands/dispatch-envelope.d.ts +36 -0
  145. package/dist/cli/commands/dispatch-envelope.js +104 -0
  146. package/dist/cli/commands/dispatch-from-dag.js +0 -4
  147. package/dist/cli/commands/dispatch-isolation-lease.d.ts +17 -0
  148. package/dist/cli/commands/dispatch-isolation-lease.js +149 -0
  149. package/dist/cli/commands/dispatch-preflight.d.ts +7 -0
  150. package/dist/cli/commands/dispatch-preflight.js +105 -0
  151. package/dist/cli/commands/dispatch-prompt-blocks.d.ts +10 -0
  152. package/dist/cli/commands/dispatch-prompt-blocks.js +56 -0
  153. package/dist/cli/commands/dispatch-prompt-composition.d.ts +30 -0
  154. package/dist/cli/commands/dispatch-prompt-composition.js +171 -0
  155. package/dist/cli/commands/dispatch-record-write.d.ts +24 -0
  156. package/dist/cli/commands/dispatch-record-write.js +96 -0
  157. package/dist/cli/commands/dispatch-tool-call.d.ts +15 -0
  158. package/dist/cli/commands/dispatch-tool-call.js +128 -0
  159. package/dist/cli/commands/doctor/invoke-from-code.js +0 -1
  160. package/dist/cli/commands/e2e-verify.d.ts +0 -1
  161. package/dist/cli/commands/ecc-commands.d.ts +0 -1
  162. package/dist/cli/commands/evolution-command-shared.d.ts +78 -0
  163. package/dist/cli/commands/evolution-command-shared.js +107 -0
  164. package/dist/cli/commands/evolution-commands.d.ts +11 -2
  165. package/dist/cli/commands/evolution-commands.js +19 -351
  166. package/dist/cli/commands/evolution-evaluate-command.d.ts +24 -0
  167. package/dist/cli/commands/evolution-evaluate-command.js +138 -0
  168. package/dist/cli/commands/evolution-propose-command.d.ts +23 -0
  169. package/dist/cli/commands/evolution-propose-command.js +145 -0
  170. package/dist/cli/commands/evolution-status-command.d.ts +17 -0
  171. package/dist/cli/commands/evolution-status-command.js +41 -0
  172. package/dist/cli/commands/evolution-verdict-commands.d.ts +30 -0
  173. package/dist/cli/commands/evolution-verdict-commands.js +100 -0
  174. package/dist/cli/commands/feedback-commands.d.ts +0 -1
  175. package/dist/cli/commands/feedback-commands.js +0 -2
  176. package/dist/cli/commands/finalize-accumulator.d.ts +44 -0
  177. package/dist/cli/commands/finalize-accumulator.js +55 -0
  178. package/dist/cli/commands/finalize-branches.d.ts +34 -0
  179. package/dist/cli/commands/finalize-branches.js +119 -0
  180. package/dist/cli/commands/finalize-runners.d.ts +3 -0
  181. package/dist/cli/commands/finalize-runners.js +92 -0
  182. package/dist/cli/commands/finalize-selection.d.ts +65 -0
  183. package/dist/cli/commands/finalize-selection.js +35 -0
  184. package/dist/cli/commands/fixture-commands.d.ts +0 -2
  185. package/dist/cli/commands/fresh-context-commands.d.ts +0 -1
  186. package/dist/cli/commands/gate-commands-enforce.d.ts +0 -3
  187. package/dist/cli/commands/gate-commands-enforce.js +0 -4
  188. package/dist/cli/commands/gate-commands.js +26 -10
  189. package/dist/cli/commands/governance-classify-contract-commands.d.ts +0 -3
  190. package/dist/cli/commands/governance-classify-contract-commands.js +0 -4
  191. package/dist/cli/commands/heartbeat-commands-action.js +0 -6
  192. package/dist/cli/commands/heartbeat-commands-validation.d.ts +0 -2
  193. package/dist/cli/commands/heartbeat-commands-validation.js +0 -2
  194. package/dist/cli/commands/heartbeat-commands.d.ts +0 -1
  195. package/dist/cli/commands/heartbeat-commands.js +0 -1
  196. package/dist/cli/commands/hooks-commands.js +0 -11
  197. package/dist/cli/commands/ide-commands.d.ts +0 -1
  198. package/dist/cli/commands/job-add-slice-command.d.ts +0 -2
  199. package/dist/cli/commands/job-add-slice-command.js +0 -2
  200. package/dist/cli/commands/job-checkpoint-commands.d.ts +3 -0
  201. package/dist/cli/commands/job-checkpoint-commands.js +157 -0
  202. package/dist/cli/commands/job-command-shared.d.ts +109 -0
  203. package/dist/cli/commands/job-command-shared.js +72 -0
  204. package/dist/cli/commands/job-commands.d.ts +4 -64
  205. package/dist/cli/commands/job-commands.js +42 -556
  206. package/dist/cli/commands/job-cost-check-command.d.ts +3 -0
  207. package/dist/cli/commands/job-cost-check-command.js +41 -0
  208. package/dist/cli/commands/job-init-status-commands.d.ts +3 -0
  209. package/dist/cli/commands/job-init-status-commands.js +149 -0
  210. package/dist/cli/commands/job-run-commands.d.ts +3 -0
  211. package/dist/cli/commands/job-run-commands.js +97 -0
  212. package/dist/cli/commands/job-state-root.d.ts +35 -0
  213. package/dist/cli/commands/job-state-root.js +76 -0
  214. package/dist/cli/commands/lease-metrics-commands.d.ts +0 -1
  215. package/dist/cli/commands/lease-metrics-commands.js +0 -1
  216. package/dist/cli/commands/lease-stats-commands.d.ts +0 -1
  217. package/dist/cli/commands/lease-stats-commands.js +0 -1
  218. package/dist/cli/commands/log-commands.d.ts +0 -2
  219. package/dist/cli/commands/log-commands.js +0 -3
  220. package/dist/cli/commands/loop-eval-capture-index.d.ts +4 -0
  221. package/dist/cli/commands/loop-eval-capture-index.js +44 -0
  222. package/dist/cli/commands/loop-eval-commands.d.ts +8 -5
  223. package/dist/cli/commands/loop-eval-commands.js +12 -629
  224. package/dist/cli/commands/loop-eval-eval-command.d.ts +3 -0
  225. package/dist/cli/commands/loop-eval-eval-command.js +168 -0
  226. package/dist/cli/commands/loop-eval-monotonic-command.d.ts +3 -0
  227. package/dist/cli/commands/loop-eval-monotonic-command.js +90 -0
  228. package/dist/cli/commands/loop-eval-parents.d.ts +7 -0
  229. package/dist/cli/commands/loop-eval-parents.js +20 -0
  230. package/dist/cli/commands/loop-eval-run-code.d.ts +7 -0
  231. package/dist/cli/commands/loop-eval-run-code.js +40 -0
  232. package/dist/cli/commands/loop-eval-run-command.d.ts +3 -0
  233. package/dist/cli/commands/loop-eval-run-command.js +113 -0
  234. package/dist/cli/commands/loop-eval-spec-commands.d.ts +3 -0
  235. package/dist/cli/commands/loop-eval-spec-commands.js +165 -0
  236. package/dist/cli/commands/loop-eval-spec-lint-command.d.ts +3 -0
  237. package/dist/cli/commands/loop-eval-spec-lint-command.js +42 -0
  238. package/dist/cli/commands/loop-eval-workflow-commands.d.ts +3 -0
  239. package/dist/cli/commands/loop-eval-workflow-commands.js +141 -0
  240. package/dist/cli/commands/mcp-commands.d.ts +10 -0
  241. package/dist/cli/commands/mcp-commands.js +157 -0
  242. package/dist/cli/commands/memory-commands.d.ts +0 -1
  243. package/dist/cli/commands/memory-commands.js +0 -1
  244. package/dist/cli/commands/observability-commands.d.ts +0 -6
  245. package/dist/cli/commands/observability-commands.js +0 -6
  246. package/dist/cli/commands/outer-cache-commands.js +0 -2
  247. package/dist/cli/commands/playwright-commands.d.ts +0 -1
  248. package/dist/cli/commands/playwright-commands.js +0 -1
  249. package/dist/cli/commands/polyrepo-commands.d.ts +0 -1
  250. package/dist/cli/commands/prd-commands.d.ts +0 -1
  251. package/dist/cli/commands/prd-commands.js +0 -2
  252. package/dist/cli/commands/preferences-commands.js +0 -2
  253. package/dist/cli/commands/primer-command.d.ts +0 -1
  254. package/dist/cli/commands/primer-command.js +0 -1
  255. package/dist/cli/commands/project-commands.js +0 -1
  256. package/dist/cli/commands/qa-commands.d.ts +0 -1
  257. package/dist/cli/commands/qa-commands.js +0 -2
  258. package/dist/cli/commands/release-commands.js +0 -9
  259. package/dist/cli/commands/request-command-options.d.ts +49 -0
  260. package/dist/cli/commands/request-command-options.js +1 -0
  261. package/dist/cli/commands/request-commands.d.ts +3 -10
  262. package/dist/cli/commands/request-commands.js +17 -532
  263. package/dist/cli/commands/request-format-helpers.d.ts +0 -1
  264. package/dist/cli/commands/request-format-helpers.js +0 -2
  265. package/dist/cli/commands/request-init-command.d.ts +3 -0
  266. package/dist/cli/commands/request-init-command.js +100 -0
  267. package/dist/cli/commands/request-lint-command.d.ts +3 -0
  268. package/dist/cli/commands/request-lint-command.js +50 -0
  269. package/dist/cli/commands/request-list-command.d.ts +10 -0
  270. package/dist/cli/commands/request-list-command.js +53 -0
  271. package/dist/cli/commands/request-repair-status-command.d.ts +3 -0
  272. package/dist/cli/commands/request-repair-status-command.js +61 -0
  273. package/dist/cli/commands/request-show-command.d.ts +3 -0
  274. package/dist/cli/commands/request-show-command.js +56 -0
  275. package/dist/cli/commands/request-transition-command.d.ts +3 -0
  276. package/dist/cli/commands/request-transition-command.js +122 -0
  277. package/dist/cli/commands/request-transition-failures.d.ts +8 -0
  278. package/dist/cli/commands/request-transition-failures.js +90 -0
  279. package/dist/cli/commands/request-transition-hooks.d.ts +50 -0
  280. package/dist/cli/commands/request-transition-hooks.js +115 -0
  281. package/dist/cli/commands/request-transition-preflight.d.ts +10 -0
  282. package/dist/cli/commands/request-transition-preflight.js +107 -0
  283. package/dist/cli/commands/runtime-commands.d.ts +0 -1
  284. package/dist/cli/commands/sc-commands.js +0 -1
  285. package/dist/cli/commands/scan-command-shared.d.ts +96 -0
  286. package/dist/cli/commands/scan-command-shared.js +83 -0
  287. package/dist/cli/commands/scan-commands.d.ts +3 -2
  288. package/dist/cli/commands/scan-commands.js +23 -463
  289. package/dist/cli/commands/scan-inventory-commands.d.ts +3 -0
  290. package/dist/cli/commands/scan-inventory-commands.js +96 -0
  291. package/dist/cli/commands/scan-project-commands.d.ts +3 -0
  292. package/dist/cli/commands/scan-project-commands.js +65 -0
  293. package/dist/cli/commands/scan-scope-commands.d.ts +3 -0
  294. package/dist/cli/commands/scan-scope-commands.js +149 -0
  295. package/dist/cli/commands/scan-scope-helpers.d.ts +8 -0
  296. package/dist/cli/commands/scan-scope-helpers.js +54 -0
  297. package/dist/cli/commands/scan-structural-commands.d.ts +3 -0
  298. package/dist/cli/commands/scan-structural-commands.js +113 -0
  299. package/dist/cli/commands/session-24h-mode.d.ts +0 -1
  300. package/dist/cli/commands/session-24h-mode.js +0 -2
  301. package/dist/cli/commands/session-checkpoint-command.d.ts +0 -1
  302. package/dist/cli/commands/session-checkpoint-command.js +0 -1
  303. package/dist/cli/commands/session-resume-command.d.ts +0 -1
  304. package/dist/cli/commands/session-resume-command.js +0 -1
  305. package/dist/cli/commands/shadcn-commands.js +0 -2
  306. package/dist/cli/commands/share-commands.d.ts +12 -71
  307. package/dist/cli/commands/share-commands.js +47 -569
  308. package/dist/cli/commands/share-error-hints.d.ts +14 -0
  309. package/dist/cli/commands/share-error-hints.js +38 -0
  310. package/dist/cli/commands/share-identity.d.ts +13 -0
  311. package/dist/cli/commands/share-identity.js +22 -0
  312. package/dist/cli/commands/share-record-paths.d.ts +37 -0
  313. package/dist/cli/commands/share-record-paths.js +68 -0
  314. package/dist/cli/commands/share-runners.d.ts +3 -0
  315. package/dist/cli/commands/share-runners.js +158 -0
  316. package/dist/cli/commands/shared-read-runners.d.ts +3 -0
  317. package/dist/cli/commands/shared-read-runners.js +51 -0
  318. package/dist/cli/commands/skill-search-commands.d.ts +0 -2
  319. package/dist/cli/commands/slice-check-command.d.ts +3 -0
  320. package/dist/cli/commands/slice-check-command.js +54 -0
  321. package/dist/cli/commands/slice-commands.d.ts +2 -22
  322. package/dist/cli/commands/slice-commands.js +18 -519
  323. package/dist/cli/commands/slice-decompose-artifacts.d.ts +18 -0
  324. package/dist/cli/commands/slice-decompose-artifacts.js +79 -0
  325. package/dist/cli/commands/slice-decompose-command.d.ts +3 -0
  326. package/dist/cli/commands/slice-decompose-command.js +123 -0
  327. package/dist/cli/commands/slice-integrate-commands.js +0 -1
  328. package/dist/cli/commands/slice-list-commands.d.ts +3 -0
  329. package/dist/cli/commands/slice-list-commands.js +182 -0
  330. package/dist/cli/commands/slice-pick-command.d.ts +3 -0
  331. package/dist/cli/commands/slice-pick-command.js +60 -0
  332. package/dist/cli/commands/slice-plan-command.d.ts +24 -0
  333. package/dist/cli/commands/slice-plan-command.js +111 -0
  334. package/dist/cli/commands/spill-demo-command.d.ts +0 -1
  335. package/dist/cli/commands/statusline-commands.js +0 -4
  336. package/dist/cli/commands/sub-agent/detached.js +0 -2
  337. package/dist/cli/commands/sub-agent-commands.d.ts +0 -3
  338. package/dist/cli/commands/sub-agent-shared.d.ts +0 -8
  339. package/dist/cli/commands/sub-agent-shared.js +0 -5
  340. package/dist/cli/commands/sub-agent-shutdown-commands.d.ts +0 -1
  341. package/dist/cli/commands/tech-commands.d.ts +0 -4
  342. package/dist/cli/commands/tech-commands.js +0 -4
  343. package/dist/cli/commands/vendor-detect.d.ts +0 -3
  344. package/dist/cli/commands/vendor-detect.js +0 -2
  345. package/dist/cli/commands/verdict-aggregate-command.d.ts +0 -1
  346. package/dist/cli/commands/verdict-aggregate-command.js +0 -7
  347. package/dist/cli/commands/vm-commands.d.ts +0 -1
  348. package/dist/cli/commands/vm-commands.js +5 -29
  349. package/dist/cli/commands/vm-hypervisor-probe.d.ts +27 -0
  350. package/dist/cli/commands/vm-hypervisor-probe.js +78 -0
  351. package/dist/cli/commands/vm-status-command.d.ts +3 -0
  352. package/dist/cli/commands/vm-status-command.js +50 -0
  353. package/dist/cli/commands/wave-plan-commands.d.ts +0 -1
  354. package/dist/cli/commands/web-lifecycle-commands.d.ts +0 -1
  355. package/dist/cli/commands/workflow-commands.d.ts +10 -1
  356. package/dist/cli/commands/workflow-commands.js +6 -608
  357. package/dist/cli/commands/workflow-gate-commands.d.ts +3 -0
  358. package/dist/cli/commands/workflow-gate-commands.js +116 -0
  359. package/dist/cli/commands/workflow-plan-commands-actions.js +0 -2
  360. package/dist/cli/commands/workflow-plan-commands-session.js +0 -2
  361. package/dist/cli/commands/workflow-plan-commands.d.ts +0 -1
  362. package/dist/cli/commands/workflow-plan-helpers.d.ts +48 -0
  363. package/dist/cli/commands/workflow-plan-helpers.js +103 -0
  364. package/dist/cli/commands/workflow-planning-commands.d.ts +3 -0
  365. package/dist/cli/commands/workflow-planning-commands.js +56 -0
  366. package/dist/cli/commands/workflow-swarm-actions.d.ts +7 -0
  367. package/dist/cli/commands/workflow-swarm-actions.js +109 -0
  368. package/dist/cli/commands/workflow-swarm-commands.d.ts +3 -0
  369. package/dist/cli/commands/workflow-swarm-commands.js +138 -0
  370. package/dist/cli/commands/workflow-tech-actions.d.ts +10 -0
  371. package/dist/cli/commands/workflow-tech-actions.js +150 -0
  372. package/dist/cli/commands/workspace/clean-command.d.ts +0 -1
  373. package/dist/cli/commands/workspace/clean-command.js +0 -1
  374. package/dist/cli/commands/workspace/helpers.d.ts +0 -1
  375. package/dist/cli/commands/workspace/helpers.js +0 -1
  376. package/dist/cli/commands/workspace/init-actions.d.ts +10 -0
  377. package/dist/cli/commands/workspace/init-actions.js +199 -0
  378. package/dist/cli/commands/workspace/init-codegraph-stake.d.ts +10 -0
  379. package/dist/cli/commands/workspace/init-codegraph-stake.js +54 -0
  380. package/dist/cli/commands/workspace/init-command.d.ts +8 -130
  381. package/dist/cli/commands/workspace/init-command.js +59 -640
  382. package/dist/cli/commands/workspace/init-context.d.ts +58 -0
  383. package/dist/cli/commands/workspace/init-context.js +121 -0
  384. package/dist/cli/commands/workspace/init-envelope.d.ts +3 -0
  385. package/dist/cli/commands/workspace/init-envelope.js +34 -0
  386. package/dist/cli/commands/workspace/init-failures.d.ts +3 -0
  387. package/dist/cli/commands/workspace/init-failures.js +84 -0
  388. package/dist/cli/commands/workspace/init-hooks-decision.d.ts +24 -0
  389. package/dist/cli/commands/workspace/init-hooks-decision.js +189 -0
  390. package/dist/cli/commands/workspace/init-options.d.ts +102 -0
  391. package/dist/cli/commands/workspace/init-options.js +1 -0
  392. package/dist/cli/commands/workspace/migrate-command.d.ts +0 -2
  393. package/dist/cli/commands/workspace/migrate-command.js +0 -2
  394. package/dist/cli/commands/workspace/reconcile-command.d.ts +0 -2
  395. package/dist/cli/commands/workspace/reconcile-command.js +0 -3
  396. package/dist/cli/commands/workspace-commands.d.ts +0 -2
  397. package/dist/cli/commands/workspace-commands.js +0 -4
  398. package/dist/cli/commands/worktree-auth-commands.d.ts +0 -1
  399. package/dist/cli/commands/worktree-auth-commands.js +0 -1
  400. package/dist/cli/commands/worktree-auth-grant-command.d.ts +0 -1
  401. package/dist/cli/commands/worktree-auth-grant-command.js +0 -1
  402. package/dist/cli/commands/worktree-auth-manage-commands.d.ts +0 -1
  403. package/dist/cli/commands/worktree-auth-manage-commands.js +0 -1
  404. package/dist/cli/commands/worktree-lease-commands.d.ts +10 -6
  405. package/dist/cli/commands/worktree-lease-commands.js +42 -513
  406. package/dist/cli/commands/worktree-lease-gc-command.d.ts +12 -0
  407. package/dist/cli/commands/worktree-lease-gc-command.js +117 -0
  408. package/dist/cli/commands/worktree-lease-git.d.ts +22 -0
  409. package/dist/cli/commands/worktree-lease-git.js +48 -0
  410. package/dist/cli/commands/worktree-lease-list-command.d.ts +12 -0
  411. package/dist/cli/commands/worktree-lease-list-command.js +100 -0
  412. package/dist/cli/commands/worktree-lease-load.d.ts +37 -0
  413. package/dist/cli/commands/worktree-lease-load.js +28 -0
  414. package/dist/cli/commands/worktree-lease-release-command.d.ts +13 -0
  415. package/dist/cli/commands/worktree-lease-release-command.js +105 -0
  416. package/dist/cli/commands/worktree-lease-renew-command.d.ts +11 -0
  417. package/dist/cli/commands/worktree-lease-renew-command.js +99 -0
  418. package/dist/cli/commands/worktree-lease-session.d.ts +22 -0
  419. package/dist/cli/commands/worktree-lease-session.js +29 -0
  420. package/dist/cli/commands/worktree-lease-spawn-command.d.ts +11 -0
  421. package/dist/cli/commands/worktree-lease-spawn-command.js +119 -0
  422. package/dist/cli/commands/worktree-lease-status-command.d.ts +11 -0
  423. package/dist/cli/commands/worktree-lease-status-command.js +86 -0
  424. package/dist/cli/commands/worktree-lease-store.d.ts +19 -0
  425. package/dist/cli/commands/worktree-lease-store.js +24 -0
  426. package/dist/cli/program.js +5 -7
  427. package/dist/reporters/bdd-reporter.js +0 -1
  428. package/dist/services/24h-mode/auto-engage.d.ts +0 -1
  429. package/dist/services/24h-mode/auto-engage.js +0 -1
  430. package/dist/services/24h-mode/decider.d.ts +0 -3
  431. package/dist/services/24h-mode/decider.js +0 -3
  432. package/dist/services/24h-mode/index.d.ts +0 -2
  433. package/dist/services/24h-mode/index.js +0 -2
  434. package/dist/services/24h-mode/state.d.ts +0 -1
  435. package/dist/services/24h-mode/state.js +0 -1
  436. package/dist/services/24h-mode/store.d.ts +0 -1
  437. package/dist/services/24h-mode/store.js +0 -1
  438. package/dist/services/adapter/adapter-registry.js +0 -1
  439. package/dist/services/artifacts/artifact-prerequisites.d.ts +0 -5
  440. package/dist/services/artifacts/artifact-prerequisites.js +0 -19
  441. package/dist/services/artifacts/artifact-templates.d.ts +0 -1
  442. package/dist/services/artifacts/artifact-templates.js +0 -1
  443. package/dist/services/artifacts/request-artifact-service.d.ts +0 -5
  444. package/dist/services/artifacts/request-artifact-service.js +0 -12
  445. package/dist/services/artifacts/request-artifact-state-helpers.d.ts +0 -1
  446. package/dist/services/artifacts/request-artifact-state-helpers.js +0 -1
  447. package/dist/services/audit/artifact-writer.d.ts +0 -1
  448. package/dist/services/audit/artifact-writer.js +0 -1
  449. package/dist/services/audit/decision-writer.js +3 -1
  450. package/dist/services/audit/enforcer-liveness.js +0 -1
  451. package/dist/services/audit/enforcers/active-skill-resolver.d.ts +0 -2
  452. package/dist/services/audit/enforcers/active-skill-resolver.js +0 -2
  453. package/dist/services/audit/red-line-audit-input.d.ts +11 -0
  454. package/dist/services/audit/red-line-audit-input.js +103 -0
  455. package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +0 -1
  456. package/dist/services/audit/red-line-catalog-p2-a.js +0 -9
  457. package/dist/services/audit/types.d.ts +0 -2
  458. package/dist/services/audit/types.js +0 -2
  459. package/dist/services/audit-independent/perf-audit-service.d.ts +0 -2
  460. package/dist/services/audit-independent/security-audit-service.d.ts +0 -5
  461. package/dist/services/audit-independent/security-audit-service.js +0 -2
  462. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +0 -5
  463. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +0 -5
  464. package/dist/services/best-practice/language-detector.js +0 -1
  465. package/dist/services/best-practice/output-formatter.d.ts +0 -1
  466. package/dist/services/best-practice/scan-orchestrator.d.ts +0 -1
  467. package/dist/services/capability-audit-service/types.d.ts +1 -3
  468. package/dist/services/capability-guard-runner/contracts/J08.js +2 -2
  469. package/dist/services/changeset/changeset-check-service.d.ts +0 -3
  470. package/dist/services/changeset/changeset-check-service.js +0 -3
  471. package/dist/services/classify/classify-service.d.ts +0 -1
  472. package/dist/services/classify/classify-service.js +0 -1
  473. package/dist/services/classify/classify-types.d.ts +0 -1
  474. package/dist/services/classify/classify-types.js +0 -1
  475. package/dist/services/code/auto-compact-lifecycle.d.ts +0 -11
  476. package/dist/services/code/auto-compact-lifecycle.js +0 -10
  477. package/dist/services/code/auto-compact-modes.d.ts +0 -3
  478. package/dist/services/code/auto-compact-modes.js +0 -3
  479. package/dist/services/code/auto-compact-orchestrator.d.ts +0 -9
  480. package/dist/services/code/auto-compact-orchestrator.js +0 -29
  481. package/dist/services/code/batch-heartbeat-poller.js +0 -1
  482. package/dist/services/code/compact-event-settle.js +0 -1
  483. package/dist/services/code/dag-orchestrator.d.ts +0 -1
  484. package/dist/services/code/dag-orchestrator.js +0 -1
  485. package/dist/services/code/mode-gate-types.d.ts +0 -2
  486. package/dist/services/code/mode-gate-types.js +0 -1
  487. package/dist/services/code/mode-gate.d.ts +0 -5
  488. package/dist/services/code/mode-gate.js +0 -5
  489. package/dist/services/code/orchestrator-can-do-advisories.d.ts +0 -2
  490. package/dist/services/code/orchestrator-can-do-advisories.js +0 -5
  491. package/dist/services/code/orchestrator-can-do.d.ts +0 -4
  492. package/dist/services/code/orchestrator-can-do.js +0 -3
  493. package/dist/services/code/status-line-renderer.js +0 -1
  494. package/dist/services/code-review/ecc-bridge.d.ts +0 -1
  495. package/dist/services/codegraph/codegraph-autorefresh.js +6 -4
  496. package/dist/services/codegraph/codegraph-backend-advice.d.ts +26 -0
  497. package/dist/services/codegraph/codegraph-backend-advice.js +166 -0
  498. package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +0 -24
  499. package/dist/services/codegraph/codegraph-config-repair-writer.js +32 -73
  500. package/dist/services/codegraph/codegraph-exclude-integrity.d.ts +14 -6
  501. package/dist/services/codegraph/codegraph-exclude-integrity.js +24 -14
  502. package/dist/services/codegraph/codegraph-exclude-reconciler.d.ts +9 -2
  503. package/dist/services/codegraph/codegraph-exclude-reconciler.js +87 -18
  504. package/dist/services/codegraph/codegraph-exclude-repair.d.ts +9 -61
  505. package/dist/services/codegraph/codegraph-exclude-repair.js +67 -139
  506. package/dist/services/codegraph/codegraph-foreign-removal.d.ts +21 -0
  507. package/dist/services/codegraph/codegraph-foreign-removal.js +77 -0
  508. package/dist/services/codegraph/codegraph-index-integrity.d.ts +12 -25
  509. package/dist/services/codegraph/codegraph-index-integrity.js +84 -23
  510. package/dist/services/codegraph/codegraph-preflight-service.js +15 -6
  511. package/dist/services/codegraph/codegraph-project-config.d.ts +35 -0
  512. package/dist/services/codegraph/codegraph-project-config.js +90 -0
  513. package/dist/services/codegraph/codegraph-service.d.ts +1 -2
  514. package/dist/services/codegraph/codegraph-service.js +11 -11
  515. package/dist/services/codegraph/codegraph-upstream-layout.d.ts +24 -0
  516. package/dist/services/codegraph/codegraph-upstream-layout.js +85 -0
  517. package/dist/services/comments/comment-audit.d.ts +15 -4
  518. package/dist/services/comments/comment-audit.js +25 -4
  519. package/dist/services/comments/comment-citations.d.ts +8 -2
  520. package/dist/services/comments/comment-citations.js +31 -33
  521. package/dist/services/comments/comment-hygiene.d.ts +29 -3
  522. package/dist/services/comments/comment-hygiene.js +40 -3
  523. package/dist/services/comments/comment-prune.js +52 -4
  524. package/dist/services/comments/comment-spans.d.ts +30 -0
  525. package/dist/services/comments/comment-spans.js +266 -0
  526. package/dist/services/comments/prune-apply.d.ts +22 -0
  527. package/dist/services/comments/prune-apply.js +69 -2
  528. package/dist/services/compact/decision-tables.d.ts +0 -2
  529. package/dist/services/compact/decision-tables.js +0 -2
  530. package/dist/services/compact/request-transition-hook.js +0 -2
  531. package/dist/services/compact-history/compact-history-service.d.ts +0 -2
  532. package/dist/services/compact-history/compact-history-service.js +0 -1
  533. package/dist/services/compact-statusline/compact-lifecycle-store.js +0 -2
  534. package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +0 -1
  535. package/dist/services/compact-statusline/compact-statusline-service.js +0 -4
  536. package/dist/services/config/config-rollback.js +0 -1
  537. package/dist/services/config/config-safety.d.ts +0 -1
  538. package/dist/services/config/config-safety.js +0 -1
  539. package/dist/services/config/config-service.d.ts +0 -1
  540. package/dist/services/config/config-service.js +0 -1
  541. package/dist/services/config/model-routing.d.ts +0 -3
  542. package/dist/services/config/model-routing.js +0 -5
  543. package/dist/services/container/container-lease.d.ts +0 -1
  544. package/dist/services/container/container-lease.js +0 -1
  545. package/dist/services/context/artifact-meta.js +0 -1
  546. package/dist/services/context/auto-compact-dispatcher-input.d.ts +0 -3
  547. package/dist/services/context/auto-compact-dispatcher.js +0 -14
  548. package/dist/services/context/auto-compact-reader-input.d.ts +0 -1
  549. package/dist/services/context/auto-compact-reader.d.ts +0 -2
  550. package/dist/services/context/auto-compact-reader.js +0 -7
  551. package/dist/services/context/auto-compact-types.d.ts +0 -11
  552. package/dist/services/context/auto-compact-types.js +0 -1
  553. package/dist/services/context/build-dispatch-system-prompt.d.ts +11 -29
  554. package/dist/services/context/build-dispatch-system-prompt.js +8 -27
  555. package/dist/services/context/codegraph-unavailable-block.d.ts +38 -0
  556. package/dist/services/context/codegraph-unavailable-block.js +77 -0
  557. package/dist/services/context/context-audit-hint.d.ts +0 -1
  558. package/dist/services/context/context-audit-hint.js +0 -1
  559. package/dist/services/context/context-audit.d.ts +0 -1
  560. package/dist/services/context/context-audit.js +0 -1
  561. package/dist/services/context/harness-window-config.d.ts +0 -4
  562. package/dist/services/context/harness-window-config.js +0 -4
  563. package/dist/services/context/main-session-monitor.d.ts +0 -2
  564. package/dist/services/context/main-session-monitor.js +0 -2
  565. package/dist/services/context/memory-index-reader.d.ts +0 -2
  566. package/dist/services/context/memory-index-reader.js +0 -1
  567. package/dist/services/context/memory-preflight-config.d.ts +0 -1
  568. package/dist/services/context/memory-preflight-service.d.ts +0 -1
  569. package/dist/services/context/memory-preflight-service.js +0 -3
  570. package/dist/services/context/memory-preflight-support.d.ts +0 -5
  571. package/dist/services/context/post-compact-reinjection.d.ts +0 -1
  572. package/dist/services/context/post-compact-reinjection.js +0 -1
  573. package/dist/services/context/summary-view.d.ts +0 -1
  574. package/dist/services/context/summary-view.js +0 -1
  575. package/dist/services/crystallization/crystallization-service.d.ts +5 -11
  576. package/dist/services/crystallization/crystallization-service.js +3 -11
  577. package/dist/services/crystallization/crystallization-store.d.ts +6 -6
  578. package/dist/services/dispatch/await-batch-helpers.js +0 -3
  579. package/dist/services/dispatch/await-batch.d.ts +0 -1
  580. package/dist/services/dispatch/await-batch.js +0 -4
  581. package/dist/services/dispatch/batch-counter.js +0 -1
  582. package/dist/services/dispatch/conflict-replay.d.ts +0 -1
  583. package/dist/services/dispatch/conflict-replay.js +0 -1
  584. package/dist/services/dispatch/contract-store.d.ts +0 -2
  585. package/dist/services/dispatch/contract-store.js +0 -2
  586. package/dist/services/dispatch/dispatch-record-input-types.d.ts +0 -2
  587. package/dist/services/dispatch/dispatch-record-types.d.ts +0 -10
  588. package/dist/services/dispatch/dispatch-record-upgrade-fields.js +0 -7
  589. package/dist/services/dispatch/dispatch-record-upgrade-guards.js +0 -2
  590. package/dist/services/dispatch/dispatch-record-writer.d.ts +0 -5
  591. package/dist/services/dispatch/dispatch-record-writer.js +0 -21
  592. package/dist/services/dispatch/dispatch-sub-agent.d.ts +0 -1
  593. package/dist/services/dispatch/dispatch-sub-agent.js +0 -1
  594. package/dist/services/dispatch/e2e-fixtures.js +0 -1
  595. package/dist/services/dispatch/file-overlap-wave-planner.d.ts +0 -1
  596. package/dist/services/dispatch/file-overlap-wave-planner.js +0 -1
  597. package/dist/services/dispatch/isolation-lease.d.ts +0 -2
  598. package/dist/services/dispatch/isolation-lease.js +0 -2
  599. package/dist/services/dispatch/service-shutdown.js +0 -1
  600. package/dist/services/dispatch/session-capsule.js +0 -1
  601. package/dist/services/dispatch/slice-dag-types.d.ts +0 -1
  602. package/dist/services/dispatch/slice-dag.js +0 -2
  603. package/dist/services/dispatch/stage-enum.d.ts +0 -1
  604. package/dist/services/dispatch/stage-enum.js +0 -1
  605. package/dist/services/dispatch/startup-timeout.d.ts +0 -1
  606. package/dist/services/dispatch/sub-agent-batch-await.js +0 -3
  607. package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +0 -1
  608. package/dist/services/dispatch/sub-agent-dispatcher.js +0 -2
  609. package/dist/services/dispatch/test-tool-detection.d.ts +0 -3
  610. package/dist/services/dispatch/test-tool-detection.js +0 -2
  611. package/dist/services/distribution/mcp-install-runner.d.ts +21 -0
  612. package/dist/services/distribution/mcp-install-runner.js +59 -0
  613. package/dist/services/distribution/mcp-install.d.ts +95 -0
  614. package/dist/services/distribution/mcp-install.js +179 -0
  615. package/dist/services/distribution/plugin-manifest.d.ts +97 -0
  616. package/dist/services/distribution/plugin-manifest.js +126 -0
  617. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +19 -12
  618. package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +1 -2
  619. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +0 -2
  620. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +0 -2
  621. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +0 -1
  622. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +0 -1
  623. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +0 -1
  624. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +0 -3
  625. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +0 -2
  626. package/dist/services/doctor/doctor-service/index.d.ts +0 -1
  627. package/dist/services/doctor/doctor-service/index.js +0 -1
  628. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +0 -2
  629. package/dist/services/doctor/doctor-service/plugin-registry.js +0 -2
  630. package/dist/services/doctor/doctor-service/probe-types.d.ts +0 -4
  631. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +0 -1
  632. package/dist/services/doctor/doctor-service/report/final-summary.js +0 -1
  633. package/dist/services/doctor/doctor-service/types.d.ts +0 -5
  634. package/dist/services/doctor/doctor-service/types.js +0 -1
  635. package/dist/services/doctor/doctor-service.d.ts +0 -1
  636. package/dist/services/doctor/doctor-service.js +0 -2
  637. package/dist/services/env/shell-probe.js +0 -1
  638. package/dist/services/evidence/evidence-generator.js +0 -8
  639. package/dist/services/evolution/evolution-constraints.d.ts +0 -2
  640. package/dist/services/evolution/evolution-constraints.js +0 -2
  641. package/dist/services/evolution/evolution-service.d.ts +2 -12
  642. package/dist/services/evolution/evolution-service.js +0 -9
  643. package/dist/services/evolution/evolution-store.d.ts +6 -8
  644. package/dist/services/evolution/evolution-store.js +1 -3
  645. package/dist/services/evolution/evolution-types.d.ts +0 -2
  646. package/dist/services/evolution/evolution-types.js +0 -6
  647. package/dist/services/evolution/independent-evaluator-runner.d.ts +0 -3
  648. package/dist/services/evolution/independent-evaluator-runner.js +0 -1
  649. package/dist/services/evolution/regression-skeptic-runner.d.ts +0 -1
  650. package/dist/services/feedback/feedback-promotion-service.d.ts +0 -8
  651. package/dist/services/feedback/feedback-promotion-service.js +0 -10
  652. package/dist/services/feedback/promotion-artifact-evidence.d.ts +0 -1
  653. package/dist/services/feedback/promotion-artifact-evidence.js +0 -1
  654. package/dist/services/final-review/final-review-evidence-budget.d.ts +0 -3
  655. package/dist/services/final-review/final-review-evidence-budget.js +0 -5
  656. package/dist/services/final-review/final-review-evidence-sources.d.ts +0 -1
  657. package/dist/services/final-review/final-review-evidence-sources.js +0 -1
  658. package/dist/services/final-review/final-review-output-budget.d.ts +0 -1
  659. package/dist/services/final-review/final-review-output-budget.js +0 -3
  660. package/dist/services/final-review/final-review-service.d.ts +0 -1
  661. package/dist/services/final-review/final-review-service.js +0 -1
  662. package/dist/services/fixture/fixture-capture-service.js +0 -1
  663. package/dist/services/fixture/fixture-sanitize-service.d.ts +0 -3
  664. package/dist/services/fixture/fixture-sanitize-service.js +0 -3
  665. package/dist/services/fresh-context/config.js +0 -1
  666. package/dist/services/fresh-context/fresh-context-block.js +0 -1
  667. package/dist/services/fresh-context/trigger-scan.d.ts +0 -1
  668. package/dist/services/fresh-context/trigger-scan.js +0 -1
  669. package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +0 -1
  670. package/dist/services/fuzzy-matching/fzf-pick-service.js +0 -1
  671. package/dist/services/handoff/handoff-parser.d.ts +0 -1
  672. package/dist/services/handoff/handoff-parser.js +0 -1
  673. package/dist/services/handoff/handoff-types.d.ts +0 -1
  674. package/dist/services/handoff/handoff-types.js +0 -1
  675. package/dist/services/handoff/handoff-writer.d.ts +0 -1
  676. package/dist/services/handoff/handoff-writer.js +0 -1
  677. package/dist/services/hooks/auto-compact-hook-install.d.ts +0 -1
  678. package/dist/services/hooks/auto-compact-hook-install.js +0 -1
  679. package/dist/services/hooks/mcp-surface-gate.d.ts +19 -0
  680. package/dist/services/hooks/mcp-surface-gate.js +87 -0
  681. package/dist/services/hooks/output.d.ts +0 -1
  682. package/dist/services/hooks/output.js +0 -1
  683. package/dist/services/hooks/pre-tool-code-gate.d.ts +0 -1
  684. package/dist/services/hooks/pre-tool-code-gate.js +0 -1
  685. package/dist/services/hooks/presence-marker-detector.js +0 -1
  686. package/dist/services/hooks/worktree-authorization-gate.d.ts +0 -3
  687. package/dist/services/hooks/worktree-authorization-gate.js +0 -1
  688. package/dist/services/ide/adapters/claude-code-adapter.d.ts +4 -40
  689. package/dist/services/ide/adapters/claude-code-adapter.js +48 -182
  690. package/dist/services/ide/adapters/claude-code-local-state.d.ts +28 -0
  691. package/dist/services/ide/adapters/claude-code-local-state.js +112 -0
  692. package/dist/services/ide/adapters/claude-code-model-window.d.ts +37 -0
  693. package/dist/services/ide/adapters/claude-code-model-window.js +113 -0
  694. package/dist/services/ide/adapters/qoder-adapter.d.ts +0 -3
  695. package/dist/services/ide/adapters/qoder-adapter.js +0 -5
  696. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +0 -2
  697. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +0 -2
  698. package/dist/services/ide/adapters/trae-adapter.d.ts +0 -3
  699. package/dist/services/ide/adapters/trae-adapter.js +3 -6
  700. package/dist/services/ide/adapters/zcode-adapter.js +0 -2
  701. package/dist/services/ide/current-model-detector.js +0 -1
  702. package/dist/services/ide/hook-protocol.d.ts +0 -2
  703. package/dist/services/ide/hook-protocol.js +0 -2
  704. package/dist/services/ide/ide-compact-types.d.ts +0 -7
  705. package/dist/services/ide/ide-mcp-install-types.d.ts +78 -0
  706. package/dist/services/ide/ide-mcp-install-types.js +104 -0
  707. package/dist/services/ide/ide-types.d.ts +45 -13
  708. package/dist/services/ide/mcp-tool-matcher.d.ts +34 -0
  709. package/dist/services/ide/mcp-tool-matcher.js +84 -0
  710. package/dist/services/ide/resource-profile.d.ts +0 -1
  711. package/dist/services/job/job-commit-verification.d.ts +0 -2
  712. package/dist/services/job/job-commit-verification.js +0 -2
  713. package/dist/services/job/job-orchestrator.d.ts +0 -1
  714. package/dist/services/job/job-orchestrator.js +0 -1
  715. package/dist/services/job/job-progress-store.d.ts +0 -2
  716. package/dist/services/job/job-progress-store.js +0 -3
  717. package/dist/services/job/job-types.js +0 -1
  718. package/dist/services/job-snapshot/snapshot.js +0 -1
  719. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +0 -1
  720. package/dist/services/legacy/legacy-detector.js +0 -1
  721. package/dist/services/lint/npx-resolver.js +7 -0
  722. package/dist/services/log/log-commands-service.d.ts +0 -2
  723. package/dist/services/log/log-commands-service.js +0 -2
  724. package/dist/services/log/logger.d.ts +0 -1
  725. package/dist/services/log/logger.js +0 -1
  726. package/dist/services/log/redact.d.ts +0 -1
  727. package/dist/services/log/redact.js +0 -1
  728. package/dist/services/log/retention.d.ts +0 -1
  729. package/dist/services/log/retention.js +0 -1
  730. package/dist/services/loop/loop-bee-relation-service.d.ts +3 -3
  731. package/dist/services/loop/loop-bee-relation-service.js +14 -13
  732. package/dist/services/loop/loop-bee-relation-store.d.ts +9 -10
  733. package/dist/services/loop/loop-bee-relation-store.js +1 -2
  734. package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
  735. package/dist/services/loop/loop-bee-relation-types.js +1 -1
  736. package/dist/services/loop/loop-release-service.d.ts +3 -3
  737. package/dist/services/loop/loop-release-service.js +1 -1
  738. package/dist/services/loop/loop-release-store.d.ts +6 -7
  739. package/dist/services/loop/loop-release-store.js +0 -1
  740. package/dist/services/loop/monotonic-guard.d.ts +0 -1
  741. package/dist/services/loop/monotonic-guard.js +0 -1
  742. package/dist/services/mcp/cli-executor.d.ts +36 -0
  743. package/dist/services/mcp/cli-executor.js +97 -0
  744. package/dist/services/mcp/json-rpc.d.ts +81 -0
  745. package/dist/services/mcp/json-rpc.js +116 -0
  746. package/dist/services/mcp/memory-tool.d.ts +3 -0
  747. package/dist/services/mcp/memory-tool.js +62 -0
  748. package/dist/services/mcp/server-main.d.ts +1 -0
  749. package/dist/services/mcp/server-main.js +66 -0
  750. package/dist/services/mcp/server.d.ts +22 -0
  751. package/dist/services/mcp/server.js +152 -0
  752. package/dist/services/mcp/surface.d.ts +62 -0
  753. package/dist/services/mcp/surface.js +198 -0
  754. package/dist/services/mcp/tool-core.d.ts +42 -0
  755. package/dist/services/mcp/tool-core.js +137 -0
  756. package/dist/services/mcp/tools.d.ts +13 -0
  757. package/dist/services/mcp/tools.js +58 -0
  758. package/dist/services/memory/memory-ingest-service.js +0 -1
  759. package/dist/services/memory/project-context-service.d.ts +0 -1
  760. package/dist/services/memory/project-context-service.js +0 -1
  761. package/dist/services/memory/project-memory-service/index/reindex.d.ts +0 -2
  762. package/dist/services/memory/project-memory-service/index/reindex.js +0 -1
  763. package/dist/services/memory/project-memory-service/index/search.d.ts +0 -1
  764. package/dist/services/memory/project-memory-service/index/search.js +0 -1
  765. package/dist/services/memory/project-memory-service/memory-kinds.d.ts +0 -1
  766. package/dist/services/memory/project-memory-service/memory-kinds.js +0 -1
  767. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +0 -1
  768. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +0 -1
  769. package/dist/services/memory/project-memory-service.js +0 -1
  770. package/dist/services/mode/mode-enforcement.js +0 -1
  771. package/dist/services/mode/mode-status-service.d.ts +0 -2
  772. package/dist/services/mode/mode-status-service.js +0 -2
  773. package/dist/services/observability/aggregation.d.ts +0 -4
  774. package/dist/services/observability/aggregation.js +0 -6
  775. package/dist/services/observability/observability-schema.js +0 -1
  776. package/dist/services/observability/observability-service.d.ts +0 -5
  777. package/dist/services/observability/observability-service.js +0 -4
  778. package/dist/services/observability/report-formatter.d.ts +0 -2
  779. package/dist/services/observability/report-formatter.js +0 -2
  780. package/dist/services/openspec/artifact-boundary.d.ts +0 -4
  781. package/dist/services/openspec/artifact-boundary.js +0 -4
  782. package/dist/services/openspec/coverage-evidence-reader.d.ts +0 -1
  783. package/dist/services/openspec/coverage-evidence-reader.js +0 -1
  784. package/dist/services/polyrepo/polyrepo-dispatcher.js +0 -1
  785. package/dist/services/polyrepo/polyrepo-scanner.js +0 -1
  786. package/dist/services/polyrepo/polyrepo-service.js +0 -1
  787. package/dist/services/polyrepo/polyrepo-types.d.ts +0 -1
  788. package/dist/services/prd/best-practice-auto-trigger.d.ts +0 -2
  789. package/dist/services/prd/best-practice-auto-trigger.js +0 -2
  790. package/dist/services/prd/gate-evidence-derivation.d.ts +0 -4
  791. package/dist/services/prd/gate-evidence-derivation.js +0 -5
  792. package/dist/services/prd/handoff-auto-regen.js +0 -5
  793. package/dist/services/prd/handoff-frontmatter-shape.d.ts +0 -2
  794. package/dist/services/prd/handoff-frontmatter-shape.js +0 -2
  795. package/dist/services/prd/handoff-frontmatter.d.ts +0 -1
  796. package/dist/services/prd/handoff-frontmatter.js +0 -2
  797. package/dist/services/prd/handoff-gate-evidence.d.ts +0 -1
  798. package/dist/services/prd/handoff-gate-evidence.js +0 -4
  799. package/dist/services/prd/handoff-path-resolution.d.ts +0 -7
  800. package/dist/services/prd/handoff-path-resolution.js +0 -10
  801. package/dist/services/prd/handoff-service.d.ts +0 -2
  802. package/dist/services/prd/handoff-service.js +0 -2
  803. package/dist/services/prd/handoff-types.d.ts +0 -2
  804. package/dist/services/prd/handoff-types.js +0 -1
  805. package/dist/services/prd/project-scan-bootstrap-service.d.ts +0 -1
  806. package/dist/services/prd/project-scan-bootstrap-service.js +0 -4
  807. package/dist/services/prd/project-scan-types.d.ts +0 -1
  808. package/dist/services/prd/project-scan-types.js +0 -1
  809. package/dist/services/preferences/preferences-service.d.ts +0 -1
  810. package/dist/services/preferences/preferences-service.js +0 -5
  811. package/dist/services/preferences/preferences-types.d.ts +0 -14
  812. package/dist/services/preferences/preferences-types.js +0 -4
  813. package/dist/services/progress/progress-service.js +0 -1
  814. package/dist/services/qa/bdd-test-style-verifier.d.ts +0 -1
  815. package/dist/services/qa/bdd-test-style-verifier.js +0 -1
  816. package/dist/services/qa/browser-event-logger.d.ts +0 -1
  817. package/dist/services/qa/browser-event-logger.js +0 -1
  818. package/dist/services/qa/browser-restart-detector.d.ts +0 -1
  819. package/dist/services/qa/browser-restart-detector.js +0 -1
  820. package/dist/services/qa/browser-reuse-hint.d.ts +0 -1
  821. package/dist/services/qa/browser-reuse-hint.js +0 -1
  822. package/dist/services/qa/qa-business-review-state.js +0 -2
  823. package/dist/services/qa/screenshot-archive-service.d.ts +0 -1
  824. package/dist/services/qa/screenshot-archive-service.js +0 -1
  825. package/dist/services/rd/impl.js +0 -1
  826. package/dist/services/rd/rd-service.d.ts +0 -5
  827. package/dist/services/rd/rd-service.js +0 -5
  828. package/dist/services/rd/reviewer-dispatch-policy.d.ts +0 -4
  829. package/dist/services/rd/reviewer-dispatch-policy.js +0 -4
  830. package/dist/services/rd/standards-diagnostic.js +0 -1
  831. package/dist/services/rd/tactical-stage.js +0 -1
  832. package/dist/services/rd-swarm/rd-swarm-types.d.ts +0 -1
  833. package/dist/services/rd-swarm/rd-swarm-types.js +0 -1
  834. package/dist/services/readonly-surface/argv-guard.d.ts +32 -0
  835. package/dist/services/readonly-surface/argv-guard.js +164 -0
  836. package/dist/services/readonly-surface/readonly-whitelist.d.ts +147 -0
  837. package/dist/services/readonly-surface/readonly-whitelist.js +107 -0
  838. package/dist/services/readonly-surface/whitelist-generator.d.ts +64 -0
  839. package/dist/services/readonly-surface/whitelist-generator.js +212 -0
  840. package/dist/services/recommendations/installed-capability-detector.d.ts +0 -1
  841. package/dist/services/recommendations/installed-capability-detector.js +0 -1
  842. package/dist/services/release/version-precheck-service.d.ts +0 -2
  843. package/dist/services/release/version-precheck-service.js +0 -3
  844. package/dist/services/retrospective/retrospective-index.d.ts +0 -1
  845. package/dist/services/retrospective/retrospective-index.js +0 -1
  846. package/dist/services/retrospective/retrospective-show.d.ts +0 -1
  847. package/dist/services/retrospective/retrospective-show.js +0 -1
  848. package/dist/services/reviewer/model-family.js +0 -1
  849. package/dist/services/reviewer/reviewer-config.js +0 -1
  850. package/dist/services/reviewer/reviewer-service.d.ts +0 -1
  851. package/dist/services/reviewer/reviewer-service.js +0 -3
  852. package/dist/services/reviewer/selection-strategies.js +0 -1
  853. package/dist/services/runtime/runtime-detector.js +0 -1
  854. package/dist/services/runtime/runtime-service.d.ts +0 -2
  855. package/dist/services/runtime/vendor-adapter.d.ts +0 -7
  856. package/dist/services/runtime/vendors/claude-code.js +0 -1
  857. package/dist/services/runtime/vendors/codex.js +0 -1
  858. package/dist/services/runtime/vendors/copilot.js +0 -1
  859. package/dist/services/sc/sc-service.js +0 -6
  860. package/dist/services/scan/acceptance-coverage-service.js +0 -2
  861. package/dist/services/scan/api-diff-recorded.d.ts +0 -1
  862. package/dist/services/scan/api-diff-recorded.js +0 -1
  863. package/dist/services/scan/api-diff-service.d.ts +0 -1
  864. package/dist/services/scan/api-diff-service.js +0 -1
  865. package/dist/services/scan/api-diff-types.d.ts +0 -1
  866. package/dist/services/scan/api-diff-types.js +0 -1
  867. package/dist/services/scan/archetype-service.js +0 -1
  868. package/dist/services/scan/file-size-policy.d.ts +0 -1
  869. package/dist/services/scan/file-size-policy.js +0 -5
  870. package/dist/services/scan/file-size-scan.d.ts +0 -1
  871. package/dist/services/security/safe-settings-path.js +0 -1
  872. package/dist/services/session/binding-store.d.ts +0 -4
  873. package/dist/services/session/binding-store.js +0 -7
  874. package/dist/services/session/caller-binding-service.d.ts +0 -6
  875. package/dist/services/session/caller-binding-service.js +0 -4
  876. package/dist/services/session/caller-id-types.d.ts +0 -3
  877. package/dist/services/session/caller-id-types.js +0 -2
  878. package/dist/services/session/getSessionDir.js +0 -1
  879. package/dist/services/session/index.js +0 -1
  880. package/dist/services/session/platform-fallbacks.d.ts +0 -3
  881. package/dist/services/session/platform-fallbacks.js +0 -3
  882. package/dist/services/session/resolve-caller-id.d.ts +0 -2
  883. package/dist/services/session/resolve-caller-id.js +0 -2
  884. package/dist/services/session/session-binding-bridge.d.ts +0 -2
  885. package/dist/services/session/session-binding-bridge.js +0 -15
  886. package/dist/services/session/session-checkpoint-service.d.ts +0 -1
  887. package/dist/services/session/session-checkpoint-service.js +0 -1
  888. package/dist/services/session/session-manager.d.ts +0 -8
  889. package/dist/services/session/session-manager.js +0 -19
  890. package/dist/services/session/session-resume-service.d.ts +0 -1
  891. package/dist/services/session/session-resume-service.js +0 -1
  892. package/dist/services/share/bundle-reader.d.ts +2 -5
  893. package/dist/services/share/bundle-reader.js +6 -8
  894. package/dist/services/share/bundle-writer.d.ts +2 -2
  895. package/dist/services/skill/resume-detector.js +0 -3
  896. package/dist/services/skill/skill-scheduler.d.ts +0 -1
  897. package/dist/services/skill/skill-scheduler.js +0 -1
  898. package/dist/services/skill/skill-search-service.d.ts +0 -2
  899. package/dist/services/skill/skill-search-service.js +0 -2
  900. package/dist/services/skillhub/release-diff.d.ts +2 -2
  901. package/dist/services/skillhub/release-export.d.ts +2 -2
  902. package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
  903. package/dist/services/skillhub/release-import.d.ts +2 -2
  904. package/dist/services/skillhub/release-import.js +2 -1
  905. package/dist/services/skillhub/release-retain.d.ts +2 -2
  906. package/dist/services/skillhub/release-retain.js +2 -1
  907. package/dist/services/skillhub/sqlite-store.d.ts +3 -3
  908. package/dist/services/skillhub/sqlite-store.js +4 -5
  909. package/dist/services/skills/hooks-codegate-superpowers.d.ts +1 -3
  910. package/dist/services/skills/hooks-codegate-superpowers.js +26 -14
  911. package/dist/services/skills/hooks-settings-service.d.ts +0 -2
  912. package/dist/services/skills/hooks-settings-service.js +10 -8
  913. package/dist/services/skills/presence-lease-service.d.ts +0 -1
  914. package/dist/services/skills/presence-lease-service.js +0 -1
  915. package/dist/services/skills/session-start-hook-constants.d.ts +0 -4
  916. package/dist/services/skills/session-start-hook-constants.js +0 -4
  917. package/dist/services/skills/skill-presence-service.d.ts +0 -8
  918. package/dist/services/skills/skill-presence-service.js +0 -13
  919. package/dist/services/skills/skill-statusline-model.d.ts +0 -6
  920. package/dist/services/skills/skill-statusline-model.js +1 -4
  921. package/dist/services/skills/skill-statusline-renderer.d.ts +0 -1
  922. package/dist/services/skills/skill-statusline-renderer.js +0 -12
  923. package/dist/services/skills/skill-statusline-service.js +0 -6
  924. package/dist/services/skills/skill-statusline-sid-suffix.d.ts +0 -2
  925. package/dist/services/skills/skill-statusline-sid-suffix.js +0 -2
  926. package/dist/services/skills/statusline-palette.d.ts +0 -2
  927. package/dist/services/skills/statusline-palette.js +0 -3
  928. package/dist/services/slice/slice-archive-service.js +0 -1
  929. package/dist/services/slice/slice-benchmark-service.d.ts +0 -1
  930. package/dist/services/slice/slice-benchmark-service.js +0 -1
  931. package/dist/services/slice/slice-check-service.js +0 -6
  932. package/dist/services/slice/slice-check-types.d.ts +0 -1
  933. package/dist/services/slice/slice-pick-service.d.ts +0 -1
  934. package/dist/services/slice/slice-pick-service.js +0 -1
  935. package/dist/services/slice/slice-review-state.js +0 -2
  936. package/dist/services/sqlite/sqlite-driver.d.ts +118 -0
  937. package/dist/services/sqlite/sqlite-driver.js +159 -0
  938. package/dist/services/standards/ide-aware-standards-service.d.ts +0 -2
  939. package/dist/services/standards/ide-aware-standards-service.js +0 -1
  940. package/dist/services/standards/loop-engineering-readiness-lint.d.ts +0 -1
  941. package/dist/services/standards/loop-engineering-readiness-lint.js +0 -1
  942. package/dist/services/standards/migrate-claude-rules-service.js +0 -3
  943. package/dist/services/standards/migrate-service.d.ts +0 -1
  944. package/dist/services/standards/migrate-service.js +0 -1
  945. package/dist/services/standards/missing-standards-detector.d.ts +0 -2
  946. package/dist/services/standards/missing-standards-detector.js +0 -3
  947. package/dist/services/standards/project-standards-service.d.ts +0 -1
  948. package/dist/services/standards/project-standards-service.js +0 -1
  949. package/dist/services/standards/standards-render.d.ts +0 -1
  950. package/dist/services/standards/standards-render.js +0 -1
  951. package/dist/services/standards/ui-library-dispatch-block.d.ts +0 -1
  952. package/dist/services/standards/ui-library-dispatch-block.js +0 -1
  953. package/dist/services/tech/tech-change-id-service.d.ts +0 -7
  954. package/dist/services/tech/tech-change-id-service.js +0 -7
  955. package/dist/services/tech/tech-service.js +0 -5
  956. package/dist/services/verdict/envelope-parsers.d.ts +0 -2
  957. package/dist/services/verdict/envelope-parsers.js +0 -2
  958. package/dist/services/verdict/envelopes.d.ts +0 -1
  959. package/dist/services/vm/vm-lease.js +0 -1
  960. package/dist/services/web/aria-node.d.ts +0 -1
  961. package/dist/services/web/bounded-output.d.ts +0 -1
  962. package/dist/services/web/bounded-output.js +0 -1
  963. package/dist/services/web/browser-acquire.js +0 -1
  964. package/dist/services/web/browser-cache-probe.js +0 -1
  965. package/dist/services/web/browser-session-manager.js +0 -1
  966. package/dist/services/web/daemon-entry.js +0 -1
  967. package/dist/services/web/daemon-registry.js +0 -1
  968. package/dist/services/web/daemon-supervisor.d.ts +4 -3
  969. package/dist/services/web/daemon-supervisor.js +4 -4
  970. package/dist/services/web/playwright-loader.js +0 -1
  971. package/dist/services/web/playwright-types.d.ts +0 -1
  972. package/dist/services/web/snapshot-pruner.js +0 -1
  973. package/dist/services/web/untrusted-envelope.d.ts +0 -1
  974. package/dist/services/web/web-artifact-paths.js +0 -1
  975. package/dist/services/web/web-client.d.ts +0 -1
  976. package/dist/services/web/web-daemon-service.js +0 -1
  977. package/dist/services/web/web-fallback.d.ts +0 -1
  978. package/dist/services/web/web-fallback.js +0 -1
  979. package/dist/services/web/web-install-service.js +0 -1
  980. package/dist/services/web/web-login-profile.js +0 -1
  981. package/dist/services/web/web-protocol.d.ts +0 -1
  982. package/dist/services/web/web-protocol.js +0 -1
  983. package/dist/services/web/web-status-report.js +0 -1
  984. package/dist/services/workflow/artifact-paths.js +0 -3
  985. package/dist/services/workflow/autonomous-resume-writer.js +0 -2
  986. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +0 -5
  987. package/dist/services/workflow/pipeline-verify-gate-support.js +0 -11
  988. package/dist/services/workflow/pipeline-verify-service.d.ts +0 -2
  989. package/dist/services/workflow/pipeline-verify-service.js +0 -15
  990. package/dist/services/workflow/pipeline-verify-types.d.ts +0 -10
  991. package/dist/services/workflow/pipeline-verify-types.js +0 -2
  992. package/dist/services/workflow/plan-reader.d.ts +0 -1
  993. package/dist/services/workflow/plan-reader.js +0 -5
  994. package/dist/services/workflow/plan-refresher.js +0 -2
  995. package/dist/services/workflow/plan-trigger-detector.d.ts +0 -2
  996. package/dist/services/workflow/plan-trigger-detector.js +0 -3
  997. package/dist/services/workflow/workflow-autonomous-resume-helpers.js +0 -5
  998. package/dist/services/workflow/workflow-autonomous-service.js +0 -2
  999. package/dist/services/workflow/workflow-autonomous-types.d.ts +0 -2
  1000. package/dist/services/workflow/workflow-autonomous-types.js +0 -2
  1001. package/dist/services/workflow/workflow-graph-types.d.ts +0 -1
  1002. package/dist/services/workflow/workflow-graph-types.js +0 -1
  1003. package/dist/services/workflow/workflow-router-service.js +0 -4
  1004. package/dist/services/workflow/workflow-skip-service.d.ts +0 -1
  1005. package/dist/services/workflow/workflow-skip-service.js +0 -1
  1006. package/dist/services/workflow/workflow-spec-lint.d.ts +0 -2
  1007. package/dist/services/workflow/workflow-spec-lint.js +0 -2
  1008. package/dist/services/workflow/workflow-spec-types.d.ts +0 -1
  1009. package/dist/services/workflow/workflow-spec-types.js +0 -1
  1010. package/dist/services/workflow/workflow-spec-yaml.d.ts +0 -2
  1011. package/dist/services/workflow/workflow-spec-yaml.js +0 -2
  1012. package/dist/services/workflow/workflow-spec.js +0 -1
  1013. package/dist/services/workflow/workflow-state-store.js +0 -1
  1014. package/dist/services/workspace/claude-settings-template.d.ts +0 -4
  1015. package/dist/services/workspace/claude-settings-template.js +0 -4
  1016. package/dist/services/workspace/migrate-1-4-1-service.d.ts +0 -1
  1017. package/dist/services/workspace/migrate-1-4-1-service.js +0 -1
  1018. package/dist/services/workspace/migrate-service.js +0 -8
  1019. package/dist/services/workspace/migrate-types.d.ts +0 -4
  1020. package/dist/services/workspace/migrate-types.js +0 -1
  1021. package/dist/services/workspace/reconcile-migrate.d.ts +0 -3
  1022. package/dist/services/workspace/reconcile-migrate.js +0 -5
  1023. package/dist/services/workspace/reconcile-service.d.ts +0 -3
  1024. package/dist/services/workspace/reconcile-service.js +0 -7
  1025. package/dist/services/workspace/reconcile-types.d.ts +0 -5
  1026. package/dist/services/workspace/sid-naming-guard.d.ts +0 -1
  1027. package/dist/services/workspace/sid-naming-guard.js +0 -1
  1028. package/dist/services/workspace/templates/project-scan/index.d.ts +0 -3
  1029. package/dist/services/workspace/templates/project-scan/index.js +0 -3
  1030. package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +0 -1
  1031. package/dist/services/workspace/workspace-claude-settings-materializer.js +0 -4
  1032. package/dist/services/workspace/workspace-service.d.ts +0 -7
  1033. package/dist/services/workspace/workspace-service.js +0 -16
  1034. package/dist/services/worktree/playwright-profile.js +0 -1
  1035. package/dist/services/worktree/worktree-lease-types.d.ts +0 -1
  1036. package/dist/services/worktree/worktree-lease-types.js +0 -1
  1037. package/dist/services/worktree/worktree-lease.d.ts +0 -2
  1038. package/dist/services/worktree/worktree-lease.js +0 -2
  1039. package/dist/shared/format-md-compact.d.ts +0 -2
  1040. package/dist/shared/format-md-compact.js +0 -2
  1041. package/dist/shared/incrementing-number.d.ts +0 -1
  1042. package/dist/shared/incrementing-number.js +0 -1
  1043. package/dist/shared/path-utils.d.ts +0 -1
  1044. package/dist/shared/path-utils.js +0 -1
  1045. package/dist/shared/runtime-root.d.ts +0 -1
  1046. package/dist/shared/runtime-root.js +0 -1
  1047. package/dist/shared/stale-policy.d.ts +0 -1
  1048. package/dist/shared/stale-policy.js +0 -1
  1049. package/package.json +24 -11
  1050. package/scripts/canonical-store-link.mjs +296 -0
  1051. package/scripts/canonical-store-prune.mjs +131 -0
  1052. package/scripts/canonical-store.mjs +298 -0
  1053. package/scripts/install-skills-bundles.mjs +233 -0
  1054. package/scripts/install-skills-fs.mjs +148 -0
  1055. package/scripts/install-skills-ide.mjs +279 -0
  1056. package/scripts/install-skills-output-style-default.mjs +196 -0
  1057. package/scripts/install-skills-output-styles.mjs +121 -0
  1058. package/scripts/install-skills-report.mjs +42 -0
  1059. package/scripts/install-skills-user-config.mjs +198 -0
  1060. package/scripts/install-skills.mjs +41 -1279
  1061. package/scripts/watch-tree.mjs +140 -0
  1062. package/scripts/watch.mjs +4 -126
  1063. package/skills/peaks-audit/SKILL.md +3 -3
  1064. package/skills/peaks-status/SKILL.md +31 -13
  1065. package/dist/services/codegraph/codegraph-include-reconciler.d.ts +0 -10
  1066. package/dist/services/codegraph/codegraph-include-reconciler.js +0 -160
@@ -1,824 +1,181 @@
1
1
  /**
2
- * `peaks sub-agent dispatch <role> ...` — slice 2026-06-07-sub-agent-context-governance.
2
+ * `peaks sub-agent dispatch` — the single-dispatch chokepoint.
3
3
  *
4
- * Pulled out of `sub-agent-commands.ts` (slice 2026-06-23-audit-p0-split) to
5
4
  * honor the 800-line file cap (Karpathy #2 Simplicity First). The single
6
5
  * `dispatch` action lives here; the `--from-dag` sibling was further split
7
- * into `dispatch-from-dag.ts` (slice 2026-06-23-audit-3rd #7) because the
8
6
  * two paths share no logic and the `--from-dag` codepath loads three heavy
9
7
  * modules on first call (slice 9 perf) that the warm-path single-dispatch
10
8
  * never touches.
11
9
  *
12
- * Skill-first / CLI-auxiliary red line (PB-4 / AC-19/20): this command is
13
10
  * a primitive that the peaks-code / peaks-rd / peaks-qa SKILL.md compose.
14
11
  * Users do NOT invoke it directly; the --help text and dispatch
15
12
  * envelope's `nextActions` reinforce the point.
13
+ *
14
+ * This module orchestrates: the option surface, the preflight refusals, the
15
+ * detached/DAG short-circuits and the record+envelope write are here; the lease,
16
+ * the prompt composition and the tool call each own a module.
16
17
  */
17
- import { existsSync } from 'node:fs';
18
18
  import { randomUUID } from 'node:crypto';
19
- import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
20
- import { addJsonOption, printResult } from '../cli-helpers.js';
21
- import { detectInstalledIde } from '../../services/ide/ide-detector.js';
22
- import { getAdapter } from '../../services/ide/ide-registry.js';
23
- import { SubAgentNotSupportedError } from '../../services/dispatch/sub-agent-dispatcher.js';
24
- import { emitObservabilityEvent, OBSERVABILITY_SUBAGENT_ROLES } from '../../services/observability/observability-service.js';
25
- import { noteDispatched, BATCH_LIMIT } from '../../services/dispatch/batch-counter.js';
26
- import { writeInitialDispatchRecord } from '../../services/dispatch/dispatch-record-writer.js';
27
- import { provisionDispatchNode } from '../../services/workflow/provision-dispatch-node.js';
28
- import { evaluatePromptSize } from '../../services/context/context-guard.js';
19
+ import { fail, getErrorMessage } from 'peaks-loop-shared/result';
20
+ import { printResult } from '../cli-helpers.js';
29
21
  import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
30
- import { resolveOuterSessionId } from '../../services/session/binding-status-service.js';
31
- import { buildArtifactMeta, buildContextImpact } from '../../services/context/artifact-meta.js';
32
- import { assertSafeArtifactPath } from 'peaks-loop-shared-channel';
33
- import { playwrightProfilePaths } from '../../services/worktree/playwright-profile.js';
34
- import { loadPreferences } from '../../services/preferences/preferences-service.js';
35
- import { DEFAULT_PREFERENCES } from '../../services/preferences/preferences-types.js';
36
- import { writeLogEntry } from '../../services/log/logger.js';
37
- import { PROMPT_LIMIT_BYTES, RECOMMENDED_ROLES, deprecatedReviewerWarnings, validateRole } from './sub-agent-shared.js';
38
22
  import { runDispatchFromDag } from './dispatch-from-dag.js';
39
- import { TEST_TOOL_DETECTION_BLOCK } from '../../services/dispatch/test-tool-detection.js';
40
- import { MemoryPreflightService, deriveMemoryQuery } from '../../services/context/memory-preflight-service.js';
41
- import { buildDispatchSystemPrompt } from '../../services/context/build-dispatch-system-prompt.js';
42
- import { readSessionCapsule } from '../../services/dispatch/session-capsule.js';
43
- import { computeUiLibraryDispatchBlock } from '../../services/standards/ui-library-dispatch-block.js';
44
- import { readFreshContextBlock } from '../../services/fresh-context/fresh-context-block.js';
45
- import { createDispatchProvenanceToken, DISPATCH_PROVENANCE_ENV, writeDispatchProvenance } from '../../services/worktree/dispatch-provenance.js';
46
- import { spawnWorktreeLease, spawnContainerLease } from '../../services/dispatch/isolation-lease.js';
47
- import { runGitLsFiles } from '../../services/dispatch/dispatch-sub-agent.js';
48
- export function registerDispatchCommand(parent, io) {
49
- addJsonOption(parent
50
- .command('dispatch')
51
- .description('Build an IDE-specific tool-call descriptor for a sub-agent dispatch. ' +
52
- 'Dry-run by design; the LLM executes the returned toolCall in its own ' +
53
- 'environment. Flags: --write-artifact (G7), ' +
54
- '--force (G9 CLI 兜底). ' +
55
- 'See skills/peaks-code/references/sub-agent-dispatch.md for the ' +
56
- 'orchestrator contract.')
57
- .argument('<role>', 'sub-agent role (e.g. rd | qa | ui | txt | qa-business | qa-business-api)')
58
- // 2.7.0 slice-dag-dispatcher MVP: --prompt is required ONLY when --from-dag is NOT
59
- // supplied. Previously this was `.requiredOption('--prompt')`, which blocked
60
- // `dispatch --from-dag <file>` calls because commander.js validates
61
- // `.requiredOption` before the action handler runs. The mutual-exclusion
62
- // check is enforced below in the action body (--prompt XOR --from-dag).
63
- .option('--prompt <text>', 'the prompt to send to the sub-agent (required unless --from-dag is provided)')
64
- .option('--prompt-length <bytes>', 'DOGFOOD ONLY: synthesize a prompt of this size (overrides --prompt content for size only; content is "x" repeated)')
65
- .option('--request-id <rid>', 'the same <rid> used by peaks request init')
66
- .option('--session-id <sid>', 'override active session id (default: resolve from .peaks/_runtime/session.json; falls back to PEAKS_SESSION_ID env var; final fallback "unknown-sid")')
67
- .option('--project <path>', 'target project root (defaults to cwd)')
68
- .option('--batch-id <uuid>', 'batch id for the dispatch (default: auto-generated UUID)')
69
- .option('--write-artifact <path>', 'G7: register an artifact file at <path>; CLI computes sha256 + size + writes ArtifactMeta to the dispatch record')
70
- .option('--force', 'G9: override the 80% hard reject threshold at CLI (NOT allowed at hook layer per RL-30 strict)')
71
- .option('--from-dag <file>', '2.7.0 slice-dag-dispatcher MVP: read a SliceDag JSON file, dispatch one sub-agent per node in topological order; --batch-id overrides the auto-generated batch id (mutually exclusive with <role>)')
72
- .option('--isolation <mode>', 'slice 2026-07-29-worktree-l2-extended Part 2.C: isolation mode for the sub-agent. Accepts "worktree" (Part 2.C + Part 12 L2 surface), "container" (Part 8 contract + Part 12 L4 docker runtime), or "vm" (Part 25 contract; the VM runtime is a follow-up rid and fail-fasts with ISOLATION_VM_NOT_YET_IMPLEMENTED). Auto-spawns a lease + injects PEAKS_<MODE>_LEASE_ID into the dispatch envelope so the sub-agent can write to the isolated surface without a separate auth grant.')
73
- // Slice 4.0.8 RD §4 made this a `.requiredOption`. It is optional now:
74
- // the requirement was enforced but never validated — nothing downstream
75
- // reads the node, and the record writer's graph transition is
76
- // best-effort — so its only observable effect was to block dispatch in
77
- // every project without graph infrastructure. See
78
- // `provisionDispatchNode`.
79
- .option('--graph-node <id>', 'graph node id this dispatch binds to (default: a node is provisioned on demand)')
80
- .option('--workflow-id <id>', 'workflow id the graph node belongs to (defaults to derived from session)')
81
- .option('--graph-ref <ref>', 'graphRef (defaults to graphs/<workflow-id>.json)')
82
- // rid-001 detached sub-agent dispatch: 4 new options. Default
83
- // mode is `in-process` so the 106+ existing dispatch call sites
84
- // keep their path byte-identical. The detached branch below
85
- // fires only when --mode detached is explicitly passed.
86
- .option('--mode <mode>', 'dispatch execution mode: in-process (default, dry-run envelope only) | detached (shell out to peaks-loop-internal-runtime/dispatch.dispatchDetached for real vendor CLI execution).')
87
- .option('--vendor <vendor>', 'target vendor CLI for --mode detached (claude | codex | copilot). Ignored in the default in-process path.')
88
- .option('--no-throttle', 'rid-001 detached: user-overrides ResourceBudgetGuard when concurrent fan-out exceeds max-concurrent (user accepts risk; surfaces as warning)')
89
- .option('--max-concurrent <n>', 'rid-001 detached: override the per-tenant max concurrent budget (default 8). Effective in both detached and in-process paths.')
90
- // F5 follow-up (sediment 2026-08-11-rid-001-redo-fake-green-recovery-closure
91
- // §Lesson 1): the RD sub-agent's fake-green failure mode was that it
92
- // claimed "5/5 reachability tests PASS" while the files were never
93
- // on disk. `--must-ls-files <glob>` is the anti-fake-green gate:
94
- // the CLI runs `git ls-files <glob>` upfront, reports the result in
95
- // the envelope (`data.mustLsFilesVerification`), and prepends a
96
- // `## must_ls_files enforcement` block to the sub-agent prompt so
97
- // the LLM's first action MUST re-verify file existence before any
98
- // "completed" claim. Absent → old behavior is preserved.
99
- .option('--must-ls-files <glob>', 'F5: anti-fake-green gate. Run `git ls-files <glob>` upfront; surface the result in the envelope as `mustLsFilesVerification: { path, exists, files }`; prepend a must_ls_files enforcement block to the sub-agent prompt. Absent → unchanged behavior.')).action(async (role, options) => {
100
- const asJson = options.json === true;
101
- // rid-001 detached sub-agent dispatch: when --mode detached is
102
- // explicitly requested, lazy-import the detached handler and short-
103
- // circuit before the warm-path in-process pipeline runs. Branch
104
- // lives in the existing action handler (NOT a sibling `peaks
105
- // sub-agent-detached` command) per the slice decision memo:
106
- // - 106+ existing dispatch tests reach this exact action path
107
- // - Backward compat requires the default (no --mode) to keep
108
- // the in-process envelope shape byte-identical
109
- // - One validation entry-point reduces double-pipe maintenance
110
- if (options.mode === 'detached') {
111
- try {
112
- const { dispatch: detachedDispatch } = await import('./sub-agent/detached.js');
113
- const projectRoot = options.project ?? process.cwd();
114
- const maxConcurrent = typeof options.maxConcurrent === 'string' && options.maxConcurrent.length > 0
115
- ? Number.parseInt(options.maxConcurrent, 10)
116
- : undefined;
117
- const result = await detachedDispatch({
118
- role,
119
- prompt: typeof options.prompt === 'string' ? options.prompt : '',
120
- requestId: options.requestId ?? 'unknown-rid',
121
- mode: 'detached',
122
- ...(typeof options.vendor === 'string' ? { vendor: options.vendor } : {}),
123
- project: projectRoot,
124
- json: asJson,
125
- ...(options.noThrottle === true ? { noThrottle: true } : {}),
126
- ...(typeof maxConcurrent === 'number' &&
127
- Number.isInteger(maxConcurrent) &&
128
- maxConcurrent > 0
129
- ? { maxConcurrent }
130
- : {})
131
- });
132
- // The handler's `ok` is the launch outcome (a vendor CLI that is not
133
- // installed is a failure, not a footnote) — the caller must not
134
- // re-wrap it as `ok()` unconditionally, which is how `ok: true` with
135
- // `pid: -1` reached the orchestrator.
136
- if (result.ok) {
137
- printResult(io, ok(result.command, result.data, result.warnings ?? [], result.nextActions ?? []), asJson);
138
- }
139
- else {
140
- printResult(io, fail(result.command, 'DISPATCH_DETACHED_SPAWN_FAILED', `Could not launch the vendor CLI for a detached dispatch; nothing was started.`, result.data, result.nextActions ?? []), asJson);
141
- process.exitCode = 1;
142
- }
143
- }
144
- catch (error) {
145
- printResult(io, fail('sub-agent.dispatch', 'DISPATCH_DETACHED_ERROR', getErrorMessage(error), {
146
- role,
147
- toolCall: null,
148
- dispatchRecordPath: null
149
- }, [
150
- 'If --mode detached fails on import, the peaks-loop-internal-runtime package may be missing; reinstall and retry.',
151
- 'For environments without a vendor CLI on PATH, drop --mode to fall back to the default in-process dry-run.'
152
- ]), asJson);
153
- process.exitCode = 1;
154
- }
155
- return;
156
- }
157
- // 2.7.0 slice-dag-dispatcher MVP: --from-dag short-circuits the single
158
- // sub-agent path and runs the full DAG plan via `dag-orchestrator`.
159
- if (typeof options.fromDag === 'string' && options.fromDag.length > 0) {
160
- await runDispatchFromDag(role, options, asJson, io);
161
- return;
162
- }
163
- const validation = validateRole(role);
164
- if (validation !== null) {
165
- printResult(io, fail('sub-agent.dispatch', 'INVALID_ROLE', validation, { role, toolCall: null, dispatchRecordPath: null }, [
166
- 'Use a non-empty role string with no control characters.',
167
- `Recommended: ${RECOMMENDED_ROLES}.`
168
- ]), asJson);
169
- process.exitCode = 1;
170
- return;
171
- }
172
- // Slice 3 (on-demand-ecc) D-012: the `agent` role was removed in
173
- // 4.0.0-beta.11 — there is no longer a subprocess path for it
174
- // (the upstream ECC v2.0.0 ships no `ecc` binary). This guard
175
- // sits AFTER role validation but BEFORE the missing-prompt
176
- // check so an action-path dispatch with a valid prompt still
177
- // returns a clear ROLE_REMOVED envelope + exit 1. Note that
178
- // Commander short-circuits `--help` BEFORE `.action()` fires,
179
- // so `peaks sub-agent dispatch agent --help` continues to
180
- // exit 0 with the help text — that is intentional, not a bug.
181
- if (role === 'agent') {
182
- printResult(io, fail('sub-agent.dispatch', 'ROLE_REMOVED', 'The agent role was removed in Slice 3', {
183
- role,
184
- reason: 'role-removed-in-slice-3',
185
- toolCall: null,
186
- dispatchRecordPath: null
187
- }, []), asJson);
188
- process.exitCode = 1;
189
- return;
190
- }
191
- if (!options.prompt || options.prompt.length === 0) {
192
- printResult(io, fail('sub-agent.dispatch', 'MISSING_PROMPT', '--prompt is required when --from-dag is not provided', { role, toolCall: null, dispatchRecordPath: null }, [
193
- 'Re-run with either:',
194
- ' • `--prompt <text>` for single-role dispatch, OR',
195
- ' • `--from-dag <file>` for DAG-aware multi-slice dispatch (no --prompt needed; the per-slice prompt is generated from the DAG nodes).'
196
- ]), asJson);
197
- process.exitCode = 1;
198
- return;
199
- }
200
- // Slice 4.0.8 RD §4 D4c required `--graph-node` here, before the session
201
- // id existed, so the only recovery it could offer was prose. The node is
202
- // now provisioned inside the try block below, once `sid` is known.
203
- // DOGFOOD ONLY: --prompt-length overrides the actual prompt content with
204
- // a synthetic prompt of the given size in bytes. The original --prompt
205
- // is still required (commander needs it). This avoids ARG_MAX limits
206
- // on Windows when the dogfood prompt is > 200KB.
207
- if (typeof options.promptLength === 'string' && options.promptLength.length > 0) {
208
- const len = Number.parseInt(options.promptLength, 10);
209
- if (Number.isInteger(len) && len > 0) {
210
- options.prompt = 'x'.repeat(len);
211
- }
212
- }
213
- if (options.prompt.length + TEST_TOOL_DETECTION_BLOCK.length > PROMPT_LIMIT_BYTES) {
214
- printResult(io, fail('sub-agent.dispatch', 'PROMPT_TOO_LARGE', `prompt exceeds ${PROMPT_LIMIT_BYTES} bytes (got ${options.prompt.length})`, { role, toolCall: null, dispatchRecordPath: null }, [
215
- 'Truncate the prompt or split into multiple dispatches.',
216
- 'Pass --force to override the 80% threshold at CLI (NOT allowed at hook layer).'
217
- ]), asJson);
218
- process.exitCode = 1;
219
- return;
220
- }
221
- // G9 CLI 兜底 — evaluate prompt size against the threshold table.
222
- const decision = evaluatePromptSize(options.prompt.length, { force: options.force === true });
223
- if (!decision.allow) {
224
- printResult(io, fail('sub-agent.dispatch', decision.code, `prompt size ${options.prompt.length} bytes exceeds threshold (tier=${decision.evaluation.tier}, ratio=${decision.evaluation.ratio.toFixed(3)})`, {
225
- role,
226
- toolCall: null,
227
- dispatchRecordPath: null
228
- }, [
229
- decision.suggest ?? 'Trim prompt or pass --force to override at CLI.',
230
- 'PreToolUse hook layer will still reject regardless of --force (RL-30 strict).'
231
- ]), asJson);
232
- process.exitCode = 1;
233
- return;
234
- }
235
- try {
236
- const projectRoot = options.project ?? process.cwd();
237
- // Slice 2026-06-26-unknown-sid-fallback-fix: when --session-id is not
238
- // passed, auto-resolve the active peaks session id from
239
- // `.peaks/_runtime/session.json` (or PEAKS_SESSION_ID env var) so
240
- // dispatch records land in `.peaks/_sub_agents/<real-sid>/` instead
241
- // of the `unknown-sid` fallback. The unknown-sid branch is preserved
242
- // as the last-resort so callers without a bound session (e.g. an
243
- // ad-hoc dispatch in a fresh tree) still get a deterministic path.
244
- const sid = options.sessionId ??
245
- process.env.PEAKS_SESSION_ID ??
246
- getCurrentSessionId(projectRoot) ??
247
- 'unknown-sid';
248
- const rid = options.requestId ?? 'unknown-rid';
249
- const batchId = options.batchId ?? randomUUID();
250
- // Slice 2026-07-29-worktree-l2-extended Part 2.C: --isolation worktree
251
- // auto-spawns a worktree lease and injects PEAKS_WORKTREE_LEASE_ID
252
- // into the sub-agent dispatch envelope. This is the bridge that
253
- // makes the lease-aware gate (Part 2.B) work for sub-agents:
254
- // without this injection, the gate has no leaseId to consult and
255
- // the sub-agent would need a separate `peaks worktree auth grant`.
256
- let isolationMode = null;
257
- let leaseId = null;
258
- let worktreePath = null;
259
- let worktreeBranch = null;
260
- if (typeof options.isolation === 'string' && options.isolation.length > 0) {
261
- if (options.isolation !== 'worktree' &&
262
- options.isolation !== 'container' &&
263
- options.isolation !== 'vm') {
264
- printResult(io, fail('sub-agent.dispatch', 'INVALID_ISOLATION', `--isolation only accepts "worktree" | "container" | "vm" (got "${options.isolation}")`, {
265
- role,
266
- toolCall: null,
267
- dispatchRecordPath: null
268
- }, [
269
- 'Drop --isolation or pass --isolation worktree / --isolation container / --isolation vm.'
270
- ]), asJson);
271
- process.exitCode = 1;
272
- return;
273
- }
274
- if (options.isolation === 'container') {
275
- // Slice 2026-07-29-worktree-l2-extended Part 12: container
276
- // isolation is now live (Part 8 contract was the
277
- // bridge; Part 12 is the runtime). Shell out to
278
- // `peaks container spawn` to run `docker run` and
279
- // write the container lease.
280
- isolationMode = 'container';
281
- try {
282
- const spawnResult = await spawnContainerLease({
283
- projectRoot,
284
- sessionId: sid,
285
- rid,
286
- role,
287
- purpose: `auto-spawned by dispatch --isolation container (batch=${batchId})`
288
- });
289
- // Reuse the leaseId variable — same field semantically
290
- // (id of the isolation surface the dispatch owns).
291
- leaseId = spawnResult.leaseId;
292
- }
293
- catch (error) {
294
- printResult(io, fail('sub-agent.dispatch', 'ISOLATION_CONTAINER_SPAWN_FAILED', getErrorMessage(error), {
295
- role,
296
- toolCall: null,
297
- dispatchRecordPath: null
298
- }, [
299
- 'The dispatch aborts when --isolation container lease spawn fails; retry without --isolation or fix the underlying docker error.',
300
- 'For environments without a docker daemon, use --isolation worktree (the L2 production path).'
301
- ]), asJson);
302
- process.exitCode = 1;
303
- return;
304
- }
305
- }
306
- if (options.isolation === 'worktree') {
307
- isolationMode = 'worktree';
308
- try {
309
- const spawnResult = await spawnWorktreeLease({
310
- projectRoot,
311
- sessionId: sid,
312
- rid,
313
- role,
314
- purpose: `auto-spawned by dispatch --isolation worktree (batch=${batchId})`
315
- });
316
- leaseId = spawnResult.leaseId;
317
- worktreePath = spawnResult.path;
318
- worktreeBranch = spawnResult.branch;
319
- }
320
- catch (error) {
321
- printResult(io, fail('sub-agent.dispatch', 'ISOLATION_SPAWN_FAILED', getErrorMessage(error), {
322
- role,
323
- toolCall: null,
324
- dispatchRecordPath: null
325
- }, [
326
- 'The dispatch aborts when --isolation worktree lease spawn fails; retry without --isolation or fix the underlying git error.'
327
- ]), asJson);
328
- process.exitCode = 1;
329
- return;
330
- }
331
- }
332
- else if (options.isolation === 'vm') {
333
- // Slice 2026-07-29-worktree-l2-extended Part 25: the
334
- // VM isolation mode is the L4 follow-up to L4 container.
335
- // The CLI contract is shipped (--isolation vm is accepted
336
- // by the dispatch parser and reflected in the envelope's
337
- // isolationMode type). The VM runtime (Linux KVM / macOS
338
- // HyperKit / Windows Hyper-V) is a much larger follow-up
339
- // and is intentionally not implemented yet — we
340
- // fail-fast with ISOLATION_VM_NOT_YET_IMPLEMENTED so
341
- // operators see a clear "this is a placeholder" signal
342
- // rather than a silent fallback to worktree.
343
- //
344
- // The full implementation lives in a future rid; the
345
- // design is:
346
- // 1. New service: src/services/vm/vm-lease.ts (parallels
347
- // worktree-lease.ts / container-lease.ts) — pure lease
348
- // store with vmId + hypervisor + status.
349
- // 2. CLI: 'peaks vm spawn --hypervisor kvm|hyperkit|hyperv
350
- // --image <name> --rid <rid> --role <role>' — runs
351
- // virsh create / hvftool / hvcreate, captures the
352
- // vm id, writes the lease.
353
- // 3. CLI: 'peaks vm release --lease-id <id>' — virsh
354
- // destroy + cleanup.
355
- // 4. dispatch --isolation vm: shells out to peaks vm
356
- // spawn, injects PEAKS_VM_LEASE_ID env (parallel
357
- // to PEAKS_CONTAINER_LEASE_ID).
358
- // 5. PreToolUse gate: when the env var is set AND the
359
- // tool call is bash-with-vm-bearing-command,
360
- // allow via the vm lease.
361
- //
362
- // Until then: fail-fast.
363
- printResult(io, fail('sub-agent.dispatch', 'ISOLATION_VM_NOT_YET_IMPLEMENTED', '--isolation vm is the L4 follow-up to --isolation container (Part 25 contract); the VM runtime (KVM / HyperKit / Hyper-V) is a much larger follow-up rid and is intentionally not implemented yet. Drop --isolation or pass --isolation worktree / --isolation container for now.', {
364
- role,
365
- toolCall: null,
366
- dispatchRecordPath: null
367
- }, [
368
- 'The VM contract is shipped (--isolation vm is accepted by the dispatch parser); the runtime is the next rid.',
369
- 'Use --isolation worktree (L2 production) or --isolation container (L4 docker, Part 12) for now.'
370
- ]), asJson);
371
- process.exitCode = 1;
372
- return;
373
- }
374
- }
375
- // loadPreferences can throw on schema mismatch; we fall back to defaults
376
- // to avoid breaking the dispatch on a stale preferences.json file.
377
- let projectPrefs = DEFAULT_PREFERENCES;
378
- try {
379
- projectPrefs = loadPreferences(projectRoot);
380
- }
381
- catch {
382
- // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
383
- // Keep default preferences.
384
- }
385
- const ide = detectInstalledIde(projectRoot) ?? 'claude-code';
386
- const adapter = getAdapter(ide);
387
- if (!adapter.subAgentDispatcher.supportsRole(role)) {
388
- printResult(io, fail('sub-agent.dispatch', 'IDE_NOT_SUPPORTED', `IDE ${ide} does not support role "${role}"`, { role, toolCall: null, dispatchRecordPath: null }, [
389
- 'Switch to a registered IDE (e.g. claude-code) or pick a role the current IDE supports.'
390
- ]), asJson);
391
- process.exitCode = 1;
392
- return;
393
- }
394
- // Slice 2026-07-22-orchestrator-memory-preflight (Task 5): prepend the
395
- // memory preflight block (or silently skip when unavailable) via the
396
- // pure-function builder.
397
- const preflightService = new MemoryPreflightService(projectRoot, projectPrefs);
398
- // Slice 2026-09-09-memory-retrieval: rank the injected memory by the
399
- // task at hand (role + first line of the brief), not the bare role.
400
- const memoryBlock = await preflightService.fetchBlock(deriveMemoryQuery(role, options.prompt));
401
- // Slice 2026-09-03-codegraph-preread (Option A): pre-dispatch
402
- // codegraph preflight for RD planning. BEFORE the RD sub-agent's
403
- // prompt is composed, ensure the codegraph index exists (init +
404
- // index best-effort when `.codegraph/` is absent; skip when already
405
- // fresh) and read a BOUNDED project-structure summary. The block is
406
- // only requested for the `rd` role — other roles keep the legacy
407
- // prompt byte-identical. Fail-soft: any codegraph failure degrades
408
- // to a null block (builder renders the "codegraph unavailable" note)
409
- // and the dispatch proceeds; we never hard-block RD dispatch here.
410
- let codegraphBlock;
411
- if (role === 'rd') {
412
- try {
413
- const { buildCodegraphPreflightBlock } = await import('../../services/codegraph/codegraph-preflight-service.js');
414
- const preflight = await buildCodegraphPreflightBlock(projectRoot);
415
- codegraphBlock = preflight.available ? preflight.block : null;
416
- }
417
- catch {
418
- codegraphBlock = null; // fail-soft: never block RD dispatch
419
- }
420
- }
421
- // Slice 2026-09-06-ui-lib-dispatch-priority: surface the detected
422
- // component library (+ CSS framework + build tool) in the RD/UI
423
- // dispatch system prompt so the sub-agent prefers the library over
424
- // hand-rolled native DOM. Only injected for frontend-generating roles
425
- // (rd + ui) — qa/sc/txt/prd keep the legacy prompt byte-identical.
426
- // Fail-soft inside the wrapper: a detection error degrades to null.
427
- let projectStackBlock;
428
- if (role === 'rd' || role === 'ui') {
429
- projectStackBlock = computeUiLibraryDispatchBlock(projectRoot);
430
- }
431
- // Slice 2026-09-07-search-first-preflight: read the orchestrator-
432
- // synthesized fresh-context block for rd + prd dispatches. The block
433
- // was written to .peaks/_runtime/<sid>/fresh-context.md when the
434
- // preflight triggered; it carries ≤5 binding directives that hedge
435
- // model training-data lag. Fail-soft: a missing / unreadable file, or
436
- // a file without the `## Fresh context` heading, degrades to null so
437
- // the prompt stays byte-identical to the legacy shape. Other roles
438
- // (qa/sc/txt/ui) keep the legacy prompt unchanged.
439
- let freshContextBlock;
440
- if (role === 'rd' || role === 'prd') {
441
- freshContextBlock = readFreshContextBlock(projectRoot, sid);
442
- }
443
- // Slice 2026-07-29-context-evaluation-accuracy: capture the
444
- // authoritative context-fill probe before composing the
445
- // dispatch prompt. The probe is token-counted (IDE adapter's
446
- // `compact` env-var), not a byte estimate. The composer
447
- // prepends a `## Context window` block so the dispatched
448
- // sub-agent reads the actual ratio instead of guessing
449
- // from message length (char/4 estimates diverge by 2-4x
450
- // and have caused false "context too low" reports at 60%+
451
- // free).
452
- let contextProbe = null;
453
- try {
454
- const { readContextPercent } = await import('../../services/context/auto-compact-reader.js');
455
- const outerSessionId = resolveOuterSessionId(projectRoot, sid);
456
- contextProbe = readContextPercent({
457
- projectRoot,
458
- sessionId: sid,
459
- outerSessionId,
460
- env: process.env
461
- });
462
- }
463
- catch {
464
- // Probe is best-effort; the composer renders a
465
- // "no probe available" hint instead of failing the
466
- // dispatch.
467
- }
468
- // Slice 2026-09-10-dispatch-token-and-swarm §4: advisory background
469
- // capsule published by the orchestrator via `peaks sub-agent share`.
470
- // Absent capsule → no pointer and no precedence line (byte-identical
471
- // legacy prompt).
472
- const capsuleRef = readSessionCapsule({ projectRoot, sid, rid });
473
- const memoryAugmentedBody = buildDispatchSystemPrompt({
474
- taskTitle: role,
475
- taskBody: options.prompt,
476
- memoryBlock,
477
- // 2026-09-10-dispatch-block-d (Option D): the composer owns the ONE
478
- // unified Test Tool Detection injection for every role.
479
- contextProbe,
480
- // exactOptionalPropertyTypes: only set codegraphBlock when the rd
481
- // preflight actually produced a value (null = attempted-unavailable,
482
- // undefined = not requested → legacy prompt unchanged).
483
- ...(codegraphBlock !== undefined ? { codegraphBlock } : {}),
484
- // Same optionality contract for the project-stack block: set only
485
- // when the rd/ui detection ran (null = no library → no block,
486
- // undefined = non-frontend role → legacy prompt unchanged).
487
- ...(projectStackBlock !== undefined ? { projectStackBlock } : {}),
488
- // Same optionality contract for the fresh-context block: set only
489
- // when the rd/prd read ran (null = no block on disk → no block,
490
- // undefined = non-rd/prd role → legacy prompt unchanged).
491
- ...(freshContextBlock !== undefined ? { freshContextBlock } : {}),
492
- // §4: advisory session capsule pointer + precedence line.
493
- ...(capsuleRef !== null
494
- ? {
495
- capsule: { batchId: capsuleRef.batchId, key: capsuleRef.key, bytes: capsuleRef.bytes }
496
- }
497
- : {})
498
- });
499
- // Part 2.C: when --isolation worktree, prepend an isolation envelope
500
- // block so the sub-agent sees the lease id + worktree path. The block
501
- // is short (a few lines). We deliberately do NOT set
502
- // process.env.PEAKS_WORKTREE_LEASE_ID here — sub-agents are spawned
503
- // by the LLM in its own environment, not as children of this CLI;
504
- // the lease id travels through the dispatch record + prompt body.
505
- const isolationBlock = isolationMode !== null && leaseId !== null
506
- ? `\n## Worktree isolation (Part 2.C)\n` +
507
- `leaseId: ${leaseId}\n` +
508
- `worktreePath: ${worktreePath}\n` +
509
- `branch: ${worktreeBranch}\n` +
510
- `You MAY ` +
511
- '`git worktree add` ' +
512
- `and ` +
513
- '`git worktree remove` ' +
514
- `against this lease without a separate ` +
515
- '`peaks worktree auth grant` ' +
516
- `— the PreToolUse gate reads the lease file. Run ` +
517
- '`peaks worktree release --lease-id ${leaseId}` ' +
518
- `when done.\n`
519
- : '';
520
- // F5 follow-up: anti-fake-green gate. When `--must-ls-files <glob>`
521
- // is supplied, run `git ls-files <glob>` upfront, surface the
522
- // result in the envelope as `mustLsFilesVerification: { path,
523
- // exists, files }`, and prepend a `## must_ls_files enforcement`
524
- // frontmatter block to the sub-agent prompt that mandates the
525
- // file-existence verification as the LLM's FIRST action (before
526
- // any "completed"/"PASS" claim). When the flag is absent the
527
- // field is `null` and no block is injected — old call sites
528
- // see no behavior change (rid-001 fake-green Lesson 1).
529
- let mustLsFilesVerification = null;
530
- let mustLsFilesBlock = '';
531
- if (typeof options.mustLsFiles === 'string' && options.mustLsFiles.length > 0) {
532
- const glob = options.mustLsFiles;
533
- const files = runGitLsFiles(projectRoot, glob);
534
- const exists = files.length > 0;
535
- mustLsFilesVerification = { path: glob, exists, files };
536
- mustLsFilesBlock =
537
- `\n## must_ls_files enforcement (F5 anti-fake-green)\n` +
538
- `glob: ${glob}\n` +
539
- `verification: ${exists ? `EXISTS (${files.length} file${files.length === 1 ? '' : 's'} found)` : 'MISSING (no files matched the glob)'}\n` +
540
- (exists ? `first match: ${files[0] ?? ''}\n` : '') +
541
- `BEFORE any claim that work is "completed" or "PASS", you MUST run \`git ls-files ${glob}\` from the project root and ` +
542
- `confirm the file exists. Anti-fake-green rule (sediment 2026-08-11-rid-001-redo-fake-green-recovery-closure §Lesson 1): ` +
543
- `if the file does not exist, your verdict MUST be \`status: "blocked"\` with reason "must_ls_files_failed". Do NOT silently skip this step.\n`;
544
- }
545
- const effectivePrompt = `${memoryAugmentedBody}${isolationBlock}${mustLsFilesBlock}`;
546
- // Slice F2 (rid-f2-ac1-wiring): deprecated reviewer slots are accepted
547
- // + rerouted here, never refused — rationale on the helper itself.
548
- const warnings = [...decision.warnings, ...deprecatedReviewerWarnings(role)];
549
- let toolCall;
550
- try {
551
- toolCall = adapter.subAgentDispatcher.buildToolCall({
552
- role,
553
- prompt: effectivePrompt,
554
- requestId: rid,
555
- sessionId: sid
556
- });
557
- // Part 2.C: stamp the toolCall with `isolation` + a sub-agent
558
- // env block so adapters that surface it (Claude Code's Task
559
- // tool) propagate the lease id to the spawned process. The
560
- // env block is the canonical hook the PreToolUse gate reads
561
- // (gate-commands.ts: process.env.PEAKS_WORKTREE_LEASE_ID).
562
- if (isolationMode !== null && leaseId !== null) {
563
- const existingEnv = toolCall.args['env'] ?? {};
564
- const provenanceToken = createDispatchProvenanceToken({
565
- sessionId: sid,
566
- requestId: rid,
567
- leaseId
568
- });
569
- if (isolationMode === 'worktree') {
570
- writeDispatchProvenance({
571
- projectRoot,
572
- record: {
573
- schemaVersion: 1,
574
- token: provenanceToken,
575
- sessionId: sid,
576
- requestId: rid,
577
- leaseId,
578
- isolation: 'worktree',
579
- issuedAt: new Date().toISOString()
580
- }
581
- });
582
- }
583
- // Slice 2026-08-01-subagent-merge-and-e2e (Task 8): stamp the
584
- // two Playwright profile-isolation env vars so the sub-agent's
585
- // browser MCP session lands in a deterministic
586
- // `.peaks/_runtime/<sid>/pw-profiles/<dispatchId>/` directory
587
- // (see src/services/worktree/playwright-profile.ts). Without
588
- // these, concurrent dispatches share the user's default
589
- // Chromium profile and corrupt cookies / localStorage.
590
- const profile = playwrightProfilePaths({
591
- projectRoot,
592
- sessionId: sid,
593
- dispatchId: rid
594
- });
595
- toolCall = {
596
- ...toolCall,
597
- args: {
598
- ...toolCall.args,
599
- isolation: isolationMode,
600
- env: {
601
- ...existingEnv,
602
- PEAKS_WORKTREE_LEASE_ID: leaseId,
603
- PEAKS_PLAYWRIGHT_USER_DATA_DIR: profile.userDataDir,
604
- PEAKS_PLAYWRIGHT_PROFILE_NAME: profile.profileName,
605
- ...(isolationMode === 'worktree'
606
- ? { [DISPATCH_PROVENANCE_ENV]: provenanceToken }
607
- : {})
608
- }
609
- }
610
- };
611
- }
612
- // Slice C of v2.11.1 — observability hook #2/7. Fire-and-forget
613
- // per PRD Q4 (full-auto must never fail-loud). The
614
- // synchronous emit returns {written:false} on disk-full; we
615
- // deliberately swallow the result so dispatch contract is
616
- // unchanged. role is only included when it matches the schema's
617
- // known sub-agent role set; otherwise it's omitted (non-standard
618
- // roles like 'qa-business' would otherwise drop the event
619
- // through schema rejection).
620
- const KNOWN_ROLES = new Set(OBSERVABILITY_SUBAGENT_ROLES);
621
- const knownRole = KNOWN_ROLES.has(role)
622
- ? role
623
- : null;
624
- emitObservabilityEvent({
625
- schemaVersion: 1,
626
- ts: new Date().toISOString(),
627
- sessionId: sid,
628
- category: 'dispatch',
629
- ...(knownRole !== null ? { role: knownRole } : {}),
630
- detail: {
631
- requestId: rid,
632
- ide: adapter.subAgentDispatcher.label,
633
- promptBytes: effectivePrompt.length
634
- }
635
- }, { projectRoot });
636
- }
637
- catch (error) {
638
- if (error instanceof SubAgentNotSupportedError) {
639
- printResult(io, fail('sub-agent.dispatch', 'IDE_NOT_SUPPORTED', error.message, { role, toolCall: null, dispatchRecordPath: null }, ['Switch IDE or pick a role the current IDE supports.']), asJson);
640
- process.exitCode = 1;
641
- return;
642
- }
643
- throw error;
644
- }
645
- // G7 — optional --write-artifact: build ArtifactMeta, attach to record.
646
- let artifactMeta = null;
647
- if (typeof options.writeArtifact === 'string' && options.writeArtifact.length > 0) {
648
- try {
649
- assertSafeArtifactPath(options.writeArtifact, projectRoot);
650
- if (!existsSync(options.writeArtifact)) {
651
- warnings.push('ARTIFACT_NOT_FOUND');
652
- }
653
- else {
654
- artifactMeta = buildArtifactMeta({
655
- path: options.writeArtifact,
656
- rid,
657
- role,
658
- idx: 1, // single dispatch, idx=1
659
- summary: null
660
- });
661
- }
662
- }
663
- catch (err) {
664
- warnings.push(`ARTIFACT_PATH_INVALID: ${getErrorMessage(err)}`);
665
- }
666
- }
667
- // Slice 4.0.8 RD §4 D4c: bind this dispatch to a graph node. When the
668
- // caller names none, provision one — that is what collapses the
669
- // documented three-step ritual (create graph -> `peaks workflow node
670
- // prepare` -> dispatch) into a single call. Those three fields were
671
- // also never passed to the writer, so the record's graph binding was
672
- // always null and the writer's transition never fired: the feature was
673
- // inert, and only its precondition (the required flag) was real.
674
- const graphBinding = (() => {
675
- if (typeof options.graphNode === 'string' && options.graphNode.length > 0) {
676
- return {
677
- nodeId: options.graphNode,
678
- workflowId: options.workflowId ?? null,
679
- graphRef: options.graphRef ?? null
680
- };
681
- }
682
- const provisioned = provisionDispatchNode({
683
- projectRoot,
684
- sessionId: sid,
685
- role,
686
- workflowId: options.workflowId,
687
- graphRef: options.graphRef
688
- });
689
- return {
690
- nodeId: provisioned.nodeId,
691
- workflowId: provisioned.workflowId,
692
- graphRef: provisioned.graphRef
693
- };
694
- })();
695
- const { path: dispatchRecordPath } = writeInitialDispatchRecord({
696
- projectRoot,
697
- sessionId: sid,
698
- requestId: rid,
699
- role,
700
- prompt: effectivePrompt,
701
- workflowId: graphBinding.workflowId,
702
- graphNodeId: graphBinding.nodeId,
703
- graphRef: graphBinding.graphRef,
704
- toolCall,
705
- batchId,
706
- // Slice 2026-07-29-worktree-l2-extended Part 3.A: persist the
707
- // lease id on the dispatch record so the finalize-time
708
- // release hook (markCompleted / heartbeat --status done) can
709
- // auto-fire `peaks worktree release` when the sub-agent
710
- // completes. Null when --isolation was not requested.
711
- leaseId,
712
- // Slice 2026-07-29-worktree-l2-extended Part 7: stamp the
713
- // ISO timestamp when the isolation mode was set up. Null
714
- // when --isolation was not requested. The dashboard reads
715
- // this directly off the dispatch record to compute
716
- // isolation duration without cross-referencing the
717
- // metrics stream.
718
- isolationStartedAt: isolationMode !== null ? new Date().toISOString() : null
719
- });
720
- const counter = noteDispatched(projectRoot, sid, batchId);
721
- if (counter.warning) {
722
- warnings.push(counter.warning.message);
723
- }
724
- const contextImpact = buildContextImpact({
725
- promptSize: effectivePrompt.length,
726
- artifactSizes: artifactMeta ? [artifactMeta.size] : []
727
- });
728
- const nextActions = [
729
- 'Tool call is dry-run; LLM must execute the tool to actually dispatch the sub-agent.',
730
- 'After dispatching, the sub-agent should call `peaks sub-agent heartbeat --record ' +
731
- dispatchRecordPath +
732
- '` periodically.'
733
- ];
734
- if (counter.warning) {
735
- nextActions.push(`Batch is over the RL-1 limit (${BATCH_LIMIT}); consider splitting into multiple batches.`);
736
- }
737
- const expectedCompletionSeconds = 45;
738
- const artifactsPublicPaths = typeof options.writeArtifact === 'string' && options.writeArtifact.length > 0
739
- ? [options.writeArtifact]
740
- : [];
741
- const orchestratorVisibleHint = `⏳ Spawning sub-agent via Task tool: ${role} for rid=${rid}, batch-id=${batchId} (ETA ~${expectedCompletionSeconds}s)`;
742
- printResult(io, ok('sub-agent.dispatch', {
743
- // Slice 2026-06-23-audit-4th #E1: every CLI envelope carries
744
- // an envelopeVersion marker so consumers can detect contract
745
- // changes (the previous #4 dropped `data.prompt` silently).
746
- envelopeVersion: '2.3.0',
747
- role,
748
- ide: adapter.subAgentDispatcher.label,
749
- // Slice 2026-06-23-audit-3rd #4: do NOT echo `prompt` in stdout.
750
- // Prompts can carry user content (sometimes test credentials /
751
- // internal URLs) that has no business landing in shell history,
752
- // log aggregators, or tmux scrollback. The dispatch record on
753
- // disk (gitignored under .peaks/_sub_agents/) keeps the prompt
754
- // for the sub-agent to read; CLI stdout stays metadata-only.
755
- // Surface promptSize + originalPromptSize so the LLM-side
756
- // runner can reason about the size delta without seeing the
757
- // content.
758
- originalPromptSize: options.prompt.length,
759
- promptSize: effectivePrompt.length,
760
- toolCall,
761
- dispatchRecordPath,
762
- batchId,
763
- dispatchedInBatch: counter.count,
764
- forcedAt: decision.forcedAt,
765
- contextImpact,
766
- artifactMetas: artifactMeta ? [artifactMeta] : [],
767
- orchestratorVisibleHint,
768
- artifactsPublicPaths,
769
- expectedCompletionSeconds,
770
- // Part 2.C: when --isolation worktree, surface the lease
771
- // handle to the LLM-side runner so it can call
772
- // `peaks worktree release --lease-id <id>` after the sub-agent
773
- // finishes (or rely on the next gc pass to clean up). When
774
- // isolation is not requested, isolation === null.
775
- isolation: isolationMode,
776
- leaseId,
777
- worktreePath,
778
- worktreeBranch,
779
- // F5: anti-fake-green gate envelope surface. When
780
- // `--must-ls-files <glob>` is supplied this carries the
781
- // pre-dispatch verification result so the orchestrator can
782
- // surface "the file exists" (or "missing — block") before
783
- // spawning the sub-agent. Null when the flag is absent.
784
- mustLsFilesVerification
785
- }, warnings, nextActions), asJson);
786
- // Slice 2026-06-23-audit-4th #B1: structured log on success path.
787
- // Best-effort: writeLogEntry swallows its own errors (logger.ts:155-159),
788
- // so a full disk or missing ~/.peaks/logs/ dir never blocks the dispatch.
789
- try {
790
- writeLogEntry({
791
- ts: new Date().toISOString(),
792
- level: 'info',
793
- command: 'sub-agent.dispatch',
794
- msg: 'dispatched',
795
- sessionId: sid,
796
- batchId,
797
- data: {
798
- rid,
799
- role,
800
- batchId,
801
- dispatchedInBatch: counter.count,
802
- forcedAt: decision.forcedAt
803
- }
804
- });
805
- }
806
- catch {
807
- // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
808
- /* best-effort */
809
- }
810
- }
811
- catch (error) {
812
- printResult(io, fail('sub-agent.dispatch', 'DISPATCH_ERROR', getErrorMessage(error), { role, toolCall: null, dispatchRecordPath: null }, [
813
- 'See error message; if you are dispatching from a SKILL.md, the LLM should retry with a smaller prompt or pick a different role.'
814
- ]), asJson);
815
- process.exitCode = 1;
816
- }
23
+ import { buildDispatchCommandSpec } from './dispatch-command-spec.js';
24
+ import { runDetachedDispatch } from './dispatch-detached-branch.js';
25
+ import { preflightDispatch } from './dispatch-preflight.js';
26
+ import { resolveIsolationLease } from './dispatch-isolation-lease.js';
27
+ import { composeDispatchPrompt } from './dispatch-prompt-composition.js';
28
+ import { buildDispatchToolCall } from './dispatch-tool-call.js';
29
+ import { writeDispatchRecord } from './dispatch-record-write.js';
30
+ import { emitDispatchEnvelope, writeDispatchLogEntry } from './dispatch-envelope.js';
31
+ function buildDispatchContext(options, role, asJson) {
32
+ const projectRoot = options.project ?? process.cwd();
33
+ // passed, auto-resolve the active peaks session id from
34
+ // `.peaks/_runtime/session.json` (or PEAKS_SESSION_ID env var) so
35
+ // dispatch records land in `.peaks/_sub_agents/<real-sid>/` instead
36
+ // of the `unknown-sid` fallback. The unknown-sid branch is preserved
37
+ // as the last-resort so callers without a bound session (e.g. an
38
+ // ad-hoc dispatch in a fresh tree) still get a deterministic path.
39
+ const sid = options.sessionId ??
40
+ process.env.PEAKS_SESSION_ID ??
41
+ getCurrentSessionId(projectRoot) ??
42
+ 'unknown-sid';
43
+ const rid = options.requestId ?? 'unknown-rid';
44
+ const batchId = options.batchId ?? randomUUID();
45
+ return { projectRoot, sid, rid, role, batchId, asJson };
46
+ }
47
+ async function acquireIsolationLease(io, options, ctx) {
48
+ return resolveIsolationLease(io, options, {
49
+ projectRoot: ctx.projectRoot,
50
+ sid: ctx.sid,
51
+ rid: ctx.rid,
52
+ role: ctx.role,
53
+ batchId: ctx.batchId,
54
+ asJson: ctx.asJson
55
+ });
56
+ }
57
+ async function composePromptPhase(io, options, ctx, input) {
58
+ return composeDispatchPrompt(io, {
59
+ projectRoot: ctx.projectRoot,
60
+ sid: ctx.sid,
61
+ rid: ctx.rid,
62
+ role: ctx.role,
63
+ options,
64
+ prompt: input.prompt,
65
+ isolationMode: input.lease.isolationMode,
66
+ leaseId: input.lease.leaseId,
67
+ worktreePath: input.lease.worktreePath,
68
+ worktreeBranch: input.lease.worktreeBranch,
69
+ decision: input.decision,
70
+ asJson: ctx.asJson
71
+ });
72
+ }
73
+ function buildToolCallPhase(io, ctx, input) {
74
+ return buildDispatchToolCall(io, {
75
+ adapter: input.adapter,
76
+ role: ctx.role,
77
+ effectivePrompt: input.effectivePrompt,
78
+ rid: ctx.rid,
79
+ sid: ctx.sid,
80
+ projectRoot: ctx.projectRoot,
81
+ isolationMode: input.lease.isolationMode,
82
+ leaseId: input.lease.leaseId,
83
+ asJson: ctx.asJson
817
84
  });
818
85
  }
86
+ function writeRecordPhase(ctx, options, input) {
87
+ return writeDispatchRecord({
88
+ options,
89
+ projectRoot: ctx.projectRoot,
90
+ sid: ctx.sid,
91
+ rid: ctx.rid,
92
+ role: ctx.role,
93
+ effectivePrompt: input.effectivePrompt,
94
+ toolCall: input.toolCall,
95
+ batchId: ctx.batchId,
96
+ isolationMode: input.lease.isolationMode,
97
+ leaseId: input.lease.leaseId,
98
+ warnings: input.warnings
99
+ });
100
+ }
101
+ async function runDispatchPipeline(io, options, role, input) {
102
+ const ctx = buildDispatchContext(options, role, input.asJson);
103
+ const lease = await acquireIsolationLease(io, options, ctx);
104
+ if (lease === null)
105
+ return;
106
+ const composed = await composePromptPhase(io, options, ctx, {
107
+ prompt: input.prompt,
108
+ decision: input.decision,
109
+ lease
110
+ });
111
+ if (composed === null)
112
+ return;
113
+ const { adapter, effectivePrompt, warnings, mustLsFilesVerification } = composed;
114
+ const toolCall = buildToolCallPhase(io, ctx, { adapter, effectivePrompt, lease });
115
+ if (toolCall === null)
116
+ return;
117
+ const { artifactMeta, dispatchRecordPath, counter } = writeRecordPhase(ctx, options, {
118
+ effectivePrompt,
119
+ toolCall,
120
+ lease,
121
+ warnings
122
+ });
123
+ const envelopeInput = {
124
+ ctx,
125
+ options,
126
+ prompt: input.prompt,
127
+ adapter,
128
+ effectivePrompt,
129
+ toolCall,
130
+ dispatchRecordPath,
131
+ counter,
132
+ decision: input.decision,
133
+ artifactMeta,
134
+ mustLsFilesVerification,
135
+ lease
136
+ };
137
+ emitDispatchEnvelope(io, envelopeInput, warnings, input.asJson);
138
+ writeDispatchLogEntry(ctx, counter.count, input.decision.forcedAt);
139
+ }
140
+ async function runDispatchAction(role, options, io) {
141
+ const asJson = options.json === true;
142
+ // explicitly requested, lazy-import the detached handler and short-
143
+ // circuit before the warm-path in-process pipeline runs. Branch
144
+ // lives in the existing action handler (NOT a sibling `peaks
145
+ // sub-agent-detached` command) per the slice decision memo:
146
+ // - 106+ existing dispatch tests reach this exact action path
147
+ // - Backward compat requires the default (no --mode) to keep
148
+ // the in-process envelope shape byte-identical
149
+ // - One validation entry-point reduces double-pipe maintenance
150
+ if (options.mode === 'detached') {
151
+ await runDetachedDispatch(io, role, options, asJson);
152
+ return;
153
+ }
154
+ // 2.7.0 slice-dag-dispatcher MVP: --from-dag short-circuits the single
155
+ // sub-agent path and runs the full DAG plan via `dag-orchestrator`.
156
+ if (typeof options.fromDag === 'string' && options.fromDag.length > 0) {
157
+ await runDispatchFromDag(role, options, asJson, io);
158
+ return;
159
+ }
160
+ const preflight = preflightDispatch(io, role, options, asJson);
161
+ if (preflight === null)
162
+ return;
163
+ const { decision, prompt } = preflight;
164
+ try {
165
+ await runDispatchPipeline(io, options, role, { decision, prompt, asJson });
166
+ }
167
+ catch (error) {
168
+ printResult(io, fail('sub-agent.dispatch', 'DISPATCH_ERROR', getErrorMessage(error), { role, toolCall: null, dispatchRecordPath: null }, [
169
+ 'See error message; if you are dispatching from a SKILL.md, the LLM should retry with a smaller prompt or pick a different role.'
170
+ ]), asJson);
171
+ process.exitCode = 1;
172
+ }
173
+ }
174
+ export function registerDispatchCommand(parent, io) {
175
+ buildDispatchCommandSpec(parent).action((role, options) => runDispatchAction(role, options, io));
176
+ }
819
177
  /**
820
178
  * 2.7.0 slice-dag-dispatcher MVP — see `dispatch-from-dag.ts`.
821
- * The function was pulled out of this file in slice 2026-06-23-audit-3rd
822
179
  * #7 to honor the 800-line file cap and isolate the three heavy
823
180
  * module loads (slice-dag / dag-orchestrator / contract-store) to the
824
181
  * --from-dag codepath only.