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,323 +1,2 @@
1
- import { runDoctor } from '../../../services/doctor/index.js';
2
- import { readBinding, dropStale, rebuildBindingFromLegacy } from '../../../services/session/binding-store.js';
3
- import { findProjectRoot } from '../../../services/config/config-safety.js';
4
- import { loadSkillRegistry } from '../../../services/skills/skill-registry.js';
5
- import { planStatusLineInstall } from '../../../services/skills/statusline-settings-service.js';
6
- import { addJsonOption, printResult } from '../../cli-helpers.js';
7
- import { boundedNames, fitSummaryToBytes } from '../../../services/context/summary-view.js';
8
- import { fail, ok } from 'peaks-loop-shared/result';
9
- // slice-3b Option C: the doctor subpackage owns the check pipeline but
10
- // does NOT import cross-domain utils from the main package (avoids
11
- // circular deps). The CLI is the natural wiring point — every cross-
12
- // domain util the doctor used to import directly is now injected as a
13
- // probe on DoctorOptions at call-site:
14
- //
15
- // loadSkills ← loadSkillRegistry (main/services/skills/skill-registry.ts)
16
- // skillPresenceProbe ← leave as-is; doctor-command does not own the presence probe
17
- // statusLineInstalledProbe ← defaults to a `planStatusLineInstall` wrapper below
18
- // projectRootResolver ← findProjectRoot (main/services/config/config-safety.ts)
19
- // isValidSessionIdProbe ← the regex kept in main/services/workspace/sid-naming-guard.ts
20
- //
21
- // Inlining isValidSessionId via the doctor subpackage's default regex
22
- // (which mirrors the upstream file byte-for-byte) keeps the L3 orphan
23
- // check behaviour-identical without dragging sid-naming-guard into a
24
- // workspace package. If sid-naming-guard is ever moved into
25
- // peaks-loop-shared, swap this for a re-import.
26
- function doctorIsValidSessionId(sid) {
27
- return /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])-session-[0-9a-z]{3,6}$/.test(sid);
28
- }
29
- function statusLineAlreadyInstalledForScope(scope, projectRoot) {
30
- try {
31
- if (scope === 'project') {
32
- if (projectRoot === undefined)
33
- return false;
34
- return planStatusLineInstall('project', projectRoot).alreadyInstalled;
35
- }
36
- return planStatusLineInstall('global').alreadyInstalled;
37
- }
38
- catch {
39
- return false;
40
- }
41
- }
42
- /**
43
- * the doctor envelope. The `checks` array (one object per check, each with a
44
- * full message) and the stale-binding instance list collapse to counts +
45
- * names-of-first-N; the summary counters and log section are scalars and are
46
- * kept verbatim. ≤ 2 KB by construction.
47
- */
48
- export function buildDoctorSummary(data) {
49
- const checks = Array.isArray(data.checks)
50
- ? data.checks
51
- : [];
52
- const label = (c) => {
53
- const id = typeof c.id === 'string' ? c.id : 'unknown';
54
- if (c.ok === true)
55
- return `ok ${id}`;
56
- return `${c.severity === 'warning' ? 'warn' : 'FAIL'} ${id}`;
57
- };
58
- const failed = checks.filter((c) => c.ok === false);
59
- const stale = typeof data.staleBinding === 'object' && data.staleBinding !== null
60
- ? data.staleBinding
61
- : null;
62
- const view = {
63
- view: 'summary',
64
- summary: data.summary,
65
- checks: boundedNames(checks.map(label)),
66
- failed: boundedNames(failed.map((c) => `${typeof c.id === 'string' ? c.id : 'unknown'}: ${typeof c.message === 'string' ? c.message : ''}`))
67
- };
68
- if (stale !== null) {
69
- view.staleBinding = {
70
- ttlMs: stale.ttlMs,
71
- staleCount: stale.staleCount,
72
- droppedCount: stale.droppedCount,
73
- droppedSids: boundedNames(Array.isArray(stale.droppedSids) ? stale.droppedSids.map((s) => String(s)) : [])
74
- };
75
- }
76
- if (data.logs !== undefined)
77
- view.logs = data.logs;
78
- return fitSummaryToBytes(view);
79
- }
80
- function doctorStatusLineInstalledProbe() {
81
- const projectRoot = findProjectRoot(process.cwd());
82
- // Check both scopes: a user may have installed the statusLine globally, which
83
- // the project-only check would miss and falsely report as "not installed".
84
- try {
85
- if (projectRoot !== null && statusLineAlreadyInstalledForScope('project', projectRoot)) {
86
- return true;
87
- }
88
- }
89
- catch {
90
- // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
91
- /* fall through to global */
92
- }
93
- try {
94
- return statusLineAlreadyInstalledForScope('global');
95
- }
96
- catch {
97
- return false;
98
- }
99
- }
100
- // threshold is exposed as a CLI flag so users can tune it for
101
- // long-running sessions.
102
- const STALE_TTL_MS = 5 * 60 * 1000;
103
- // in the project-level binding. Used by `peaks doctor` and surfaced as
104
- // a warning in the report. Returns the stale entry descriptors.
105
- function listStaleInstances(projectRoot, ttlMs = STALE_TTL_MS) {
106
- const binding = readBinding(projectRoot);
107
- if (!binding)
108
- return [];
109
- const cutoff = Date.now() - ttlMs;
110
- const stale = [];
111
- for (const [sid, inst] of Object.entries(binding.instances)) {
112
- const t = Date.parse(inst.lastHeartbeat);
113
- if (Number.isFinite(t) && t < cutoff) {
114
- stale.push({ sid, callerId: inst.callerId, lastHeartbeat: inst.lastHeartbeat });
115
- }
116
- }
117
- return stale;
118
- }
119
- //
120
- // `buildDoctorLogsSection` reads the on-disk log dir and returns the
121
- // metadata the doctor needs to render the "logs" block. It is
122
- // extracted from the inline `peaks doctor --log` action so the
123
- // command stays small and the helper is unit-testable without
124
- // spinning up the full program.
125
- async function buildDoctorLogsSection() {
126
- // Lazy imports to avoid a circular dep at module-load time
127
- // (core-artifact-commands is imported very early in program.ts).
128
- const { resolveLogDir, buildLogFileName } = await import('../../../services/log/logger.js');
129
- const { statSync, existsSync } = await import('node:fs');
130
- const { join } = await import('node:path');
131
- const logDir = resolveLogDir();
132
- const todayFile = buildLogFileName(new Date());
133
- const fullPath = join(logDir, todayFile);
134
- let sizeBytes = 0;
135
- if (existsSync(fullPath)) {
136
- try {
137
- sizeBytes = statSync(fullPath).size;
138
- }
139
- catch {
140
- sizeBytes = 0;
141
- }
142
- }
143
- return {
144
- logDir,
145
- todayFile,
146
- sizeBytes,
147
- retentionDays: 7,
148
- level: process.env.PEAKS_LOG_LEVEL ?? 'info'
149
- };
150
- }
151
- // "logs" section to the doctor output (logDir, today's file name,
152
- // size, retention policy, level). Useful for the user when they
153
- // want to attach a quick log snapshot to a bug report without
154
- // running `peaks log tail` first. The flag is opt-in so the
155
- // existing doctor output is preserved (P4).
156
- export function registerDoctorCommand(program, io) {
157
- addJsonOption(program
158
- .command('doctor')
159
- .description('Run repository doctor checks')
160
- .option('--log', 'include a "logs" section in the doctor output (slice 2026-06-16-cli-logging, AC6)')
161
- .option('--cleanup-stale', 'drop stale instance entries from the project-level binding (v2.16.0 AC-10)')
162
- .option('--stale-ttl-ms <ms>', 'stale-binding TTL in milliseconds (default 300000 = 5 minutes, v2.16.0 AC-10)')
163
- // v2.18.2 PATCH scope (follow-up issue #1): rewrite legacy
164
- // v2.16.0 / v2.17.0 binding files in place so every existing
165
- // callerId gets the `${envSignal}#${pid}` suffix introduced in
166
- // v2.18.0. Mutually exclusive with --cleanup-stale to keep the
167
- // semantics unambiguous (rebuild = structural change,
168
- // cleanup-stale = TTL-based prune).
169
- .option('--rebuild-binding', 'rewrite legacy v2.16.0 / v2.17.0 callerId entries to the v2.18.0+ `#${pid}` format (v2.18.2, follow-up issue #1)')
170
- // v2.18.2 cycle 2: --project makes the project-root-bound
171
- // flags (--rebuild-binding, --cleanup-stale, stale-binding
172
- // scan) addressable for non-current projects. The doctor was
173
- // hardcoded to findProjectRoot(process.cwd()) which is the
174
- // wrong default for users inspecting a sibling project.
175
- .option('--project <path>', 'target project root (defaults to git root or cwd)')
176
- .option('--summary', 'JSON envelope only: emit check counts + names-of-first-N (≤ 2 KB) instead of the full checks/stale-binding arrays; the default envelope is unchanged')).action(async (options) => {
177
- // v2.18.2 cycle 2 (Q2 arbitration): --rebuild-binding and
178
- // --cleanup-stale BOTH mutate the binding file. Running them
179
- // together is ambiguous (rebuild rewrites callerIds; cleanup
180
- // prunes entries). Hard-reject the combination so the user
181
- // gets an actionable error instead of a silent short-circuit.
182
- if (options.rebuildBinding === true && options.cleanupStale === true) {
183
- const envelope = fail('doctor.rebuild-binding', 'CONFLICTING_FLAGS', '--rebuild-binding and --cleanup-stale are mutually exclusive', { rebuildBinding: true, cleanupStale: true }, ['Run them in separate `peaks doctor` invocations']);
184
- printResult(io, envelope, options.json === true);
185
- process.exitCode = 1;
186
- return;
187
- }
188
- // v2.18.2 cycle 2: --project override, applies to BOTH the
189
- // --rebuild-binding short-circuit AND the binding-stale scan.
190
- const projectRoot = options.project !== undefined
191
- ? options.project
192
- : (findProjectRoot(process.cwd()) ?? process.cwd());
193
- // v2.18.2: short-circuit on --rebuild-binding so the doctor
194
- // checks don't run when the user is asking for a single targeted
195
- // migration. The rebuild is observable in its own right
196
- // (rewritten/preserved counts) and does not benefit from running
197
- // the full doctor surface first.
198
- if (options.rebuildBinding === true) {
199
- const result = rebuildBindingFromLegacy(projectRoot);
200
- if (result.errors.length > 0) {
201
- for (const err of result.errors) {
202
- io.stderr(` warning: ${err}`);
203
- }
204
- }
205
- const data = {
206
- rebuilt: !result.noop,
207
- rewritten: result.rewritten,
208
- preserved: result.preserved,
209
- errors: result.errors,
210
- projectRoot
211
- };
212
- const envelope = result.rewritten === 0
213
- ? ok('doctor.rebuild-binding', data, [], result.noop ? ['no legacy callerId entries found — nothing to rewrite'] : [])
214
- : fail('doctor.rebuild-binding', result.noop ? 'BINDING_REBUILD_NOOP' : 'BINDING_REBUILD_OK', result.noop
215
- ? 'No legacy callerId entries to rewrite'
216
- : `Rewrote ${result.rewritten} legacy callerId entry/entries (preserved ${result.preserved})`, data, ['Re-run `peaks binding status` to verify the rewritten entries']);
217
- printResult(io, envelope, options.json === true);
218
- if (result.errors.length > 0 && result.rewritten === 0) {
219
- process.exitCode = 1;
220
- }
221
- return;
222
- }
223
- const report = await runDoctor({
224
- // slice-3b Option C: wire cross-domain probes at call-site.
225
- loadSkills: loadSkillRegistry,
226
- projectRootResolver: () => findProjectRoot(process.cwd()),
227
- isValidSessionIdProbe: doctorIsValidSessionId,
228
- statusLineInstalledProbe: doctorStatusLineInstalledProbe
229
- });
230
- let logsSection = null;
231
- if (options.log === true) {
232
- logsSection = await buildDoctorLogsSection();
233
- }
234
- const ttl = options.staleTtlMs !== undefined ? Number(options.staleTtlMs) : STALE_TTL_MS;
235
- const staleInstances = listStaleInstances(projectRoot, ttl);
236
- let droppedStale = [];
237
- if (options.cleanupStale === true) {
238
- const { dropped } = dropStale(projectRoot, ttl);
239
- droppedStale = dropped;
240
- }
241
- const staleBindingSection = {
242
- ttlMs: ttl,
243
- staleCount: staleInstances.length,
244
- staleInstances,
245
- droppedCount: droppedStale.length,
246
- droppedSids: droppedStale
247
- };
248
- const fullData = logsSection === null
249
- ? { ...report, staleBinding: staleBindingSection }
250
- : { ...report, logs: logsSection, staleBinding: staleBindingSection };
251
- // Slice B: `--summary` is opt-in and affects the JSON envelope only (the
252
- // human-readable path below already prints one line per check).
253
- const data = options.summary === true ? buildDoctorSummary(fullData) : fullData;
254
- // repair cycle: `report.summary.ok` already factors in the
255
- // severity-aware aggregation in `buildReport` (warnings do NOT
256
- // flip `ok`). Stale-binding is independent and still escalates.
257
- const result = report.summary.ok && staleInstances.length === 0
258
- ? ok('doctor', data)
259
- : fail('doctor', 'DOCTOR_FAILED', staleInstances.length > 0
260
- ? `Found ${staleInstances.length} stale binding instance(s); rerun with --cleanup-stale to drop them`
261
- : 'One or more doctor checks failed', data, staleInstances.length > 0
262
- ? ['Run `peaks doctor --cleanup-stale` to drop stale entries']
263
- : ['Fix failed checks and rerun peaks doctor']);
264
- if (options.json === true) {
265
- printResult(io, result, true);
266
- }
267
- else {
268
- // Human-readable: one line per check, green/red indicators, no JSON.
269
- // repair cycle: warn-only findings (severity: 'warning') surface
270
- // as `! check.ok` with the `! ` (warning) glyph so the operator
271
- // can tell them apart from real errors without reading JSON.
272
- for (const check of report.checks) {
273
- if (check.ok) {
274
- io.stdout(` + ${check.message}`);
275
- }
276
- else if (check.severity === 'warning') {
277
- io.stdout(` ! ${check.message}`);
278
- }
279
- else {
280
- io.stdout(` × ${check.message}`);
281
- }
282
- }
283
- if (logsSection !== null) {
284
- io.stdout('\n logs:');
285
- io.stdout(` logDir: ${logsSection.logDir}`);
286
- io.stdout(` todayFile: ${logsSection.todayFile}`);
287
- io.stdout(` sizeBytes: ${logsSection.sizeBytes}`);
288
- io.stdout(` retentionDays: ${logsSection.retentionDays}`);
289
- io.stdout(` level: ${logsSection.level}`);
290
- }
291
- io.stdout('\n stale-binding (v2.16.0 AC-10):');
292
- if (staleInstances.length === 0) {
293
- io.stdout(' + no stale instances');
294
- }
295
- else {
296
- io.stdout(` × ${staleInstances.length} stale instance(s):`);
297
- for (const s of staleInstances) {
298
- io.stdout(` - sid=${s.sid} caller=${s.callerId} lastSeen=${s.lastHeartbeat}`);
299
- }
300
- if (droppedStale.length > 0) {
301
- io.stdout(` cleaned up: ${droppedStale.length}`);
302
- }
303
- else {
304
- io.stdout(' rerun with --cleanup-stale to drop them');
305
- }
306
- }
307
- io.stdout(`\n ${report.summary.passed} passed, ${report.summary.failed} failed${report.summary.warnings > 0 ? `, ${report.summary.warnings} warning(s)` : ''}`);
308
- if (!report.summary.ok || staleInstances.length > 0) {
309
- io.stderr(`\nDOCTOR_FAILED: ${staleInstances.length > 0 ? 'stale binding present' : `${report.summary.failed} check(s) failed`}.`);
310
- }
311
- else if (report.summary.warnings > 0) {
312
- io.stdout(`\n ${report.summary.warnings} warning(s) present — exit code 0 (warn-only).`);
313
- }
314
- }
315
- // repair cycle: `report.summary.ok` already factors in the
316
- // severity-aware aggregation in `buildReport` (warnings do NOT
317
- // flip `ok`). The exit-code gate remains `summary.ok &&
318
- // !staleInstances` — no separate warning special-case needed here.
319
- if (!report.summary.ok || staleInstances.length > 0) {
320
- process.exitCode = 1;
321
- }
322
- });
323
- }
1
+ export { buildDoctorSummary } from './doctor-summary.js';
2
+ export { registerDoctorCommand } from './doctor-run-command.js';
@@ -0,0 +1,8 @@
1
+ export type DoctorLogsSection = {
2
+ logDir: string;
3
+ todayFile: string;
4
+ sizeBytes: number;
5
+ retentionDays: number;
6
+ level: string;
7
+ };
8
+ export declare function buildDoctorLogsSection(): Promise<DoctorLogsSection>;
@@ -0,0 +1,32 @@
1
+ import { existsSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ //
4
+ // `buildDoctorLogsSection` reads the on-disk log dir and returns the
5
+ // metadata the doctor needs to render the "logs" block. It is
6
+ // extracted from the inline `peaks doctor --log` action so the
7
+ // command stays small and the helper is unit-testable without
8
+ // spinning up the full program.
9
+ export async function buildDoctorLogsSection() {
10
+ // Lazy import to avoid a circular dep at module-load time
11
+ // (core-artifact-commands is imported very early in program.ts).
12
+ const { resolveLogDir, buildLogFileName } = await import('../../../services/log/logger.js');
13
+ const logDir = resolveLogDir();
14
+ const todayFile = buildLogFileName(new Date());
15
+ const fullPath = join(logDir, todayFile);
16
+ let sizeBytes = 0;
17
+ if (existsSync(fullPath)) {
18
+ try {
19
+ sizeBytes = statSync(fullPath).size;
20
+ }
21
+ catch {
22
+ sizeBytes = 0;
23
+ }
24
+ }
25
+ return {
26
+ logDir,
27
+ todayFile,
28
+ sizeBytes,
29
+ retentionDays: 7,
30
+ level: process.env.PEAKS_LOG_LEVEL ?? 'info'
31
+ };
32
+ }
@@ -0,0 +1,3 @@
1
+ export declare function doctorIsValidSessionId(sid: string): boolean;
2
+ export declare function statusLineAlreadyInstalledForScope(scope: 'project' | 'global', projectRoot?: string): boolean;
3
+ export declare function doctorStatusLineInstalledProbe(): boolean;
@@ -0,0 +1,55 @@
1
+ import { findProjectRoot } from '../../../services/config/config-safety.js';
2
+ import { planStatusLineInstall } from '../../../services/skills/statusline-settings-service.js';
3
+ // slice-3b Option C: the doctor subpackage owns the check pipeline but
4
+ // does NOT import cross-domain utils from the main package (avoids
5
+ // circular deps). The CLI is the natural wiring point — every cross-
6
+ // domain util the doctor used to import directly is now injected as a
7
+ // probe on DoctorOptions at call-site:
8
+ //
9
+ // loadSkills ← loadSkillRegistry (main/services/skills/skill-registry.ts)
10
+ // skillPresenceProbe ← leave as-is; doctor-command does not own the presence probe
11
+ // statusLineInstalledProbe ← defaults to a `planStatusLineInstall` wrapper below
12
+ // projectRootResolver ← findProjectRoot (main/services/config/config-safety.ts)
13
+ // isValidSessionIdProbe ← the regex kept in main/services/workspace/sid-naming-guard.ts
14
+ //
15
+ // Inlining isValidSessionId via the doctor subpackage's default regex
16
+ // (which mirrors the upstream file byte-for-byte) keeps the L3 orphan
17
+ // check behaviour-identical without dragging sid-naming-guard into a
18
+ // workspace package. If sid-naming-guard is ever moved into
19
+ // peaks-loop-shared, swap this for a re-import.
20
+ export function doctorIsValidSessionId(sid) {
21
+ return /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])-session-[0-9a-z]{3,6}$/.test(sid);
22
+ }
23
+ export function statusLineAlreadyInstalledForScope(scope, projectRoot) {
24
+ try {
25
+ if (scope === 'project') {
26
+ if (projectRoot === undefined)
27
+ return false;
28
+ return planStatusLineInstall('project', projectRoot).alreadyInstalled;
29
+ }
30
+ return planStatusLineInstall('global').alreadyInstalled;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export function doctorStatusLineInstalledProbe() {
37
+ const projectRoot = findProjectRoot(process.cwd());
38
+ // Check both scopes: a user may have installed the statusLine globally, which
39
+ // the project-only check would miss and falsely report as "not installed".
40
+ try {
41
+ if (projectRoot !== null && statusLineAlreadyInstalledForScope('project', projectRoot)) {
42
+ return true;
43
+ }
44
+ }
45
+ catch {
46
+ // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
47
+ /* fall through to global */
48
+ }
49
+ try {
50
+ return statusLineAlreadyInstalledForScope('global');
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
@@ -0,0 +1,12 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../../cli-helpers.js';
3
+ export type DoctorOptions = {
4
+ json?: boolean;
5
+ log?: boolean;
6
+ cleanupStale?: boolean;
7
+ staleTtlMs?: string;
8
+ rebuildBinding?: boolean;
9
+ project?: string;
10
+ summary?: boolean;
11
+ };
12
+ export declare function registerDoctorCommand(program: Command, io: ProgramIO): void;
@@ -0,0 +1,172 @@
1
+ import { runDoctor } from '../../../services/doctor/index.js';
2
+ import { dropStale, rebuildBindingFromLegacy } from '../../../services/session/binding-store.js';
3
+ import { findProjectRoot } from '../../../services/config/config-safety.js';
4
+ import { loadSkillRegistry } from '../../../services/skills/skill-registry.js';
5
+ import { addJsonOption, printResult } from '../../cli-helpers.js';
6
+ import { fail, ok } from 'peaks-loop-shared/result';
7
+ import { listStaleInstances, staleBindingSection, STALE_TTL_MS } from './doctor-bindings.js';
8
+ import { buildDoctorLogsSection } from './doctor-logs.js';
9
+ import { doctorIsValidSessionId, doctorStatusLineInstalledProbe } from './doctor-probes.js';
10
+ import { buildDoctorSummary } from './doctor-summary.js';
11
+ /** v2.18.2 cycle 2: `--rebuild-binding` and `--cleanup-stale` both mutate the
12
+ * binding, so running them together is ambiguous. Hard-reject the combination
13
+ * so the user gets an actionable error instead of a silent short-circuit. */
14
+ function emitConflictingFlags(io, options) {
15
+ const envelope = fail('doctor.rebuild-binding', 'CONFLICTING_FLAGS', '--rebuild-binding and --cleanup-stale are mutually exclusive', { rebuildBinding: true, cleanupStale: true }, ['Run them in separate `peaks doctor` invocations']);
16
+ printResult(io, envelope, options.json === true);
17
+ process.exitCode = 1;
18
+ }
19
+ /** The `--rebuild-binding` envelope. A rewrite is reported as `fail` when the
20
+ * rebuild was an observable no-op, so the two outcomes stay distinguishable. */
21
+ function rebuildEnvelope(result, data) {
22
+ if (result.rewritten !== 0) {
23
+ return fail('doctor.rebuild-binding', result.noop ? 'BINDING_REBUILD_NOOP' : 'BINDING_REBUILD_OK', result.noop
24
+ ? 'No legacy callerId entries to rewrite'
25
+ : `Rewrote ${result.rewritten} legacy callerId entry/entries (preserved ${result.preserved})`, data, ['Re-run `peaks binding status` to verify the rewritten entries']);
26
+ }
27
+ return ok('doctor.rebuild-binding', data, [], result.noop ? ['no legacy callerId entries found — nothing to rewrite'] : []);
28
+ }
29
+ /** `--rebuild-binding`: a single targeted migration, no doctor checks run. */
30
+ function runRebuildBinding(io, options, projectRoot) {
31
+ const result = rebuildBindingFromLegacy(projectRoot);
32
+ for (const err of result.errors) {
33
+ io.stderr(` warning: ${err}`);
34
+ }
35
+ const data = {
36
+ rebuilt: !result.noop,
37
+ rewritten: result.rewritten,
38
+ preserved: result.preserved,
39
+ errors: result.errors,
40
+ projectRoot
41
+ };
42
+ printResult(io, rebuildEnvelope(result, data), options.json === true);
43
+ if (result.errors.length > 0 && result.rewritten === 0) {
44
+ process.exitCode = 1;
45
+ }
46
+ }
47
+ /** `report.summary.ok` already factors in severity-aware aggregation (warnings
48
+ * do NOT flip `ok`); the stale-binding count escalates independently. */
49
+ function buildDoctorResult(report, staleInstances, data) {
50
+ if (report.summary.ok && staleInstances.length === 0)
51
+ return ok('doctor', data);
52
+ return fail('doctor', 'DOCTOR_FAILED', staleInstances.length > 0
53
+ ? `Found ${staleInstances.length} stale binding instance(s); rerun with --cleanup-stale to drop them`
54
+ : 'One or more doctor checks failed', data, staleInstances.length > 0
55
+ ? ['Run `peaks doctor --cleanup-stale` to drop stale entries']
56
+ : ['Fix failed checks and rerun peaks doctor']);
57
+ }
58
+ /** Human-readable: one line per check, green/red/warn indicators, no JSON. */
59
+ function renderChecks(io, report) {
60
+ for (const check of report.checks) {
61
+ if (check.ok)
62
+ io.stdout(` + ${check.message}`);
63
+ else if (check.severity === 'warning')
64
+ io.stdout(` ! ${check.message}`);
65
+ else
66
+ io.stdout(` × ${check.message}`);
67
+ }
68
+ }
69
+ function renderLogsSection(io, logs) {
70
+ io.stdout('\n logs:');
71
+ io.stdout(` logDir: ${logs.logDir}`);
72
+ io.stdout(` todayFile: ${logs.todayFile}`);
73
+ io.stdout(` sizeBytes: ${logs.sizeBytes}`);
74
+ io.stdout(` retentionDays: ${logs.retentionDays}`);
75
+ io.stdout(` level: ${logs.level}`);
76
+ }
77
+ function renderStaleBinding(io, staleInstances, droppedStale) {
78
+ io.stdout('\n stale-binding (v2.16.0 AC-10):');
79
+ if (staleInstances.length === 0) {
80
+ io.stdout(' + no stale instances');
81
+ return;
82
+ }
83
+ io.stdout(` × ${staleInstances.length} stale instance(s):`);
84
+ for (const s of staleInstances) {
85
+ io.stdout(` - sid=${s.sid} caller=${s.callerId} lastSeen=${s.lastHeartbeat}`);
86
+ }
87
+ if (droppedStale.length > 0) {
88
+ io.stdout(` cleaned up: ${droppedStale.length}`);
89
+ }
90
+ else {
91
+ io.stdout(' rerun with --cleanup-stale to drop them');
92
+ }
93
+ }
94
+ function renderDoctorFooter(io, report, staleInstances) {
95
+ const { passed, failed, warnings } = report.summary;
96
+ io.stdout(`\n ${passed} passed, ${failed} failed${warnings > 0 ? `, ${warnings} warning(s)` : ''}`);
97
+ if (!report.summary.ok || staleInstances.length > 0) {
98
+ io.stderr(`\nDOCTOR_FAILED: ${staleInstances.length > 0 ? 'stale binding present' : `${failed} check(s) failed`}.`);
99
+ }
100
+ else if (warnings > 0) {
101
+ io.stdout(`\n ${warnings} warning(s) present — exit code 0 (warn-only).`);
102
+ }
103
+ }
104
+ function renderDoctorHuman(io, report, sections) {
105
+ renderChecks(io, report);
106
+ if (sections.logs !== null)
107
+ renderLogsSection(io, sections.logs);
108
+ renderStaleBinding(io, sections.staleInstances, sections.droppedStale);
109
+ renderDoctorFooter(io, report, sections.staleInstances);
110
+ }
111
+ async function runDoctorReport(io, options, projectRoot) {
112
+ const report = await runDoctor({
113
+ loadSkills: loadSkillRegistry,
114
+ projectRootResolver: () => findProjectRoot(process.cwd()),
115
+ isValidSessionIdProbe: doctorIsValidSessionId,
116
+ statusLineInstalledProbe: doctorStatusLineInstalledProbe
117
+ });
118
+ const logs = options.log === true ? await buildDoctorLogsSection() : null;
119
+ const ttl = options.staleTtlMs !== undefined ? Number(options.staleTtlMs) : STALE_TTL_MS;
120
+ const staleInstances = listStaleInstances(projectRoot, ttl);
121
+ const droppedStale = options.cleanupStale === true ? dropStale(projectRoot, ttl).dropped : [];
122
+ const staleBinding = staleBindingSection(ttl, staleInstances, droppedStale);
123
+ const fullData = logs === null ? { ...report, staleBinding } : { ...report, logs, staleBinding };
124
+ const data = options.summary === true ? buildDoctorSummary(fullData) : fullData;
125
+ if (options.json === true) {
126
+ printResult(io, buildDoctorResult(report, staleInstances, data), true);
127
+ }
128
+ else {
129
+ renderDoctorHuman(io, report, { logs, staleInstances, droppedStale });
130
+ }
131
+ if (!report.summary.ok || staleInstances.length > 0) {
132
+ process.exitCode = 1;
133
+ }
134
+ }
135
+ async function runDoctorCommand(io, options) {
136
+ if (options.rebuildBinding === true && options.cleanupStale === true) {
137
+ emitConflictingFlags(io, options);
138
+ return;
139
+ }
140
+ // v2.18.2 cycle 2: --project override, applies to BOTH the
141
+ // --rebuild-binding short-circuit AND the binding-stale scan.
142
+ const projectRoot = options.project !== undefined
143
+ ? options.project
144
+ : (findProjectRoot(process.cwd()) ?? process.cwd());
145
+ if (options.rebuildBinding === true) {
146
+ runRebuildBinding(io, options, projectRoot);
147
+ return;
148
+ }
149
+ await runDoctorReport(io, options, projectRoot);
150
+ }
151
+ export function registerDoctorCommand(program, io) {
152
+ addJsonOption(program
153
+ .command('doctor')
154
+ .description('Run repository doctor checks')
155
+ .option('--log', 'include a "logs" section in the doctor output (slice 2026-06-16-cli-logging, AC6)')
156
+ .option('--cleanup-stale', 'drop stale instance entries from the project-level binding (v2.16.0 AC-10)')
157
+ .option('--stale-ttl-ms <ms>', 'stale-binding TTL in milliseconds (default 300000 = 5 minutes, v2.16.0 AC-10)')
158
+ // v2.18.2 PATCH scope (follow-up issue #1): rewrite legacy
159
+ // v2.16.0 / v2.17.0 binding files in place so every existing
160
+ // callerId gets the `${envSignal}#${pid}` suffix introduced in
161
+ // v2.18.0. Mutually exclusive with --cleanup-stale to keep the
162
+ // semantics unambiguous (rebuild = structural change,
163
+ // cleanup-stale = TTL-based prune).
164
+ .option('--rebuild-binding', 'rewrite legacy v2.16.0 / v2.17.0 callerId entries to the v2.18.0+ `#${pid}` format (v2.18.2, follow-up issue #1)')
165
+ // v2.18.2 cycle 2: --project makes the project-root-bound
166
+ // flags (--rebuild-binding, --cleanup-stale, stale-binding
167
+ // scan) addressable for non-current projects. The doctor was
168
+ // hardcoded to findProjectRoot(process.cwd()) which is the
169
+ // wrong default for users inspecting a sibling project.
170
+ .option('--project <path>', 'target project root (defaults to git root or cwd)')
171
+ .option('--summary', 'JSON envelope only: emit check counts + names-of-first-N (≤ 2 KB) instead of the full checks/stale-binding arrays; the default envelope is unchanged')).action((options) => runDoctorCommand(io, options));
172
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * the doctor envelope. The `checks` array (one object per check, each with a
3
+ * full message) and the stale-binding instance list collapse to counts +
4
+ * names-of-first-N; the summary counters and log section are scalars and are
5
+ * kept verbatim. ≤ 2 KB by construction.
6
+ */
7
+ export declare function buildDoctorSummary(data: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +1,39 @@
1
+ import { boundedNames, fitSummaryToBytes } from '../../../services/context/summary-view.js';
2
+ /**
3
+ * the doctor envelope. The `checks` array (one object per check, each with a
4
+ * full message) and the stale-binding instance list collapse to counts +
5
+ * names-of-first-N; the summary counters and log section are scalars and are
6
+ * kept verbatim. ≤ 2 KB by construction.
7
+ */
8
+ export function buildDoctorSummary(data) {
9
+ const checks = Array.isArray(data.checks)
10
+ ? data.checks
11
+ : [];
12
+ const label = (c) => {
13
+ const id = typeof c.id === 'string' ? c.id : 'unknown';
14
+ if (c.ok === true)
15
+ return `ok ${id}`;
16
+ return `${c.severity === 'warning' ? 'warn' : 'FAIL'} ${id}`;
17
+ };
18
+ const failed = checks.filter((c) => c.ok === false);
19
+ const stale = typeof data.staleBinding === 'object' && data.staleBinding !== null
20
+ ? data.staleBinding
21
+ : null;
22
+ const view = {
23
+ view: 'summary',
24
+ summary: data.summary,
25
+ checks: boundedNames(checks.map(label)),
26
+ failed: boundedNames(failed.map((c) => `${typeof c.id === 'string' ? c.id : 'unknown'}: ${typeof c.message === 'string' ? c.message : ''}`))
27
+ };
28
+ if (stale !== null) {
29
+ view.staleBinding = {
30
+ ttlMs: stale.ttlMs,
31
+ staleCount: stale.staleCount,
32
+ droppedCount: stale.droppedCount,
33
+ droppedSids: boundedNames(Array.isArray(stale.droppedSids) ? stale.droppedSids.map((s) => String(s)) : [])
34
+ };
35
+ }
36
+ if (data.logs !== undefined)
37
+ view.logs = data.logs;
38
+ return fitSummaryToBytes(view);
39
+ }