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
@@ -0,0 +1,179 @@
1
+ // src/services/distribution/mcp-install.ts
2
+ //
3
+ // The vendor-neutral MCP registration engine (spec §8.3). It owns the SHAPE of
4
+ // an install — delete every scope, then add — and owns no harness's spelling of
5
+ // anything: the server key, the scopes and the argv come from the adapter's
6
+ // `mcpInstall` profile, and the process that runs the argv is an injected
7
+ // runner.
8
+ //
9
+ // WHY DELETE-THEN-ADD AND NOT "CHECK, THEN ADD IF ABSENT". The harness's own
10
+ // register verb is not idempotent: the same name in the same scope fails, and
11
+ // there is no `--force` and no `update` to reach for. A conditional add would
12
+ // therefore have to be right about a state it cannot see — so the engine does
13
+ // the one thing that is right in both states: it removes what is there (a
14
+ // removal that finds nothing is tolerated) and then adds. That is also what
15
+ // makes the install SEMANTICALLY idempotent: two runs produce the same argv in
16
+ // the same order, so the registration left behind has the same CONTENT, even
17
+ // though the second run performed operations the first one did too.
18
+ //
19
+ // WHY THE DELETE SWEEPS EVERY SCOPE. The entry can already exist in a scope the
20
+ // install is not writing to — an earlier install, or a user who moved it. The
21
+ // removal names a scope, and the harness fails on the wrong or empty one, so a
22
+ // targeted delete would leave the old entry behind and the add would then fail
23
+ // on the duplicate it left. Sweeping all declared scopes is the only version of
24
+ // this that is correct for a state the engine cannot enumerate.
25
+ //
26
+ // WHAT "ONLY OURS" MEANS HERE. The engine never reads or writes the
27
+ // harness's configuration file. It runs the harness's own removal and addition,
28
+ // and the only key either of them names is the adapter's `serverName` — so no
29
+ // other entry can be touched by construction. The honest limit of that
30
+ // guarantee is the name itself: an entry the USER named the same thing is
31
+ // indistinguishable from ours, and is the one case this cannot tell apart.
32
+ //
33
+ // NO HARNESS BRANCH, NO PLATFORM BRANCH. Every value is either the caller's or
34
+ // the adapter's. `resolveMcpServerArgv` returns an interpreter and an entry path
35
+ // for the same reason `cli-executor.ts` does: a shipped CLI name is a shim on
36
+ // some platforms, and choosing between the two spellings would be the platform
37
+ // branch this module is forbidden to contain.
38
+ import { dirname, join, resolve } from 'node:path';
39
+ import { fileURLToPath } from 'node:url';
40
+ import { assertMcpInstallProfile, expandMcpArgv } from '../ide/ide-mcp-install-types.js';
41
+ /** `<packageRoot>` — this file's tree is `<root>/src/services/distribution` or `<root>/dist/…`. */
42
+ const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
43
+ /**
44
+ * The argv that launches THIS installation's read-only MCP server.
45
+ *
46
+ * An interpreter and an entry path, in array form: the same shape `mcp serve`
47
+ * spawns and the same one the read-only executor uses. A bare CLI name would be
48
+ * a `.cmd` shim on some platforms, and picking a spelling per platform is the
49
+ * branch this tree forbids — resolving the pair needs none.
50
+ */
51
+ export function resolveMcpServerArgv() {
52
+ return [process.execPath, join(PACKAGE_ROOT, 'bin', 'peaks.js'), 'mcp', 'serve'];
53
+ }
54
+ /** The plan: one removal per declared scope, then the addition. Order is the contract. */
55
+ export function buildMcpInstallPlan(profile, serverArgv) {
56
+ assertMcpInstallProfile(profile);
57
+ const removals = profile.scopes.map((scope) => ({
58
+ operation: 'remove',
59
+ scope,
60
+ command: {
61
+ command: profile.removeArgv[0] ?? '',
62
+ args: expandMcpArgv(profile.removeArgv.slice(1), {
63
+ serverName: profile.serverName,
64
+ scope,
65
+ serverArgv
66
+ })
67
+ }
68
+ }));
69
+ const addition = {
70
+ operation: 'add',
71
+ scope: profile.targetScope,
72
+ command: {
73
+ command: profile.addArgv[0] ?? '',
74
+ args: expandMcpArgv(profile.addArgv.slice(1), {
75
+ serverName: profile.serverName,
76
+ scope: profile.targetScope,
77
+ serverArgv
78
+ })
79
+ }
80
+ };
81
+ return [...removals, addition];
82
+ }
83
+ /** Every removal, then the addition. A failed removal is a fact, not a failure. */
84
+ export function runMcpInstallPlan(profile, serverArgv, runner) {
85
+ const plan = buildMcpInstallPlan(profile, serverArgv);
86
+ const removed = [];
87
+ const absent = [];
88
+ let detail = '';
89
+ for (const step of plan) {
90
+ const outcome = runner(step.command);
91
+ if (step.operation === 'remove') {
92
+ if (outcome.ok)
93
+ removed.push(step.scope);
94
+ else
95
+ absent.push(step.scope);
96
+ continue;
97
+ }
98
+ if (!outcome.ok) {
99
+ return {
100
+ serverName: profile.serverName,
101
+ removed,
102
+ absent,
103
+ added: false,
104
+ ok: false,
105
+ detail: `the registration was not written: ${outcome.detail}`
106
+ };
107
+ }
108
+ detail = `registered in scope '${step.scope}'`;
109
+ }
110
+ return { serverName: profile.serverName, removed, absent, added: true, ok: true, detail };
111
+ }
112
+ /**
113
+ * The removal sweep on its own — what `uninstall` is, and all that it is.
114
+ *
115
+ * `exit 0` removed it, `exit != 0` answered "no" (absent, unchanged) — but a run the
116
+ * deadline killed, or one that never launched, ANSWERED NOTHING, and calling that
117
+ * "nothing was there" is the lie this sweep used to tell. Those scopes are `unknown`,
118
+ * and `ok` is false whenever any scope is unknown: with a scope the harness never
119
+ * spoke for, the removal is unconfirmed and the state is not known.
120
+ */
121
+ export function runMcpUninstallPlan(profile, serverArgv, runner) {
122
+ const plan = buildMcpInstallPlan(profile, serverArgv).filter((step) => step.operation === 'remove');
123
+ const removed = [];
124
+ const absent = [];
125
+ const unknown = [];
126
+ for (const step of plan) {
127
+ const outcome = runner(step.command);
128
+ if (outcome.ok)
129
+ removed.push(step.scope);
130
+ else if (outcome.answered === false)
131
+ unknown.push(step.scope);
132
+ else
133
+ absent.push(step.scope);
134
+ }
135
+ return {
136
+ serverName: profile.serverName,
137
+ removed,
138
+ absent,
139
+ unknown,
140
+ added: false,
141
+ ok: unknown.length === 0,
142
+ detail: unknown.length > 0
143
+ ? `the '${profile.serverName}' removal is unconfirmed: ${unknown.length} scope(s) never answered`
144
+ : removed.length === 0
145
+ ? `no '${profile.serverName}' registration was present in any declared scope`
146
+ : `removed '${profile.serverName}' from ${removed.length} scope(s)`
147
+ };
148
+ }
149
+ export const NO_MCP_INSTALL_REASON = 'adapter declares no mcpInstall profile';
150
+ /** Register this adapter's harness, or report that there is nothing to register. */
151
+ export function installMcpForAdapter(adapter, serverArgv, runner) {
152
+ const profile = adapter.mcpInstall;
153
+ if (profile === undefined) {
154
+ return { ideId: adapter.id, skipped: true, reason: NO_MCP_INSTALL_REASON };
155
+ }
156
+ return {
157
+ ideId: adapter.id,
158
+ skipped: false,
159
+ report: runMcpInstallPlan(profile, serverArgv, runner)
160
+ };
161
+ }
162
+ /** The same, for the removal side. */
163
+ export function uninstallMcpForAdapter(adapter, serverArgv, runner) {
164
+ const profile = adapter.mcpInstall;
165
+ if (profile === undefined) {
166
+ return { ideId: adapter.id, skipped: true, reason: NO_MCP_INSTALL_REASON };
167
+ }
168
+ return {
169
+ ideId: adapter.id,
170
+ skipped: false,
171
+ report: runMcpUninstallPlan(profile, serverArgv, runner)
172
+ };
173
+ }
174
+ /**
175
+ * The production runner and its deadline live in `mcp-install-runner.ts` — split
176
+ * out only to keep this engine within the file-size cap. They are re-exported, so
177
+ * the boundary is invisible: every caller still imports them from here.
178
+ */
179
+ export { MCP_INSTALL_TIMEOUT_MS, spawnMcpInstallCommand, spawnMcpInstallRunner } from './mcp-install-runner.js';
@@ -0,0 +1,97 @@
1
+ import { type SkillMetadata } from '../skills/skill-registry.js';
2
+ /** Where the generator writes, relative to the package root. */
3
+ export declare const PLUGIN_MANIFEST_RELATIVE_PATH = ".claude-plugin/marketplace.json";
4
+ /**
5
+ * The server key peaks registers itself under. It is OUR key, not a harness's —
6
+ * the adapter profiles that name it (`IdeMcpInstallProfile.serverName`) and the
7
+ * tool-name templates that match it (`IdeAdapter.mcp`) must agree with this one,
8
+ * which is why it is declared once.
9
+ */
10
+ export declare const MCP_SERVER_KEY = "peaks";
11
+ /** The subset of `package.json` this render reads. */
12
+ interface PackageManifest {
13
+ readonly name: string;
14
+ readonly version: string;
15
+ readonly description?: string;
16
+ readonly author?: string;
17
+ readonly homepage?: string;
18
+ readonly repository?: {
19
+ readonly url?: string;
20
+ } | string;
21
+ readonly license?: string;
22
+ readonly keywords?: readonly string[];
23
+ }
24
+ /** One plugin entry's skill list item — the shape `peaks skill:visibility` reads. */
25
+ interface PluginSkillEntry {
26
+ readonly name: string;
27
+ readonly path: string;
28
+ readonly description: string;
29
+ readonly userInvocable?: boolean;
30
+ }
31
+ interface GeneratedPluginManifest {
32
+ readonly metadata: {
33
+ readonly pluginRoot: string;
34
+ readonly version: string;
35
+ };
36
+ readonly plugins: readonly {
37
+ readonly name: string;
38
+ readonly description: string;
39
+ readonly version: string;
40
+ readonly author: {
41
+ readonly name: string;
42
+ };
43
+ readonly homepage: string;
44
+ readonly repository: string;
45
+ readonly license: string;
46
+ readonly keywords: readonly string[];
47
+ /**
48
+ * Declared, and deliberately not brought live: the plugin channel is not
49
+ * published by this slice (PRD non-goal), so this is the statement of what
50
+ * the channel WOULD run, kept true by generation rather than by memory.
51
+ *
52
+ * The command is the CLI's own name and subcommand, with no path in it: a
53
+ * manifest is built on one machine and read on another, so an absolute
54
+ * interpreter path resolved here would be the build host's. The RUNTIME
55
+ * registration is a different artefact with a different consumer and does
56
+ * resolve the pair — see `mcp-install.ts::resolveMcpServerArgv`.
57
+ */
58
+ readonly mcpServers: Record<string, {
59
+ readonly command: string;
60
+ readonly args: readonly string[];
61
+ }>;
62
+ readonly skills: readonly PluginSkillEntry[];
63
+ }[];
64
+ }
65
+ /** `package.json`, parsed. A missing version is a refusal, not a default. */
66
+ export declare function loadPackageManifest(root?: string): PackageManifest;
67
+ /**
68
+ * The skill entries, in the registry's order.
69
+ *
70
+ * `visibility: internal` is the skill's own declaration that it is an internal
71
+ * role rather than a front door, and it is the ONE source for `userInvocable` —
72
+ * the field is emitted only when it is `false`, which is the contract
73
+ * `skill:visibility` reads ("internal: userInvocable false; public: omitted").
74
+ */
75
+ export declare function skillEntriesOf(skills: readonly SkillMetadata[]): readonly PluginSkillEntry[];
76
+ /**
77
+ * Render the manifest. `skills` is passed in rather than loaded here so the one
78
+ * caller that must fail loudly on an unreadable SKILL.md can do so once.
79
+ */
80
+ export declare function generatePluginManifest(manifest: PackageManifest, skills: readonly SkillMetadata[]): GeneratedPluginManifest;
81
+ /** Pretty JSON, newline-terminated — the same serialization contract as the whitelist. */
82
+ export declare function serializePluginManifest(manifest: GeneratedPluginManifest): string;
83
+ /** Absolute path of the committed artifact for a package root. */
84
+ export declare function pluginManifestPath(root?: string): string;
85
+ /**
86
+ * The whole render for a package root: read the two sources, refuse a skill tree
87
+ * that did not fully parse, and serialize.
88
+ *
89
+ * The `failures` refusal is the load-bearing part. `loadSkillRegistry` reports an
90
+ * unreadable `SKILL.md` in a `failures` array instead of throwing, so a render
91
+ * that ignored it would DROP a skill from the manifest and still be
92
+ * byte-stable — a green CI over a manifest that had silently lost entries. A
93
+ * drift assertion cannot be stronger than its input, so the input is required to
94
+ * be complete.
95
+ */
96
+ export declare function renderPluginManifest(root?: string): Promise<string>;
97
+ export {};
@@ -0,0 +1,126 @@
1
+ // src/services/distribution/plugin-manifest.ts
2
+ //
3
+ // The plugin/distribution manifest as a GENERATED artefact (spec §4.1). One
4
+ // source, two renders: the whitelist artifact is what the read-only claim is
5
+ // made of, and this file is what the distribution channel is told.
6
+ //
7
+ // WHY IT IS GENERATED. The hand-authored `.claude-plugin/marketplace.json` had
8
+ // rotted in the only two fields anybody could check and nobody did: it declared
9
+ // version `2.0.3` while the package was `4.1.2`, and 12 skills while the tree
10
+ // held 22. Root cause is not carelessness — it is that the current distribution
11
+ // channel is `npm i -g`, so nothing ever read the plugin manifest and no failure
12
+ // could be observed from it. A file whose author is a human and whose reader is
13
+ // nobody will drift; the fix is to remove the human from the loop, not to be
14
+ // more careful.
15
+ //
16
+ // CHANGE THE SOURCE, NOT THIS FILE. Everything below is derived, and
17
+ // `tests/unit/services/distribution/plugin-manifest.test.ts` fails the moment
18
+ // the committed artefact differs from a fresh render. A hand edit is therefore
19
+ // not merely overwritten, it is RED. To change the manifest, change
20
+ // `package.json` (a plugin-level field) or the skill's own `SKILL.md`
21
+ // (a skill entry) and re-run `pnpm plugin:manifest`.
22
+ //
23
+ // DETERMINISM. No timestamp, no `Date`, no unordered iteration: skills come back
24
+ // from `loadSkillRegistry`, which sorts by name, and every plugin-level field is
25
+ // copied from `package.json` in a fixed order. Two consecutive runs are
26
+ // byte-identical, which is what makes the CI equality assertion mean something.
27
+ import { readFileSync } from 'node:fs';
28
+ import { dirname, join, relative } from 'node:path';
29
+ import { repoRoot } from 'peaks-loop-shared/paths';
30
+ import { loadSkillRegistry } from '../skills/skill-registry.js';
31
+ /** Where the generator writes, relative to the package root. */
32
+ export const PLUGIN_MANIFEST_RELATIVE_PATH = '.claude-plugin/marketplace.json';
33
+ /**
34
+ * The server key peaks registers itself under. It is OUR key, not a harness's —
35
+ * the adapter profiles that name it (`IdeMcpInstallProfile.serverName`) and the
36
+ * tool-name templates that match it (`IdeAdapter.mcp`) must agree with this one,
37
+ * which is why it is declared once.
38
+ */
39
+ export const MCP_SERVER_KEY = 'peaks';
40
+ /** `package.json`, parsed. A missing version is a refusal, not a default. */
41
+ export function loadPackageManifest(root = repoRoot) {
42
+ const parsed = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
43
+ if (typeof parsed.version !== 'string' || parsed.version.length === 0) {
44
+ throw new Error('package.json version must be a non-empty string');
45
+ }
46
+ return parsed;
47
+ }
48
+ /** A repository URL as a manifest reads it: npm's `.git` suffix is not part of the link. */
49
+ function repositoryUrl(manifest) {
50
+ const raw = typeof manifest.repository === 'string' ? manifest.repository : manifest.repository?.url;
51
+ return (raw ?? '').replace(/\.git$/, '');
52
+ }
53
+ /** POSIX-separated, so the artifact is byte-identical whichever OS generated it. */
54
+ function posix(value) {
55
+ return value.split('\\').join('/');
56
+ }
57
+ /**
58
+ * The skill entries, in the registry's order.
59
+ *
60
+ * `visibility: internal` is the skill's own declaration that it is an internal
61
+ * role rather than a front door, and it is the ONE source for `userInvocable` —
62
+ * the field is emitted only when it is `false`, which is the contract
63
+ * `skill:visibility` reads ("internal: userInvocable false; public: omitted").
64
+ */
65
+ export function skillEntriesOf(skills) {
66
+ return skills
67
+ .filter((skill) => skill.name.startsWith('peaks-'))
68
+ .map((skill) => ({
69
+ name: skill.name,
70
+ path: `./${posix(relative(repoRoot, dirname(skill.skillPath)))}`,
71
+ description: skill.description,
72
+ ...(skill.visibility === 'internal' ? { userInvocable: false } : {})
73
+ }));
74
+ }
75
+ /**
76
+ * Render the manifest. `skills` is passed in rather than loaded here so the one
77
+ * caller that must fail loudly on an unreadable SKILL.md can do so once.
78
+ */
79
+ export function generatePluginManifest(manifest, skills) {
80
+ return {
81
+ metadata: { pluginRoot: '.', version: manifest.version },
82
+ plugins: [
83
+ {
84
+ name: manifest.name,
85
+ description: manifest.description ?? '',
86
+ version: manifest.version,
87
+ author: { name: manifest.author ?? '' },
88
+ homepage: manifest.homepage ?? '',
89
+ repository: repositoryUrl(manifest),
90
+ license: manifest.license ?? '',
91
+ keywords: [...(manifest.keywords ?? [])],
92
+ mcpServers: {
93
+ [MCP_SERVER_KEY]: { command: MCP_SERVER_KEY, args: ['mcp', 'serve'] }
94
+ },
95
+ skills: skillEntriesOf(skills)
96
+ }
97
+ ]
98
+ };
99
+ }
100
+ /** Pretty JSON, newline-terminated — the same serialization contract as the whitelist. */
101
+ export function serializePluginManifest(manifest) {
102
+ return `${JSON.stringify(manifest, null, 2)}\n`;
103
+ }
104
+ /** Absolute path of the committed artifact for a package root. */
105
+ export function pluginManifestPath(root = repoRoot) {
106
+ return join(root, PLUGIN_MANIFEST_RELATIVE_PATH);
107
+ }
108
+ /**
109
+ * The whole render for a package root: read the two sources, refuse a skill tree
110
+ * that did not fully parse, and serialize.
111
+ *
112
+ * The `failures` refusal is the load-bearing part. `loadSkillRegistry` reports an
113
+ * unreadable `SKILL.md` in a `failures` array instead of throwing, so a render
114
+ * that ignored it would DROP a skill from the manifest and still be
115
+ * byte-stable — a green CI over a manifest that had silently lost entries. A
116
+ * drift assertion cannot be stronger than its input, so the input is required to
117
+ * be complete.
118
+ */
119
+ export async function renderPluginManifest(root = repoRoot) {
120
+ const skills = await loadSkillRegistry(join(root, 'skills'));
121
+ if (skills.failures.length > 0) {
122
+ const named = skills.failures.map((failure) => failure.skillPath).join(', ');
123
+ throw new Error(`Refusing to render the plugin manifest: unreadable skill(s): ${named}`);
124
+ }
125
+ return serializePluginManifest(generatePluginManifest(loadPackageManifest(root), skills.skills));
126
+ }
@@ -0,0 +1,19 @@
1
+ import type { ProgramIO } from '../../cli/cli-helpers.js';
2
+ import type { IdeAdapter } from '../ide/ide-types.js';
3
+ /** The tool names the proven surface declares. */
4
+ export type McpSurfaceLookup = () => readonly string[];
5
+ /** The production lookup. Injectable so a test can make it throw and watch the refusal. */
6
+ export declare function lookupAllowedMcpTools(): readonly string[];
7
+ /** The adapter whose harness sent this payload. */
8
+ export declare function detectAdapter(parsedStdin: unknown): IdeAdapter;
9
+ /** The deny emission, in the shape the host already treats as a hard block. */
10
+ export declare function emitMcpDeny(io: ProgramIO, code: string, reason: string): void;
11
+ /**
12
+ * Run the MCP branch over one parsed hook payload.
13
+ *
14
+ * @returns `true` when the call was BLOCKED (a deny has already been emitted).
15
+ * `false` means "this is not an MCP call for this surface" — every
16
+ * other tool name, and every harness declaring no MCP naming, lands
17
+ * there and keeps the allow/deny result it had before.
18
+ */
19
+ export declare function handleMcpSurfaceGate(io: ProgramIO, parsedStdin: unknown, lookup?: McpSurfaceLookup, adapterOf?: (payload: unknown) => IdeAdapter): boolean;
@@ -0,0 +1,87 @@
1
+ // src/services/hooks/mcp-surface-gate.ts
2
+ //
3
+ // L3 for the read-only MCP surface: the pre-tool branch that covers MCP tool
4
+ // calls (spec §6.1, §6.2, §6.3).
5
+ //
6
+ // WHY IT IS ITS OWN MODULE. It shares an entry point with the Bash and worktree
7
+ // branches but nothing else: different surface (an MCP tool name, not a command
8
+ // text), different failure direction (fail-CLOSED, where the others fail open),
9
+ // and a different thing it polices. Keeping it beside them made the interceptor
10
+ // file carry three unrelated decisions; it lives here so the file that owns the
11
+ // hook's control flow stays the file that owns the hook's control flow.
12
+ //
13
+ // WHAT IT POLICES, AND WHAT IT DOES NOT. It does not second-guess what a tool
14
+ // would return. It answers one question: "is this MCP tool call one the proven
15
+ // surface declares?" It exists for DRIFT — a stale server process, a hand-edited
16
+ // harness config pointing somewhere else, a tool added to a config that was
17
+ // never proved read-only. The read-only proof itself is L2's job; this is the
18
+ // belt over it.
19
+ //
20
+ // FAIL-CLOSED, AND THE ASYMMETRY WITH THE BASH BRANCH IS DELIBERATE. The Bash
21
+ // branch guards command TEXT, where a false block interrupts real work, so it
22
+ // fails open. This branch guards CONFIG CONSISTENCY, where a false block costs
23
+ // one call that should have been consistent while a false allow costs a call
24
+ // that bypassed the chain. The costs are not the same size, so they do not share
25
+ // a direction — and they do not share a `catch` either.
26
+ //
27
+ // IT READS THE SURFACE AS DATA, NEVER AS CODE. The allowed tool names come from
28
+ // the generated whitelist artifact through its loader, so this branch keeps
29
+ // working when `src/services/mcp/` is deleted (spec §1) — which is also what
30
+ // `tests/unit/standards/no-mcp-source-import.test.ts` enforces mechanically.
31
+ import { getErrorMessage } from 'peaks-loop-shared/result';
32
+ import { emitBlock } from './output.js';
33
+ import { getAdapter } from '../ide/ide-registry.js';
34
+ import { detectIdeFromContext, parseClaudeShapeStdin } from '../ide/hook-translator.js';
35
+ import { matchMcpToolName } from '../ide/mcp-tool-matcher.js';
36
+ import { loadReadOnlyWhitelist, toolIdsOf } from '../readonly-surface/readonly-whitelist.js';
37
+ /** The production lookup. Injectable so a test can make it throw and watch the refusal. */
38
+ export function lookupAllowedMcpTools() {
39
+ return toolIdsOf(loadReadOnlyWhitelist());
40
+ }
41
+ /** The adapter whose harness sent this payload. */
42
+ export function detectAdapter(parsedStdin) {
43
+ const ide = detectIdeFromContext({ env: process.env, cwd: process.cwd(), parsedStdin });
44
+ return getAdapter(ide);
45
+ }
46
+ /** The deny emission, in the shape the host already treats as a hard block. */
47
+ export function emitMcpDeny(io, code, reason) {
48
+ emitBlock(io, `[mcp-surface-gate:${code}] ${reason}. Blocked by fail-closed policy — ` +
49
+ 'run the read-only command through the CLI instead, or add its argv to ' +
50
+ 'contracts/readonly-surface.json and regenerate the whitelist.');
51
+ }
52
+ /**
53
+ * Run the MCP branch over one parsed hook payload.
54
+ *
55
+ * @returns `true` when the call was BLOCKED (a deny has already been emitted).
56
+ * `false` means "this is not an MCP call for this surface" — every
57
+ * other tool name, and every harness declaring no MCP naming, lands
58
+ * there and keeps the allow/deny result it had before.
59
+ */
60
+ export function handleMcpSurfaceGate(io, parsedStdin, lookup = lookupAllowedMcpTools, adapterOf = detectAdapter) {
61
+ let adapter;
62
+ try {
63
+ adapter = adapterOf(parsedStdin);
64
+ }
65
+ catch (error) {
66
+ // Detection itself failed. Falling through would let the call pass
67
+ // unchecked, which is the one outcome this branch exists to prevent.
68
+ emitMcpDeny(io, 'IDE_DETECTION_FAILED', `the harness could not be identified (${getErrorMessage(error)})`);
69
+ return true;
70
+ }
71
+ const { toolName } = parseClaudeShapeStdin(parsedStdin);
72
+ const match = toolName === undefined ? undefined : matchMcpToolName(adapter, toolName);
73
+ if (match === undefined)
74
+ return false;
75
+ let allowed;
76
+ try {
77
+ allowed = lookup();
78
+ }
79
+ catch (error) {
80
+ emitMcpDeny(io, 'SURFACE_UNREADABLE', `the read-only surface could not be read (${getErrorMessage(error)})`);
81
+ return true;
82
+ }
83
+ if (allowed.includes(match.toolId))
84
+ return false;
85
+ emitMcpDeny(io, 'NOT_IN_READONLY_SURFACE', `"${toolName}" is not one of the read-only tools this project declares (${allowed.join(', ') || 'none'})`);
86
+ return true;
87
+ }
@@ -1,39 +1,8 @@
1
1
  import type { IdeAdapter } from '../ide-types.js';
