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,177 @@
1
+ // src/cli/commands/vm-spawn-command.ts
2
+ //
3
+ // `peaks vm spawn` — pick a hypervisor, probe it, spawn the VM and write the
4
+ // lease. Split out of `vm-commands.ts`; every refusal code, message, `data`
5
+ // field, next-action string and exit code is unchanged.
6
+ import { existsSync } from 'node:fs';
7
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
8
+ import { addJsonOption, printResult } from '../cli-helpers.js';
9
+ import { findProjectRoot } from '../../services/config/config-safety.js';
10
+ import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
11
+ import { DEFAULT_VM_IMAGE, finalizeVmLease, generateVmLeaseId, vmLeaseFilePath } from '../../services/vm/vm-lease.js';
12
+ import { detectHypervisor } from './vm-hypervisor-probe.js';
13
+ import { spawnVmWithHypervisor } from './vm-hypervisor-runtime.js';
14
+ import { joinPathSession, resolveTtlMs, resolveVmSessionId } from './vm-command-shared.js';
15
+ /** Explicit `--hypervisor` wins; otherwise only `/dev/kvm` auto-detects. */
16
+ function pickHypervisor(explicit) {
17
+ if (explicit !== undefined)
18
+ return explicit;
19
+ // No platform detector for hyperkit / hyperv — those require --hypervisor.
20
+ if (existsSync('/dev/kvm'))
21
+ return 'kvm';
22
+ return null;
23
+ }
24
+ function buildSpawnContext(options, projectRoot, sessionId, hypervisor) {
25
+ return {
26
+ projectRoot,
27
+ sessionId,
28
+ hypervisor,
29
+ image: options.image ?? DEFAULT_VM_IMAGE,
30
+ mount: options.mount ?? projectRoot,
31
+ ttlMs: resolveTtlMs(options.ttl, options.role),
32
+ leaseId: generateVmLeaseId(),
33
+ now: Date.now()
34
+ };
35
+ }
36
+ function emitSpawnRefusal(io, options, refusal) {
37
+ printResult(io, fail('vm.spawn', refusal.code, refusal.message, refusal.data, refusal.nextActions), options.json ?? false);
38
+ process.exitCode = 1;
39
+ }
40
+ function emitHypervisorUnspecified(io, options, sessionId) {
41
+ emitSpawnRefusal(io, options, {
42
+ code: 'VM_HYPERVISOR_UNSPECIFIED',
43
+ message: 'No --hypervisor given and the host does not advertise /dev/kvm. Pass --hypervisor hyperkit|hyperv to force one.',
44
+ data: { rid: options.rid, sessionId },
45
+ nextActions: [
46
+ 'Linux KVM: ensure /dev/kvm exists and the kvm kernel module is loaded.',
47
+ 'macOS HyperKit: install hvftool (brew install hyperkit) and pass --hypervisor hyperkit.',
48
+ 'Windows Hyper-V: install the hvc shim and pass --hypervisor hyperv.'
49
+ ]
50
+ });
51
+ }
52
+ function emitRuntimeUnavailable(io, options, detail) {
53
+ emitSpawnRefusal(io, options, {
54
+ code: 'VM_RUNTIME_UNAVAILABLE',
55
+ message: `${detail.hypervisor} runtime not available: ${detail.stderr}`,
56
+ data: { rid: options.rid, hypervisor: detail.hypervisor, sessionId: detail.sessionId },
57
+ nextActions: [
58
+ `Install the ${detail.hypervisor} runtime binary on PATH.`,
59
+ 'The dispatch fail-fast prevents fallback to a different hypervisor (caller chose this mode for a reason).'
60
+ ]
61
+ });
62
+ }
63
+ /** Spawn, or print the spawn failure and return null. */
64
+ function spawnOrFail(io, options, ctx) {
65
+ try {
66
+ return spawnVmWithHypervisor({
67
+ hypervisor: ctx.hypervisor,
68
+ image: ctx.image,
69
+ mount: ctx.mount,
70
+ leaseId: ctx.leaseId,
71
+ rid: options.rid,
72
+ workdir: ctx.projectRoot
73
+ }).vmId;
74
+ }
75
+ catch (err) {
76
+ emitSpawnRefusal(io, options, {
77
+ code: 'VM_SPAWN_FAILED',
78
+ message: getErrorMessage(err),
79
+ data: {
80
+ rid: options.rid,
81
+ hypervisor: ctx.hypervisor,
82
+ image: ctx.image,
83
+ sessionId: ctx.sessionId
84
+ },
85
+ nextActions: [
86
+ 'Verify the image / vhdx is reachable on the host.',
87
+ `For ${ctx.hypervisor}: the spawn helper expects domain XML / hvftool args / hvc shim.`
88
+ ]
89
+ });
90
+ return null;
91
+ }
92
+ }
93
+ function emitSpawnSuccess(io, options, spawned) {
94
+ const { ctx, vmId, binary } = spawned;
95
+ const lease = finalizeVmLease({
96
+ leaseId: ctx.leaseId,
97
+ rid: options.rid,
98
+ role: options.role,
99
+ path: ctx.mount,
100
+ hypervisor: ctx.hypervisor,
101
+ image: ctx.image,
102
+ vmId,
103
+ createdAt: ctx.now,
104
+ expiresAt: ctx.now + ctx.ttlMs,
105
+ purpose: options.purpose
106
+ });
107
+ atomicWriteJson(vmLeaseFilePath(joinPathSession(ctx.projectRoot, ctx.sessionId), ctx.leaseId), lease);
108
+ printResult(io, ok('vm.spawn', {
109
+ lease,
110
+ sessionId: ctx.sessionId,
111
+ projectRoot: ctx.projectRoot,
112
+ hypervisor: ctx.hypervisor,
113
+ runtime: binary,
114
+ ttlMs: ctx.ttlMs,
115
+ nextActions: [
116
+ `VM domain id: ${vmId}`,
117
+ `Image: ${ctx.image}`,
118
+ `Lease expires at: ${new Date(lease.expiresAt).toISOString()}`,
119
+ 'Run `peaks vm release --lease-id <lease-id>` when done',
120
+ 'For inside-the-VM exec, a follow-up rid adds `peaks vm exec` (Part 35 ships lease + spawn/release only).'
121
+ ]
122
+ }, [], []), options.json ?? false);
123
+ }
124
+ export function runVmSpawn(io, options) {
125
+ try {
126
+ const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
127
+ const sessionId = resolveVmSessionId(projectRoot, options.session);
128
+ const detected = pickHypervisor(options.hypervisor);
129
+ if (detected === null) {
130
+ emitHypervisorUnspecified(io, options, sessionId);
131
+ return;
132
+ }
133
+ const probe = detectHypervisor(detected);
134
+ if (!probe.ok) {
135
+ emitRuntimeUnavailable(io, options, {
136
+ sessionId,
137
+ hypervisor: detected,
138
+ stderr: probe.stderr
139
+ });
140
+ return;
141
+ }
142
+ const ctx = buildSpawnContext(options, projectRoot, sessionId, detected);
143
+ const vmId = spawnOrFail(io, options, ctx);
144
+ if (vmId === null)
145
+ return;
146
+ emitSpawnSuccess(io, options, { ctx, vmId, binary: probe.binary });
147
+ }
148
+ catch (err) {
149
+ emitSpawnRefusal(io, options, {
150
+ code: 'SPAWN_FAILED',
151
+ message: getErrorMessage(err),
152
+ data: {
153
+ rid: options.rid,
154
+ sessionId: options.session ?? process.env.PEAKS_SESSION_ID ?? 'unknown-sid'
155
+ },
156
+ nextActions: [
157
+ 'See error message; if the lease was not written, retry after fixing the underlying issue.'
158
+ ]
159
+ });
160
+ }
161
+ }
162
+ export function registerVmSpawnCommand(cmd, io) {
163
+ addJsonOption(cmd
164
+ .command('spawn')
165
+ .description('Spawn a VM via the requested hypervisor (kvm | hyperkit | hyperv) and write a VM lease. ' +
166
+ 'Default TTL is role-aware (rd=30m / qa=15m / ui=1h); pass --ttl <ms> to override. ' +
167
+ 'Default image is `peaks-base:22-slim`; pass --image <name> to override.')
168
+ .requiredOption('--rid <rid>', 'peaks request id the lease is associated with')
169
+ .requiredOption('--role <role>', 'sub-agent role (rd | qa | ui | sc | prd | general-purpose)')
170
+ .requiredOption('--purpose <text>', 'why this VM was spawned (audit log)')
171
+ .option('--hypervisor <name>', 'hypervisor to use: kvm | hyperkit | hyperv (default: auto-detect from host)')
172
+ .option('--image <name>', `container image / vhdx to boot (default ${DEFAULT_VM_IMAGE})`)
173
+ .option('--ttl <ms>', 'time-to-live in ms (default role-aware; override with positive number)')
174
+ .option('--mount <path>', 'host path to mount as the VM working dir (default: <projectRoot>)')
175
+ .option('--session <sid>', 'override session id')
176
+ .option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => runVmSpawn(io, options));
177
+ }
@@ -0,0 +1,12 @@
1
+ import { fail } from 'peaks-loop-shared/result';
2
+ /** A daemon-supplied value that is expected to be a string, or `''`. */
3
+ export declare function text(value: unknown): string;
4
+ /** A daemon-supplied value that is expected to be a count, or `0`. */
5
+ export declare function count(value: unknown): number;
6
+ /** Resolve this project's session, or report `NO_SESSION` exactly once. */
7
+ export declare function resolveSession(): {
8
+ projectRoot: string;
9
+ sessionId: string;
10
+ } | null;
11
+ /** The shared `NO_SESSION` envelope for both lifecycle verbs. */
12
+ export declare function noSession(command: string): ReturnType<typeof fail>;
@@ -0,0 +1,30 @@
1
+ // src/cli/commands/web-command-shared.ts
2
+ //
3
+ // What every `peaks web …` verb shares: the session binding lookup, the
4
+ // `NO_SESSION` refusal, and the two readers that coerce a daemon-supplied value
5
+ // to the shape the envelope promises. The first two were split out of
6
+ // `web-lifecycle-commands.ts`; `text` / `count` came with the `web-commands.ts`
7
+ // split, where they had a copy each in the payload and failure modules.
8
+ import { fail } from 'peaks-loop-shared/result';
9
+ import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
10
+ import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
11
+ /** A daemon-supplied value that is expected to be a string, or `''`. */
12
+ export function text(value) {
13
+ return typeof value === 'string' ? value : '';
14
+ }
15
+ /** A daemon-supplied value that is expected to be a count, or `0`. */
16
+ export function count(value) {
17
+ return typeof value === 'number' ? value : 0;
18
+ }
19
+ /** Resolve this project's session, or report `NO_SESSION` exactly once. */
20
+ export function resolveSession() {
21
+ const projectRoot = resolveCanonicalProjectRoot(process.cwd());
22
+ const sessionId = getCurrentSessionId(projectRoot);
23
+ return sessionId === null ? null : { projectRoot, sessionId };
24
+ }
25
+ /** The shared `NO_SESSION` envelope for both lifecycle verbs. */
26
+ export function noSession(command) {
27
+ return fail(command, 'NO_SESSION', 'No peaks session is bound to this project root', {}, [
28
+ 'Bind a session first (the LLM runs `peaks workspace init` on your behalf)'
29
+ ]);
30
+ }
@@ -8,21 +8,14 @@
8
8
  * The envelope is built once, in `runWebOp`, and that is also the single place
