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,5 +1,4 @@
1
1
  /**
2
- *
3
2
  * Companion CLI to Part 14 (peaks cron init/list/run). The
4
3
  * scheduler is a long-running background daemon that wakes up
5
4
  * once per minute, reads `.peaks/cron/schedule.json`, and runs
@@ -25,198 +24,48 @@
25
24
  * the scheduler to write its own pid. Or just run from
26
25
  * `nohup peaks-cron-scheduler start &` if you don't need
27
26
  * restart-on-crash.
27
+ *
28
+ * This file owns `registerCronSchedulerCommand`, `runSchedulerLoop` and the
29
+ * standalone entry shim the `bin/peaks-cron-scheduler.js` script loads; the
30
+ * four verb bodies live beside it, over the pid-file vocabulary in
31
+ * `cron-scheduler-shared.ts`.
28
32
  */
29
- import { spawn } from 'node:child_process';
30
- import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
31
- import { dirname, join, resolve } from 'node:path';
32
- import { fileURLToPath } from 'node:url';
33
- import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
34
- import { addJsonOption, printResult } from '../cli-helpers.js';
33
+ import { getErrorMessage } from 'peaks-loop-shared/result';
35
34
  import { findProjectRoot } from '../../services/config/config-safety.js';
36
- import { readSchedule, listDueTasks, runTask } from './cron-commands.js';
35
+ import { listDueTasks, runTask } from './cron-commands.js';
37
36
  import { persistLastRunAt } from './cron-scheduler-persist.js';