2
- /**
3
- * Resolve the absolute path of a Claude Code transcript jsonl by OUTER
4
- * session id, searching `~/.claude/projects/**` recursively.
5
- *
6
- * `peaks code context-audit` reuses THIS locator instead of re-implementing
7
- * the recursive find. Returns `null` when the transcript does not exist —
8
- * callers MUST treat that as "unavailable", never as an error.
9
- */
10
- export declare function resolveClaudeTranscriptPath(outerSessionId: string, projectsDir?: string): string | null;
11
- /**
12
- * Resolve the currently-active Claude Code model id from a runtime env map.
13
- * Returns the first non-empty `CLAUDE_CODE_MODEL_ENV_VARS` value (trimmed), or
14
- * `undefined` when none is present. Pure + exported for tests; the caller falls
15
- * back to the transcript `message.model` when this returns undefined.
16
- */
17
- export declare function resolveClaudeModelFromEnv(env: NodeJS.ProcessEnv | undefined): string | undefined;
18
- /**
19
- * Model-aware context-window size in tokens.
20
- *
21
- * Detection rule (documented):
22
- * 1. Empty / unknown model → DEFAULT_CONTEXT_WINDOW_TOKENS (200_000).
23
- * 2. Suffix heuristic — a model id containing `1m` (case-insensitive) is
24
- * treated as 1M-context.
25
- * 3. Explicit allowlist — known 1M Claude model ids
26
- * (ONE_MILLION_CONTEXT_MODELS).
27
- * 4. Everything else → 200_000 (the safe default).
28
- *
29
- * Callers MAY additionally infer ≥1M from the observed token count: if
30
- * `contextTokens > DEFAULT_CONTEXT_WINDOW_TOKENS`, the model cannot be a
31
- * 200K model and must be ≥1M (see `readClaudeTranscriptEstimate`).
32
- *
33
- * This is the HEURISTIC layer only. Explicit user overrides sit ABOVE it —
34
- * see `resolveContextWindow`, which is what the probe actually calls.
35
- */
36
- export declare function modelContextWindowTokens(model: string): number;
2
+ import { resolveClaudeTranscriptPath } from './claude-code-local-state.js';
3
+ import { modelContextWindowTokens, resolveClaudeModelFromEnv } from './claude-code-model-window.js';
4
+ export { resolveClaudeTranscriptPath };
5
+ export { modelContextWindowTokens, resolveClaudeModelFromEnv };
37
6
  /**
38
7
  * the context-window size in tokens. Third-party / proxied models whose id
39
8
  * carries no `[1M]` suffix (and is absent from the hardcoded allowlist) are