9
9
  * `WRAPPED_OPS` is applied — one place, not six. Every page- or daemon-derived
10
10
  * string that leaves this process (payload, diagnostic, warning) is capped and
11
- * wrapped here, because this is the boundary the model actually reads.
11
+ * wrapped there, because this is the boundary the model actually reads.
12
+ *
13
+ * The pieces live beside this file: the verb table in `web-verb-specs.ts`, the
14
+ * op's envelope in `web-op-runner.ts`, its payload shaping in
15
+ * `web-op-payload.ts`, its refusal texts in `web-op-refusals.ts`, and the
16
+ * daemon-lifecycle verbs in `web-lifecycle-commands.ts`.
12
17
  */
13
18
  import type { Command } from 'commander';
14
- import type { WebOp } from '../../services/web/web-protocol.js';
15
19
  import { type ProgramIO } from '../cli-helpers.js';
16
20
  export declare function registerWebCommands(program: Command, io: ProgramIO): void;
17
- /**
18
- * Resolve the session, ensure a daemon, invoke one op, and emit exactly one
19
- * envelope. `WRAPPED_OPS` is applied here, after the byte caps the daemon
20
- * already imposed, so the UNTRUSTED markers are never themselves truncated.
21
- *
22
- * The `PEAKS_WEB_DISABLED` gate is the FIRST thing that happens (tech-doc §5.1
23
- * step 1, AC5). Before the session lookup, so a project with no binding still
24
- * gets `WEB_DISABLED` rather than `NO_SESSION`; before `ensureDaemon`, so
25
- * nothing is spawned and no lock is taken; and therefore before anything that
26
- * could touch the browser cache.
27
- */
28
- export declare function runWebOp(io: ProgramIO, op: WebOp, args: Record<string, unknown>, asJson: boolean): Promise<void>;
21
+ export { runWebOp } from './web-op-runner.js';
@@ -1,73 +1,7 @@
1
- import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
2
- import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
3
- import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
4
- import { capText, MAX_TEXT_BYTES } from '../../services/web/bounded-output.js';
5
- import { ensureDaemon } from '../../services/web/daemon-supervisor.js';
6
- import { wrapUntrusted, WRAPPED_OPS } from '../../services/web/untrusted-envelope.js';
7
- import { WebDaemonClient } from '../../services/web/web-client.js';
8
- import { degradedEnvelope } from '../../services/web/web-fallback.js';
9
- import { isWebDisabled } from '../../services/web/web-install-service.js';
10
- import { cappedEcho, resolveProfileName } from '../../services/web/web-login-profile.js';
11
- import { addJsonOption, printResult, redactSensitiveErrorMessage } from '../cli-helpers.js';
1
+ import { addJsonOption } from '../cli-helpers.js';
12
2
  import { registerWebLifecycleCommands } from './web-lifecycle-commands.js';
