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
@@ -23,10 +23,11 @@
23
23
  * it can be unit-tested in isolation and so the on-disk file matches
24
24
  * the in-memory template byte-for-byte.
25
25
  *
26
- * Two `Bash` matchers are emitted (the Step 0.8 mechanical gate and the
27
- * SOP gate-enforce handler). No `Write|Edit|MultiEdit` entry is emitted:
28
- * that matcher's gate is `peaks code-gate --json`, installed into the
29
- * committed `.claude/settings.json` by `peaks hooks install`.
26
+ * Four `Bash` matchers are emitted: the Step 0.8 mechanical gate, the SOP
27
+ * gate-enforce handler, and the two layer-B feedback hooks. No
28
+ * `Write|Edit|MultiEdit` entry is emitted: that matcher's gate is
29
+ * `peaks code-gate --json`, installed into the committed
30
+ * `.claude/settings.json` by `peaks hooks install`.
30
31
  *
31
32
  * The previous `Bash` matcher (which whitelisted a fixed `peaks
32
33
  * <subcommand>` prefix) was removed in TEMPLATE_VERSION 1.2.0. The
@@ -40,7 +41,15 @@
40
41
  * consumer project's `.claude/settings.json` and which exits 0
41
42
  * silently for any command not guarded by a registered SOP gate.
42
43
  */
43
- import { EXTERNAL_GATE_EXEMPT_ENV, hasExternalGateExemptions, resolveHookShell, resolveHookSpec } from '../skills/hooks-codegate-superpowers.js';
44
+ import { EXTERNAL_GATE_EXEMPT_ENV, resolveHookShell, resolveHookSpec } from '../skills/hooks-codegate-superpowers.js';
45
+ /**
46
+ * The comparison and the entry-level merge live in
47
+ * `claude-settings-template-merge.ts` — they were two thirds of this file's
48
+ * bytes and none of its template shape. Re-exported here so this module stays
49
+ * the single public entry point for the template concern: no caller has to
50
+ * know which half a symbol lives in.
51
+ */
52
+ export { isRetiredTemplateEntry, mergeTemplateOwnedHooks, templateContentMatches } from './claude-settings-template-merge.js';
44
53
  export const CLAUDE_SETTINGS_LOCAL_FILENAME = '.claude/settings.local.json';
45
54
  /**
46
55
  * Informational version of the offline template shape. Bumped when the
@@ -98,232 +107,17 @@ export const CLAUDE_SETTINGS_LOCAL_FILENAME = '.claude/settings.local.json';
98
107
  * `mergeTemplateOwnedHooks` drops the retired entry from
99
108
  * existing on-disk files, so an earlier install converges
100
109
  * instead of keeping a no-op with a stale absolute path.
110
+ * 1.9.0 — added the two layer-B feedback hook entries
111
+ * (`pre-tool-peaks-current-directory-scope.sh` and
112
+ * `pre-tool-piping-a-test-run-reports-the-pipes-exit-code.sh`),
113
+ * pinned to `shell: bash`. Until now their registration existed only
114
+ * in the generated copies on the machine that hand-wrote them: a
115
+ * fresh clone got the two scripts and no registration, so the
116
+ * promotion they carry was true only locally. See
117
+ * `buildFeedbackHookHandler` for why the pin is `bash` and not the
118
+ * `powershell` its three siblings take.
101
119
  */
