peaks-loop 4.1.2 → 4.1.4

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 (717) hide show
  1. package/.claude-plugin/marketplace.json +136 -47
  2. package/CHANGELOG.md +112 -0
  3. package/README-en.md +1 -1
  4. package/README.md +1 -1
  5. package/contracts/readonly-argv-whitelist.json +211 -0
  6. package/dist/cli/commands/asset-command-shared.d.ts +12 -0
  7. package/dist/cli/commands/asset-command-shared.js +45 -0
  8. package/dist/cli/commands/asset-commands.d.ts +6 -1
  9. package/dist/cli/commands/asset-commands.js +11 -372
  10. package/dist/cli/commands/asset-crystallize-command.d.ts +3 -0
  11. package/dist/cli/commands/asset-crystallize-command.js +60 -0
  12. package/dist/cli/commands/asset-crystallize-payload.d.ts +47 -0
  13. package/dist/cli/commands/asset-crystallize-payload.js +85 -0
  14. package/dist/cli/commands/asset-crystallize-runner.d.ts +3 -0
  15. package/dist/cli/commands/asset-crystallize-runner.js +133 -0
  16. package/dist/cli/commands/asset-dispose-command.d.ts +3 -0
  17. package/dist/cli/commands/asset-dispose-command.js +99 -0
  18. package/dist/cli/commands/asset-status-command.d.ts +3 -0
  19. package/dist/cli/commands/asset-status-command.js +100 -0
  20. package/dist/cli/commands/audit-artifact-runners.d.ts +16 -0
  21. package/dist/cli/commands/audit-artifact-runners.js +170 -0
  22. package/dist/cli/commands/audit-command-shared.d.ts +97 -0
  23. package/dist/cli/commands/audit-command-shared.js +60 -0
  24. package/dist/cli/commands/audit-commands.d.ts +7 -31
  25. package/dist/cli/commands/audit-commands.js +64 -473
  26. package/dist/cli/commands/audit-goal-runners.d.ts +17 -0
  27. package/dist/cli/commands/audit-goal-runners.js +114 -0
  28. package/dist/cli/commands/audit-red-lines-runners.d.ts +11 -0
  29. package/dist/cli/commands/audit-red-lines-runners.js +43 -0
  30. package/dist/cli/commands/audit-refusal-data.d.ts +23 -0
  31. package/dist/cli/commands/audit-refusal-data.js +69 -0
  32. package/dist/cli/commands/audit-static-runners.d.ts +13 -0
  33. package/dist/cli/commands/audit-static-runners.js +139 -0
  34. package/dist/cli/commands/await-runners.d.ts +11 -0
  35. package/dist/cli/commands/await-runners.js +148 -0
  36. package/dist/cli/commands/baseline-audit-command.d.ts +3 -0
  37. package/dist/cli/commands/baseline-audit-command.js +64 -0
  38. package/dist/cli/commands/baseline-command-shared.d.ts +23 -0
  39. package/dist/cli/commands/baseline-command-shared.js +39 -0
  40. package/dist/cli/commands/baseline-commands.js +33 -313
  41. package/dist/cli/commands/baseline-freeze-commands.d.ts +4 -0
  42. package/dist/cli/commands/baseline-freeze-commands.js +81 -0
  43. package/dist/cli/commands/baseline-guard-command.d.ts +3 -0
  44. package/dist/cli/commands/baseline-guard-command.js +52 -0
  45. package/dist/cli/commands/baseline-read-commands.d.ts +5 -0
  46. package/dist/cli/commands/baseline-read-commands.js +72 -0
  47. package/dist/cli/commands/baseline-rollback-commands.d.ts +4 -0
  48. package/dist/cli/commands/baseline-rollback-commands.js +88 -0
  49. package/dist/cli/commands/classify-downgrade-command.d.ts +9 -0
  50. package/dist/cli/commands/classify-downgrade-command.js +21 -0
  51. package/dist/cli/commands/classify-run-command.d.ts +9 -0
  52. package/dist/cli/commands/classify-run-command.js +73 -0
  53. package/dist/cli/commands/classify-signals.d.ts +5 -0
  54. package/dist/cli/commands/classify-signals.js +104 -0
  55. package/dist/cli/commands/code-auto-compact-command.d.ts +3 -0
  56. package/dist/cli/commands/code-auto-compact-command.js +124 -0
  57. package/dist/cli/commands/code-auto-compact-envelope.d.ts +22 -0
  58. package/dist/cli/commands/code-auto-compact-envelope.js +39 -0
  59. package/dist/cli/commands/code-context-audit-command.d.ts +3 -0
  60. package/dist/cli/commands/code-context-audit-command.js +68 -0
  61. package/dist/cli/commands/code-context-now-command.d.ts +3 -0
  62. package/dist/cli/commands/code-context-now-command.js +124 -0
  63. package/dist/cli/commands/code-context-now-envelope.d.ts +66 -0
  64. package/dist/cli/commands/code-context-now-envelope.js +136 -0
  65. package/dist/cli/commands/code-context-now-mapping.d.ts +27 -0
  66. package/dist/cli/commands/code-context-now-mapping.js +43 -0
  67. package/dist/cli/commands/code-emit-handoff-command.d.ts +3 -0
  68. package/dist/cli/commands/code-emit-handoff-command.js +136 -0
  69. package/dist/cli/commands/code-gate-step-08-command.d.ts +3 -0
  70. package/dist/cli/commands/code-gate-step-08-command.js +155 -0
  71. package/dist/cli/commands/code-post-compact-detect-command.d.ts +3 -0
  72. package/dist/cli/commands/code-post-compact-detect-command.js +50 -0
  73. package/dist/cli/commands/code-runtime-commands.d.ts +9 -43
  74. package/dist/cli/commands/code-runtime-commands.js +20 -672
  75. package/dist/cli/commands/code-runtime-session.d.ts +1 -0
  76. package/dist/cli/commands/code-runtime-session.js +15 -0
  77. package/dist/cli/commands/codegraph-command-options.d.ts +22 -0
  78. package/dist/cli/commands/codegraph-command-options.js +22 -0
  79. package/dist/cli/commands/codegraph-commands.d.ts +2 -2
  80. package/dist/cli/commands/codegraph-commands.js +14 -397
  81. package/dist/cli/commands/codegraph-config-restore-command.d.ts +3 -0
  82. package/dist/cli/commands/codegraph-config-restore-command.js +200 -0
  83. package/dist/cli/commands/codegraph-proxy-commands.d.ts +10 -0
  84. package/dist/cli/commands/codegraph-proxy-commands.js +159 -0
  85. package/dist/cli/commands/codegraph-repair-commands.d.ts +3 -0
  86. package/dist/cli/commands/codegraph-repair-commands.js +94 -0
  87. package/dist/cli/commands/codegraph-status-command.d.ts +1 -1
  88. package/dist/cli/commands/codegraph-status-command.js +27 -214
  89. package/dist/cli/commands/codegraph-status-integrity.d.ts +44 -0
  90. package/dist/cli/commands/codegraph-status-integrity.js +121 -0
  91. package/dist/cli/commands/codegraph-status-json.d.ts +5 -0
  92. package/dist/cli/commands/codegraph-status-json.js +127 -0
  93. package/dist/cli/commands/compact-command.d.ts +6 -2
  94. package/dist/cli/commands/compact-command.js +12 -559
  95. package/dist/cli/commands/compact-dry-run-command.d.ts +3 -0
  96. package/dist/cli/commands/compact-dry-run-command.js +87 -0
  97. package/dist/cli/commands/compact-force-command.d.ts +3 -0
  98. package/dist/cli/commands/compact-force-command.js +98 -0
  99. package/dist/cli/commands/compact-harness-window-command.d.ts +3 -0
  100. package/dist/cli/commands/compact-harness-window-command.js +174 -0
  101. package/dist/cli/commands/compact-history-command.d.ts +3 -0
  102. package/dist/cli/commands/compact-history-command.js +89 -0
  103. package/dist/cli/commands/compact-read-commands.d.ts +3 -0
  104. package/dist/cli/commands/compact-read-commands.js +123 -0
  105. package/dist/cli/commands/compact-settle-command.d.ts +3 -0
  106. package/dist/cli/commands/compact-settle-command.js +130 -0
  107. package/dist/cli/commands/compact-shared.d.ts +9 -0
  108. package/dist/cli/commands/compact-shared.js +26 -0
  109. package/dist/cli/commands/container-command-shared.d.ts +60 -0
  110. package/dist/cli/commands/container-command-shared.js +52 -0
  111. package/dist/cli/commands/container-commands.d.ts +1 -1
  112. package/dist/cli/commands/container-commands.js +4 -216
  113. package/dist/cli/commands/container-release-command.d.ts +3 -0
  114. package/dist/cli/commands/container-release-command.js +105 -0
  115. package/dist/cli/commands/container-spawn-command.d.ts +3 -0
  116. package/dist/cli/commands/container-spawn-command.js +148 -0
  117. package/dist/cli/commands/context-check-command.d.ts +3 -0
  118. package/dist/cli/commands/context-check-command.js +81 -0
  119. package/dist/cli/commands/context-commands.d.ts +2 -7
  120. package/dist/cli/commands/context-commands.js +6 -276
  121. package/dist/cli/commands/context-layer-command.d.ts +3 -0
  122. package/dist/cli/commands/context-layer-command.js +34 -0
  123. package/dist/cli/commands/context-layer-fetchers.d.ts +15 -0
  124. package/dist/cli/commands/context-layer-fetchers.js +162 -0
  125. package/dist/cli/commands/context-status-command.d.ts +17 -0
  126. package/dist/cli/commands/context-status-command.js +41 -0
  127. package/dist/cli/commands/contract-write-command.d.ts +3 -0
  128. package/dist/cli/commands/contract-write-command.js +144 -0
  129. package/dist/cli/commands/core/doctor-bindings.d.ts +17 -0
  130. package/dist/cli/commands/core/doctor-bindings.js +30 -0
  131. package/dist/cli/commands/core/doctor-command.d.ts +4 -18
  132. package/dist/cli/commands/core/doctor-command.js +2 -323
  133. package/dist/cli/commands/core/doctor-logs.d.ts +8 -0
  134. package/dist/cli/commands/core/doctor-logs.js +32 -0
  135. package/dist/cli/commands/core/doctor-probes.d.ts +3 -0
  136. package/dist/cli/commands/core/doctor-probes.js +55 -0
  137. package/dist/cli/commands/core/doctor-run-command.d.ts +12 -0
  138. package/dist/cli/commands/core/doctor-run-command.js +172 -0
  139. package/dist/cli/commands/core/doctor-summary.d.ts +7 -0
  140. package/dist/cli/commands/core/doctor-summary.js +39 -0
  141. package/dist/cli/commands/core/memory-command-shared.d.ts +25 -0
  142. package/dist/cli/commands/core/memory-command-shared.js +20 -0
  143. package/dist/cli/commands/core/memory-command.d.ts +1 -1
  144. package/dist/cli/commands/core/memory-command.js +6 -227
  145. package/dist/cli/commands/core/memory-delegated-verbs.d.ts +4 -0
  146. package/dist/cli/commands/core/memory-delegated-verbs.js +178 -0
  147. package/dist/cli/commands/core/memory-extract-command.d.ts +3 -0
  148. package/dist/cli/commands/core/memory-extract-command.js +90 -0
  149. package/dist/cli/commands/core/memory-sync-command.d.ts +3 -0
  150. package/dist/cli/commands/core/memory-sync-command.js +38 -0
  151. package/dist/cli/commands/core/session-command.d.ts +1 -1
  152. package/dist/cli/commands/core/session-command.js +12 -206
  153. package/dist/cli/commands/core/session-info-command.d.ts +3 -0
  154. package/dist/cli/commands/core/session-info-command.js +142 -0
  155. package/dist/cli/commands/core/session-verb-commands.d.ts +5 -0
  156. package/dist/cli/commands/core/session-verb-commands.js +58 -0
  157. package/dist/cli/commands/core/skill-command.d.ts +1 -44
  158. package/dist/cli/commands/core/skill-command.js +13 -541
  159. package/dist/cli/commands/core/skill-context-verdict.d.ts +38 -0
  160. package/dist/cli/commands/core/skill-context-verdict.js +63 -0
  161. package/dist/cli/commands/core/skill-generated-config-notice.d.ts +41 -0
  162. package/dist/cli/commands/core/skill-generated-config-notice.js +75 -0
  163. package/dist/cli/commands/core/skill-heartbeat-commands.d.ts +3 -0
  164. package/dist/cli/commands/core/skill-heartbeat-commands.js +50 -0
  165. package/dist/cli/commands/core/skill-presence-commands.d.ts +3 -0
  166. package/dist/cli/commands/core/skill-presence-commands.js +123 -0
  167. package/dist/cli/commands/core/skill-presence-housekeeping-commands.d.ts +3 -0
  168. package/dist/cli/commands/core/skill-presence-housekeeping-commands.js +165 -0
  169. package/dist/cli/commands/core/skill-registry-commands.d.ts +3 -0
  170. package/dist/cli/commands/core/skill-registry-commands.js +117 -0
  171. package/dist/cli/commands/core/skill-runbook-command.d.ts +3 -0
  172. package/dist/cli/commands/core/skill-runbook-command.js +29 -0
  173. package/dist/cli/commands/core/standards-command.d.ts +1 -24
  174. package/dist/cli/commands/core/standards-command.js +33 -201
  175. package/dist/cli/commands/core/standards-init-command.d.ts +3 -0
  176. package/dist/cli/commands/core/standards-init-command.js +87 -0
  177. package/dist/cli/commands/core/standards-lint.d.ts +24 -0
  178. package/dist/cli/commands/core/standards-lint.js +57 -0
  179. package/dist/cli/commands/core/standards-migrate-command.d.ts +3 -0
  180. package/dist/cli/commands/core/standards-migrate-command.js +57 -0
  181. package/dist/cli/commands/cron-scheduler-commands.d.ts +5 -1
  182. package/dist/cli/commands/cron-scheduler-commands.js +36 -206
  183. package/dist/cli/commands/cron-scheduler-run-once-command.d.ts +7 -0
  184. package/dist/cli/commands/cron-scheduler-run-once-command.js +35 -0
  185. package/dist/cli/commands/cron-scheduler-shared.d.ts +6 -0
  186. package/dist/cli/commands/cron-scheduler-shared.js +48 -0
  187. package/dist/cli/commands/cron-scheduler-start-command.d.ts +7 -0
  188. package/dist/cli/commands/cron-scheduler-start-command.js +65 -0
  189. package/dist/cli/commands/cron-scheduler-status-command.d.ts +7 -0
  190. package/dist/cli/commands/cron-scheduler-status-command.js +46 -0
  191. package/dist/cli/commands/cron-scheduler-stop-command.d.ts +7 -0
  192. package/dist/cli/commands/cron-scheduler-stop-command.js +61 -0
  193. package/dist/cli/commands/dispatch-command-spec.d.ts +2 -0
  194. package/dist/cli/commands/dispatch-command-spec.js +62 -0
  195. package/dist/cli/commands/dispatch-commands.js +159 -775
  196. package/dist/cli/commands/dispatch-dag-envelope.d.ts +41 -0
  197. package/dist/cli/commands/dispatch-dag-envelope.js +49 -0
  198. package/dist/cli/commands/dispatch-dag-failure.d.ts +18 -0
  199. package/dist/cli/commands/dispatch-dag-failure.js +16 -0
  200. package/dist/cli/commands/dispatch-dag-preflight.d.ts +51 -0
  201. package/dist/cli/commands/dispatch-dag-preflight.js +105 -0
  202. package/dist/cli/commands/dispatch-dag-runners.d.ts +48 -0
  203. package/dist/cli/commands/dispatch-dag-runners.js +73 -0
  204. package/dist/cli/commands/dispatch-detached-branch.d.ts +3 -0
  205. package/dist/cli/commands/dispatch-detached-branch.js +58 -0
  206. package/dist/cli/commands/dispatch-envelope.d.ts +36 -0
  207. package/dist/cli/commands/dispatch-envelope.js +104 -0
  208. package/dist/cli/commands/dispatch-from-dag.d.ts +27 -0
  209. package/dist/cli/commands/dispatch-from-dag.js +87 -257
  210. package/dist/cli/commands/dispatch-isolation-lease.d.ts +17 -0
  211. package/dist/cli/commands/dispatch-isolation-lease.js +149 -0
  212. package/dist/cli/commands/dispatch-preflight.d.ts +7 -0
  213. package/dist/cli/commands/dispatch-preflight.js +105 -0
  214. package/dist/cli/commands/dispatch-prompt-blocks.d.ts +10 -0
  215. package/dist/cli/commands/dispatch-prompt-blocks.js +56 -0
  216. package/dist/cli/commands/dispatch-prompt-composition.d.ts +30 -0
  217. package/dist/cli/commands/dispatch-prompt-composition.js +171 -0
  218. package/dist/cli/commands/dispatch-record-write.d.ts +24 -0
  219. package/dist/cli/commands/dispatch-record-write.js +96 -0
  220. package/dist/cli/commands/dispatch-tool-call.d.ts +15 -0
  221. package/dist/cli/commands/dispatch-tool-call.js +128 -0
  222. package/dist/cli/commands/evolution-command-shared.d.ts +78 -0
  223. package/dist/cli/commands/evolution-command-shared.js +107 -0
  224. package/dist/cli/commands/evolution-commands.d.ts +11 -1
  225. package/dist/cli/commands/evolution-commands.js +19 -350
  226. package/dist/cli/commands/evolution-evaluate-command.d.ts +24 -0
  227. package/dist/cli/commands/evolution-evaluate-command.js +138 -0
  228. package/dist/cli/commands/evolution-propose-command.d.ts +23 -0
  229. package/dist/cli/commands/evolution-propose-command.js +145 -0
  230. package/dist/cli/commands/evolution-status-command.d.ts +17 -0
  231. package/dist/cli/commands/evolution-status-command.js +41 -0
  232. package/dist/cli/commands/evolution-verdict-commands.d.ts +30 -0
  233. package/dist/cli/commands/evolution-verdict-commands.js +100 -0
  234. package/dist/cli/commands/final-review-command-envelopes.d.ts +44 -0
  235. package/dist/cli/commands/final-review-command-envelopes.js +100 -0
  236. package/dist/cli/commands/final-review-command-shared.d.ts +52 -0
  237. package/dist/cli/commands/final-review-command-shared.js +35 -0
  238. package/dist/cli/commands/final-review-commands.d.ts +7 -27
  239. package/dist/cli/commands/final-review-commands.js +13 -240
  240. package/dist/cli/commands/final-review-prepare-command.d.ts +3 -0
  241. package/dist/cli/commands/final-review-prepare-command.js +200 -0
  242. package/dist/cli/commands/finalize-accumulator.d.ts +44 -0
  243. package/dist/cli/commands/finalize-accumulator.js +55 -0
  244. package/dist/cli/commands/finalize-branches.d.ts +34 -0
  245. package/dist/cli/commands/finalize-branches.js +119 -0
  246. package/dist/cli/commands/finalize-runners.d.ts +3 -0
  247. package/dist/cli/commands/finalize-runners.js +92 -0
  248. package/dist/cli/commands/finalize-selection.d.ts +65 -0
  249. package/dist/cli/commands/finalize-selection.js +35 -0
  250. package/dist/cli/commands/gate-commands.js +26 -8
  251. package/dist/cli/commands/governance-classify-contract-commands.d.ts +23 -9
  252. package/dist/cli/commands/governance-classify-contract-commands.js +26 -269
  253. package/dist/cli/commands/hooks-command-shared.d.ts +42 -0
  254. package/dist/cli/commands/hooks-command-shared.js +32 -0
  255. package/dist/cli/commands/hooks-commands.d.ts +20 -0
  256. package/dist/cli/commands/hooks-commands.js +75 -309
  257. package/dist/cli/commands/hooks-install-envelopes.d.ts +6 -0
  258. package/dist/cli/commands/hooks-install-envelopes.js +144 -0
  259. package/dist/cli/commands/hooks-status-command.d.ts +3 -0
  260. package/dist/cli/commands/hooks-status-command.js +93 -0
  261. package/dist/cli/commands/hooks-uninstall-command.d.ts +3 -0
  262. package/dist/cli/commands/hooks-uninstall-command.js +43 -0
  263. package/dist/cli/commands/job-checkpoint-commands.d.ts +3 -0
  264. package/dist/cli/commands/job-checkpoint-commands.js +157 -0
  265. package/dist/cli/commands/job-command-shared.d.ts +109 -0
  266. package/dist/cli/commands/job-command-shared.js +72 -0
  267. package/dist/cli/commands/job-commands.d.ts +4 -64
  268. package/dist/cli/commands/job-commands.js +42 -552
  269. package/dist/cli/commands/job-cost-check-command.d.ts +3 -0
  270. package/dist/cli/commands/job-cost-check-command.js +41 -0
  271. package/dist/cli/commands/job-init-status-commands.d.ts +3 -0
  272. package/dist/cli/commands/job-init-status-commands.js +149 -0
  273. package/dist/cli/commands/job-run-commands.d.ts +3 -0
  274. package/dist/cli/commands/job-run-commands.js +97 -0
  275. package/dist/cli/commands/job-state-root.d.ts +35 -0
  276. package/dist/cli/commands/job-state-root.js +76 -0
  277. package/dist/cli/commands/loop-command-shared.d.ts +31 -0
  278. package/dist/cli/commands/loop-command-shared.js +15 -0
  279. package/dist/cli/commands/loop-commands.d.ts +12 -17
  280. package/dist/cli/commands/loop-commands.js +56 -238
  281. package/dist/cli/commands/loop-eval-capture-index.d.ts +4 -0
  282. package/dist/cli/commands/loop-eval-capture-index.js +44 -0
  283. package/dist/cli/commands/loop-eval-commands.d.ts +8 -5
  284. package/dist/cli/commands/loop-eval-commands.js +12 -626
  285. package/dist/cli/commands/loop-eval-eval-command.d.ts +3 -0
  286. package/dist/cli/commands/loop-eval-eval-command.js +168 -0
  287. package/dist/cli/commands/loop-eval-monotonic-command.d.ts +3 -0
  288. package/dist/cli/commands/loop-eval-monotonic-command.js +90 -0
  289. package/dist/cli/commands/loop-eval-parents.d.ts +7 -0
  290. package/dist/cli/commands/loop-eval-parents.js +20 -0
  291. package/dist/cli/commands/loop-eval-run-code.d.ts +7 -0
  292. package/dist/cli/commands/loop-eval-run-code.js +40 -0
  293. package/dist/cli/commands/loop-eval-run-command.d.ts +3 -0
  294. package/dist/cli/commands/loop-eval-run-command.js +113 -0
  295. package/dist/cli/commands/loop-eval-spec-commands.d.ts +3 -0
  296. package/dist/cli/commands/loop-eval-spec-commands.js +165 -0
  297. package/dist/cli/commands/loop-eval-spec-lint-command.d.ts +3 -0
  298. package/dist/cli/commands/loop-eval-spec-lint-command.js +42 -0
  299. package/dist/cli/commands/loop-eval-workflow-commands.d.ts +3 -0
  300. package/dist/cli/commands/loop-eval-workflow-commands.js +141 -0
  301. package/dist/cli/commands/loop-export-command.d.ts +3 -0
  302. package/dist/cli/commands/loop-export-command.js +73 -0
  303. package/dist/cli/commands/loop-goal-compose-command.d.ts +3 -0
  304. package/dist/cli/commands/loop-goal-compose-command.js +36 -0
  305. package/dist/cli/commands/loop-import-command.d.ts +3 -0
  306. package/dist/cli/commands/loop-import-command.js +86 -0
  307. package/dist/cli/commands/loop-placeholder-commands.d.ts +3 -0
  308. package/dist/cli/commands/loop-placeholder-commands.js +52 -0
  309. package/dist/cli/commands/mcp-commands.d.ts +10 -0
  310. package/dist/cli/commands/mcp-commands.js +157 -0
  311. package/dist/cli/commands/memory-command-shared.d.ts +59 -0
  312. package/dist/cli/commands/memory-command-shared.js +39 -0
  313. package/dist/cli/commands/memory-commands.d.ts +6 -79
  314. package/dist/cli/commands/memory-commands.js +19 -309
  315. package/dist/cli/commands/memory-ingest-command.d.ts +3 -0
  316. package/dist/cli/commands/memory-ingest-command.js +50 -0
  317. package/dist/cli/commands/memory-list-command.d.ts +16 -0
  318. package/dist/cli/commands/memory-list-command.js +129 -0
  319. package/dist/cli/commands/memory-reindex-command.d.ts +9 -0
  320. package/dist/cli/commands/memory-reindex-command.js +78 -0
  321. package/dist/cli/commands/memory-rotate-command.d.ts +3 -0
  322. package/dist/cli/commands/memory-rotate-command.js +55 -0
  323. package/dist/cli/commands/memory-search-command.d.ts +7 -0
  324. package/dist/cli/commands/memory-search-command.js +46 -0
  325. package/dist/cli/commands/openspec-archive-command.d.ts +3 -0
  326. package/dist/cli/commands/openspec-archive-command.js +55 -0
  327. package/dist/cli/commands/openspec-command-shared.d.ts +62 -0
  328. package/dist/cli/commands/openspec-command-shared.js +135 -0
  329. package/dist/cli/commands/openspec-commands.d.ts +1 -1
  330. package/dist/cli/commands/openspec-commands.js +33 -306
  331. package/dist/cli/commands/openspec-from-doctor-command.d.ts +3 -0
  332. package/dist/cli/commands/openspec-from-doctor-command.js +66 -0
  333. package/dist/cli/commands/openspec-init-command.d.ts +3 -0
  334. package/dist/cli/commands/openspec-init-command.js +49 -0
  335. package/dist/cli/commands/openspec-list-command.d.ts +3 -0
  336. package/dist/cli/commands/openspec-list-command.js +27 -0
  337. package/dist/cli/commands/openspec-render-command.d.ts +3 -0
  338. package/dist/cli/commands/openspec-render-command.js +33 -0
  339. package/dist/cli/commands/openspec-show-command.d.ts +3 -0
  340. package/dist/cli/commands/openspec-show-command.js +33 -0
  341. package/dist/cli/commands/openspec-to-rd-command.d.ts +3 -0
  342. package/dist/cli/commands/openspec-to-rd-command.js +33 -0
  343. package/dist/cli/commands/openspec-validate-command.d.ts +3 -0
  344. package/dist/cli/commands/openspec-validate-command.js +45 -0
  345. package/dist/cli/commands/playwright-browser-command.d.ts +8 -0
  346. package/dist/cli/commands/playwright-browser-command.js +61 -0
  347. package/dist/cli/commands/playwright-commands.d.ts +10 -62
  348. package/dist/cli/commands/playwright-commands.js +77 -400
  349. package/dist/cli/commands/playwright-envelope.d.ts +8 -0
  350. package/dist/cli/commands/playwright-envelope.js +29 -0
  351. package/dist/cli/commands/playwright-ls-stop-commands.d.ts +4 -0
  352. package/dist/cli/commands/playwright-ls-stop-commands.js +74 -0
  353. package/dist/cli/commands/playwright-session-store.d.ts +65 -0
  354. package/dist/cli/commands/playwright-session-store.js +189 -0
  355. package/dist/cli/commands/project-commands.d.ts +19 -0
  356. package/dist/cli/commands/project-commands.js +98 -259
  357. package/dist/cli/commands/project-context-command.d.ts +3 -0
  358. package/dist/cli/commands/project-context-command.js +44 -0
  359. package/dist/cli/commands/project-dashboard-command.d.ts +3 -0
  360. package/dist/cli/commands/project-dashboard-command.js +74 -0
  361. package/dist/cli/commands/project-knowledge-command.d.ts +3 -0
  362. package/dist/cli/commands/project-knowledge-command.js +48 -0
  363. package/dist/cli/commands/project-memories-show-command.d.ts +3 -0
  364. package/dist/cli/commands/project-memories-show-command.js +87 -0
  365. package/dist/cli/commands/project-memory-index-command.d.ts +3 -0
  366. package/dist/cli/commands/project-memory-index-command.js +31 -0
  367. package/dist/cli/commands/qa-archive-screenshots-command.d.ts +3 -0
  368. package/dist/cli/commands/qa-archive-screenshots-command.js +53 -0
  369. package/dist/cli/commands/qa-commands.d.ts +14 -87
  370. package/dist/cli/commands/qa-commands.js +17 -315
  371. package/dist/cli/commands/qa-context-prestep.d.ts +1 -0
  372. package/dist/cli/commands/qa-context-prestep.js +34 -0
  373. package/dist/cli/commands/qa-run-command.d.ts +3 -0
  374. package/dist/cli/commands/qa-run-command.js +105 -0
  375. package/dist/cli/commands/qa-run-options.d.ts +23 -0
  376. package/dist/cli/commands/qa-run-options.js +31 -0
  377. package/dist/cli/commands/qa-run-slice.d.ts +41 -0
  378. package/dist/cli/commands/qa-run-slice.js +145 -0
  379. package/dist/cli/commands/release-canary-command.d.ts +28 -0
  380. package/dist/cli/commands/release-canary-command.js +129 -0
  381. package/dist/cli/commands/release-command-shared.d.ts +13 -0
  382. package/dist/cli/commands/release-command-shared.js +18 -0
  383. package/dist/cli/commands/release-commands.d.ts +10 -18
  384. package/dist/cli/commands/release-commands.js +25 -298
  385. package/dist/cli/commands/release-done-command.d.ts +3 -0
  386. package/dist/cli/commands/release-done-command.js +64 -0
  387. package/dist/cli/commands/release-hotfix-command.d.ts +3 -0
  388. package/dist/cli/commands/release-hotfix-command.js +50 -0
  389. package/dist/cli/commands/release-plan-command.d.ts +3 -0
  390. package/dist/cli/commands/release-plan-command.js +33 -0
  391. package/dist/cli/commands/release-precheck-command.d.ts +3 -0
  392. package/dist/cli/commands/release-precheck-command.js +28 -0
  393. package/dist/cli/commands/release-promote-command.d.ts +3 -0
  394. package/dist/cli/commands/release-promote-command.js +34 -0
  395. package/dist/cli/commands/release-rollback-command.d.ts +3 -0
  396. package/dist/cli/commands/release-rollback-command.js +33 -0
  397. package/dist/cli/commands/release-watch-command.d.ts +3 -0
  398. package/dist/cli/commands/release-watch-command.js +44 -0
  399. package/dist/cli/commands/request-command-options.d.ts +49 -0
  400. package/dist/cli/commands/request-command-options.js +1 -0
  401. package/dist/cli/commands/request-commands.d.ts +3 -9
  402. package/dist/cli/commands/request-commands.js +17 -522
  403. package/dist/cli/commands/request-init-command.d.ts +3 -0
  404. package/dist/cli/commands/request-init-command.js +100 -0
  405. package/dist/cli/commands/request-lint-command.d.ts +3 -0
  406. package/dist/cli/commands/request-lint-command.js +50 -0
  407. package/dist/cli/commands/request-list-command.d.ts +10 -0
  408. package/dist/cli/commands/request-list-command.js +53 -0
  409. package/dist/cli/commands/request-repair-status-command.d.ts +3 -0
  410. package/dist/cli/commands/request-repair-status-command.js +61 -0
  411. package/dist/cli/commands/request-show-command.d.ts +3 -0
  412. package/dist/cli/commands/request-show-command.js +56 -0
  413. package/dist/cli/commands/request-transition-command.d.ts +3 -0
  414. package/dist/cli/commands/request-transition-command.js +122 -0
  415. package/dist/cli/commands/request-transition-failures.d.ts +8 -0
  416. package/dist/cli/commands/request-transition-failures.js +90 -0
  417. package/dist/cli/commands/request-transition-hooks.d.ts +50 -0
  418. package/dist/cli/commands/request-transition-hooks.js +115 -0
  419. package/dist/cli/commands/request-transition-preflight.d.ts +10 -0
  420. package/dist/cli/commands/request-transition-preflight.js +107 -0
  421. package/dist/cli/commands/scan-command-shared.d.ts +96 -0
  422. package/dist/cli/commands/scan-command-shared.js +83 -0
  423. package/dist/cli/commands/scan-commands.d.ts +3 -2
  424. package/dist/cli/commands/scan-commands.js +23 -463
  425. package/dist/cli/commands/scan-inventory-commands.d.ts +3 -0
  426. package/dist/cli/commands/scan-inventory-commands.js +96 -0
  427. package/dist/cli/commands/scan-project-commands.d.ts +3 -0
  428. package/dist/cli/commands/scan-project-commands.js +65 -0
  429. package/dist/cli/commands/scan-scope-commands.d.ts +3 -0
  430. package/dist/cli/commands/scan-scope-commands.js +149 -0
  431. package/dist/cli/commands/scan-scope-helpers.d.ts +8 -0
  432. package/dist/cli/commands/scan-scope-helpers.js +54 -0
  433. package/dist/cli/commands/scan-structural-commands.d.ts +3 -0
  434. package/dist/cli/commands/scan-structural-commands.js +113 -0
  435. package/dist/cli/commands/sediment-argv-flags.d.ts +54 -0
  436. package/dist/cli/commands/sediment-argv-flags.js +116 -0
  437. package/dist/cli/commands/sediment-command-shared.d.ts +15 -0
  438. package/dist/cli/commands/sediment-command-shared.js +5 -0
  439. package/dist/cli/commands/sediment-commands.d.ts +35 -59
  440. package/dist/cli/commands/sediment-commands.js +36 -590
  441. package/dist/cli/commands/sediment-pool-commands.d.ts +9 -0
  442. package/dist/cli/commands/sediment-pool-commands.js +185 -0
  443. package/dist/cli/commands/sediment-query-commands.d.ts +4 -0
  444. package/dist/cli/commands/sediment-query-commands.js +94 -0
  445. package/dist/cli/commands/sediment-release-commands.d.ts +8 -0
  446. package/dist/cli/commands/sediment-release-commands.js +232 -0
  447. package/dist/cli/commands/share-commands.d.ts +12 -68
  448. package/dist/cli/commands/share-commands.js +47 -556
  449. package/dist/cli/commands/share-error-hints.d.ts +14 -0
  450. package/dist/cli/commands/share-error-hints.js +38 -0
  451. package/dist/cli/commands/share-identity.d.ts +13 -0
  452. package/dist/cli/commands/share-identity.js +22 -0
  453. package/dist/cli/commands/share-record-paths.d.ts +37 -0
  454. package/dist/cli/commands/share-record-paths.js +68 -0
  455. package/dist/cli/commands/share-runners.d.ts +3 -0
  456. package/dist/cli/commands/share-runners.js +158 -0
  457. package/dist/cli/commands/shared-read-runners.d.ts +3 -0
  458. package/dist/cli/commands/shared-read-runners.js +51 -0
  459. package/dist/cli/commands/slice-check-command.d.ts +3 -0
  460. package/dist/cli/commands/slice-check-command.js +54 -0
  461. package/dist/cli/commands/slice-commands.d.ts +2 -22
  462. package/dist/cli/commands/slice-commands.js +18 -517
  463. package/dist/cli/commands/slice-decompose-artifacts.d.ts +18 -0
  464. package/dist/cli/commands/slice-decompose-artifacts.js +79 -0
  465. package/dist/cli/commands/slice-decompose-command.d.ts +3 -0
  466. package/dist/cli/commands/slice-decompose-command.js +123 -0
  467. package/dist/cli/commands/slice-list-commands.d.ts +3 -0
  468. package/dist/cli/commands/slice-list-commands.js +182 -0
  469. package/dist/cli/commands/slice-pick-command.d.ts +3 -0
  470. package/dist/cli/commands/slice-pick-command.js +60 -0
  471. package/dist/cli/commands/slice-plan-command.d.ts +24 -0
  472. package/dist/cli/commands/slice-plan-command.js +111 -0
  473. package/dist/cli/commands/sop-advance-command.d.ts +3 -0
  474. package/dist/cli/commands/sop-advance-command.js +160 -0
  475. package/dist/cli/commands/sop-check-command.d.ts +3 -0
  476. package/dist/cli/commands/sop-check-command.js +44 -0
  477. package/dist/cli/commands/sop-command-shared.d.ts +23 -0
  478. package/dist/cli/commands/sop-command-shared.js +18 -0
  479. package/dist/cli/commands/sop-commands.d.ts +15 -1
  480. package/dist/cli/commands/sop-commands.js +26 -240
  481. package/dist/cli/commands/sop-init-command.d.ts +3 -0
  482. package/dist/cli/commands/sop-init-command.js +51 -0
  483. package/dist/cli/commands/sop-lint-command.d.ts +3 -0
  484. package/dist/cli/commands/sop-lint-command.js +64 -0
  485. package/dist/cli/commands/sop-register-command.d.ts +3 -0
  486. package/dist/cli/commands/sop-register-command.js +48 -0
  487. package/dist/cli/commands/sop-registry-command.d.ts +3 -0
  488. package/dist/cli/commands/sop-registry-command.js +30 -0
  489. package/dist/cli/commands/statusline-command-shared.d.ts +73 -0
  490. package/dist/cli/commands/statusline-command-shared.js +90 -0
  491. package/dist/cli/commands/statusline-commands.d.ts +1 -19
  492. package/dist/cli/commands/statusline-commands.js +48 -287
  493. package/dist/cli/commands/statusline-compact-command.d.ts +4 -0
  494. package/dist/cli/commands/statusline-compact-command.js +54 -0
  495. package/dist/cli/commands/statusline-install-command.d.ts +3 -0
  496. package/dist/cli/commands/statusline-install-command.js +48 -0
  497. package/dist/cli/commands/statusline-render-command.d.ts +9 -0
  498. package/dist/cli/commands/statusline-render-command.js +55 -0
  499. package/dist/cli/commands/statusline-status-command.d.ts +3 -0
  500. package/dist/cli/commands/statusline-status-command.js +23 -0
  501. package/dist/cli/commands/statusline-uninstall-command.d.ts +3 -0
  502. package/dist/cli/commands/statusline-uninstall-command.js +23 -0
  503. package/dist/cli/commands/test-command-run-helpers.d.ts +27 -0
  504. package/dist/cli/commands/test-command-run-helpers.js +73 -0
  505. package/dist/cli/commands/test-command-runner-resolution.d.ts +57 -0
  506. package/dist/cli/commands/test-command-runner-resolution.js +183 -0
  507. package/dist/cli/commands/test-commands.d.ts +8 -56
  508. package/dist/cli/commands/test-commands.js +26 -249
  509. package/dist/cli/commands/vm-command-shared.d.ts +23 -0
  510. package/dist/cli/commands/vm-command-shared.js +23 -0
  511. package/dist/cli/commands/vm-commands.d.ts +1 -28
  512. package/dist/cli/commands/vm-commands.js +36 -270
  513. package/dist/cli/commands/vm-hypervisor-runtime.d.ts +15 -0
  514. package/dist/cli/commands/vm-hypervisor-runtime.js +64 -0
  515. package/dist/cli/commands/vm-release-command.d.ts +5 -0
  516. package/dist/cli/commands/vm-release-command.js +101 -0
  517. package/dist/cli/commands/vm-spawn-command.d.ts +5 -0
  518. package/dist/cli/commands/vm-spawn-command.js +177 -0
  519. package/dist/cli/commands/web-command-shared.d.ts +12 -0
  520. package/dist/cli/commands/web-command-shared.js +30 -0
  521. package/dist/cli/commands/web-commands.d.ts +7 -14
  522. package/dist/cli/commands/web-commands.js +6 -314
  523. package/dist/cli/commands/web-install-command.d.ts +10 -0
  524. package/dist/cli/commands/web-install-command.js +116 -0
  525. package/dist/cli/commands/web-lifecycle-commands.d.ts +9 -30
  526. package/dist/cli/commands/web-lifecycle-commands.js +14 -322
  527. package/dist/cli/commands/web-login-command.d.ts +14 -0
  528. package/dist/cli/commands/web-login-command.js +189 -0
  529. package/dist/cli/commands/web-op-payload.d.ts +22 -0
  530. package/dist/cli/commands/web-op-payload.js +89 -0
  531. package/dist/cli/commands/web-op-refusals.d.ts +37 -0
  532. package/dist/cli/commands/web-op-refusals.js +73 -0
  533. package/dist/cli/commands/web-op-runner.d.ts +14 -0
  534. package/dist/cli/commands/web-op-runner.js +166 -0
  535. package/dist/cli/commands/web-status-command.d.ts +4 -0
  536. package/dist/cli/commands/web-status-command.js +32 -0
  537. package/dist/cli/commands/web-stop-command.d.ts +10 -0
  538. package/dist/cli/commands/web-stop-command.js +59 -0
  539. package/dist/cli/commands/web-verb-specs.d.ts +18 -0
  540. package/dist/cli/commands/web-verb-specs.js +66 -0
  541. package/dist/cli/commands/workflow-command-shared.d.ts +102 -0
  542. package/dist/cli/commands/workflow-command-shared.js +74 -0
  543. package/dist/cli/commands/workflow-commands.d.ts +10 -1
  544. package/dist/cli/commands/workflow-commands.js +6 -594
  545. package/dist/cli/commands/workflow-gate-commands.d.ts +3 -0
  546. package/dist/cli/commands/workflow-gate-commands.js +116 -0
  547. package/dist/cli/commands/workflow-graph-commands.d.ts +3 -0
  548. package/dist/cli/commands/workflow-graph-commands.js +73 -0
  549. package/dist/cli/commands/workflow-init-command.d.ts +3 -0
  550. package/dist/cli/commands/workflow-init-command.js +68 -0
  551. package/dist/cli/commands/workflow-lifecycle-commands.d.ts +9 -59
  552. package/dist/cli/commands/workflow-lifecycle-commands.js +14 -348
  553. package/dist/cli/commands/workflow-node-commands.d.ts +3 -0
  554. package/dist/cli/commands/workflow-node-commands.js +154 -0
  555. package/dist/cli/commands/workflow-plan-helpers.d.ts +48 -0
  556. package/dist/cli/commands/workflow-plan-helpers.js +103 -0
  557. package/dist/cli/commands/workflow-planning-commands.d.ts +3 -0
  558. package/dist/cli/commands/workflow-planning-commands.js +56 -0
  559. package/dist/cli/commands/workflow-swarm-actions.d.ts +7 -0
  560. package/dist/cli/commands/workflow-swarm-actions.js +109 -0
  561. package/dist/cli/commands/workflow-swarm-commands.d.ts +3 -0
  562. package/dist/cli/commands/workflow-swarm-commands.js +138 -0
  563. package/dist/cli/commands/workflow-tech-actions.d.ts +10 -0
  564. package/dist/cli/commands/workflow-tech-actions.js +150 -0
  565. package/dist/cli/commands/workflow-terminalize-command.d.ts +3 -0
  566. package/dist/cli/commands/workflow-terminalize-command.js +56 -0
  567. package/dist/cli/commands/workspace/init-actions.d.ts +10 -0
  568. package/dist/cli/commands/workspace/init-actions.js +199 -0
  569. package/dist/cli/commands/workspace/init-codegraph-stake.d.ts +10 -0
  570. package/dist/cli/commands/workspace/init-codegraph-stake.js +54 -0
  571. package/dist/cli/commands/workspace/init-command.d.ts +8 -124
  572. package/dist/cli/commands/workspace/init-command.js +59 -623
  573. package/dist/cli/commands/workspace/init-context.d.ts +58 -0
  574. package/dist/cli/commands/workspace/init-context.js +121 -0
  575. package/dist/cli/commands/workspace/init-envelope.d.ts +3 -0
  576. package/dist/cli/commands/workspace/init-envelope.js +34 -0
  577. package/dist/cli/commands/workspace/init-failures.d.ts +3 -0
  578. package/dist/cli/commands/workspace/init-failures.js +84 -0
  579. package/dist/cli/commands/workspace/init-hooks-decision.d.ts +24 -0
  580. package/dist/cli/commands/workspace/init-hooks-decision.js +189 -0
  581. package/dist/cli/commands/workspace/init-options.d.ts +102 -0
  582. package/dist/cli/commands/workspace/init-options.js +1 -0
  583. package/dist/cli/commands/worktree-lease-commands.d.ts +10 -6
  584. package/dist/cli/commands/worktree-lease-commands.js +42 -512
  585. package/dist/cli/commands/worktree-lease-gc-command.d.ts +12 -0
  586. package/dist/cli/commands/worktree-lease-gc-command.js +117 -0
  587. package/dist/cli/commands/worktree-lease-git.d.ts +22 -0
  588. package/dist/cli/commands/worktree-lease-git.js +48 -0
  589. package/dist/cli/commands/worktree-lease-list-command.d.ts +12 -0
  590. package/dist/cli/commands/worktree-lease-list-command.js +100 -0
  591. package/dist/cli/commands/worktree-lease-load.d.ts +37 -0
  592. package/dist/cli/commands/worktree-lease-load.js +28 -0
  593. package/dist/cli/commands/worktree-lease-release-command.d.ts +13 -0
  594. package/dist/cli/commands/worktree-lease-release-command.js +105 -0
  595. package/dist/cli/commands/worktree-lease-renew-command.d.ts +11 -0
  596. package/dist/cli/commands/worktree-lease-renew-command.js +99 -0
  597. package/dist/cli/commands/worktree-lease-session.d.ts +22 -0
  598. package/dist/cli/commands/worktree-lease-session.js +29 -0
  599. package/dist/cli/commands/worktree-lease-spawn-command.d.ts +11 -0
  600. package/dist/cli/commands/worktree-lease-spawn-command.js +119 -0
  601. package/dist/cli/commands/worktree-lease-status-command.d.ts +11 -0
  602. package/dist/cli/commands/worktree-lease-status-command.js +86 -0
  603. package/dist/cli/commands/worktree-lease-store.d.ts +19 -0
  604. package/dist/cli/commands/worktree-lease-store.js +24 -0
  605. package/dist/cli/program.js +5 -0
  606. package/dist/services/code/auto-compact-artifacts.d.ts +54 -0
  607. package/dist/services/code/auto-compact-artifacts.js +135 -0
  608. package/dist/services/code/auto-compact-attempt.d.ts +46 -0
  609. package/dist/services/code/auto-compact-attempt.js +88 -0
  610. package/dist/services/code/auto-compact-decision.d.ts +74 -0
  611. package/dist/services/code/auto-compact-decision.js +149 -0
  612. package/dist/services/code/auto-compact-dispatch-gate.d.ts +36 -0
  613. package/dist/services/code/auto-compact-dispatch-gate.js +86 -0
  614. package/dist/services/code/auto-compact-envelopes.d.ts +33 -0
  615. package/dist/services/code/auto-compact-envelopes.js +134 -0
  616. package/dist/services/code/auto-compact-history.d.ts +46 -0
  617. package/dist/services/code/auto-compact-history.js +17 -0
  618. package/dist/services/code/auto-compact-orchestrator.d.ts +11 -240
  619. package/dist/services/code/auto-compact-orchestrator.js +165 -686
  620. package/dist/services/code/auto-compact-run-types.d.ts +123 -0
  621. package/dist/services/code/auto-compact-run-types.js +1 -0
  622. package/dist/services/code/emit-handoff.d.ts +35 -1
  623. package/dist/services/code/emit-handoff.js +128 -7
  624. package/dist/services/code/step-08-gate.d.ts +28 -19
  625. package/dist/services/code/step-08-gate.js +92 -35
  626. package/dist/services/config/config-coercion.d.ts +7 -0
  627. package/dist/services/config/config-coercion.js +156 -0
  628. package/dist/services/config/config-file-io.d.ts +11 -0
  629. package/dist/services/config/config-file-io.js +61 -0
  630. package/dist/services/config/config-get.d.ts +2 -0
  631. package/dist/services/config/config-get.js +36 -0
  632. package/dist/services/config/config-global-loader.d.ts +15 -0
  633. package/dist/services/config/config-global-loader.js +111 -0
  634. package/dist/services/config/config-nested-path.d.ts +3 -0
  635. package/dist/services/config/config-nested-path.js +53 -0
  636. package/dist/services/config/config-primitives.d.ts +16 -0
  637. package/dist/services/config/config-primitives.js +24 -0
  638. package/dist/services/config/config-service.d.ts +9 -33
  639. package/dist/services/config/config-service.js +16 -665
  640. package/dist/services/config/config-validation.d.ts +19 -0
  641. package/dist/services/config/config-validation.js +152 -0
  642. package/dist/services/config/config-workspace.d.ts +10 -0
  643. package/dist/services/config/config-workspace.js +158 -0
  644. package/dist/services/distribution/mcp-install-runner.d.ts +21 -0
  645. package/dist/services/distribution/mcp-install-runner.js +59 -0
  646. package/dist/services/distribution/mcp-install.d.ts +95 -0
  647. package/dist/services/distribution/mcp-install.js +179 -0
  648. package/dist/services/distribution/plugin-manifest.d.ts +97 -0
  649. package/dist/services/distribution/plugin-manifest.js +126 -0
  650. package/dist/services/hooks/mcp-surface-gate.d.ts +19 -0
  651. package/dist/services/hooks/mcp-surface-gate.js +87 -0
  652. package/dist/services/ide/adapters/claude-code-adapter.d.ts +4 -35
  653. package/dist/services/ide/adapters/claude-code-adapter.js +48 -171
  654. package/dist/services/ide/adapters/claude-code-local-state.d.ts +28 -0
  655. package/dist/services/ide/adapters/claude-code-local-state.js +112 -0
  656. package/dist/services/ide/adapters/claude-code-model-window.d.ts +37 -0
  657. package/dist/services/ide/adapters/claude-code-model-window.js +113 -0
  658. package/dist/services/ide/ide-mcp-install-types.d.ts +78 -0
  659. package/dist/services/ide/ide-mcp-install-types.js +104 -0
  660. package/dist/services/ide/ide-types.d.ts +45 -1
  661. package/dist/services/ide/mcp-tool-matcher.d.ts +34 -0
  662. package/dist/services/ide/mcp-tool-matcher.js +84 -0
  663. package/dist/services/lint/npx-resolver.js +7 -0
  664. package/dist/services/mcp/cli-executor.d.ts +36 -0
  665. package/dist/services/mcp/cli-executor.js +97 -0
  666. package/dist/services/mcp/json-rpc.d.ts +81 -0
  667. package/dist/services/mcp/json-rpc.js +116 -0
  668. package/dist/services/mcp/memory-tool.d.ts +3 -0
  669. package/dist/services/mcp/memory-tool.js +62 -0
  670. package/dist/services/mcp/server-main.d.ts +1 -0
  671. package/dist/services/mcp/server-main.js +66 -0
  672. package/dist/services/mcp/server.d.ts +22 -0
  673. package/dist/services/mcp/server.js +152 -0
  674. package/dist/services/mcp/surface.d.ts +62 -0
  675. package/dist/services/mcp/surface.js +198 -0
  676. package/dist/services/mcp/tool-core.d.ts +42 -0
  677. package/dist/services/mcp/tool-core.js +137 -0
  678. package/dist/services/mcp/tools.d.ts +13 -0
  679. package/dist/services/mcp/tools.js +58 -0
  680. package/dist/services/readonly-surface/argv-guard.d.ts +32 -0
  681. package/dist/services/readonly-surface/argv-guard.js +164 -0
  682. package/dist/services/readonly-surface/readonly-whitelist.d.ts +147 -0
  683. package/dist/services/readonly-surface/readonly-whitelist.js +107 -0
  684. package/dist/services/readonly-surface/whitelist-generator.d.ts +64 -0
  685. package/dist/services/readonly-surface/whitelist-generator.js +212 -0
  686. package/dist/services/skills/hooks-codegate-superpowers.d.ts +1 -0
  687. package/dist/services/skills/hooks-codegate-superpowers.js +26 -0
  688. package/dist/services/skills/hooks-settings-deny-list.d.ts +61 -0
  689. package/dist/services/skills/hooks-settings-deny-list.js +173 -0
  690. package/dist/services/skills/hooks-settings-envelopes.d.ts +20 -0
  691. package/dist/services/skills/hooks-settings-envelopes.js +79 -0
  692. package/dist/services/skills/hooks-settings-file-shape.d.ts +43 -0
  693. package/dist/services/skills/hooks-settings-file-shape.js +207 -0
  694. package/dist/services/skills/hooks-settings-paths.d.ts +34 -0
  695. package/dist/services/skills/hooks-settings-paths.js +75 -0
  696. package/dist/services/skills/hooks-settings-read-installed.d.ts +39 -0
  697. package/dist/services/skills/hooks-settings-read-installed.js +60 -0
  698. package/dist/services/skills/hooks-settings-service.d.ts +12 -212
  699. package/dist/services/skills/hooks-settings-service.js +71 -649
  700. package/dist/services/skills/hooks-settings-types.d.ts +139 -0
  701. package/dist/services/skills/hooks-settings-types.js +1 -0
  702. package/dist/services/workspace/claude-settings-template-merge.d.ts +89 -0
  703. package/dist/services/workspace/claude-settings-template-merge.js +243 -0
  704. package/dist/services/workspace/claude-settings-template.d.ts +29 -87
  705. package/dist/services/workspace/claude-settings-template.js +81 -236
  706. package/package.json +17 -6
  707. package/scripts/install-skills-bundles.mjs +233 -0
  708. package/scripts/install-skills-fs.mjs +148 -0
  709. package/scripts/install-skills-ide.mjs +279 -0
  710. package/scripts/install-skills-output-style-default.mjs +196 -0
  711. package/scripts/install-skills-output-styles.mjs +121 -0
  712. package/scripts/install-skills-report.mjs +42 -0
  713. package/scripts/install-skills-user-config.mjs +198 -0
  714. package/scripts/install-skills.mjs +36 -1066
  715. package/scripts/watch-tree.mjs +140 -0
  716. package/scripts/watch.mjs +4 -126
  717. package/skills/peaks-status/SKILL.md +31 -13