13
- /** A browser op is user-visible latency; 30 s is generous but bounded. */
14
- const OP_TIMEOUT_MS = 30_000;
15
- /**
16
- * The option text names the read-only half out loud: a caller who browses with a
17
- * profile must not assume the profile was refreshed by it.
18
- */
19
- const PROFILE_OPTION_DESCRIPTION = 'navigate with a saved login profile (`peaks web login --profile <name>`): [a-z0-9._-], ' +
20
- '1-64 chars, upper case folds to lower. The profile is READ-ONLY here — this run loads it ' +
21
- 'and never writes it back, so browser activity is not saved into it.';
22
- const WEB_VERBS = [
23
- {
24
- name: 'open',
25
- op: 'open',
26
- description: 'Navigate the dispatch browser context to <url>. With --profile, the page loads that ' +
27
- 'saved login.',
28
- argument: { name: '<url>', description: 'absolute URL to load' },
29
- takesProfile: true,
30
- toArgs: (positional, profile) => ({
31
- url: positional[0] ?? '',
32
- ...(profile === undefined ? {} : { profile })
33
- })
34
- },
35
- {
36
- name: 'text',
37
- op: 'text',
38
- description: 'Return the visible text of the page (or of [selector]), byte-capped.',
39
- argument: { name: '[selector]', description: 'CSS selector (default: body)' },
40
- toArgs: (positional) => ({ selector: positional[0] })
41
- },
42
- {
43
- name: 'snap',
44
- op: 'snap',
45
- description: 'Return a pruned ARIA snapshot of the page (or of [selector]), byte-capped.',
46
- argument: { name: '[selector]', description: 'CSS selector (default: body)' },
47
- toArgs: (positional) => ({ selector: positional[0] })
48
- },
49
- {
50
- name: 'click',
51
- op: 'click',
52
- description: 'Click the element matching <selector> in the dispatch browser context.',
53
- argument: { name: '<selector>', description: 'CSS selector to click' },
54
- toArgs: (positional) => ({ selector: positional[0] ?? '' })
55
- },
56
- {
57
- name: 'shot',
58
- op: 'shot',
59
- description: 'Screenshot the page (or [selector]) into the session web/ directory.',
60
- argument: { name: '[selector]', description: 'CSS selector (default: full page)' },
61
- toArgs: (positional) => ({ selector: positional[0] })
62
- },
63
- {
64
- name: 'metrics',
65
- op: 'metrics',
66
- description: 'Return Core Web Vitals for the dispatch page, or why they are unavailable.',
67
- argument: null,
68
- toArgs: () => ({})
69
- }
70
- ];
3
+ import { runWebOp } from './web-op-runner.js';
4
+ import { PROFILE_OPTION_DESCRIPTION, WEB_VERBS } from './web-verb-specs.js';
71
5
  export function registerWebCommands(program, io) {
72
6
  const web = program
73
7
  .command('web')
@@ -97,248 +31,6 @@ export function registerWebCommands(program, io) {
97
31
  }
98
32
  registerWebLifecycleCommands(web, io);
99
33
  }