102
- export const TEMPLATE_VERSION = '1.8.0';
103
- /**
104
- * Compare two serialized template strings: does the on-disk file already
105
- * declare every entry the generated tree declares?
106
- *
107
- * This comparator answers "is each entry the GENERATED tree declares present
108
- * on disk?", NOT "are the two `hooks` trees identical". Extra on-disk entries
109
- * are IGNORED, so an entry another writer put in this file never makes it look
110
- * drifted.
111
- *
112
- * That is the deliberate other half of the entry-level merge in
113
- * `mergeTemplateOwnedHooks` / `workspace-claude-settings-materializer.ts`.
114
- * `.claude/settings.local.json` has a SECOND writer of `hooks.PreToolUse`:
115
- * `installAutoCompactHook` appends a `Bash|Task` entry. Under the previous
116
- * exact-tree rule the merged file carried 4 entries against a 3-entry
117
- * generated tree, so every `peaks workspace init` answered "drifted",
118
- * rewrote, and reported `refreshed` forever — precisely the state whole-key
119
- * ownership existed to prevent, and the reason the merge could not ship alone.
120
- *
121
- * Matching is order-insensitive AND multiset-aware: the template declares TWO
122
- * `Bash` entries, and each must have its own counterpart on disk, so a file
123
- * carrying only one of them is still reported as drifted (the previous
124
- * index-by-index loop had the same property; it is load-bearing, not a
125
- * detail).
126
- *
127
- * Returns `true` iff both strings parse to objects whose `hooks.PreToolUse`
128
- * arrays satisfy that containment, the on-disk file carries NO entry this
129
- * template has retired (`isRetiredTemplateEntry`), AND the on-disk `env`
130
- * already carries every exemption the template declares (extra on-disk keys
131
- * and extra globs are allowed — a user may exempt other trees, and a
132
- * requirement the file already exceeds must not re-trigger a write).
133
- *
134
- * Returns `false` on any `JSON.parse` error, shape mismatch, or
135
- * missing `hooks.PreToolUse`. Whitespace and key order do NOT affect
136
- * the result — the comparison is on the parsed AST, not on bytes.
137
- *
138
- * This is the comparator `initWorkspace` uses to decide whether to
139
- * refresh a stale `.peaks/.claude-settings-template.json` on disk.
140
- */
141
- export function templateContentMatches(generated, onDisk) {
142
- let parsedGenerated;
143
- let parsedOnDisk;
144
- try {
145
- parsedGenerated = JSON.parse(generated);
146
- }
147
- catch {
148
- return false;
149
- }
150
- try {
151
- parsedOnDisk = JSON.parse(onDisk);
152
- }
153
- catch {
154
- return false;
155
- }
156
- if (!isTemplateShape(parsedGenerated) || !isTemplateShape(parsedOnDisk)) {
157
- return false;
158
- }
159
- // Multiset containment: consume one on-disk entry per generated entry so a
160
- // file holding a single copy of a doubly-declared entry still fails.
161
- const unmatched = [...parsedOnDisk.hooks.PreToolUse];
162
- for (const required of parsedGenerated.hooks.PreToolUse) {
163
- const at = unmatched.findIndex((candidate) => sameEntry(required, candidate));
164
- if (at === -1) {
165
- return false;
166
- }
167
- unmatched.splice(at, 1);
168
- }
169
- // A RETIRED entry on disk is drift, and this clause is what makes the
170
- // retirement in `mergeTemplateOwnedHooks` reach an installed file at all.
171
- //
172
- // Containment alone cannot express it: a file still carrying
173
- // `Write|Edit|MultiEdit` declares every entry the template declares, so
174
- // `templateContentMatches` answered "current", no rewrite ran, and the merge
175
- // never got the chance to drop it. Measured on a throwaway project root
176
- // before this clause existed — init against the rebuilt CLI reported
177
- // `already-current` and the retired entry survived verbatim. Declaring less
178
- // is not a retirement; the comparator has to say so.
179
- //
180
- // One extra rewrite per affected install, then the fixed point holds: the
181
- // merge emits no retired entry, so the next comparison finds none and
182
- // answers `current`.
183
- if (parsedOnDisk.hooks.PreToolUse.some((entry) => isRetiredTemplateEntry(entry))) {
184
- return false;
185
- }
186
- // A project installed by a release that predates a template-declared
187
- // exemption still needs the refresh this comparator gates — otherwise the
188
- // entry would only ever appear on a machine that re-ran `peaks hooks
189
- // install`. `hasExternalGateExemptions` is the same predicate the installer
190
- // uses, so the two writers cannot drift apart.
191
- return hasExternalGateExemptions({ env: parsedOnDisk.env });
192
- }
193
- /**
194
- * Merge the on-disk `hooks.PreToolUse` list with the template's.
195
- *
196
- * the entries IT DECLARES — and nothing else. Every other on-disk entry is
197
- * carried across verbatim, whatever its matcher, because the template has no
198
- * opinion about it:
199
- *
200
- * - a `matcher` the template does not declare (`Bash|Task`, the auto-compact
201
- * hook `installAutoCompactHook` appends) is never touched;
202
- * - surplus entries BEYOND the template's count for a declared matcher (a
203
- * user's own `Bash` hook) are surplus too, and survive;
204
- * - an on-disk entry that fills a declared slot is REPLACED by the template's
205
- * entry for it. That is what makes a hand-edited (or older-release) entry
206
- * self-heal instead of lingering next to a correct copy of itself.
207
- *
208
- * Slot counting is per `matcher` and positional within it: the template
209
- * declares TWO `Bash` entries, so the first two on-disk `Bash` entries are
210
- * theirs and a third is the user's. The template's entries are emitted first,
211
- * in template order, then the preserved ones in their on-disk order — which is
212
- * a fixed point: re-merging the result yields the result (the template's own
213
- * entries are encountered first and refill their own slots).
214
- *
215
- * Non-conforming entries (no string `matcher`, no `hooks` array) are preserved
216
- * rather than dropped: guessing at their shape is how a user's entry gets
217
- * deleted.
218
- *
219
- * ONE exception to "preserve what I do not declare": an entry this template
220
- * used to declare and RETIRED (TEMPLATE_VERSION 1.8.0's `Write|Edit|MultiEdit`
221
- * gate — see `isRetiredTemplateEntry`) is dropped rather than preserved.
222
- * Declaring less cannot retire an entry on its own, because preserving
223
- * undeclared entries is exactly what this function does; without the drop, a
224
- * pre-1.8.0 install would keep the no-op handler and its version-pinned script
225
- * path forever. The predicate is narrow enough that only the exact command
226
- * this template emitted matches.
227
- */
228
- export function mergeTemplateOwnedHooks(onDisk, template) {
229
- const slots = new Map();
230
- for (const entry of template) {
231
- if (!isPreToolUseEntry(entry))
232
- continue;
233
- slots.set(entry.matcher, (slots.get(entry.matcher) ?? 0) + 1);
234
- }
235
- const taken = new Map();
236
- const preserved = [];
237
- for (const entry of onDisk) {
238
- // Retired by this template — dropped, not carried across.
239
- if (isRetiredTemplateEntry(entry)) {
240
- continue;
241
- }
242
- // Unowned by construction: not a shape the template could have declared.
243
- if (!isPreToolUseEntry(entry)) {
244
- preserved.push(entry);
245
- continue;
246
- }
247
- const declared = slots.get(entry.matcher) ?? 0;
248
- const used = taken.get(entry.matcher) ?? 0;
249
- if (used >= declared) {
250
- preserved.push(entry);
251
- continue;
252
- }
253
- taken.set(entry.matcher, used + 1);
254
- }
255
- return [...template, ...preserved];
256
- }
257
- /** Structural equality of two `PreToolUse` entries. */
258
- function sameEntry(a, b) {
259
- return a.matcher === b.matcher && sameHooksArray(a.hooks, b.hooks);
260
- }
261
- function isPreToolUseEntry(value) {
262
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
263
- return false;
264
- }
265
- const candidate = value;
266
- return typeof candidate.matcher === 'string' && Array.isArray(candidate.hooks);
267
- }
268
- function isTemplateShape(value) {
269
- if (typeof value !== 'object' || value === null) {
270
- return false;
271
- }
272
- const candidate = value;
273
- if (typeof candidate.hooks !== 'object' || candidate.hooks === null) {
274
- return false;
275
- }
276
- const hooksObj = candidate.hooks;
277
- return Array.isArray(hooksObj.PreToolUse);
278
- }
279
- function sameHooksArray(a, b) {
280
- if (a.length !== b.length) {
281
- return false;
282
- }
283
- for (let i = 0; i < a.length; i += 1) {
284
- const ha = a[i];
285
- const hb = b[i];
286
- // `shell` participates in the comparison: it is machine-specific (see
287
- // `resolveHookShell`), so a file written on one platform must be
288
- // recognized as drifted on the other instead of silently kept.
289
- if (ha.type !== hb.type || ha.command !== hb.command || ha.shell !== hb.shell) {
290
- return false;
291
- }
292
- }
293
- return true;
294
- }
295
- /**
296
- * The retired `Write|Edit|MultiEdit` gate entry, as an on-disk file written by
297
- * a pre-1.8.0 release holds it.
298
- *
299
- * TEMPLATE_VERSION 1.8.0 stopped emitting this entry. Declaring less is not
300
- * enough on its own: `mergeTemplateOwnedHooks` preserves every on-disk entry
301
- * the template does not declare — that is the whole point of the entry-level
302
- * ownership rule (it is what keeps `installAutoCompactHook`'s `Bash|Task`
303
- * entry alive) — so a project installed by an earlier release would keep the
304
- * no-op handler, and its `node "C:/…/nvm/v24.14.0/…"` path, forever. This
305
- * predicate is the retirement: `mergeTemplateOwnedHooks` drops a match.
306
- *
307
- * Deliberately narrow. It matches the exact command shape this template used
308
- * to emit — one handler, `node "<…>/services/hooks/write-gate.js"` — under the
309
- * exact legacy matcher spelling, so a user's OWN `Write|Edit|MultiEdit` entry
310
- * (a different command, or more than one handler) is preserved like any other
311
- * entry the template does not declare. A looser "drop anything on this
312
- * matcher" rule would delete a user's hook, which is the failure the ownership
313
- * rule exists to prevent.
314
- */
315
- const RETIRED_WRITE_GATE_MATCHER = 'Write|Edit|MultiEdit';
316
- const RETIRED_WRITE_GATE_COMMAND = /^node "[^"]*\/services\/hooks\/write-gate\.js"$/;
317
- export function isRetiredTemplateEntry(entry) {
318
- if (!isPreToolUseEntry(entry))
319
- return false;
320
- if (entry.matcher !== RETIRED_WRITE_GATE_MATCHER)
321
- return false;
322
- if (entry.hooks.length !== 1)
323
- return false;
324
- const handler = entry.hooks[0];
325
- return handler.type === 'command' && RETIRED_WRITE_GATE_COMMAND.test(handler.command);
326
- }
120
+ export const TEMPLATE_VERSION = '1.9.0';
327
121
  /**
328
122
  * TEMPLATE_VERSION 1.4.0 — the SOP gate-enforce handler, read from the same
329
123
  * canonical hook spec `peaks hooks install` uses. Deriving it here (rather
@@ -347,11 +141,12 @@ function buildGateEnforceHandler() {
347
141
  * forcing gate is a core feature that PreToolUse hooks can short-
348
142
  * circuit but that the `permissions` block cannot.
349
143
  *
350
- * As of TEMPLATE_VERSION 1.8.0 the template emits the two `Bash` matchers
351
- * only. The `Write|Edit|MultiEdit` fact-forcing bypass is no longer a hook:
352
- * it is the `env` exemption above, and that matcher's gate
353
- * (`peaks code-gate --json`) is installed into the committed
354
- * `.claude/settings.json` by `peaks hooks install`.
144
+ * As of TEMPLATE_VERSION 1.9.0 the template emits four `Bash` matchers: the
145
+ * two above, plus one per layer-B feedback hook (`FEEDBACK_HOOK_SCRIPTS`). The
146
+ * `Write|Edit|MultiEdit` fact-forcing bypass is no longer a hook: it is the
147
+ * `env` exemption above, and that matcher's gate (`peaks code-gate --json`) is
148
+ * installed into the committed `.claude/settings.json` by `peaks hooks
149
+ * install`.
355
150
  */