@@ -1,523 +1,24 @@
1
- import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync, statSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
4
- import { sliceCheck } from '../../services/slice/slice-check-service.js';
5
- import { decomposeSlices } from '../../services/slice/slice-decompose-service.js';
6
- import { decomposeSlicesWithBenchmark } from '../../services/slice/slice-benchmark-service.js';
7
- import { pickSlicesInteractive } from '../../services/slice/slice-pick-service.js';
8
- import { decompose as multiPassDecompose } from '../../services/slice/multi-pass-orchestrator.js';
9
- import { readResult as readDecompositionResult, writeResult as writeSchemaResult } from '../../services/slice/schema-router.js';
10
- import { fail, ok } from 'peaks-loop-shared/result';
11
- import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
12
- /**
13
- * PRD-002b slice 2 — extract CLI listing-pagination + table-format
14
- * constants. Values are bytewise-identical to the original literals.
15
- */
16
- const SLICE_LIST_DEFAULT_LIMIT = 50;
17
- const SLICE_LIST_MAX_LIMIT = 500;
18
- const SLICE_LIST_RID_COL_WIDTH = 34;
19
- const SLICE_LIST_MTIME_COL_WIDTH = 22;
20
- const SLICE_LIST_SIZE_COL_WIDTH = 8;
21
- const SLICE_LIST_PICKED_COL_WIDTH = 6;
22
- const SLICE_LIST_SEPARATOR_WIDTH = 76;
1
+ import { registerSliceCheckCommand } from './slice-check-command.js';
2
+ import { registerSliceListCommand } from './slice-list-commands.js';
3
+ import { registerSliceDecomposeCommand } from './slice-decompose-command.js';
4
+ import { registerSlicePickCommand } from './slice-pick-command.js';
5
+ import { registerSlicePlanCommand } from './slice-plan-command.js';
6
+ // Published import path preserved (the `-picked.json` envelope validator has
7
+ // always been exported from this module).
8
+ export { parsePickedFile } from './slice-plan-command.js';
9
+ const SLICE_DESCRIPTION = 'Slice lifecycle: check (boundary), decompose (PRD -> 6-stage algorithm), ' +
10
+ 'pick (fzf multi-select), plan (apply via peaks request init). ' +
11
+ '`peaks slice check` is the post-micro-cycle boundary gate (4 stages). ' +
12
+ '`decompose/pick/plan` form the new slice-decomposition pipeline.';
23
13
  export function registerSliceCommands(program, io) {
24
- const slice = program
25
- .command('slice')
26
- .description('Slice lifecycle: check (boundary), decompose (PRD -> 6-stage algorithm), ' +
27
- 'pick (fzf multi-select), plan (apply via peaks request init). ' +
28
- '`peaks slice check` is the post-micro-cycle boundary gate (4 stages). ' +
29
- '`decompose/pick/plan` form the new slice-decomposition pipeline.');
14
+ const slice = program.command('slice').description(SLICE_DESCRIPTION);
30
15
  // ---------- peaks slice check (existing) ----------
31
- addJsonOption(slice
32
- .command('check')
33
- .description('Boundary check for a slice (post-micro-cycle, pre-peaks-qa). ' +
34
- 'Runs 4 stages in order: typecheck -> unit-tests (changed-only by default; ' +
35
- 'use --run-tests for the full suite, or --skip-tests to opt out) -> ' +
36
- 'review-fanout -> gate-verify-pipeline. ' +
37
- 'Each stage reports pass / fail / skipped. ' +
38
- 'Exit 0 only if every stage passes or is skipped.')
39
- .option('--project <path>', 'target project root', '.')
40
- .option('--rid <rid>', 'request id; REQUIRED — there is no binding to fall back to, and slice check fails without it')
41
- .option('--refresh-fanout', 're-run the 3-way review fan-out (peaks-rd) even if the review files already exist', false)
42
- .option('--run-tests', 'opt in to the FULL test suite at the boundary (default is the changed-only suite via `vitest run --changed`); use the peaks-test skill to run the full suite standalone', false)
43
- .option('--skip-tests', 'skip the unit-test stage entirely (e.g. docs-only slices); use the peaks-test skill to run the full suite manually if you want a separate check', false)
44
- .option('--allow-pre-existing-failures', 'opt-in: if the unit-test stage fails, report it as `skipped` with a reason naming the failure count (useful when the repo has unrelated pre-existing failures; the long-term fix is to .skip or coverage.exclude those tests). Only meaningful with --run-tests or the default changed-only mode.', false)).action(async (options) => {
45
- try {
46
- const projectRoot = resolveCanonicalProjectRoot(options.project);
47
- const result = await sliceCheck({
48
- projectRoot,
49
- ...(options.rid ? { rid: options.rid } : {}),
50
- refreshFanout: options.refreshFanout === true,
51
- runTests: options.runTests === true,
52
- skipTests: options.skipTests === true,
53
- allowPreExistingFailures: options.allowPreExistingFailures === true
54
- });
55
- const warnings = [];
56
- if (result.stages.some((s) => s.status === 'fail')) {
57
- warnings.push(`${result.stages.filter((s) => s.status === 'fail').length} of ${result.stages.length} stages failed. 边界 NOT ready -- fix the failures and re-run, or proceed at your own risk.`);
58
- }
59
- printResult(io, ok('slice.check', result, warnings, result.nextActions), options.json ?? false);
60
- if (!result.boundaryReady) {
61
- process.exitCode = 1;
62
- }
63
- }
64
- catch (error) {
65
- printResult(io, fail('slice.check', 'SLICE_CHECK_FAILED', getErrorMessage(error), { projectRoot: options.project }, [
66
- `Verify the project path is a peaks repo and --rid names a slice (letters, digits, dots, underscores or dashes): ${options.rid ?? '(no --rid given)'}`
67
- ]), options.json ?? false);
68
- process.exitCode = 1;
69
- }
70
- });
71
- // Read-only listing of every decomposition artifact under
72
- // .peaks/sc/slice-decomposition/. Used by operators to see what's
73
- // accumulated; companion to a future `peaks slice cleanup` subcommand.
74
- // Pure functions (`listDecompositions`, `computeStale`) are kept inline so
75
- // the listing logic stays co-located with the subcommand (Karpathy #2:
76
- // simplicity first — no speculative helper file).
77
- addJsonOption(slice
78
- .command('ls')
79
- .description('List slice decomposition artifacts under .peaks/sc/slice-decomposition/. ' +
80
- 'Returns one row per distinct rid with mtime, sizeBytes, pickedPath, and isStale ' +
81
- '(mtime > 30d). Use --stale-only to filter, --rid <substring> to narrow, ' +
82
- '--limit <n> to cap. To remove stale entries, use `peaks slice cleanup` (separate slice).')
83
- .option('--project <path>', 'target project root', '.')
84
- .option('--limit <n>', 'cap result count (default 50, max 500)', (v) => parseInt(v, 10), SLICE_LIST_DEFAULT_LIMIT)
85
- .option('--stale-only', 'only include rids older than the stale threshold', false)
86
- .option('--rid <substring>', 'case-insensitive substring filter on rid', '')).action((options) => {
87
- try {
88
- const projectRoot = resolveCanonicalProjectRoot(options.project);
89
- const limit = Math.max(1, Math.min(SLICE_LIST_MAX_LIMIT, options.limit ?? SLICE_LIST_DEFAULT_LIMIT));
90
- const all = listDecompositions(projectRoot);
91
- let filtered = all;
92
- const ridSub = (options.rid ?? '').toLowerCase();
93
- if (ridSub.length > 0) {
94
- filtered = filtered.filter((row) => row.rid.toLowerCase().includes(ridSub));
95
- }
96
- if (options.staleOnly === true) {
97
- filtered = filtered.filter((row) => row.isStale);
98
- }
99
- const truncated = filtered.length > limit;
100
- const page = filtered.slice(0, limit);
101
- if (options.json === true) {
102
- const nextActions = [];
103
- if (truncated) {
104
- nextActions.push(`Result truncated to ${limit} rows; pass --limit <n> to see more.`);
105
- }
106
- if (page.some((r) => r.isStale)) {
107
- nextActions.push('Some entries are stale (>30d). Use `peaks slice cleanup` to remove them.');
108
- }
109
- printResult(io, ok('slice.ls', {
110
- rids: page,
111
- truncated,
112
- totalBeforeFilter: filtered.length,
113
- totalScanned: all.length
114
- }, [], nextActions), true);
115
- return;
116
- }
117
- // Plaintext mode: header + table
118
- const lines = [];
119
- lines.push('RID'.padEnd(SLICE_LIST_RID_COL_WIDTH) +
120
- 'MTIME'.padEnd(SLICE_LIST_MTIME_COL_WIDTH) +
121
- 'SIZE'.padEnd(SLICE_LIST_SIZE_COL_WIDTH) +
122
- 'PICKED'.padEnd(SLICE_LIST_PICKED_COL_WIDTH) +
123
- 'STALE');
124
- lines.push('-'.repeat(SLICE_LIST_SEPARATOR_WIDTH));
125
- for (const r of page) {
126
- lines.push(r.rid.padEnd(SLICE_LIST_RID_COL_WIDTH) +
127
- r.mtime.padEnd(SLICE_LIST_MTIME_COL_WIDTH) +
128
- String(r.sizeBytes).padEnd(SLICE_LIST_SIZE_COL_WIDTH) +
129
- (r.pickedPath ? 'yes' : 'no').padEnd(SLICE_LIST_PICKED_COL_WIDTH) +
130
- (r.isStale ? 'yes' : 'no'));
131
- }
132
- if (truncated) {
133
- lines.push(`... (${filtered.length - limit} more, --limit to see more)`);
134
- }
135
- if (page.length === 0) {
136
- lines.push('(no slice decompositions found)');
137
- }
138
- process.stdout.write(lines.join('\n') + '\n');
139
- }
140
- catch (error) {
141
- printResult(io, fail('slice.ls', 'SLICE_LS_FAILED', getErrorMessage(error), { projectRoot: options.project }, [
142
- 'Verify the project path is a peaks repo and .peaks/sc/slice-decomposition/ exists or can be created'
143
- ]), options.json ?? false);
144
- process.exitCode = 1;
145
- }
146
- });
16
+ registerSliceCheckCommand(slice, io);
17
+ registerSliceListCommand(slice, io);
147
18
  // ---------- peaks slice decompose (NEW) ----------
148
- addJsonOption(slice
149
- .command('decompose <rid>')
150
- .description('Run the 6-stage slice-decomposition algorithm on a PRD. ' +
151
- 'Inputs: PRD body + peaks codegraph (project analysis is codegraph-first; structural import edges are the fallback). ' +
152
- 'Outputs: .peaks/sc/slice-decomposition/<rid>.json with critical-path, ' +
153
- 'parallel-batches, and per-slice work estimates. ' +
154
- 'Algorithm is fzf-free. Replay vs hand-derived 2.1.0 dry-run: +-10% on p50. ' +
155
- 'Pass --benchmark to also emit a SliceBenchmark envelope (totalMs, codegraphQueries, ' +
156
- 'p50ConfidenceDistribution, outputJsonBytes) and persist it under ' +
157
- '.peaks/_runtime/<sid>/benchmarks/<rid>.benchmark.json for cross-version comparison.')
158
- .option('--project <path>', 'target project root', '.')
159
- .option('--refresh', 're-run `peaks codegraph index` before reading', false)
160
- .option('--benchmark', 'record per-run metrics and attach to the result envelope (2.1.1 algorithm optimization comparison)', false)
161
- .option('--granularity <value>', 'service | file | both | auto. Default "both" keeps the v1 6-stage path; service / file / auto enable v2 multi-pass decomposition (peaks-loop 2.9+) and emit a DecompositionResultV2 envelope via SchemaRouter', 'both')).action(async (rid, options) => {
162
- // Validate --granularity BEFORE any I/O so invalid values fail fast with a
163
- // nextActions hint listing the four allowed strings.
164
- const granularity = options.granularity ?? 'both';
165
- if (granularity !== 'service' &&
166
- granularity !== 'file' &&
167
- granularity !== 'both' &&
168
- granularity !== 'auto') {
169
- printResult(io, fail('slice.decompose', 'SLICE_DECOMPOSE_FAILED', `Invalid --granularity '${options.granularity}'.`, { rid, projectRoot: options.project }, [
170
- `--granularity accepts one of: service, file, both, auto`,
171
- `Default (omit the flag or pass "both") keeps the existing v1 path.`,
172
- `Non-default values (service / file / auto) enable v2 multi-pass decomposition (peaks-loop 2.9+).`
173
- ]), options.json ?? false);
174
- process.exitCode = 1;
175
- return;
176
- }
177
- try {
178
- const projectRoot = resolveCanonicalProjectRoot(options.project);
179
- const prdMarkdown = readPrdBody(rid, projectRoot);
180
- // Non-default granularity takes the v2 path; default ("both") keeps v1.
181
- if (granularity !== 'both') {
182
- const v2Result = await multiPassDecompose(rid, prdMarkdown, projectRoot, {
183
- ...(options.refresh ? { refresh: true } : {}),
184
- granularity
185
- });
186
- const outDir = join(projectRoot, '.peaks', 'sc', 'slice-decomposition');
187
- if (!existsSync(outDir)) {
188
- mkdirSync(outDir, { recursive: true });
189
- }
190
- const outPath = join(outDir, `${rid}.json`);
191
- writeSchemaResult(outPath, v2Result);
192
- const nextActions = [
193
- `Decomposition (v2) written to ${outPath}`,
194
- `peaks slice pick/plan: v2 schemas require SchemaRouter-aware consumers (peaks-loop 2.9+).`
195
- ];
196
- printResult(io, ok('slice.decompose', { ...v2Result, outputPath: outPath }, [], nextActions), options.json ?? false);
197
- return;
198
- }
199
- let result;
200
- let benchmark = null;
201
- if (options.benchmark === true) {
202
- const out = await decomposeSlicesWithBenchmark(rid, prdMarkdown, projectRoot, {
203
- ...(options.refresh ? { refresh: true } : {})
204
- });
205
- result = out.result;
206
- benchmark = out.benchmark;
207
- }
208
- else {
209
- result = await decomposeSlices(rid, prdMarkdown, projectRoot, {
210
- ...(options.refresh ? { refresh: true } : {})
211
- });
212
- }
213
- const outPath = writeDecompositionFile(rid, result, projectRoot);
214
- const nextActions = [
215
- `Decomposition written to ${outPath}`,
216
- `Next: peaks slice pick ${rid} (requires fzf >= 0.38)`,
217
- `Or manually craft -picked.json from the JSON output, then peaks slice plan ${rid}`
218
- ];
219
- if (result.pickHint) {
220
- nextActions.push(result.pickHint);
221
- }
222
- if (benchmark !== null) {
223
- const benchPath = writeBenchmarkArtifact(rid, benchmark, projectRoot);
224
- nextActions.push(`Benchmark: totalMs=${benchmark.totalMs} codegraphQueries=${benchmark.codegraphQueries} ` +
225
- `p50Conf={low:${benchmark.p50ConfidenceDistribution.low},mid:${benchmark.p50ConfidenceDistribution.mid},high:${benchmark.p50ConfidenceDistribution.high}} ` +
226
- `outputJsonBytes=${benchmark.outputJsonBytes}. Persisted to ${benchPath}`);
227
- }
228
- printResult(io, ok('slice.decompose', { ...result, outputPath: outPath, ...(benchmark !== null ? { benchmark } : {}) }, [], nextActions), options.json ?? false);
229
- }
230
- catch (error) {
231
- printResult(io, fail('slice.decompose', 'SLICE_DECOMPOSE_FAILED', getErrorMessage(error), { rid, projectRoot: options.project }, [
232
- 'Verify codegraph is initialised (npx codegraph init && npx codegraph index), the rid is correct, and the PRD body is non-empty'
233
- ]), options.json ?? false);
234
- process.exitCode = 1;
235
- }
236
- });
19
+ registerSliceDecomposeCommand(slice, io);
237
20
  // ---------- peaks slice pick (NEW) ----------
238
- addJsonOption(slice
239
- .command('pick <rid>')
240
- .description('Interactively select which candidate slices to ship, via fzf. ' +
241
- 'Reads .peaks/sc/slice-decomposition/<rid>.json, ' +
242
- 'spawns fzf --multi, parses selection, writes -picked.json. ' +
243
- 'Requires fzf >= 0.38. Algorithm is fzf-free; this is the only fzf dependency.')
244
- .option('--project <path>', 'target project root', '.')
245
- .option('--preview', 'render side-by-side preview window in fzf', false)
246
- .option('--fzf-bin <path>', 'override fzf binary path (default: fzf on PATH)', 'fzf')).action(async (rid, options) => {
247
- try {
248
- const projectRoot = resolveCanonicalProjectRoot(options.project);
249
- const decompPath = join(projectRoot, '.peaks', 'sc', 'slice-decomposition', `${rid}.json`);
250
- if (!existsSync(decompPath)) {
251
- throw new Error(`decomposition not found at ${decompPath}. ` +
252
- `Run \`peaks slice decompose ${rid}\` first.`);
253
- }
254
- const parsed = readDecompositionResult(decompPath);
255
- if ('schemaVersion' in parsed) {
256
- throw new Error(`decomposition at ${decompPath} is a v2 envelope (schemaVersion: 'v2'). ` +
257
- `peaks slice pick supports v1 only in peaks-loop 2.9.0. ` +
258
- `Re-run \`peaks slice decompose ${rid}\` without --granularity to get a v1 file, ` +
259
- `or upgrade peaks-loop when v2 pick lands.`);
260
- }
261
- const decomposition = parsed;
262
- const result = await pickSlicesInteractive(rid, decomposition, projectRoot, {
263
- ...(options.preview !== undefined ? { preview: options.preview } : {}),
264
- ...(options.fzfBin ? { fzfBin: options.fzfBin } : {})
265
- });
266
- const nextActions = [
267
- `Picked ${result.picked.length} slice(s); written to ${result.outputPath}`,
268
- `Next: peaks slice plan ${rid} (--apply to call peaks request init for each chosen slice)`
269
- ];
270
- printResult(io, ok('slice.pick', result, [], nextActions), options.json ?? false);
271
- }
272
- catch (error) {
273
- const msg = getErrorMessage(error);
274
- if (/brew install fzf|apt-get install fzf|older than required/.test(msg)) {
275
- process.exitCode = 127;
276
- }
277
- else {
278
- process.exitCode = 1;
279
- }
280
- printResult(io, fail('slice.pick', 'SLICE_PICK_FAILED', msg, { rid, projectRoot: options.project }, [
281
- 'Verify the decomposition file exists, fzf >= 0.38 is on PATH, and the rid is correct'
282
- ]), options.json ?? false);
283
- }
284
- });
21
+ registerSlicePickCommand(slice, io);
285
22
  // ---------- peaks slice plan (NEW) ----------
286
- addJsonOption(slice
287
- .command('plan <rid>')
288
- .description('Apply a picked batch: read -picked.json, call `peaks request init` for each chosen slice ' +
289
- 'with --depends-on edges from the decomposition. Dry-run by default; pass --apply to ' +
290
- 'actually create rids.')
291
- .option('--project <path>', 'target project root', '.')
292
- .option('--apply', 'actually call peaks request init (default: dry-run only)', false)).action(async (rid, options) => {
293
- const projectRoot = resolveCanonicalProjectRoot(options.project);
294
- const pickedPath = join(projectRoot, '.peaks', 'sc', 'slice-decomposition', `${rid}-picked.json`);
295
- try {
296
- if (!existsSync(pickedPath)) {
297
- throw new Error(`picked file not found at ${pickedPath}. ` +
298
- `Run \`peaks slice pick ${rid}\` first, or manually craft the file.`);
299
- }
300
- const picked = parsePickedFile(pickedPath);
301
- const plan = picked.picked.map((slice, idx) => ({
302
- newRid: `${rid}-${idx + 1}-${slice.rid}`,
303
- type: 'feat',
304
- dependsOn: idx === 0 ? [] : [picked.picked[idx - 1].rid],
305
- files: slice.files,
306
- label: slice.label,
307
- applied: false
308
- }));
309
- const nextActions = [
310
- `Planned ${plan.length} new rids from ${picked.picked.length} picked slices`,
311
- options.apply
312
- ? 'Apply mode: would call peaks request init for each (v1.1: wire to spawn child)'
313
- : 'Dry-run: pass --apply to actually create the rids (v1.1: wire to peaks request init spawn)'
314
- ];
315
- printResult(io, ok('slice.plan', { parentRid: rid, plan, apply: options.apply ?? false }, [], nextActions), options.json ?? false);
316
- }
317
- catch (error) {
318
- const msg = getErrorMessage(error);
319
- const isEnvelopeError = msg.startsWith('picked envelope at');
320
- printResult(io, fail('slice.plan', isEnvelopeError ? 'PICKED_ENVELOPE_INVALID' : 'SLICE_PLAN_FAILED', msg, { rid, projectRoot: options.project, pickedPath }, isEnvelopeError
321
- ? [
322
- 'Verify the -picked.json envelope matches the schema: { rid: string, picked: Array<{ rid, files: string[], label }> }'
323
- ]
324
- : [
325
- 'Verify the picked file exists, the rid is correct, and peaks request init is available'
326
- ]), options.json ?? false);
327
- process.exitCode = 1;
328
- }
329
- });
330
- }
331
- // ---------- helpers ----------
332
- function readPrdBody(rid, projectRoot) {
333
- // Search all .peaks/**/prd/requests/*-<rid>.md and .peaks/**/prd/requests/<rid>.md
334
- const searchRoots = [
335
- join(projectRoot, '.peaks', '2026'),
336
- join(projectRoot, '.peaks'),
337
- join(projectRoot, '.peaks', '_runtime')
338
- ];
339
- const matchInDir = (dir) => {
340
- if (!existsSync(dir))
341
- return null;
342
- let entries;
343
- try {
344
- entries = readdirSync(dir);
345
- }
346
- catch {
347
- // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
348
- return null;
349
- }
350
- for (const entry of entries) {
351
- if (!entry.endsWith('.md'))
352
- continue;
353
- if (entry === `${rid}.md` || entry.endsWith(`-${rid}.md`)) {
354
- return readFileSync(join(dir, entry), 'utf8');
355
- }
356
- }
357
- return null;
358
- };
359
- for (const root of searchRoots) {
360
- if (!existsSync(root))
361
- continue;
362
- // 1) Direct prd/requests/ at this root
363
- const direct = matchInDir(join(root, 'prd', 'requests'));
364
- if (direct !== null)
365
- return direct;
366
- // 2) One level of subdirs (e.g. .peaks/_runtime/<sid>/prd/requests/)
367
- let subdirs;
368
- try {
369
- subdirs = readdirSync(root);
370
- }
371
- catch {
372
- continue;
373
- }
374
- for (const sub of subdirs) {
375
- const hit = matchInDir(join(root, sub, 'prd', 'requests'));
376
- if (hit !== null)
377
- return hit;
378
- }
379
- }
380
- throw new Error(`PRD body not found for rid=${rid}. Searched under .peaks/2026/prd/requests/, ` +
381
- `.peaks/prd/requests/, and .peaks/_runtime/*/prd/requests/. ` +
382
- `Create the PRD with: peaks request init --role prd --id ${rid} --apply --type refactor`);
383
- }
384
- function writeDecompositionFile(rid, result, projectRoot) {
385
- const dir = join(projectRoot, '.peaks', 'sc', 'slice-decomposition');
386
- if (!existsSync(dir)) {
387
- mkdirSync(dir, { recursive: true });
388
- }
389
- const outPath = join(dir, `${rid}.json`);
390
- writeFileSync(outPath, JSON.stringify(result, null, 2), 'utf8');
391
- return outPath;
392
- }
393
- /**
394
- * Stale threshold for slice decomposition artifacts. Matches the default
395
- * recorded in .peaks/memory/ for follow-up). If that slice ships with a
396
- * different default, both must update here.
397
- */
398
- // eslint-disable-next-line no-magic-numbers -- canonical 30-day-in-ms math
399
- const STALE_THRESHOLD_MS = 30 * 24 * 60 * 60 * 1000;
400
- /**
401
- * Enumerate every slice decomposition artifact under
402
- * `.peaks/sc/slice-decomposition/`. Returns one row per distinct rid.
403
- * Missing directory is treated as empty (returns []), matching the
404
- * "fresh peaks repo" UX (AC5+AC6).
405
- *
406
- * Sorted by mtime descending so the most recent rid is first (AC3).
407
- */
408
- function listDecompositions(projectRoot) {
409
- const dir = join(projectRoot, '.peaks', 'sc', 'slice-decomposition');
410
- if (!existsSync(dir))
411
- return [];
412
- const nowMs = Date.now();
413
- const byRid = new Map();
414
- for (const entry of readdirSync(dir)) {
415
- // Skip non-matching files (e.g., stray .DS_Store)
416
- if (!entry.endsWith('.json'))
417
- continue;
418
- let rid;
419
- let isPicked;
420
- if (entry.endsWith('-picked.json')) {
421
- rid = entry.slice(0, -'-picked.json'.length);
422
- isPicked = true;
423
- }
424
- else {
425
- rid = entry.slice(0, -'.json'.length);
426
- isPicked = false;
427
- }
428
- const absPath = join(dir, entry);
429
- const st = statSync(absPath);
430
- const existing = byRid.get(rid);
431
- if (isPicked) {
432
- // Picked file is supplementary; only fill in pickedPath on the existing row
433
- if (existing) {
434
- byRid.set(rid, { ...existing, pickedPath: absPath });
435
- }
436
- else {
437
- // -picked.json without a corresponding <rid>.json: still surface it
438
- byRid.set(rid, {
439
- rid,
440
- decompositionPath: '',
441
- pickedPath: absPath,
442
- mtime: st.mtime.toISOString(),
443
- sizeBytes: 0,
444
- isStale: nowMs - st.mtime.getTime() > STALE_THRESHOLD_MS
445
- });
446
- }
447
- continue;
448
- }
449
- byRid.set(rid, {
450
- rid,
451
- decompositionPath: absPath,
452
- pickedPath: existing?.pickedPath ?? null,
453
- mtime: st.mtime.toISOString(),
454
- sizeBytes: st.size,
455
- isStale: nowMs - st.mtime.getTime() > STALE_THRESHOLD_MS
456
- });
457
- }
458
- return Array.from(byRid.values()).sort((a, b) => a.mtime < b.mtime ? 1 : a.mtime > b.mtime ? -1 : 0);
459
- }
460
- function writeBenchmarkArtifact(rid, benchmark, projectRoot) {
461
- // Reuse the current session binding if present; otherwise fall back to
462
- // a deterministic local dir under the project root. The CLI may be
463
- // invoked from non-CLI contexts (skill layer); we don't require a session.
464
- const dir = join(projectRoot, '.peaks', '_runtime', 'benchmarks');
465
- if (!existsSync(dir)) {
466
- mkdirSync(dir, { recursive: true });
467
- }
468
- const outPath = join(dir, `${rid}.benchmark.json`);
469
- writeFileSync(outPath, JSON.stringify(benchmark, null, 2), 'utf8');
470
- return outPath;
471
- }
472
- /**
473
- * Validate a -picked.json envelope. Throws a CLI-friendly Error on any
474
- * shape violation; the catch in the slice.plan action converts it to
475
- * a fail() envelope with `code: 'PICKED_ENVELOPE_INVALID'`.
476
- *
477
- * Schema:
478
- * { rid: string; picked: Array<{ rid, files: string[], label }> }
479
- *
480
- * Rejects: missing rid, missing/invalid picked array, picked[i] missing
481
- * rid / files / label, picked[i].files empty.
482
- */
483
- export function parsePickedFile(pickedPath) {
484
- let raw;
485
- try {
486
- raw = JSON.parse(readFileSync(pickedPath, 'utf8'));
487
- }
488
- catch (err) {
489
- // JSON.parse errors are always Error-shaped (SyntaxError extends Error),
490
- // so the cast is safe; we only need `.message`.
491
- throw new Error(`picked envelope at ${pickedPath} is not valid JSON: ${err.message}`);
492
- }
493
- if (typeof raw !== 'object' || raw === null) {
494
- throw new Error(`picked envelope at ${pickedPath} must be a JSON object, got ${typeof raw}`);
495
- }
496
- const obj = raw;
497
- if (typeof obj.rid !== 'string' || obj.rid.length === 0) {
498
- throw new Error(`picked envelope at ${pickedPath} is missing required string field 'rid'`);
499
- }
500
- if (!Array.isArray(obj.picked)) {
501
- throw new Error(`picked envelope at ${pickedPath} is missing required array field 'picked'`);
502
- }
503
- const picked = obj.picked.map((item, idx) => {
504
- if (typeof item !== 'object' || item === null) {
505
- throw new Error(`picked[${idx}] must be an object, got ${typeof item}`);
506
- }
507
- const it = item;
508
- if (typeof it.rid !== 'string' || it.rid.length === 0) {
509
- throw new Error(`picked[${idx}] is missing required string field 'rid'`);
510
- }
511
- if (!Array.isArray(it.files) || it.files.length === 0) {
512
- throw new Error(`picked[${idx}] is missing or has empty required array field 'files'`);
513
- }
514
- if (!it.files.every((f) => typeof f === 'string')) {
515
- throw new Error(`picked[${idx}].files must contain only strings`);
516
- }
517
- if (typeof it.label !== 'string' || it.label.length === 0) {
518
- throw new Error(`picked[${idx}] is missing required string field 'label'`);
519
- }
520
- return { rid: it.rid, files: it.files, label: it.label };
521
- });
522
- return { rid: obj.rid, picked };
23
+ registerSlicePlanCommand(slice, io);
523
24
  }
