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,62 @@
1
+ // src/services/mcp/memory-tool.ts
2
+ //
3
+ // `peaks_memory_search`: one argv, a bounded reply (§7.1).
4
+ //
5
+ // It answers "is there anything, and what is it called" — never "what does it
6
+ // say". The raw CLI output is measured in megabytes, so the reply is bounded
7
+ // twice over: a hard ceiling on how many matches come back, and a truncated
8
+ // excerpt per match. Both are on §3.2's allowed list for a composite tool
9
+ // (field selection and truncation), and neither concludes anything: the count,
10
+ // the names and the first characters are all the CLI's.
11
+ import { buildArgv } from '../readonly-surface/argv-guard.js';
12
+ import { MEMORY_EXCERPT_CHARS, MEMORY_MAX_RETURNED, rejectedResult, resultOf, runArgv, valuesForEntry } from './tool-core.js';
13
+ /** Project one raw CLI match down to the fields §7.1 allows, with a bounded excerpt. */
14
+ function boundMatch(raw) {
15
+ const match = typeof raw === 'object' && raw !== null ? raw : {};
16
+ const description = typeof match['description'] === 'string' ? match['description'] : '';
17
+ return {
18
+ name: match['name'],
19
+ kind: match['kind'],
20
+ excerpt: description.slice(0, MEMORY_EXCERPT_CHARS)
21
+ };
22
+ }
23
+ export async function callMemorySearchTool(tool, args, context) {
24
+ const entry = tool.entries[0];
25
+ if (entry === undefined) {
26
+ return { content: [{ type: 'text', text: '{"reason":"no entry"}' }], isError: true };
27
+ }
28
+ const values = valuesForEntry(entry, args, context);
29
+ if (values === undefined) {
30
+ return rejectedResult(entry, 'A search query is required.');
31
+ }
32
+ const built = buildArgv(entry, values);
33
+ if (!built.ok) {
34
+ return rejectedResult(entry, `Parameter ${built.param} was refused: ${built.message}`);
35
+ }
36
+ const outcome = await runArgv(entry.id, built.argv, context);
37
+ if (outcome.failure !== undefined)
38
+ return resultOf([outcome]);
39
+ const envelope = outcome.envelope;
40
+ const record = typeof envelope === 'object' && envelope !== null ? envelope : {};
41
+ const matches = record['matches'];
42
+ if (!Array.isArray(matches)) {
43
+ // No `matches` array is not "nothing matched" — it is a shape this tool does
44
+ // not understand, and reporting it as empty is the failure §9 rule 3 names.
45
+ const argv = outcome.execution.argv.join(' ');
46
+ return resultOf([
47
+ { ...outcome, failure: `peaks memory search returned no matches array: peaks ${argv}` }
48
+ ]);
49
+ }
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify({
55
+ query: record['query'],
56
+ total: record['total'],
57
+ matches: matches.slice(0, MEMORY_MAX_RETURNED).map(boundMatch)
58
+ })
59
+ }
60
+ ]
61
+ };
62
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,66 @@
1
+ // src/services/mcp/server-main.ts
2
+ //
3
+ // The process entry: a stdin pipe, a stdout pipe, and spec §6's L4 check before
4
+ // either is used.
5
+ //
6
+ // STDOUT CARRIES PROTOCOL AND NOTHING ELSE. Any diagnostic goes to stderr,
7
+ // because a harness reads stdout as the message stream and one stray line is a
8
+ // parse error that is indistinguishable from a broken server. That is also why
9
+ // the startup refusal below writes to stderr and exits non-zero rather than
10
+ // printing a JSON error: at that point there is no session to answer in.
11
+ //
12
+ // L4 REFUSES TO START. If the surface cannot be served as proven — a tool with
13
+ // no description, an argv the whitelist does not carry, a whitelisted argv
14
+ // reachable from no tool, or a tool with no handler — this process exits 1.
15
+ // A server that started anyway would be serving something nobody proved, and the
16
+ // failure would surface as data rather than as a refusal (spec §6, L4).
17
+ import { loadReadOnlyWhitelist } from '../readonly-surface/readonly-whitelist.js';
18
+ import { LineDecoder } from './json-rpc.js';
19
+ import { buildToolDefinitions, validateSurface } from './surface.js';
20
+ import { createMcpServer } from './server.js';
21
+ import { missingHandlers } from './tools.js';
22
+ function refuse(reason) {
23
+ process.stderr.write(`peaks mcp: ${reason}\n`);
24
+ process.exit(1);
25
+ }
26
+ function start() {
27
+ let tools;
28
+ try {
29
+ const whitelist = loadReadOnlyWhitelist();
30
+ tools = buildToolDefinitions(whitelist);
31
+ validateSurface(whitelist, tools);
32
+ }
33
+ catch (error) {
34
+ refuse(`refusing to start: ${error instanceof Error ? error.message : String(error)}`);
35
+ }
36
+ const unserved = missingHandlers(tools);
37
+ if (unserved.length > 0) {
38
+ refuse(`refusing to start: no handler for tool(s) ${unserved.join(', ')}`);
39
+ }
40
+ const server = createMcpServer({ tools });
41
+ const decoder = new LineDecoder();
42
+ const write = (line) => {
43
+ if (line !== undefined)
44
+ process.stdout.write(line);
45
+ };
46
+ const consume = (line) => {
47
+ void server.handleLine(line).then(write);
48
+ };
49
+ process.stdin.setEncoding('utf8');
50
+ process.stdin.on('data', (chunk) => {
51
+ for (const line of decoder.push(chunk))
52
+ consume(line);
53
+ });
54
+ process.stdin.on('end', () => {
55
+ for (const line of decoder.flush())
56
+ consume(line);
57
+ });
58
+ // A read error on our own transport is not recoverable and not ours to
59
+ // interpret: report it and stop, so the harness sees a dead server instead of
60
+ // a live one that answers nothing.
61
+ process.stdin.on('error', (error) => {
62
+ process.stderr.write(`peaks mcp: stdin error: ${error.message}\n`);
63
+ process.exitCode = 1;
64
+ });
65
+ }
66
+ start();
@@ -0,0 +1,22 @@
1
+ import type { McpToolDefinition } from './surface.js';
2
+ import { type ToolCallContext } from './tool-core.js';
3
+ /** Used when the client names no protocol version. */
4
+ export declare const DEFAULT_PROTOCOL_VERSION = "2025-06-18";
5
+ /** The server's own name, as it appears in `initialize`. */
6
+ export declare const SERVER_NAME = "peaks";
7
+ export declare const METHOD_INITIALIZE = "initialize";
8
+ export declare const METHOD_INITIALIZED = "notifications/initialized";
9
+ export declare const METHOD_TOOLS_LIST = "tools/list";
10
+ export declare const METHOD_TOOLS_CALL = "tools/call";
11
+ export interface McpServerOptions {
12
+ readonly tools: readonly McpToolDefinition[];
13
+ readonly context?: ToolCallContext;
14
+ readonly serverVersion?: string;
15
+ }
16
+ export interface McpServer {
17
+ /** Answer one line. A notification (or blank line) yields `undefined`. */
18
+ handleLine(line: string): Promise<string | undefined>;
19
+ /** The tools, for a caller that wants to assert what it built. */
20
+ readonly tools: readonly McpToolDefinition[];
21
+ }
22
+ export declare function createMcpServer(options: McpServerOptions): McpServer;
@@ -0,0 +1,152 @@
1
+ // src/services/mcp/server.ts
2
+ //
3
+ // The protocol core: one decoded line in, at most one encoded line out.
4
+ //
5
+ // WHAT THIS SERVER IS. A table lookup, an execution, and the CLI's own answer —
6
+ // nothing else (spec §3, component 3: "there is no fourth responsibility").
7
+ // It does not know what a gate is, does not cache, keeps no state between
8
+ // messages, and never rewrites a CLI result. `handleLine` is a pure function of
9
+ // (line, surface, context), which is also what makes it testable without a pipe.
10
+ //
11
+ // THE PROTOCOL SURFACE IS DELIBERATELY SMALL and is listed in full here so it can
12
+ // be checked line by line rather than inferred:
13
+ //
14
+ // initialize -> protocolVersion, capabilities.tools, serverInfo
15
+ // notifications/initialized -> accepted, no reply (it is a notification)
16
+ // tools/list -> tools[] {name, description, inputSchema}
17
+ // tools/call -> params {name, arguments} -> content[] | isError
18
+ // (anything else, request) -> -32601 METHOD_NOT_FOUND
19
+ // (anything else, notification) -> ignored; JSON-RPC forbids replying
20
+ // malformed JSON -> -32700 wrong envelope -> -32600
21
+ // bad tools/call params -> -32602 handler crash -> -32603
22
+ //
23
+ // NOT IMPLEMENTED, on purpose: `ping`, `resources/*`, `prompts/*`, `logging/*`,
24
+ // `completion/*`, `notifications/*` beyond `initialized`, progress tokens,
25
+ // cancellation, and resource subscriptions. Any of them arrives as a
26
+ // METHOD_NOT_FOUND rather than as silence.
27
+ //
28
+ // NO HANDSHAKE STATE. The server does not track whether `initialize` has been
29
+ // seen; every method is answerable on any line. MCP asks clients to initialize
30
+ // first, and this server simply does not depend on it — a state machine here
31
+ // would be state kept for no decision.
32
+ //
33
+ // PROTOCOL VERSION. The client's requested version is echoed when it names one,
34
+ // and a constant is used otherwise. Echoing is honest for this surface and not a
35
+ // claim of unlimited support: the four methods above have had identical request
36
+ // and response shapes across every published revision, so there is no version
37
+ // whose meaning this server would get wrong.
38
+ import { CLI_VERSION } from 'peaks-loop-shared/version';
39
+ import { decodeMessage, encodeMessage, failureResponse, isPlainObject, makeError, successResponse, JSON_RPC_INTERNAL_ERROR, JSON_RPC_INVALID_PARAMS, JSON_RPC_METHOD_NOT_FOUND } from './json-rpc.js';
40
+ import { handlerFor } from './tools.js';
41
+ /** Used when the client names no protocol version. */
42
+ export const DEFAULT_PROTOCOL_VERSION = '2025-06-18';
43
+ /** The server's own name, as it appears in `initialize`. */
44
+ export const SERVER_NAME = 'peaks';
45
+ export const METHOD_INITIALIZE = 'initialize';
46
+ export const METHOD_INITIALIZED = 'notifications/initialized';
47
+ export const METHOD_TOOLS_LIST = 'tools/list';
48
+ export const METHOD_TOOLS_CALL = 'tools/call';
49
+ /** The tool shape that goes on the wire — behaviour without the whitelist entries. */
50
+ function wireTool(tool) {
51
+ return {
52
+ name: tool.name,
53
+ description: tool.description,
54
+ inputSchema: tool.inputSchema
55
+ };
56
+ }
57
+ function requestedVersion(params) {
58
+ if (!isPlainObject(params))
59
+ return undefined;
60
+ const version = params['protocolVersion'];
61
+ return typeof version === 'string' && version.length > 0 ? version : undefined;
62
+ }
63
+ function callArguments(params) {
64
+ const args = params['arguments'];
65
+ if (args === undefined)
66
+ return {};
67
+ return isPlainObject(args) ? args : undefined;
68
+ }
69
+ /**
70
+ * Reject an argument the tool does not declare, BEFORE anything runs. The tool
71
+ * schemas set `additionalProperties: false`; enforcing it here is what makes
72
+ * that a promise rather than a hint, and it is the boundary at which an
73
+ * injection-shaped key ("--apply") stops being an argument.
74
+ */
75
+ function unknownArgument(tool, args) {
76
+ const declared = new Set(Object.keys(tool.inputSchema.properties));
77
+ return Object.keys(args).find((name) => !declared.has(name));
78
+ }
79
+ function initializeResult(params, version) {
80
+ return {
81
+ protocolVersion: requestedVersion(params) ?? DEFAULT_PROTOCOL_VERSION,
82
+ capabilities: { tools: { listChanged: false } },
83
+ serverInfo: { name: SERVER_NAME, version }
84
+ };
85
+ }
86
+ function fail(id, message) {
87
+ return encodeMessage(failureResponse(id, makeError(JSON_RPC_INVALID_PARAMS, message)));
88
+ }
89
+ async function toolsCallResult(tools, context, id, params) {
90
+ if (!isPlainObject(params)) {
91
+ return fail(id, 'tools/call requires an object of parameters.');
92
+ }
93
+ const name = params['name'];
94
+ if (typeof name !== 'string' || name.length === 0) {
95
+ return fail(id, 'tools/call requires a tool "name".');
96
+ }
97
+ const tool = tools.find((candidate) => candidate.name === name);
98
+ const handler = tool === undefined ? undefined : handlerFor(tool.name);
99
+ if (tool === undefined || handler === undefined) {
100
+ return fail(id, `Unknown tool: ${name}`);
101
+ }
102
+ const args = callArguments(params);
103
+ if (args === undefined) {
104
+ return fail(id, 'tools/call "arguments" must be an object.');
105
+ }
106
+ const unexpected = unknownArgument(tool, args);
107
+ if (unexpected !== undefined) {
108
+ return fail(id, `Tool ${name} declares no argument "${unexpected}".`);
109
+ }
110
+ return encodeMessage(successResponse(id, await handler(tool, args, context)));
111
+ }
112
+ export function createMcpServer(options) {
113
+ const tools = options.tools;
114
+ const context = options.context ?? {};
115
+ const version = options.serverVersion ?? CLI_VERSION;
116
+ const respond = async (id, method, params) => {
117
+ switch (method) {
118
+ case METHOD_INITIALIZE:
119
+ return encodeMessage(successResponse(id, initializeResult(params, version)));
120
+ case METHOD_TOOLS_LIST:
121
+ return encodeMessage(successResponse(id, { tools: tools.map(wireTool) }));
122
+ case METHOD_TOOLS_CALL:
123
+ return toolsCallResult(tools, context, id, params);
124
+ default:
125
+ return encodeMessage(failureResponse(id, makeError(JSON_RPC_METHOD_NOT_FOUND, `Unknown method: ${method}`)));
126
+ }
127
+ };
128
+ const handleLine = async (line) => {
129
+ const decoded = decodeMessage(line);
130
+ if (decoded === undefined)
131
+ return undefined;
132
+ if (decoded.kind === 'invalid') {
133
+ return encodeMessage(failureResponse(decoded.id, decoded.error));
134
+ }
135
+ if (decoded.kind === 'notification') {
136
+ // Notifications are answered by not answering. `initialized` needs no
137
+ // branch of its own for that reason — but an unknown one is silently
138
+ // dropped, which is the protocol's rule, not this server's leniency.
139
+ return undefined;
140
+ }
141
+ try {
142
+ return await respond(decoded.request.id, decoded.request.method, decoded.request.params);
143
+ }
144
+ catch (error) {
145
+ // A handler crash is reported, never swallowed: the caller has to know the
146
+ // answer is missing rather than empty.
147
+ const message = error instanceof Error ? error.message : 'Internal error';
148
+ return encodeMessage(failureResponse(decoded.request.id, makeError(JSON_RPC_INTERNAL_ERROR, message)));
149
+ }
150
+ };
151
+ return { tools, handleLine };
152
+ }
@@ -0,0 +1,62 @@
1
+ import { type ReadOnlyWhitelist, type ReadOnlyWhitelistEntry } from '../readonly-surface/readonly-whitelist.js';
2
+ /** One JSON Schema property, as far as this surface needs one. */
3
+ export interface JsonSchemaProperty {
4
+ readonly type: 'string' | 'integer';
5
+ readonly description?: string;
6
+ readonly pattern?: string;
7
+ readonly enum?: readonly string[];
8
+ readonly minimum?: number;
9
+ readonly maximum?: number;
10
+ readonly default?: number;
11
+ }
12
+ export interface JsonSchema {
13
+ readonly type: 'object';
14
+ readonly properties: Readonly<Record<string, JsonSchemaProperty>>;
15
+ readonly required: readonly string[];
16
+ /** The LLM must not send anything else; an unknown key is a refused call. */
17
+ readonly additionalProperties: false;
18
+ }
19
+ export interface McpToolDefinition {
20
+ readonly name: string;
21
+ readonly description: string;
22
+ readonly inputSchema: JsonSchema;
23
+ /** The whitelist entries this tool runs, in whitelist order. Kept off the wire. */
24
+ readonly entries: readonly ReadOnlyWhitelistEntry[];
25
+ }
26
+ /** Group the whitelist's entries into tools, preserving first-appearance order. */
27
+ export declare function buildToolDefinitions(whitelist: ReadOnlyWhitelist): readonly McpToolDefinition[];
28
+ /** Load the whitelist artifact and build the surface from it. */
29
+ export declare function loadToolDefinitions(): readonly McpToolDefinition[];
30
+ /** Why a surface was refused. Named so the server can print it and exit non-zero. */
31
+ export declare class McpSurfaceError extends Error {
32
+ constructor(message: string);
33
+ }
34
+ /** An entry's argv as a comparable template key: literals literal, placeholders `{name}`. */
35
+ export declare function argvTemplateOf(entry: ReadOnlyWhitelistEntry): string;
36
+ /**
37
+ * Refuse a whitelist artifact that is not internally coherent.
38
+ *
39
+ * WHO THIS IS FOR. The artifact is generated and CI re-generates it, so the
40
+ * shape below holds on a clean checkout. The failure it exists for is the one
41
+ * that leaves no other trace: the file is edited by hand, or an entry is
42
+ * half-written, and a server starts up happily serving a surface nothing proved.
43
+ * Every rule here is a property the generator establishes and a hand-edit
44
+ * breaks, so a violated rule means "this is not the generated artifact".
45
+ */
46
+ export declare function validateWhitelist(whitelist: ReadOnlyWhitelist): void;
47
+ /**
48
+ * L4 (spec §6): refuse to start when the tool surface and the proven whitelist do
49
+ * not describe the same thing.
50
+ *
51
+ * Two properties, each meant to fail loudly rather than degrade:
52
+ *
53
+ * 1. Every argv a tool can run is a whitelisted argv, by template. The surface
54
+ * is derived from the same artifact today, so on the production path this
55
+ * reads as "nothing unproven got in" — but it is the boundary that has to
56
+ * hold the moment a tool is authored rather than derived, and the test
57
+ * proves it can fail by handing it a surface that names an unproven argv.
58
+ * 2. Every whitelisted entry is reachable from some tool. This one DOES have a
59
+ * live trigger: an entry added to `readonly-surface.json` whose tool name is
60
+ * mistyped is proven read-only and then never served.
61
+ */
62
+ export declare function validateSurface(whitelist: ReadOnlyWhitelist, tools: readonly McpToolDefinition[]): void;
@@ -0,0 +1,198 @@
1
+ // src/services/mcp/surface.ts
2
+ //
3
+ // The tool surface, DERIVED from the generated read-only whitelist rather than
4
+ // restated beside it.
5
+ //
6
+ // WHY DERIVED. "Every argv a tool can run is whitelisted" is only checkable if
7
+ // there is no second list to disagree with. So the tools ARE the whitelist's
8
+ // entries grouped by their `tool` field: adding a tool means editing
9
+ // `contracts/readonly-surface.json` and regenerating, and a tool whose argv was
10
+ // never proven read-only cannot be declared here at all.
11
+ //
12
+ // `validateSurface` is spec §6's L4 — the startup check. L1 ("the server only
13
+ // runs whitelisted argv") is a property of the code; L4 turns "someone put a
14
+ // write argv into the surface" from a silent hole into a refusal to start. Its
15
+ // unit is the ARGV, not the tool: a composite tool carries several, and checking
16
+ // per tool would wave through all but one of them.
17
+ //
18
+ // JSON SCHEMA, NOT COMMANDER. The parameter constraints below come from the
19
+ // whitelist's `params`, which the generator introspected out of the live
20
+ // Commander registry when it wrote the artifact (`constraintSource` marks the
21
+ // few that were hand-written). One build of latency is the price of not loading
22
+ // the whole CLI command registry into a read-only server process; the artifact
23
+ // is regenerated in the build and CI fails on a diff, so it cannot drift.
24
+ import { loadReadOnlyWhitelist } from '../readonly-surface/readonly-whitelist.js';
25
+ /**
26
+ * LLM-facing prose, per tool name. Every tool the whitelist declares must have
27
+ * an entry here or `validateSurface` refuses to start — spec §8.4 rule 2 asks
28
+ * the description to state the precondition, and a tool that silently has none
29
+ * is how an LLM ends up calling it outside a peaks project.
30
+ */
31
+ const TOOL_DESCRIPTIONS = {
32
+ peaks_status: 'Where a Peaks-Loop workflow currently is. Read-only. Composes `peaks skill presence --json`, ' +
33
+ '`peaks session list --json` and, when both `rid` and `role` are given, `peaks request show ' +
34
+ '<rid> --role <role> --json --project <project>`. Each CLI result is returned verbatim under ' +
35
+ 'its own key; a key is absent when that call was not run. Requires a Peaks-Loop project ' +
36
+ '(a `.peaks/` directory) as the working directory.',
37
+ peaks_memory_search: 'Search this project’s durable memory for a term, and get back NAMES and short excerpts — ' +
38
+ 'never note bodies. Read-only. Use it to answer "has this project settled anything about X?" ' +
39
+ 'Requires a Peaks-Loop project (a `.peaks/` directory) as the working directory.'
40
+ };
41
+ /** Per-parameter prose, by placeholder name. Absent names simply carry no description. */
42
+ const PARAM_DESCRIPTIONS = {
43
+ rid: 'The id of the request to read.',
44
+ role: 'Role whose artifact to read. One of the declared enum values.',
45
+ project: 'Absolute path of the Peaks-Loop project. Defaults to the server’s working directory.',
46
+ query: 'The term to search project memory for.',
47
+ limit: 'Maximum number of matching notes to return.'
48
+ };
49
+ const TYPE_SHAPES = {
50
+ slug: (spec) => spec.pattern === undefined ? { type: 'string' } : { type: 'string', pattern: spec.pattern },
51
+ enum: (spec) => ({ type: 'string', enum: spec.values ?? [] }),
52
+ integer: (spec) => ({
53
+ type: 'integer',
54
+ minimum: spec.min ?? 0,
55
+ maximum: spec.max ?? Number.MAX_SAFE_INTEGER,
56
+ ...(spec.default === undefined ? {} : { default: spec.default })
57
+ }),
58
+ token: () => ({ type: 'string' }),
59
+ path: () => ({ type: 'string' })
60
+ };
61
+ function propertyFor(name, spec) {
62
+ const description = PARAM_DESCRIPTIONS[name];
63
+ const described = description === undefined ? {} : { description };
64
+ return { ...TYPE_SHAPES[spec.type](spec), ...described };
65
+ }
66
+ function inputSchemaOf(entries) {
67
+ const properties = {};
68
+ for (const entry of entries) {
69
+ for (const [name, spec] of Object.entries(entry.params)) {
70
+ properties[name] = propertyFor(name, spec);
71
+ }
72
+ }
73
+ // Nothing is `required` at the tool level. A tool whose entries all take no
74
+ // parameter is callable with `{}`, and a tool with several entries (three
75
+ // argv behind `peaks_status`) runs the subset whose parameters the caller
76
+ // actually supplied. Requiring the union would make the two parameterless
77
+ // argv unreachable.
78
+ return { type: 'object', properties, required: [], additionalProperties: false };
79
+ }
80
+ /** Group the whitelist's entries into tools, preserving first-appearance order. */
81
+ export function buildToolDefinitions(whitelist) {
82
+ const byTool = new Map();
83
+ for (const entry of whitelist.entries) {
84
+ const bucket = byTool.get(entry.tool);
85
+ if (bucket === undefined) {
86
+ byTool.set(entry.tool, [entry]);
87
+ }
88
+ else {
89
+ bucket.push(entry);
90
+ }
91
+ }
92
+ return [...byTool].map(([name, entries]) => ({
93
+ name,
94
+ description: TOOL_DESCRIPTIONS[name] ?? '',
95
+ inputSchema: inputSchemaOf(entries),
96
+ entries
97
+ }));
98
+ }
99
+ /** Load the whitelist artifact and build the surface from it. */
100
+ export function loadToolDefinitions() {
101
+ return buildToolDefinitions(loadReadOnlyWhitelist());
102
+ }
103
+ /** Why a surface was refused. Named so the server can print it and exit non-zero. */
104
+ export class McpSurfaceError extends Error {
105
+ constructor(message) {
106
+ super(message);
107
+ this.name = 'McpSurfaceError';
108
+ }
109
+ }
110
+ /** An entry's argv as a comparable template key: literals literal, placeholders `{name}`. */
111
+ export function argvTemplateOf(entry) {
112
+ return entry.argv
113
+ .map((segment) => (segment.kind === 'literal' ? segment.value : `{${segment.name}}`))
114
+ .join(' ');
115
+ }
116
+ /**
117
+ * Refuse a whitelist artifact that is not internally coherent.
118
+ *
119
+ * WHO THIS IS FOR. The artifact is generated and CI re-generates it, so the
120
+ * shape below holds on a clean checkout. The failure it exists for is the one
121
+ * that leaves no other trace: the file is edited by hand, or an entry is
122
+ * half-written, and a server starts up happily serving a surface nothing proved.
123
+ * Every rule here is a property the generator establishes and a hand-edit
124
+ * breaks, so a violated rule means "this is not the generated artifact".
125
+ */
126
+ export function validateWhitelist(whitelist) {
127
+ const seenIds = new Set();
128
+ for (const entry of whitelist.entries) {
129
+ if (seenIds.has(entry.id)) {
130
+ throw new McpSurfaceError(`Whitelist entry id '${entry.id}' is declared twice; refusing to start.`);
131
+ }
132
+ seenIds.add(entry.id);
133
+ const literals = entry.argv
134
+ .filter((segment) => segment.kind === 'literal')
135
+ .map((segment) => (segment.kind === 'literal' ? segment.value : ''));
136
+ // The command path must open the argv: an entry whose template does not
137
+ // begin with the command it claims to be is an entry about something else.
138
+ const prefix = literals.slice(0, entry.commandPath.length).join(' ');
139
+ if (prefix !== entry.commandPath.join(' ')) {
140
+ throw new McpSurfaceError(`Whitelist entry '${entry.id}' declares commandPath '${entry.commandPath.join(' ')}' but its argv starts '${prefix}'; refusing to start.`);
141
+ }
142
+ const used = entry.argv.flatMap((segment) => (segment.kind === 'param' ? [segment.name] : []));
143
+ for (const name of used) {
144
+ if (!(name in entry.params)) {
145
+ throw new McpSurfaceError(`Whitelist entry '${entry.id}' uses placeholder '${name}' that it does not declare; refusing to start.`);
146
+ }
147
+ if (used.filter((candidate) => candidate === name).length !== 1) {
148
+ throw new McpSurfaceError(`Whitelist entry '${entry.id}' uses placeholder '${name}' more than once; refusing to start.`);
149
+ }
150
+ }
151
+ for (const name of Object.keys(entry.params)) {
152
+ if (!used.includes(name)) {
153
+ throw new McpSurfaceError(`Whitelist entry '${entry.id}' declares parameter '${name}' that its argv never uses; refusing to start.`);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * L4 (spec §6): refuse to start when the tool surface and the proven whitelist do
160
+ * not describe the same thing.
161
+ *
162
+ * Two properties, each meant to fail loudly rather than degrade:
163
+ *
164
+ * 1. Every argv a tool can run is a whitelisted argv, by template. The surface
165
+ * is derived from the same artifact today, so on the production path this
166
+ * reads as "nothing unproven got in" — but it is the boundary that has to
167
+ * hold the moment a tool is authored rather than derived, and the test
168
+ * proves it can fail by handing it a surface that names an unproven argv.
169
+ * 2. Every whitelisted entry is reachable from some tool. This one DOES have a
170
+ * live trigger: an entry added to `readonly-surface.json` whose tool name is
171
+ * mistyped is proven read-only and then never served.
172
+ */
173
+ export function validateSurface(whitelist, tools) {
174
+ validateWhitelist(whitelist);
175
+ if (tools.length === 0) {
176
+ throw new McpSurfaceError('MCP surface declares no tools; refusing to start.');
177
+ }
178
+ const whitelistedTemplates = new Set(whitelist.entries.map((entry) => argvTemplateOf(entry)));
179
+ const servedTemplates = new Set();
180
+ for (const tool of tools) {
181
+ if (tool.description.trim().length === 0) {
182
+ throw new McpSurfaceError(`MCP tool '${tool.name}' has no description; refusing to start (spec §8.4 rule 2).`);
183
+ }
184
+ for (const entry of tool.entries) {
185
+ const template = argvTemplateOf(entry);
186
+ if (!whitelistedTemplates.has(template)) {
187
+ throw new McpSurfaceError(`MCP tool '${tool.name}' carries argv '${template}' that is not in the read-only whitelist; refusing to start.`);
188
+ }
189
+ servedTemplates.add(template);
190
+ }
191
+ }
192
+ for (const entry of whitelist.entries) {
193
+ const template = argvTemplateOf(entry);
194
+ if (!servedTemplates.has(template)) {
195
+ throw new McpSurfaceError(`Whitelist entry '${entry.id}' ('${template}') is reachable from no MCP tool; refusing to start.`);
196
+ }
197
+ }
198
+ }
@@ -0,0 +1,42 @@
1
+ import type { ReadOnlyWhitelistEntry } from '../readonly-surface/readonly-whitelist.js';
2
+ import { type CliExecution } from './cli-executor.js';
3
+ /** How much of one memory note's description travels back. */
4
+ export declare const MEMORY_EXCERPT_CHARS = 120;
5
+ /** Hard ceiling on matches returned, independent of what the CLI was asked for. */
6
+ export declare const MEMORY_MAX_RETURNED = 50;
7
+ export interface ToolTextContent {
8
+ readonly type: 'text';
9
+ readonly text: string;
10
+ }
11
+ export interface ToolCallResult {
12
+ readonly content: readonly ToolTextContent[];
13
+ /** Present and `true` only when something failed. Absent means success. */
14
+ readonly isError?: boolean;
15
+ }
16
+ /** Injectable execution, so a test can drive a handler without a CLI. */
17
+ export type CliExecutor = (argv: readonly string[]) => Promise<CliExecution>;
18
+ export interface ToolCallContext {
19
+ readonly execute?: CliExecutor;
20
+ /** Directory the CLI runs in. Defaults to the server process's own. */
21
+ readonly cwd?: string;
22
+ }
23
+ /**
24
+ * The values to render one entry with, or `undefined` when the caller did not
25
+ * supply enough for this entry to run. A value the caller DID supply is always
26
+ * present — it is handed to the guard, which is what decides whether it is
27
+ * allowed, so nothing supplied can be silently skipped.
28
+ */
29
+ export declare function valuesForEntry(entry: ReadOnlyWhitelistEntry, args: Readonly<Record<string, unknown>>, context: ToolCallContext): Record<string, string> | undefined;
30
+ /** One argv's outcome, kept whole so the caller can see every envelope. */
31
+ export interface EntryOutcome {
32
+ readonly key: string;
33
+ readonly execution: CliExecution;
34
+ readonly envelope: unknown;
35
+ readonly failure?: string;
36
+ }
37
+ /** Render the outcomes as a tool result, failing the call when any argv failed. */
38
+ export declare function resultOf(outcomes: readonly EntryOutcome[]): ToolCallResult;
39
+ /** A refused call: the parameter guard said no, before anything was executed. */
40
+ export declare function rejectedResult(entry: ReadOnlyWhitelistEntry, reason: string): ToolCallResult;
41
+ /** Execute one already-validated argv and keep its whole outcome. */
42
+ export declare function runArgv(key: string, argv: readonly string[], context: ToolCallContext): Promise<EntryOutcome>;