356
151
  export function buildClaudeSettingsLocalJson() {
357
152
  return {
@@ -387,7 +182,15 @@ export function buildClaudeSettingsLocalJson() {
387
182
  // group and the gate would run twice per Bash call.
388
183
  matcher: 'Bash',
389
184
  hooks: [buildGateEnforceHandler()]
390
- }
185
+ },
186
+ ...FEEDBACK_HOOK_SCRIPTS.map((script) => ({
187
+ // TEMPLATE_VERSION 1.9.0 — the layer-B feedback hooks, one matcher
188
+ // group each, for the same reason the entry above has its own: a
189
+ // group is peaks-managed only when EVERY handler in it carries a
190
+ // peaks sentinel, and none of these handlers does.
191
+ matcher: 'Bash',
192
+ hooks: [buildFeedbackHookHandler(script)]
193
+ }))
391
194
  ]
392
195
  }
393
196
  };
@@ -420,3 +223,45 @@ function buildBashGateStep08Handler() {
420
223
  ...(shell !== undefined ? { shell } : {})
421
224
  };
422
225
  }
226
+ /**
227
+ * TEMPLATE_VERSION 1.9.0 — the two rules promoted to layer B by hand first: the
228
+ * scripts shipped in `src/services/hooks/`, but the registration existed only in
229
+ * the generated copy on the machine that wrote it. Emitting it here is what makes
230
+ * the promotion a property of the repository rather than of that machine — the
231
+ * layer-B feedback gate reads THIS template's `hooks` block, so a fresh clone had
232
+ * the enforcement and nothing registering it.
233
+ *
234
+ * The filenames are the contract: the layer-B check looks for a hook command that
235
+ * INVOKES A FILE NAMED AFTER THE RULE, so the command has to carry the script's
236
+ * name and cannot be a `peaks` verb that dispatches to it.
237
+ */
238
+ const FEEDBACK_HOOK_SCRIPTS = [
239
+ 'pre-tool-peaks-current-directory-scope.sh',
240
+ 'pre-tool-piping-a-test-run-reports-the-pipes-exit-code.sh'
241
+ ];
242
+ /** The shell these two handlers are pinned to. See `buildFeedbackHookHandler`. */
243
+ const FEEDBACK_HOOK_SHELL = 'bash';
244
+ /**
245
+ * The handler for one feedback hook, pinned to `shell: 'bash'`.
246
+ *
247
+ * THE PIN IS THE DECISION, and it is deliberately not the `powershell` its three
248
+ * siblings take. Measured on this host, both shapes run the script and both print
249
+ * its refusal to stderr — but they do not report the same exit code:
250
+ *
251
+ * bash "<script>" exit 2 (the script's own code)
252
+ * powershell "<script>" exit 1 (flattened by the shell)
253
+ *
254
+ * Under the Claude Code hook protocol only exit 2 blocks; any other non-zero exit
255
+ * is a NON-BLOCKING ERROR and the tool call goes ahead. So pinning `powershell`
256
+ * here would not be a cosmetic difference on a blocking hook — it would turn the
257
+ * refusal into a log line and let the command through, which is the failure these
258
+ * two entries exist to prevent. `shell` accepts `bash` and `powershell` only, and
259
+ * `bash` is also the interpreter this command already names.
260
+ */
261
+ function buildFeedbackHookHandler(script) {
262
+ return {
263
+ type: 'command',
264
+ command: `bash "\${CLAUDE_PROJECT_DIR}/src/services/hooks/${script}"`,
265
+ shell: FEEDBACK_HOOK_SHELL
266
+ };
267
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peaks-loop",
3
- "version": "4.1.2",
3
+ "version": "4.1.4",
4
4
  "description": "Loop Engineering CLI — workflow primitive / loop guards / evaluators / slice orchestration",
5
5
  "author": "SquabbyZ",
6
6
  "keywords": [
@@ -75,16 +75,25 @@
75
75
  "scripts/copy-templates.mjs",
76
76
  "scripts/sync-version.mjs",
77
77
  "scripts/install-skills.mjs",
78
+ "scripts/install-skills-fs.mjs",
79
+ "scripts/install-skills-report.mjs",
80
+ "scripts/install-skills-user-config.mjs",
81
+ "scripts/install-skills-ide.mjs",
82
+ "scripts/install-skills-bundles.mjs",
83
+ "scripts/install-skills-output-styles.mjs",
84
+ "scripts/install-skills-output-style-default.mjs",
78
85
  "scripts/canonical-store.mjs",
79
86
  "scripts/canonical-store-link.mjs",
80
87
  "scripts/canonical-store-prune.mjs",
81
88
  "scripts/watch.mjs",
89
+ "scripts/watch-tree.mjs",
82
90
  "skills/**",
83
91
  "!skills/**/test-prompts.json",
84
92
  "!skills/**/.DS_Store",
85
93
  "output-styles/**",
86
94
  "agents/**",
87
95
  "schemas/*.json",
96
+ "contracts/readonly-argv-whitelist.json",
88
97
  ".claude-plugin/**",
89
98
  "config/eslint/.peaks-rules.cjs",
90
99
  "config/eslint/tsconfig.lint.json",
@@ -120,10 +129,10 @@
120
129
  "picomatch": "4.0.4",
121
130
  "yaml": "^2.9.0",
122
131
  "zod": "^4.4.3",
123
- "peaks-loop-internal-runtime": "0.0.42",
124
- "peaks-loop-shared-channel": "0.0.59",
125
- "peaks-loop-mut": "0.1.56",
126
- "peaks-loop-shared": "0.0.91"
132
+ "peaks-loop-internal-runtime": "0.0.44",
133
+ "peaks-loop-shared": "0.0.93",
134
+ "peaks-loop-mut": "0.1.58",
135
+ "peaks-loop-shared-channel": "0.0.61"
127
136
  },
128
137
  "devDependencies": {
129
138
  "@changesets/cli": "2.31.1",
@@ -148,7 +157,9 @@
148
157
  "vitest": "^4.1.10"
149
158
  },
150
159
  "scripts": {
151
- "build": "node ./scripts/sync-version.mjs && node ./scripts/clean-dist.mjs && pnpm -r --filter \"./packages/*\" run build && node ./scripts/write-package-dist-stamps.mjs && tsc -p tsconfig.build.json && node ./scripts/copy-templates.mjs && node ./scripts/check-build-integrity.mjs && node ./scripts/write-dist-stamp.mjs",
160
+ "build": "node ./scripts/sync-version.mjs && node ./scripts/clean-dist.mjs && pnpm -r --filter \"./packages/*\" run build && node ./scripts/write-package-dist-stamps.mjs && node node_modules/tsx/dist/cli.mjs scripts/generate-readonly-whitelist.ts && node node_modules/tsx/dist/cli.mjs scripts/generate-plugin-manifest.ts && tsc -p tsconfig.build.json && node ./scripts/copy-templates.mjs && node ./scripts/check-build-integrity.mjs && node ./scripts/write-dist-stamp.mjs",
161
+ "readonly:whitelist": "node node_modules/tsx/dist/cli.mjs scripts/generate-readonly-whitelist.ts",
162
+ "plugin:manifest": "node node_modules/tsx/dist/cli.mjs scripts/generate-plugin-manifest.ts",
152
163
  "prepublish": "node ./scripts/sync-version.mjs",
153
164
  "postinstall": "node ./scripts/install-skills.mjs",
154
165
  "predev": "node ./scripts/sync-version.mjs",
@@ -0,0 +1,233 @@
1
+ // scripts/install-skills-bundles.mjs
2
+ //
3
+ // The two installers that read a directory of bundled assets out of the package and
4
+ // reconcile each entry into an IDE directory: the DIRECTORY-shaped family (skills) and
5
+ // the FILE-shaped one (agents). Each owns its dispatch precedence and its repair rule.
6
+ //
7
+ // Split out of `scripts/install-skills.mjs` (rid-043). Every line below was moved
8
+ // VERBATIM from that file; only this header, the import block, and the `export`
9
+ // keyword on names a sibling imports are new.
10
+
11
+ import { existsSync, lstatSync, mkdirSync, readdirSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+
14
+ import { reconcileCanonicalEntry } from './canonical-store.mjs';
15
+ import { reconcileCanonicalFileEntry } from './canonical-store-link.mjs';
16
+ import { pruneBundledEntries } from './canonical-store-prune.mjs';
17
+ import { createInstallResult } from './install-skills-report.mjs';
18
+ import { createInstallRootValidator, resolvePackageRoot } from './install-skills-fs.mjs';
19
+ import { resolveBundleTargetRoot } from './install-skills-ide.mjs';
20
+
21
+ /**
22
+ * THE INSTALL CANDIDATE LIST — every skill the package ships, as
23
+ * `{ skillName, sourcePath }`.
24
+ *
25
+ * After the v2.13.0 bee-demote (commit de0872b), the role skills (peaks-prd,
26
+ * peaks-rd, peaks-qa, peaks-ui, peaks-sc, peaks-txt) moved under
27
+ * `skills/bee/<role>/` while user-facing helpers stayed at `skills/<name>/`. So the
28
+ * list is built by walking top-level entries (user-facing helpers) AND
29
+ * `skills/bee/<role>` (demoted role skills). Each candidate is installed under its
30
+ * basename, so the postinstall links `~/.claude/skills/peaks-rd` to
31
+ * `skills/bee/peaks-rd` rather than to `skills/bee`.
32
+ *
33
+ * De-dupe rule: a top-level helper with the same name WINS, which preserves the
34
+ * existing install contract for any helper sharing a name with a demoted role skill
35
+ * (legacy overlap).
36
+ *
37
+ * @param {string} skillsRoot
38
+ * @returns {Array<{ skillName: string, sourcePath: string }>}
39
+ */
40
+ function collectSkillCandidates(skillsRoot) {
41
+ const beeRoot = join(skillsRoot, 'bee');
42
+ /** @type {Array<{ skillName: string, sourcePath: string }>} */
43
+ const candidates = [];
44
+ for (const skillName of readdirSync(skillsRoot)) {
45
+ if (skillName === 'bee') continue;
46
+ const sourcePath = join(skillsRoot, skillName);
47
+ if (!isSkillSource(sourcePath)) continue;
48
+ candidates.push({ skillName, sourcePath });
49
+ }
50
+ if (existsSync(beeRoot) && isDirectoryEntry(beeRoot)) {
51
+ for (const skillName of readdirSync(beeRoot)) {
52
+ const sourcePath = join(beeRoot, skillName);
53
+ if (!isSkillSource(sourcePath)) continue;
54
+ if (candidates.some((c) => c.skillName === skillName)) continue;
55
+ candidates.push({ skillName, sourcePath });
56
+ }
57
+ }
58
+ return candidates;
59
+ }
60
+
61
+ /** A real directory entry — `lstat`, so a symlink to one is NOT one. */
62
+ function isDirectoryEntry(entryPath) {
63
+ return lstatSync(entryPath).isDirectory();
64
+ }
65
+
66
+ /** A directory entry that is a skill: a real directory holding a `SKILL.md`. */
67
+ function isSkillSource(sourcePath) {
68
+ return isDirectoryEntry(sourcePath) && existsSync(join(sourcePath, 'SKILL.md'));
69
+ }
70
+
71
+ export function installBundledSkills(options = {}) {
72
+ const packageRoot = resolvePackageRoot(options);
73
+ const skillsRoot = join(packageRoot, 'skills');
74
+
75
+ if (process.env.PEAKS_SKIP_SKILL_INSTALL === '1' || !existsSync(skillsRoot)) {
76
+ return createInstallResult();
77
+ }
78
+
79
+ // Slice #011: IDE-aware dispatch — the precedence itself now lives in ONE place
80
+ // (`resolveBundleTargetRoot` in `install-skills-ide.mjs`), because all three
81
+ // families stated it and only this one also warns.
82
+ const targetRoot = resolveBundleTargetRoot(options, {
83
+ profileField: 'skillsDir',
84
+ envVar: 'PEAKS_CLAUDE_SKILLS_DIR',
85
+ fallback: '.claude/skills',
86
+ warn: true
87
+ });
88
+
89
+ const installed = [];
90
+ const skipped = [];
91
+ mkdirSync(targetRoot, { recursive: true });
92
+ const validateSkillsRoot = createInstallRootValidator(targetRoot, 'Peaks skills');
93
+
94
+ const candidates = collectSkillCandidates(skillsRoot);
95
+
96
+ for (const { skillName, sourcePath } of candidates) {
97
+ const targetPath = join(targetRoot, skillName);
98
+
99
+ // Slice 2 (`agents-canonical-store`) — the entry points at the CANONICAL
100
+ // STORE (`~/.peaks/skills/<name>`), not at `<packageRoot>/skills/<name>`,
101
+ // because `<packageRoot>` changes on every `npm i -g peaks-loop@latest` and
102
+ // the links must bind to a PATH peaks-loop owns, not to a VERSION. Repair is
103
+ // the only behaviour: an entry peaks-loop owns (sidecar matches, or the link
104
+ // dangles) is relinked onto the store; only a real directory the user authored
105
+ // is left alone and reported `skipped`. `options.reconcileJunctions` is
106
+ // therefore READ NOWHERE here — still accepted (`sync-service.ts` forwards it)
107
+ // so passing it changes nothing, and removing it is a CLI-surface change this
108
+ // slice does not own.
109
+ validateSkillsRoot();
110
+ const reconciled = reconcileCanonicalEntry({
111
+ kind: 'skills',
112
+ name: skillName,
113
+ sourcePath,
114
+ linkPath: targetPath
115
+ });
116
+ validateSkillsRoot();
117
+
118
+ if (reconciled.linkAction === 'skipped') {
119
+ skipped.push(skillName);
120
+ continue;
121
+ }
122
+ installed.push(skillName);
123
+ }
124
+
125
+ // Slice 3 — PRUNE. The loop above only ever ADDS. A skill removed from the
126
+ // package left its canonical copy, every IDE link and every sidecar on the
127
+ // user's machine forever, because nothing walked the DESTINATIONS. This does,
128
+ // and deletes only what `isManagedEntry` proves is ours.
129
+ const { pruned } = pruneBundledEntries({
130
+ kind: 'skills',
131
+ keepNames: candidates.map((candidate) => candidate.skillName),
132
+ linkDirs: [targetRoot]
133
+ });
134
+
135
+ return { installed, skipped, pruned };
136
+ }
137
+
138
+ /**
139
+ * Slice 7/7 — bundled agents (Claude Code sub-agent prompts).
140
+ *
141
+ * Writes into the IDE's sub-agent loader directory (`~/.claude/agents/` for Claude
142
+ * Code, and whatever `agentsDir` the detected profile declares). The bytes live in
143
+ * the canonical store (`~/.peaks/agents/<name>`) and the IDE entry is a link to it.
144
+ *
145
+ * Ownership policy — ONE predicate, in `canonical-store-link.mjs::isOwnedFileEntry`,
146
+ * and it is deliberately not a string comparison:
147
+ * - entry resolves to the canonical copy → leave it (idempotent run)
148
+ * - entry is a link we wrote (sidecar agrees, dangles) → relink onto the store
149
+ * - entry is a real file with OUR sidecar beside it → re-point it at the store
150
+ * - entry is a real file with a LEGACY sidecar whose
151
+ * recorded package path no longer resolves → same: repair it
152
+ * - entry is a real file we never wrote (no sidecar) → skip (user-authored)
153
+ * - entry is a real file whose sidecar names a path
154
+ * that STILL resolves → skip (a second live install)
155
+ *
156
+ * The two "skip" arms above are the ones the old code got wrong in opposite
157
+ * directions: it skipped whenever the package path merely DIFFERED, which froze
158
+ * every entry on the first upgrade, silently and permanently. See
159
+ * `isOwnedFileEntry` for why a vanished package path is proof of an earlier install.
160
+ */
161
+ export function installBundledAgents(options = {}) {
162
+ const packageRoot = resolvePackageRoot(options);
163
+ const agentsRoot = join(packageRoot, 'agents');
164
+
165
+ // Per-IDE env-var override (claude-code only today): PEAKS_CLAUDE_AGENTS_DIR.
166
+ // Universal escape hatch: PEAKS_SKIP_AGENT_INSTALL=1 (parallel to
167
+ // PEAKS_SKIP_SKILL_INSTALL).
168
+ if (
169
+ process.env.PEAKS_SKIP_SKILL_INSTALL === '1' ||
170
+ process.env.PEAKS_SKIP_AGENT_INSTALL === '1' ||
171
+ !existsSync(agentsRoot)
172
+ ) {
173
+ return createInstallResult();
174
+ }
175
+
176
+ // Slice #011: IDE-aware dispatch — same precedence as the other two families,
177
+ // resolved by the same helper (`resolveBundleTargetRoot`).
178
+ const targetRoot = resolveBundleTargetRoot(options, {
179
+ profileField: 'agentsDir',
180
+ envVar: 'PEAKS_CLAUDE_AGENTS_DIR',
181
+ fallback: '.claude/agents'
182
+ });
183
+
184
+ const installed = [];
185
+ const skipped = [];
186
+ const fallbacks = [];
187
+ mkdirSync(targetRoot, { recursive: true });
188
+ const validateAgentsRoot = createInstallRootValidator(targetRoot, 'Peaks agents');
189
+
190
+ // Slice 4 (`agents-canonical-store`) — the canonical store owns the bytes and the
191
+ // IDE entry points at it. Everything this loop used to decide about ownership is
192
+ // now `reconcileCanonicalFileEntry`'s, and the reason is the defect the brief
193
+ // names as this slice's core: the old test was
194
+ // `resolve(marker.sourcePath) === resolve(sourcePath)`, a STRING comparison against
195
+ // the package path of the installing version — a path with a node version inside it
196
+ // (`…\nvm\v24.21.0\node_modules\peaks-loop\agents\…`). It went false the first time
197
+ // the package moved and stayed false, so the agent silently never updated again.
198
+ const bundledAgentNames = [];
199
+ for (const agentFileName of readdirSync(agentsRoot)) {
200
+ const sourcePath = join(agentsRoot, agentFileName);
201
+ if (!lstatSync(sourcePath).isFile() || !agentFileName.endsWith('.md')) continue;
202
+ bundledAgentNames.push(agentFileName);
203
+
204
+ validateAgentsRoot();
205
+ const reconciled = reconcileCanonicalFileEntry({
206
+ kind: 'agents',
207
+ name: agentFileName,
208
+ sourcePath,
209
+ linkPath: join(targetRoot, agentFileName),
210
+ createFileLink: options.createFileLink
211
+ });
212
+ validateAgentsRoot();
213
+
214
+ if (reconciled.linkAction === 'skipped') {
215
+ skipped.push(agentFileName);
216
+ continue;
217
+ }
218
+ installed.push(agentFileName);
219
+ if (reconciled.fallback !== null) {
220
+ fallbacks.push({ name: agentFileName, ...reconciled.fallback });
221
+ }
222
+ }
223
+
224
+ // The delete half: an agent the package stops shipping used to leave its canonical
225
+ // copy, its IDE entry and both sidecars on the machine forever.
226
+ const { pruned } = pruneBundledEntries({
227
+ kind: 'agents',
228
+ keepNames: bundledAgentNames,
229
+ linkDirs: [targetRoot]
230
+ });
231
+
232
+ return { installed, skipped, pruned, fallbacks };
233
+ }