@@ -0,0 +1,18 @@
1
+ import type { DecompositionResult } from '../../services/slice/slice-decompose-types.js';
2
+ export type BenchmarkMetrics = {
3
+ totalMs: number;
4
+ codegraphQueries: number;
5
+ p50ConfidenceDistribution: {
6
+ low: number;
7
+ mid: number;
8
+ high: number;
9
+ };
10
+ inputApproxBytes: {
11
+ prd: number;
12
+ };
13
+ outputJsonBytes: number;
14
+ capturedAt: string;
15
+ };
16
+ export declare function readPrdBody(rid: string, projectRoot: string): string;
17
+ export declare function writeDecompositionFile(rid: string, result: DecompositionResult, projectRoot: string): string;
18
+ export declare function writeBenchmarkArtifact(rid: string, benchmark: unknown, projectRoot: string): string;
@@ -0,0 +1,79 @@
1
+ // Split out of `slice-commands.ts`: the PRD
2
+ // body reader and the two decomposition artifact writers `peaks slice decompose`
3
+ // uses. Kept apart from the command module so both stay well inside the
4
+ // 300-line file cap.
5
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ export function readPrdBody(rid, projectRoot) {
8
+ // Search all .peaks/**/prd/requests/*-<rid>.md and .peaks/**/prd/requests/<rid>.md
9
+ const searchRoots = [
10
+ join(projectRoot, '.peaks', '2026'),
11
+ join(projectRoot, '.peaks'),
12
+ join(projectRoot, '.peaks', '_runtime')
13
+ ];
14
+ const matchInDir = (dir) => {
15
+ if (!existsSync(dir))
16
+ return null;
17
+ let entries;
18
+ try {
19
+ entries = readdirSync(dir);
20
+ }
21
+ catch {
22
+ // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
23
+ return null;
24
+ }
25
+ for (const entry of entries) {
26
+ if (!entry.endsWith('.md'))
27
+ continue;
28
+ if (entry === `${rid}.md` || entry.endsWith(`-${rid}.md`)) {
29
+ return readFileSync(join(dir, entry), 'utf8');
30
+ }
31
+ }
32
+ return null;
33
+ };
34
+ for (const root of searchRoots) {
35
+ if (!existsSync(root))
36
+ continue;
37
+ // 1) Direct prd/requests/ at this root
38
+ const direct = matchInDir(join(root, 'prd', 'requests'));
39
+ if (direct !== null)
40
+ return direct;
41
+ // 2) One level of subdirs (e.g. .peaks/_runtime/<sid>/prd/requests/)
42
+ let subdirs;
43
+ try {
44
+ subdirs = readdirSync(root);
45
+ }
46
+ catch {
47
+ continue;
48
+ }
49
+ for (const sub of subdirs) {
50
+ const hit = matchInDir(join(root, sub, 'prd', 'requests'));
51
+ if (hit !== null)
52
+ return hit;
53
+ }
54
+ }
55
+ throw new Error(`PRD body not found for rid=${rid}. Searched under .peaks/2026/prd/requests/, ` +
56
+ `.peaks/prd/requests/, and .peaks/_runtime/*/prd/requests/. ` +
57
+ `Create the PRD with: peaks request init --role prd --id ${rid} --apply --type refactor`);
58
+ }
59
+ export function writeDecompositionFile(rid, result, projectRoot) {
60
+ const dir = join(projectRoot, '.peaks', 'sc', 'slice-decomposition');
61
+ if (!existsSync(dir)) {
62
+ mkdirSync(dir, { recursive: true });
63
+ }
64
+ const outPath = join(dir, `${rid}.json`);
65
+ writeFileSync(outPath, JSON.stringify(result, null, 2), 'utf8');
66
+ return outPath;
67
+ }
68
+ export function writeBenchmarkArtifact(rid, benchmark, projectRoot) {
69
+ // Reuse the current session binding if present; otherwise fall back to
70
+ // a deterministic local dir under the project root. The CLI may be
71
+ // invoked from non-CLI contexts (skill layer); we don't require a session.
72
+ const dir = join(projectRoot, '.peaks', '_runtime', 'benchmarks');
73
+ if (!existsSync(dir)) {
74
+ mkdirSync(dir, { recursive: true });
75
+ }
76
+ const outPath = join(dir, `${rid}.benchmark.json`);
77
+ writeFileSync(outPath, JSON.stringify(benchmark, null, 2), 'utf8');
78
+ return outPath;
79
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerSliceDecomposeCommand(slice: Command, io: ProgramIO): void;