38
- const SCHEDULER_TICK_MS = 60_000; // 1 minute
39
- const PID_FILENAME = 'scheduler.pid';
40
- function schedulerPidPath(projectRoot) {
41
- return join(projectRoot, '.peaks', 'cron', PID_FILENAME);
42
- }
43
- function readSchedulerPid(projectRoot) {
44
- const p = schedulerPidPath(projectRoot);
45
- if (!existsSync(p))
46
- return null;
47
- const raw = readFileSync(p, 'utf8').trim();
48
- const pid = Number.parseInt(raw, 10);
49
- if (!Number.isFinite(pid) || pid <= 0)
50
- return null;
51
- return pid;
52
- }
53
- function isPidAlive(pid) {
54
- try {
55
- // `process.kill(pid, 0)` does not actually kill; it just
56
- // checks if the process exists. ESRCH means no such pid;
57
- // EPERM means it exists but we don't have permission to
58
- // signal it (still alive).
59
- process.kill(pid, 0);
60
- return true;
61
- }
62
- catch (err) {
63
- const code = err.code;
64
- return code === 'EPERM';
65
- }
66
- }
67
- function findSchedulerEntryPoint() {
68
- // The peaks-cron-scheduler.js entry shim lives in bin/ (not
69
- // dist/, so the pnpm build does not overwrite it). It forwards
70
- // to dist/cli/commands/cron-scheduler-commands.js with
71
- // PEAKS_CRON_SCHEDULER_DAEMON=1 set; the CLI detects the env
72
- // and runs runSchedulerLoop directly.
73
- const here = dirname(fileURLToPath(import.meta.url));
74
- // dist/cli/commands/cron-scheduler-commands.js → bin/peaks-cron-scheduler.js
75
- return resolve(here, '..', '..', '..', 'bin', 'peaks-cron-scheduler.js');
76
- }
37
+ import { SCHEDULER_TICK_MS } from './cron-scheduler-shared.js';
38
+ import { registerCronSchedulerStartCommand } from './cron-scheduler-start-command.js';
39
+ import { registerCronSchedulerStopCommand } from './cron-scheduler-stop-command.js';
40
+ import { registerCronSchedulerStatusCommand } from './cron-scheduler-status-command.js';
41
+ import { registerCronSchedulerRunOnceCommand } from './cron-scheduler-run-once-command.js';
77
42
  export function registerCronSchedulerCommand(program, io) {
78
43
  const cmd = program
79
44
  .command('cron-scheduler')
80
45
  .description('Long-running background scheduler for peaks cron tasks (Part 15).');
81
- addJsonOption(cmd
82
- .command('start')
83
- .description('Spawn the scheduler as a detached background process. Idempotent: refuses to start when an alive pid already exists.')
84
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
85
- try {
86
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
87
- const pidFile = schedulerPidPath(projectRoot);
88
- const existing = readSchedulerPid(projectRoot);
89
- if (existing !== null && isPidAlive(existing)) {
90
- printResult(io, ok('cron-scheduler.start', { projectRoot, started: false, alreadyRunning: true, existingPid: existing }, [], [
91
- `Scheduler already running at pid ${existing}; not starting a second one.`,
92
- 'Use `peaks cron-scheduler stop` first if you need to restart.'
93
- ]), options.json);
94
- return;
95
- }
96
- // Spawn detached via `peaks-cron-scheduler.js` — the
97
- // child runs `runSchedulerLoop` (60s setInterval + due-task
98
- // runner). The detached flag + stdio:ignore puts the
99
- // scheduler in its own process group (POSIX) / detaches
100
- // from the console (Windows). PEAKS_CRON_SCHEDULER_DAEMON
101
- // env is the canonical "I'm the long-running child" signal.
102
- const entry = findSchedulerEntryPoint();
103
- const child = spawn(process.execPath, [entry, '--project', projectRoot], {
104
- cwd: projectRoot,
105
- stdio: 'ignore',
106
- detached: true,
107
- windowsHide: true,
108
- env: { ...process.env, PEAKS_CRON_SCHEDULER: '1', PEAKS_CRON_SCHEDULER_DAEMON: '1' }
109
- });
110
- child.unref();
111
- if (typeof child.pid !== 'number') {
112
- throw new Error('spawn returned no pid');
113
- }
114
- writeFileSync(pidFile, String(child.pid), 'utf8');
115
- printResult(io, ok('cron-scheduler.start', { projectRoot, started: true, pid: child.pid, pidFile }, [], [
116
- `Scheduler started at pid ${child.pid}; logs go to .peaks/cron/scheduler.log.`,
117
- 'Use `peaks cron-scheduler status` to confirm it is alive; `stop` to terminate.'
118
- ]), options.json);
119
- }
120
- catch (err) {
121
- printResult(io, fail('cron-scheduler.start', 'SCHEDULER_START_FAILED', getErrorMessage(err), { projectRoot: options.project }, [
122
- 'Verify the peaks-cron-scheduler.js entry point is on disk.',
123
- 'Check that the .peaks/cron/ directory is writable.'
124
- ]), options.json);
125
- process.exitCode = 1;
126
- }
127
- });
128
- addJsonOption(cmd
129
- .command('stop')
130
- .description('Send SIGTERM to the scheduler pid (best-effort; removes the pid file either way).')
131
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
132
- try {
133
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
134
- const pid = readSchedulerPid(projectRoot);
135
- if (pid === null) {
136
- printResult(io, ok('cron-scheduler.stop', { projectRoot, stopped: false, reason: 'no-pid-file' }, [], ['No scheduler pid file found; nothing to stop.']), options.json);
137
- return;
138
- }
139
- let signalSent = false;
140
- if (isPidAlive(pid)) {
141
- try {
142
- process.kill(pid, 'SIGTERM');
143
- signalSent = true;
144
- }
145
- catch {
146
- signalSent = false;
147
- }
148
- }
149
- const pidFile = schedulerPidPath(projectRoot);
150
- try {
151
- unlinkSync(pidFile);
152
- }
153
- catch {
154
- /* best-effort */
155
- }
156
- printResult(io, ok('cron-scheduler.stop', { projectRoot, stopped: signalSent, pid, pidFile }, [], [
157
- signalSent
158
- ? `Sent SIGTERM to pid ${pid}; pid file removed.`
159
- : `pid ${pid} was not alive; pid file removed.`
160
- ]), options.json);
161
- }
162
- catch (err) {
163
- printResult(io, fail('cron-scheduler.stop', 'SCHEDULER_STOP_FAILED', getErrorMessage(err), { projectRoot: options.project }, ['Verify the pid file is readable / the process is yours.']), options.json);
164
- process.exitCode = 1;
165
- }
166
- });
167
- addJsonOption(cmd
168
- .command('status')
169
- .description('Report whether the scheduler is alive + when it last ran a task.')
170
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
171
- try {
172
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
173
- const pid = readSchedulerPid(projectRoot);
174
- const alive = pid !== null && isPidAlive(pid);
175
- let schedule;
176
- try {
177
- schedule = readSchedule(projectRoot);
178
- }
179
- catch (err) {
180
- schedule = { version: 1, entries: [] };
181
- }
182
- const due = alive ? listDueTasks(projectRoot) : [];
183
- printResult(io, ok('cron-scheduler.status', {
184
- projectRoot,
185
- pid,
186
- alive,
187
- scheduleEntries: schedule.entries.length,
188
- dueTaskCount: due.length
189
- }, [], [
190
- alive
191
- ? `Scheduler alive at pid ${pid}; ${due.length} task(s) due now.`
192
- : 'Scheduler is NOT running. Use `peaks cron-scheduler start` to spawn.'
193
- ]), options.json);
194
- }
195
- catch (err) {
196
- printResult(io, fail('cron-scheduler.status', 'SCHEDULER_STATUS_FAILED', getErrorMessage(err), { projectRoot: options.project }, ['Verify the .peaks/cron/ directory exists.']), options.json);
197
- process.exitCode = 1;
198
- }
199
- });
200
- addJsonOption(cmd
201
- .command('run-once')
202
- .description('Synchronous foreground one-shot: run every currently-due task and exit. Useful for manual cron substitute.')
203
- .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
204
- try {
205
- const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
206
- const due = listDueTasks(projectRoot);
207
- const records = due.map((t) => runTask(projectRoot, t));
208
- // §2.24 applied to the one-shot path too: without it `run-once` under an
209
- // external crontab re-ran the same task on every invocation.
210
- persistLastRunAt(projectRoot, records);
211
- printResult(io, ok('cron-scheduler.run-once', { projectRoot, ran: records.length, records }, [], [
212
- `${records.length} due task(s) ran; ${records.filter((r) => r.exitCode === 0).length} succeeded.`
213
- ]), options.json);
214
- if (records.some((r) => r.exitCode !== 0))
215
- process.exitCode = 1;
46
+ registerCronSchedulerStartCommand(cmd, io);
47
+ registerCronSchedulerStopCommand(cmd, io);
48
+ registerCronSchedulerStatusCommand(cmd, io);
49
+ registerCronSchedulerRunOnceCommand(cmd, io);
50
+ }
51
+ /** The loop's interval handle, cleared when the shutdown signal arrives. */
52
+ function waitForShutdown(signal, handle) {
53
+ // Wait for the abort signal (POSIX) or the platform equivalent. We don't use
54
+ // Node's process.on('SIGTERM') for portability — the parent process kills us
55
+ // via `process.kill(pid, 'SIGTERM')` and the event loop exits naturally if
56
+ // the interval is the only thing keeping the loop alive.
57
+ return new Promise((resolveShutdown) => {
58
+ const onAbort = () => {
59
+ clearInterval(handle);
60
+ resolveShutdown();
61
+ };
62
+ if (signal) {
63
+ signal.addEventListener('abort', onAbort, { once: true });
216
64
  }
217
- catch (err) {
218
- printResult(io, fail('cron-scheduler.run-once', 'SCHEDULER_RUN_ONCE_FAILED', getErrorMessage(err), { projectRoot: options.project }, ["If schedule.json is missing, run 'peaks cron init' first."]), options.json);
219
- process.exitCode = 1;
65
+ else {
66
+ // POSIX: SIGTERM. Windows: kill the process directly.
67
+ process.on('SIGTERM', onAbort);
68
+ process.on('SIGINT', onAbort);
220
69
  }
221
70
  });
222
71
  }
@@ -246,7 +95,7 @@ export async function runSchedulerLoop(args) {
246
95
  // due. Without it `lastRunAt` stays null, `listDueTasks` keeps the entry
247
96
  // due, and a 24 h task re-fires on every 60,000 ms tick (measured: 6 fires
248
97
  // across 6 ticks, 1 after the write). Killed runs are deliberately NOT
249
- // stamped — here, in `run-once` above, and since repair cycle 1 in `peaks
98
+ // stamped — here, in `run-once`, and since repair cycle 1 in `peaks
250
99
  // cron run` too; the rule and its per-platform costs are in
251
100
  // `cron-scheduler-persist.ts`.
252
101
  persistLastRunAt(args.projectRoot, records);
@@ -259,26 +108,7 @@ export async function runSchedulerLoop(args) {
259
108
  // for the first run after a start).
260
109
  tick();
261
110
  const handle = setInterval(tick, tickMs);
262
- // Wait for the abort signal (POSIX) or the platform
263
- // equivalent. We don't use Node's process.on('SIGTERM')
264
- // for portability — the parent process kills us via
265
- // `process.kill(pid, 'SIGTERM')` and the event loop
266
- // exits naturally if the interval is the only thing
267
- // keeping the loop alive. We clearInterval on exit.
268
- await new Promise((resolve) => {
269
- const onAbort = () => {
270
- clearInterval(handle);
271
- resolve();
272
- };
273
- if (args.signal) {
274
- args.signal.addEventListener('abort', onAbort, { once: true });
275
- }
276
- else {
277
- // POSIX: SIGTERM. Windows: kill the process directly.
278
- process.on('SIGTERM', onAbort);
279
- process.on('SIGINT', onAbort);
280
- }
281
- });
111
+ await waitForShutdown(args.signal, handle);
282
112
  process.exit(0);
283
113
  }
284
114
  // Standalone entry shim. When this file is run directly via
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function runCronSchedulerRunOnce(io: ProgramIO, options: {
4
+ project?: string;
5
+ json?: boolean;
6
+ }): void;
7
+ export declare function registerCronSchedulerRunOnceCommand(cmd: Command, io: ProgramIO): void;
@@ -0,0 +1,35 @@
1
+ // src/cli/commands/cron-scheduler-run-once-command.ts
2
+ //
3
+ // `peaks cron-scheduler run-once` — the synchronous foreground one-shot.
4
+ // Split out of `cron-scheduler-commands.ts`; the persistence step, the
5
+ // success envelope and the exit-code rule are unchanged.
6
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
7
+ import { fail, ok } from 'peaks-loop-shared/result';
8
+ import { findProjectRoot } from '../../services/config/config-safety.js';
9
+ import { listDueTasks, runTask } from './cron-commands.js';
10
+ import { persistLastRunAt } from './cron-scheduler-persist.js';
11
+ export function runCronSchedulerRunOnce(io, options) {
12
+ try {
13
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
14
+ const due = listDueTasks(projectRoot);
15
+ const records = due.map((t) => runTask(projectRoot, t));
16
+ // §2.24 applied to the one-shot path too: without it `run-once` under an
17
+ // external crontab re-ran the same task on every invocation.
18
+ persistLastRunAt(projectRoot, records);
19
+ printResult(io, ok('cron-scheduler.run-once', { projectRoot, ran: records.length, records }, [], [
20
+ `${records.length} due task(s) ran; ${records.filter((r) => r.exitCode === 0).length} succeeded.`
21
+ ]), options.json ?? false);
22
+ if (records.some((r) => r.exitCode !== 0))
23
+ process.exitCode = 1;
24
+ }
25
+ catch (err) {
26
+ printResult(io, fail('cron-scheduler.run-once', 'SCHEDULER_RUN_ONCE_FAILED', getErrorMessage(err), { projectRoot: options.project }, ["If schedule.json is missing, run 'peaks cron init' first."]), options.json ?? false);
27
+ process.exitCode = 1;
28
+ }
29
+ }
30
+ export function registerCronSchedulerRunOnceCommand(cmd, io) {
31
+ addJsonOption(cmd
32
+ .command('run-once')
33
+ .description('Synchronous foreground one-shot: run every currently-due task and exit. Useful for manual cron substitute.')
34
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runCronSchedulerRunOnce(io, options));
35
+ }
@@ -0,0 +1,6 @@
1
+ export declare const SCHEDULER_TICK_MS = 60000;
2
+ export declare const PID_FILENAME = "scheduler.pid";
3
+ export declare function schedulerPidPath(projectRoot: string): string;
4
+ export declare function readSchedulerPid(projectRoot: string): number | null;
5
+ export declare function isPidAlive(pid: number): boolean;
6
+ export declare function findSchedulerEntryPoint(): string;
@@ -0,0 +1,48 @@
1
+ // src/cli/commands/cron-scheduler-shared.ts
2
+ //
3
+ // What every `peaks cron-scheduler *` verb shares: the tick period, the pid
4
+ // file, and the two questions asked of it (is there a pid, is it alive) plus
5
+ // where the detached child's entry shim lives. Split out of
6
+ // `cron-scheduler-commands.ts`; every path, probe and constant is unchanged.
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import { dirname, join, resolve } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+ export const SCHEDULER_TICK_MS = 60_000; // 1 minute
11
+ export const PID_FILENAME = 'scheduler.pid';
12
+ export function schedulerPidPath(projectRoot) {
13
+ return join(projectRoot, '.peaks', 'cron', PID_FILENAME);
14
+ }
15
+ export function readSchedulerPid(projectRoot) {
16
+ const p = schedulerPidPath(projectRoot);
17
+ if (!existsSync(p))
18
+ return null;
19
+ const raw = readFileSync(p, 'utf8').trim();
20
+ const pid = Number.parseInt(raw, 10);
21
+ if (!Number.isFinite(pid) || pid <= 0)
22
+ return null;
23
+ return pid;
24
+ }
25
+ export function isPidAlive(pid) {
26
+ try {
27
+ // `process.kill(pid, 0)` does not actually kill; it just
28
+ // checks if the process exists. ESRCH means no such pid;
29
+ // EPERM means it exists but we don't have permission to
30
+ // signal it (still alive).
31
+ process.kill(pid, 0);
32
+ return true;
33
+ }
34
+ catch (err) {
35
+ const code = err.code;
36
+ return code === 'EPERM';
37
+ }
38
+ }
39
+ export function findSchedulerEntryPoint() {
40
+ // The peaks-cron-scheduler.js entry shim lives in bin/ (not
41
+ // dist/, so the pnpm build does not overwrite it). It forwards
42
+ // to dist/cli/commands/cron-scheduler-commands.js with
43
+ // PEAKS_CRON_SCHEDULER_DAEMON=1 set; the CLI detects the env
44
+ // and runs runSchedulerLoop directly.
45
+ const here = dirname(fileURLToPath(import.meta.url));
46
+ // dist/cli/commands/cron-scheduler-commands.js → bin/peaks-cron-scheduler.js
47
+ return resolve(here, '..', '..', '..', 'bin', 'peaks-cron-scheduler.js');
48
+ }
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function runCronSchedulerStart(io: ProgramIO, options: {
4
+ project?: string;
5
+ json?: boolean;
6
+ }): void;
7
+ export declare function registerCronSchedulerStartCommand(cmd: Command, io: ProgramIO): void;
@@ -0,0 +1,65 @@
1
+ // src/cli/commands/cron-scheduler-start-command.ts
2
+ //
3
+ // `peaks cron-scheduler start` — spawn the scheduler as a detached background
4
+ // process. Split out of `cron-scheduler-commands.ts`; the idempotency rule,
5
+ // the spawn options, the pid file and both envelopes are unchanged.
6
+ import { spawn } from 'node:child_process';
7
+ import { writeFileSync } from 'node:fs';
8
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
9
+ import { fail, ok } from 'peaks-loop-shared/result';
10
+ import { findProjectRoot } from '../../services/config/config-safety.js';
11
+ import { findSchedulerEntryPoint, isPidAlive, readSchedulerPid, schedulerPidPath } from './cron-scheduler-shared.js';
12
+ /**
13
+ * Spawn detached via `peaks-cron-scheduler.js` — the child runs
14
+ * `runSchedulerLoop` (60s setInterval + due-task runner). The detached flag +
15
+ * stdio:ignore puts the scheduler in its own process group (POSIX) / detaches
16
+ * from the console (Windows). PEAKS_CRON_SCHEDULER_DAEMON env is the canonical
17
+ * "I'm the long-running child" signal.
18
+ */
19
+ function spawnDetachedScheduler(io, options, projectRoot, pidFile) {
20
+ const entry = findSchedulerEntryPoint();
21
+ const child = spawn(process.execPath, [entry, '--project', projectRoot], {
22
+ cwd: projectRoot,
23
+ stdio: 'ignore',
24
+ detached: true,
25
+ windowsHide: true,
26
+ env: { ...process.env, PEAKS_CRON_SCHEDULER: '1', PEAKS_CRON_SCHEDULER_DAEMON: '1' }
27
+ });
28
+ child.unref();
29
+ if (typeof child.pid !== 'number') {
30
+ throw new Error('spawn returned no pid');
31
+ }
32
+ writeFileSync(pidFile, String(child.pid), 'utf8');
33
+ printResult(io, ok('cron-scheduler.start', { projectRoot, started: true, pid: child.pid, pidFile }, [], [
34
+ `Scheduler started at pid ${child.pid}; logs go to .peaks/cron/scheduler.log.`,
35
+ 'Use `peaks cron-scheduler status` to confirm it is alive; `stop` to terminate.'
36
+ ]), options.json ?? false);
37
+ }
38
+ export function runCronSchedulerStart(io, options) {
39
+ try {
40
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
41
+ const pidFile = schedulerPidPath(projectRoot);
42
+ const existing = readSchedulerPid(projectRoot);
43
+ if (existing !== null && isPidAlive(existing)) {
44
+ printResult(io, ok('cron-scheduler.start', { projectRoot, started: false, alreadyRunning: true, existingPid: existing }, [], [
45
+ `Scheduler already running at pid ${existing}; not starting a second one.`,
46
+ 'Use `peaks cron-scheduler stop` first if you need to restart.'
47
+ ]), options.json ?? false);
48
+ return;
49
+ }
50
+ spawnDetachedScheduler(io, options, projectRoot, pidFile);
51
+ }
52
+ catch (err) {
53
+ printResult(io, fail('cron-scheduler.start', 'SCHEDULER_START_FAILED', getErrorMessage(err), { projectRoot: options.project }, [
54
+ 'Verify the peaks-cron-scheduler.js entry point is on disk.',
55
+ 'Check that the .peaks/cron/ directory is writable.'
56
+ ]), options.json ?? false);
57
+ process.exitCode = 1;
58
+ }
59
+ }
60
+ export function registerCronSchedulerStartCommand(cmd, io) {
61
+ addJsonOption(cmd
62
+ .command('start')
63
+ .description('Spawn the scheduler as a detached background process. Idempotent: refuses to start when an alive pid already exists.')
64
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runCronSchedulerStart(io, options));
65
+ }
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function runCronSchedulerStatus(io: ProgramIO, options: {
4
+ project?: string;
5
+ json?: boolean;
6
+ }): void;
7
+ export declare function registerCronSchedulerStatusCommand(cmd: Command, io: ProgramIO): void;
@@ -0,0 +1,46 @@
1
+ // src/cli/commands/cron-scheduler-status-command.ts
2
+ //
3
+ // `peaks cron-scheduler status` — report whether the scheduler is alive and
4
+ // how many tasks are due. Split out of `cron-scheduler-commands.ts`; the
5
+ // degraded-tier schedule read and both envelopes are unchanged.
6
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
7
+ import { fail, ok } from 'peaks-loop-shared/result';
8
+ import { findProjectRoot } from '../../services/config/config-safety.js';
9
+ import { listDueTasks, readSchedule } from './cron-commands.js';
10
+ import { isPidAlive, readSchedulerPid } from './cron-scheduler-shared.js';
11
+ export function runCronSchedulerStatus(io, options) {
12
+ try {
13
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
14
+ const pid = readSchedulerPid(projectRoot);
15
+ const alive = pid !== null && isPidAlive(pid);
16
+ let schedule;
17
+ try {
18
+ schedule = readSchedule(projectRoot);
19
+ }
20
+ catch {
21
+ schedule = { version: 1, entries: [] };
22
+ }
23
+ const due = alive ? listDueTasks(projectRoot) : [];
24
+ printResult(io, ok('cron-scheduler.status', {
25
+ projectRoot,
26
+ pid,
27
+ alive,
28
+ scheduleEntries: schedule.entries.length,
29
+ dueTaskCount: due.length
30
+ }, [], [
31
+ alive
32
+ ? `Scheduler alive at pid ${pid}; ${due.length} task(s) due now.`
33
+ : 'Scheduler is NOT running. Use `peaks cron-scheduler start` to spawn.'
34
+ ]), options.json ?? false);
35
+ }
36
+ catch (err) {
37
+ printResult(io, fail('cron-scheduler.status', 'SCHEDULER_STATUS_FAILED', getErrorMessage(err), { projectRoot: options.project }, ['Verify the .peaks/cron/ directory exists.']), options.json ?? false);
38
+ process.exitCode = 1;
39
+ }
40
+ }
41
+ export function registerCronSchedulerStatusCommand(cmd, io) {
42
+ addJsonOption(cmd
43
+ .command('status')
44
+ .description('Report whether the scheduler is alive + when it last ran a task.')
45
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runCronSchedulerStatus(io, options));
46
+ }
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function runCronSchedulerStop(io: ProgramIO, options: {
4
+ project?: string;
5
+ json?: boolean;
6
+ }): void;
7
+ export declare function registerCronSchedulerStopCommand(cmd: Command, io: ProgramIO): void;
@@ -0,0 +1,61 @@
1
+ // src/cli/commands/cron-scheduler-stop-command.ts
2
+ //
3
+ // `peaks cron-scheduler stop` — SIGTERM the scheduler pid (best-effort) and
4
+ // remove the pid file either way. Split out of `cron-scheduler-commands.ts`;
5
+ // the signal, the unlink and both envelopes are unchanged.
6
+ import { unlinkSync } from 'node:fs';
7
+ import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
8
+ import { fail, ok } from 'peaks-loop-shared/result';
9
+ import { findProjectRoot } from '../../services/config/config-safety.js';
10
+ import { isPidAlive, readSchedulerPid, schedulerPidPath } from './cron-scheduler-shared.js';
11
+ /** The no-pid-file outcome: nothing to signal, nothing to unlink. */
12
+ function emitNoPidFile(io, options, projectRoot) {
13
+ printResult(io, ok('cron-scheduler.stop', { projectRoot, stopped: false, reason: 'no-pid-file' }, [], ['No scheduler pid file found; nothing to stop.']), options.json ?? false);
14
+ }
15
+ /** SIGTERM the pid (best-effort) and remove the pid file either way. */
16
+ function terminateScheduler(projectRoot, pid) {
17
+ let signalSent = false;
18
+ if (isPidAlive(pid)) {
19
+ try {
20
+ process.kill(pid, 'SIGTERM');
21
+ signalSent = true;
22
+ }
23
+ catch {
24
+ signalSent = false;
25
+ }
26
+ }
27
+ const pidFile = schedulerPidPath(projectRoot);
28
+ try {
29
+ unlinkSync(pidFile);
30
+ }
31
+ catch {
32
+ /* best-effort */
33
+ }
34
+ return { signalSent, pidFile };
35
+ }
36
+ export function runCronSchedulerStop(io, options) {
37
+ try {
38
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
39
+ const pid = readSchedulerPid(projectRoot);
40
+ if (pid === null) {
41
+ emitNoPidFile(io, options, projectRoot);
42
+ return;
43
+ }
44
+ const { signalSent, pidFile } = terminateScheduler(projectRoot, pid);
45
+ printResult(io, ok('cron-scheduler.stop', { projectRoot, stopped: signalSent, pid, pidFile }, [], [
46
+ signalSent
47
+ ? `Sent SIGTERM to pid ${pid}; pid file removed.`
48
+ : `pid ${pid} was not alive; pid file removed.`
49
+ ]), options.json ?? false);
50
+ }
51
+ catch (err) {
52
+ printResult(io, fail('cron-scheduler.stop', 'SCHEDULER_STOP_FAILED', getErrorMessage(err), { projectRoot: options.project }, ['Verify the pid file is readable / the process is yours.']), options.json ?? false);
53
+ process.exitCode = 1;
54
+ }
55
+ }
56
+ export function registerCronSchedulerStopCommand(cmd, io) {
57
+ addJsonOption(cmd
58
+ .command('stop')
59
+ .description('Send SIGTERM to the scheduler pid (best-effort; removes the pid file either way).')
60
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runCronSchedulerStop(io, options));
61
+ }
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function buildDispatchCommandSpec(parent: Command): Command;
@@ -0,0 +1,62 @@
1
+ import { addJsonOption } from '../cli-helpers.js';
2
+ const DISPATCH_DESCRIPTION = 'Build an IDE-specific tool-call descriptor for a sub-agent dispatch. ' +
3
+ 'Dry-run by design; the LLM executes the returned toolCall in its own ' +
4
+ 'environment. Flags: --write-artifact (G7), ' +
5
+ '--force (G9 CLI 兜底). ' +
6
+ 'See skills/peaks-code/references/sub-agent-dispatch.md for the ' +
7
+ 'orchestrator contract.';
8
+ function buildDispatchCommandBase(parent) {
9
+ return parent
10
+ .command('dispatch')
11
+ .description(DISPATCH_DESCRIPTION)
12
+ .argument('<role>', 'sub-agent role (e.g. rd | qa | ui | txt | qa-business | qa-business-api)');
13
+ }
14
+ function applyDispatchInputOptions(command) {
15
+ return (command
16
+ // 2.7.0 slice-dag-dispatcher MVP: --prompt is required ONLY when --from-dag is NOT
17
+ // supplied. Previously this was `.requiredOption('--prompt')`, which blocked
18
+ // `dispatch --from-dag <file>` calls because commander.js validates
19
+ // `.requiredOption` before the action handler runs. The mutual-exclusion
20
+ // check is enforced below in the action body (--prompt XOR --from-dag).
21
+ .option('--prompt <text>', 'the prompt to send to the sub-agent (required unless --from-dag is provided)')
22
+ .option('--prompt-length <bytes>', 'DOGFOOD ONLY: synthesize a prompt of this size (overrides --prompt content for size only; content is "x" repeated)')
23
+ .option('--request-id <rid>', 'the same <rid> used by peaks request init')
24
+ .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")')
25
+ .option('--project <path>', 'target project root (defaults to cwd)')
26
+ .option('--batch-id <uuid>', 'batch id for the dispatch (default: auto-generated UUID)')
27
+ .option('--write-artifact <path>', 'G7: register an artifact file at <path>; CLI computes sha256 + size + writes ArtifactMeta to the dispatch record')
28
+ .option('--force', 'G9: override the 80% hard reject threshold at CLI (NOT allowed at hook layer per RL-30 strict)')
29
+ .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>)')
30
+ .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.')
31
+ // Slice 4.0.8 RD §4 made this a `.requiredOption`. It is optional now:
32
+ // the requirement was enforced but never validated — nothing downstream
33
+ // reads the node, and the record writer's graph transition is
34
+ // best-effort — so its only observable effect was to block dispatch in
35
+ // every project without graph infrastructure. See
36
+ // `provisionDispatchNode`.
37
+ .option('--graph-node <id>', 'graph node id this dispatch binds to (default: a node is provisioned on demand)')
38
+ .option('--workflow-id <id>', 'workflow id the graph node belongs to (defaults to derived from session)'));
39
+ }
40
+ function applyDispatchExecutionOptions(command) {
41
+ return (command
42
+ .option('--graph-ref <ref>', 'graphRef (defaults to graphs/<workflow-id>.json)')
43
+ // mode is `in-process` so the 106+ existing dispatch call sites
44
+ // keep their path byte-identical. The detached branch below
45
+ // fires only when --mode detached is explicitly passed.
46
+ .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).')
47
+ .option('--vendor <vendor>', 'target vendor CLI for --mode detached (claude | codex | copilot). Ignored in the default in-process path.')
48
+ .option('--no-throttle', 'rid-001 detached: user-overrides ResourceBudgetGuard when concurrent fan-out exceeds max-concurrent (user accepts risk; surfaces as warning)')
49
+ .option('--max-concurrent <n>', 'rid-001 detached: override the per-tenant max concurrent budget (default 8). Effective in both detached and in-process paths.')
50
+ // §Lesson 1): the RD sub-agent's fake-green failure mode was that it
51
+ // claimed "5/5 reachability tests PASS" while the files were never
52
+ // on disk. `--must-ls-files <glob>` is the anti-fake-green gate:
53
+ // the CLI runs `git ls-files <glob>` upfront, reports the result in
54
+ // the envelope (`data.mustLsFilesVerification`), and prepends a
55
+ // `## must_ls_files enforcement` block to the sub-agent prompt so
56
+ // the LLM's first action MUST re-verify file existence before any
57
+ // "completed" claim. Absent → old behavior is preserved.
58
+ .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.'));
59
+ }
60
+ export function buildDispatchCommandSpec(parent) {
61
+ return addJsonOption(applyDispatchExecutionOptions(applyDispatchInputOptions(buildDispatchCommandBase(parent))));
62
+ }