100
- /**
101
- * Resolve the session, ensure a daemon, invoke one op, and emit exactly one
102
- * envelope. `WRAPPED_OPS` is applied here, after the byte caps the daemon
103
- * already imposed, so the UNTRUSTED markers are never themselves truncated.
104
- *
105
- * The `PEAKS_WEB_DISABLED` gate is the FIRST thing that happens (tech-doc §5.1
106
- * step 1, AC5). Before the session lookup, so a project with no binding still
107
- * gets `WEB_DISABLED` rather than `NO_SESSION`; before `ensureDaemon`, so
108
- * nothing is spawned and no lock is taken; and therefore before anything that
109
- * could touch the browser cache.
110
- */
111
- export async function runWebOp(io, op, args, asJson) {
112
- const command = `peaks.web.${op}`;
113
- // Declared outside the try so the CATCH reports the fold too (S4's F5/S5 rule
114
- // for `login`, applied here): a run that dies after the name was resolved
115
- // knows the canonical name just as well as a successful one.
116
- let foldWarnings = [];
117
- try {
118
- if (isWebDisabled(process.env)) {
119
- // The gate is statement #1, so a `--profile` has NOT been through the
120
- // resolver yet and is still unbounded caller text. `degradedEnvelope`
121
- // carries every string arg into the payload, so it is capped here — the
122
- // same cap the `login` gate applies, for the same reason (S1's bounded
123
- // output is a property of the envelope, not only of stdout).
124
- const gateArgs = typeof args['profile'] === 'string'
125
- ? { ...args, profile: cappedEcho(args['profile']) }
126
- : args;
127
- printResult(io, degradedEnvelope(op, 'PEAKS_WEB_DISABLED=1', 3, gateArgs), asJson);
128
- process.exitCode = 1;
129
- return;
130
- }
131
- // A caller-supplied `--profile` is validated HERE, before anything is sent,
132
- // and the daemon runs the SAME resolver again on the payload it receives (a
133
- // value off the wire is not trusted). `resolveProfileName` folds to lower
134
- // case, so the canonical name is what travels, and the fold is reported
135
- // rather than silent — the contract `login` honours.
136
- let profile;
137
- if (typeof args['profile'] === 'string') {
138
- const typed = args['profile'];
139
- try {
140
- profile = resolveProfileName(typed);
141
- }
142
- catch (error) {
143
- printResult(io, fail(command, 'WEB_PROFILE_NAME_INVALID', profileRefusal(error), {}, PROFILE_NEXT_ACTIONS), asJson);
144
- process.exitCode = 1;
145
- return;
146
- }
147
- if (profile !== typed) {
148
- foldWarnings = [
149
- `--profile ${JSON.stringify(cappedEcho(typed))} resolved to the profile "${profile}"`
150
- ];
151
- }
152
- }
153
- const opArgs = profile === undefined ? args : { ...args, profile };
154
- const projectRoot = resolveCanonicalProjectRoot(process.cwd());
155
- const sessionId = getCurrentSessionId(projectRoot);
156
- if (sessionId === null) {
157
- printResult(io, withFold(fail(command, 'NO_SESSION', 'No peaks session is bound to this project root', {}, [
158
- 'Bind a session first (the LLM runs `peaks workspace init` on your behalf)'
159
- ]), foldWarnings), asJson);
160
- process.exitCode = 1;
161
- return;
162
- }
163
- const info = await ensureDaemon(projectRoot, sessionId);
164
- // The daemon reads `projectRoot` back from `daemon.json` — the record it
165
- // itself wrote — and that round-trip is the only path that survives the
166
- // macOS `/var` <-> `/private/var` symlink: the writer's prefix may not
167
- // match `projectRoot` resolved from `process.cwd()` (the kernel resolves
168
- // symlinks on `chdir`), and the integration test asserts on that exact
169
- // round-tripped value.
170
- const daemonProjectRoot = info.projectRoot;
171
- const response = await new WebDaemonClient(info).call(op, { ...opArgs, dispatchId: dispatchId(), projectRoot: daemonProjectRoot, sessionId }, OP_TIMEOUT_MS);
172
- if (!response.ok || response.data === null) {
173
- const code = safeDaemonCode(response.code);
174
- // The daemon no longer downloads (R3), so "the browser is not installed"
175
- // arrives as a refusal. It is AC5's tier-3 branch, not an opaque op
176
- // failure: the caller must be handed the same envelope — MCP tool,
177
- // install command, screenshot consequence — that the gate produces.
178
- printResult(io, code === 'WEB_INSTALL_REQUIRED'
179
- ? withFold(degradedEnvelope(op, `WEB_INSTALL_REQUIRED: ${response.message ?? ''}`, 3, opArgs), foldWarnings)
180
- : withFold(fail(command, code, failureMessage(op, response.message, response.nextActions), {}, []), foldWarnings), asJson);
181
- process.exitCode = 1;
182
- return;
183
- }
184
- const wrapped = wrapPageData(op, response.data);
185
- emit(io, ok(command, wrapped.data, [...foldWarnings, ...wrapDiagnostics(response.warnings)]), asJson, wrapped.human);
186
- }
187
- catch (error) {
188
- printResult(io, withFold(fail(command, 'WEB_OP_FAILED', failureMessage(op, redactSensitiveErrorMessage(getErrorMessage(error)), []), {}, []), foldWarnings), asJson);
189
- process.exitCode = 1;
190
- }
191
- }
192
- /**
193
- * What a caller can do after a refused `--profile` — the same sentence `login`
194
- * gives, because it is the same mistake and the same verb fixes it.
195
- */
196
- const PROFILE_NEXT_ACTIONS = [
197
- 'Re-run with a name matching [a-z0-9._-], 1-64 chars',
198
- 'Or run `peaks web login --profile <name>` to create that profile'
199
- ];
200
- /**
201
- * The resolver's own message begins with the code, and `fail()` puts the code in
202
- * front of the message again — strip it, so human output does not read
203
- * `WEB_PROFILE_NAME_INVALID: WEB_PROFILE_NAME_INVALID: …` (the `login` verb does
204
- * the same).
205
- */
206
- function profileRefusal(error) {
207
- return getErrorMessage(error).replace(/^WEB_PROFILE_NAME_INVALID:\s*/, '');
208
- }
209
- /** Prepend the fold notice to an envelope's warnings; never rewrite them away. */
210
- function withFold(envelope, warnings) {
211
- return warnings.length === 0
212
- ? envelope
213
- : { ...envelope, warnings: [...warnings, ...envelope.warnings] };
214
- }
215
- /**
216
- * A daemon- or page-derived diagnostic is DATA, never an instruction: it is
217
- * byte-capped and wrapped before it can reach `message` or `warnings` (AC4 /
218
- * R4 — the envelope must cover the diagnostic channel, not only `data`).
219
- *
220
- * This matters because Playwright's own error messages embed the matched
221
- * elements' HTML, so a page with two elements matching a selector can put
222
- * arbitrary text on a channel the CLI would otherwise print verbatim to stdout.
223
- */
224
- function wrapDiagnostic(raw) {
225
- const capped = capText(text(raw), MAX_TEXT_BYTES).text;
226
- return capped === '' ? '' : wrapUntrusted(capped);
227
- }
228
- /** Every daemon warning, capped and wrapped. Empty entries are dropped. */
229
- function wrapDiagnostics(values) {
230
- return values.map((value) => wrapDiagnostic(value)).filter((value) => value !== '');
231
- }
232
- /**
233
- * Our own static sentence, then the daemon's own words as a wrapped, capped
234
- * block. The daemon's `nextActions` are folded into that block rather than
235
- * forwarded: `printResult` prints `nextActions` to STDOUT as `next: …`, the
236
- * channel the notice calls instruction, and the daemon's text is not ours to
237
- * promote there.
238
- */
239
- function failureMessage(op, message, nextActions) {
240
- const detail = [text(message), ...nextActions.map((action) => text(action))]
241
- .filter((line) => line !== '')
242
- .join('\n');
243
- const wrapped = wrapDiagnostic(detail);
244
- return wrapped === ''
245
- ? `peaks web ${op} failed in the daemon`
246
- : `peaks web ${op} failed in the daemon\n${wrapped}`;
247
- }
248
- /**
249
- * A daemon-supplied `code` is printed on the envelope's first line, so only a
250
- * protocol-shaped identifier is accepted; anything else falls back to ours.
251
- */
252
- function safeDaemonCode(value) {
253
- return typeof value === 'string' && /^[A-Z][A-Z0-9_]{0,63}$/.test(value)
254
- ? value
255
- : 'WEB_OP_FAILED';
256
- }
257
- /**
258
- * Wrap the page-controlled part of each verb's payload (AC4 / §6.2) and pick
259
- * the bytes that human mode prints verbatim. `shot` is unwrapped: its path and
260
- * byte count are ours, not the page's.
261
- */
262
- function wrapPageData(op, raw) {
263
- if (!WRAPPED_OPS.has(op)) {
264
- return { data: raw, human: null };
265
- }
266
- switch (op) {
267
- case 'open': {
268
- const title = wrapUntrusted(text(raw['title']));
269
- return { data: { url: wrapUntrusted(text(raw['url'])), title }, human: title };
270
- }
271
- case 'text': {
272
- const value = wrapUntrusted(text(raw['text']));
273
- return {
274
- data: {
275
- text: value,
276
- truncated: raw['truncated'] === true,
277
- droppedBytes: count(raw['droppedBytes'])
278
- },
279
- human: value
280
- };
281
- }
282
- case 'snap': {
283
- const snapshot = wrapUntrusted(text(raw['snapshot']));
284
- return {
285
- data: {
286
- snapshot,
287
- droppedNodes: count(raw['droppedNodes']),
288
- depthCapped: raw['depthCapped'] === true,
289
- nodeCapped: raw['nodeCapped'] === true,
290
- truncated: raw['truncated'] === true,
291
- droppedBytes: count(raw['droppedBytes'])
292
- },
293
- human: snapshot
294
- };
295
- }
296
- case 'click': {
297
- const result = wrapUntrusted(text(raw['result']));
298
- return { data: { result }, human: result };
299
- }
300
- case 'metrics': {
301
- // The rendered lines come from the daemon's payload, so they are capped
302
- // here as well as at the producer: this is the boundary that reaches
303
- // stdout, and the ceiling must hold whatever the daemon sends.
304
- const metrics = wrapUntrusted(capText(renderMetrics(raw), MAX_TEXT_BYTES).text);
305
- return { data: { metrics }, human: metrics };
306
- }
307
- default:
308
- return { data: raw, human: null };
309
- }
310
- }
311
- /**
312
- * Print the envelope. Failures and `--json` go through `printResult`; a
313
- * successful wrapped op in human mode prints its payload RAW, because the
314
- * UNTRUSTED delimiters must stay on their own lines (AC4) and AC2 measures the
315
- * byte count of exactly this stdout.
316
- */
317
- function emit(io, result, asJson, humanPayload) {
318
- if (!result.ok || asJson || humanPayload === null) {
319
- printResult(io, result, asJson);
320
- return;
321
- }
322
- io.stdout(humanPayload);
323
- for (const warning of result.warnings) {
324
- io.stderr(`warning: ${warning}`);
325
- }
326
- }
327
- /** `available: false` is reported as such — never as fabricated zeros (C4). */
328
- function renderMetrics(raw) {
329
- if (raw['available'] !== true) {
330
- return `available: false\nreason: ${text(raw['reason']) || 'unavailable'}`;
331
- }
332
- const values = (raw['values'] ?? {});
333
- const lines = Object.entries(values).map(([key, value]) => `${key}: ${String(value)}`);
334
- return lines.length > 0 ? lines.join('\n') : 'available: true';
335
- }
336
- function dispatchId() {
337
- return process.env['PEAKS_DISPATCH_ID'] ?? 'current';
338
- }
339
- function text(value) {
340
- return typeof value === 'string' ? value : '';
341
- }
342
- function count(value) {
343
- return typeof value === 'number' ? value : 0;
344
- }
34
+ // Re-export for tests / external consumers; the implementation moved to
35
+ // `web-op-runner.ts` with the split.
36
+ export { runWebOp } from './web-op-runner.js';
@@ -0,0 +1,10 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ /**
4
+ * `peaks web install` — the explicit form of the lazy download, plus R6's
5
+ * recovery path (`--force`).
6
+ *
7
+ * The gate is step 1 of the ordered gate (tech-doc §5.1) — see {@link installRefusal}.
8
+ */
9
+ export declare function runWebInstall(io: ProgramIO, asJson: boolean, force: boolean): Promise<void>;
10
+ export declare function registerWebInstallCommand(web: Command, io: ProgramIO): void;