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,148 @@
1
+ // scripts/install-skills-fs.mjs
2
+ //
3
+ // The guarded filesystem and path vocabulary the installers share: every read that must
4
+ // not follow a symlink, every write that must be atomic, and the two containments
5
+ // (a path stays inside a root; a lock root does not move under a write).
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 {
12
+ closeSync,
13
+ constants,
14
+ existsSync,
15
+ fchmodSync,
16
+ fstatSync,
17
+ lstatSync,
18
+ openSync,
19
+ readFileSync,
20
+ renameSync,
21
+ unlinkSync,
22
+ writeFileSync
23
+ } from 'node:fs';
24
+ import { randomUUID } from 'node:crypto';
25
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
26
+ import { fileURLToPath } from 'node:url';
27
+
28
+ export function getPathStats(path) {
29
+ try {
30
+ return lstatSync(path);
31
+ } catch {
32
+ return null;
33
+ }
34
+ }
35
+
36
+ export function validateOpenFile(fd, path, errorMessage) {
37
+ const fdStats = fstatSync(fd);
38
+ const pathStats = lstatSync(path);
39
+ if (
40
+ !fdStats.isFile() ||
41
+ !pathStats.isFile() ||
42
+ fdStats.dev !== pathStats.dev ||
43
+ fdStats.ino !== pathStats.ino
44
+ ) {
45
+ throw new Error(errorMessage);
46
+ }
47
+ if (fdStats.nlink !== 1 || pathStats.nlink !== 1) {
48
+ throw new Error(`${errorMessage}: hardlinked file`);
49
+ }
50
+ }
51
+
52
+ export function getSafeReadOpenFlags() {
53
+ return typeof constants.O_NOFOLLOW === 'number'
54
+ ? constants.O_RDONLY | constants.O_NOFOLLOW
55
+ : constants.O_RDONLY;
56
+ }
57
+
58
+ export function readFileSafely(path, errorMessage) {
59
+ const fd = openSync(path, getSafeReadOpenFlags());
60
+ try {
61
+ validateOpenFile(fd, path, errorMessage);
62
+ return readFileSync(fd, 'utf8');
63
+ } finally {
64
+ closeSync(fd);
65
+ }
66
+ }
67
+
68
+ export function validateInstallRoot(targetRoot, label) {
69
+ const rootStats = lstatSync(targetRoot);
70
+ if (rootStats.isSymbolicLink()) {
71
+ throw new Error(`${label} install root must not be a symlink`);
72
+ }
73
+ if (!rootStats.isDirectory()) {
74
+ throw new Error(`${label} install root must be a directory`);
75
+ }
76
+ return rootStats;
77
+ }
78
+
79
+ export function createInstallRootValidator(targetRoot, label) {
80
+ const expectedStats = validateInstallRoot(targetRoot, label);
81
+ return () => {
82
+ const rootStats = validateInstallRoot(targetRoot, label);
83
+ if (rootStats.dev !== expectedStats.dev || rootStats.ino !== expectedStats.ino) {
84
+ throw new Error(`${label} install root changed during write`);
85
+ }
86
+ };
87
+ }
88
+
89
+ export function resolvePackageRoot(options = {}) {
90
+ return resolve(options.packageRoot ?? join(dirname(fileURLToPath(import.meta.url)), '..'));
91
+ }
92
+
93
+ export function isInsidePath(childPath, parentPath) {
94
+ const relativePath = relative(parentPath, childPath);
95
+ return relativePath === '' || (!relativePath.startsWith('..') && !isAbsolute(relativePath));
96
+ }
97
+
98
+ export function isPlainObject(value) {
99
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
100
+ }
101
+
102
+ export function getSafeTempOpenFlags() {
103
+ const baseFlags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
104
+ return typeof constants.O_NOFOLLOW === 'number' ? baseFlags | constants.O_NOFOLLOW : baseFlags;
105
+ }
106
+
107
+ export function writeFileAtomically(configPath, content, errorMessage, validateBeforeWrite) {
108
+ validateBeforeWrite();
109
+
110
+ const tempPath = `${configPath}.${process.pid}.${randomUUID()}.tmp`;
111
+ let fd = openSync(tempPath, getSafeTempOpenFlags(), 0o600);
112
+ let renamed = false;
113
+ let closeError = null;
114
+ try {
115
+ validateOpenFile(fd, tempPath, errorMessage);
116
+ fchmodSync(fd, 0o600);
117
+ writeFileSync(fd, content, 'utf8');
118
+ const writeFd = fd;
119
+ fd = null;
120
+ closeSync(writeFd);
121
+ validateBeforeWrite();
122
+ const readFd = openSync(tempPath, getSafeReadOpenFlags());
123
+ try {
124
+ validateOpenFile(readFd, tempPath, errorMessage);
125
+ } finally {
126
+ closeSync(readFd);
127
+ }
128
+ renameSync(tempPath, configPath);
129
+ renamed = true;
130
+ } finally {
131
+ if (fd !== null) {
132
+ try {
133
+ closeSync(fd);
134
+ } catch (error) {
135
+ closeError = error;
136
+ }
137
+ }
138
+ try {
139
+ if (!renamed && existsSync(tempPath)) {
140
+ unlinkSync(tempPath);
141
+ }
142
+ } finally {
143
+ if (closeError) {
144
+ throw closeError;
145
+ }
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,279 @@
1
+ // scripts/install-skills-ide.mjs
2
+ //
3
+ // Who is installed FOR, and where each one keeps its assets. The profile table bakes
4
+ // `homedir()` at module load, so a caller that redirects `$HOME`/$`USERPROFILE` must do it
5
+ // BEFORE this module is imported.
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 } from 'node:fs';
12
+ import { homedir } from 'node:os';
13
+ import { dirname, join, resolve } from 'node:path';
14
+
15
+ export function resolveProjectRoot(options) {
16
+ const projectRoot = options.projectRoot ?? process.env.PEAKS_PROJECT_ROOT ?? process.env.INIT_CWD;
17
+ return projectRoot ? resolve(projectRoot) : null;
18
+ }
19
+
20
+ /**
21
+ * Slice #011: Detect the installed IDE for the postinstall dispatch layer.
22
+ *
23
+ * Mirrors `src/services/ide/ide-detector.ts:detectInstalledIde` (cwd heuristic)
24
+ * but inlined here because `install-skills.mjs` is a plain `.mjs` script and
25
+ * cannot import the TS service at runtime. The dispatch:
26
+ * - Look for `.claude`, `.trae`, `.codex`, `.cursor`, `.qoder`,
27
+ * `.tongyi-lingma` in the project root in that insertion order
28
+ * (matches the registry's adapter order in `src/services/ide/ide-registry.ts`).
29
+ * - Returns the first match, or `null` if no adapter's directory is present.
30
+ *
31
+ * If the resolved IDE has no `skillInstall` declared (Trae in slice 1.3.2),
32
+ * the caller falls back to the legacy `~/.claude/{skills,output-styles}` path
33
+ * + emits a stderr warning. The dispatch is conservative: the env-var
34
+ * overrides `PEAKS_CLAUDE_SKILLS_DIR` / `PEAKS_CLAUDE_OUTPUT_STYLES_DIR`
35
+ * continue to work, and the legacy default is preserved.
36
+ *
37
+ * 2026-09-15 (D12 fix): `hermes` and `openclaw` have install profiles in
38
+ * `IDE_SKILL_INSTALL_PROFILES` but were absent from this table. A profile
39
+ * that no detector can ever return is reachable only through the
40
+ * every-platform fan-out — i.e. it is installed for users who do NOT have
41
+ * the tool and skipped for nobody. Both are listed here now, so detection
42
+ * and installation answer the same question with the same table.
43
+ *
44
+ * This table is ALSO the presence oracle for `isPlatformPresent` below: a
45
+ * directory here in the project root means the user has that tool.
46
+ */
47
+ export const IDE_DETECTION_DIRS = [
48
+ { id: 'claude-code', dir: '.claude' },
49
+ { id: 'trae', dir: '.trae' },
50
+ { id: 'trae-cn', dir: '.trae-cn' },
51
+ { id: 'codex', dir: '.codex' },
52
+ { id: 'cursor', dir: '.cursor' },
53
+ { id: 'qoder', dir: '.qoder' },
54
+ { id: 'tongyi-lingma', dir: '.tongyi-lingma' },
55
+ { id: 'zcode', dir: '.zcode' },
56
+ { id: 'hermes', dir: '.hermes' },
57
+ { id: 'openclaw', dir: '.openclaw' }
58
+ ];
59
+
60
+ /**
61
+ * Per-IDE skill install paths. Per peaks-loop tenet
62
+ * "minimal-user-operation" (2026-06-11), the user should
63
+ * never have to run a per-platform install command — the
64
+ * `npm i -g peaks-loop` postinstall iterates the platforms
65
+ * the user HAS and symlinks the peaks-* skill family into each
66
+ * (see `isPlatformPresent`; D9/2026-09-15 made "has" load-bearing).
67
+ *
68
+ * 1.x had only `claude-code` (the other 5 entries were
69
+ * `null`); real Trae users reported the Trae skill
70
+ * directory was never populated. 2.0 fixes this by giving
71
+ * every platform a canonical install path.
72
+ */
73
+ export const IDE_SKILL_INSTALL_PROFILES = {
74
+ 'claude-code': {
75
+ // `alwaysPresent` — see `isPlatformPresent`. Declared HERE, in the
76
+ // vendor's own row, rather than as an `ideId === 'claude-code'` branch in
77
+ // the consumer: the guard at
78
+ // `tests/unit/runtime/vendor-neutral-identity-guard.test.ts` pins identity
79
+ // DECISIONS to the vendor declarations, and a comparison in the consumer
80
+ // is exactly the re-injection shape it exists to catch. A future vendor
81
+ // opts into the same policy by setting this field.
82
+ alwaysPresent: true,
83
+ skillsDir: join(homedir(), '.claude', 'skills'),
84
+ outputStylesDir: join(homedir(), '.claude', 'output-styles'),
85
+ agentsDir: join(homedir(), '.claude', 'agents'),
86
+ envVar: 'PEAKS_CLAUDE_SKILLS_DIR',
87
+ outputStylesEnvVar: 'PEAKS_CLAUDE_OUTPUT_STYLES_DIR',
88
+ agentsEnvVar: 'PEAKS_CLAUDE_AGENTS_DIR'
89
+ },
90
+ trae: {
91
+ skillsDir: join(homedir(), '.trae', 'skills'),
92
+ outputStylesDir: join(homedir(), '.trae', 'output-styles'),
93
+ agentsDir: join(homedir(), '.trae', 'agents'),
94
+ envVar: 'PEAKS_TRAE_SKILLS_DIR',
95
+ outputStylesEnvVar: 'PEAKS_TRAE_OUTPUT_STYLES_DIR',
96
+ agentsEnvVar: 'PEAKS_TRAE_AGENTS_DIR'
97
+ },
98
+ 'trae-cn': {
99
+ skillsDir: join(homedir(), '.trae-cn', 'skills'),
100
+ outputStylesDir: join(homedir(), '.trae-cn', 'output-styles'),
101
+ agentsDir: join(homedir(), '.trae-cn', 'agents'),
102
+ envVar: 'PEAKS_TRAE_CN_SKILLS_DIR',
103
+ outputStylesEnvVar: 'PEAKS_TRAE_CN_OUTPUT_STYLES_DIR',
104
+ agentsEnvVar: 'PEAKS_TRAE_CN_AGENTS_DIR'
105
+ },
106
+ codex: {
107
+ skillsDir: join(homedir(), '.codex', 'skills'),
108
+ outputStylesDir: join(homedir(), '.codex', 'output-styles'),
109
+ agentsDir: join(homedir(), '.codex', 'agents'),
110
+ envVar: 'PEAKS_CODEX_SKILLS_DIR',
111
+ outputStylesEnvVar: 'PEAKS_CODEX_OUTPUT_STYLES_DIR',
112
+ agentsEnvVar: 'PEAKS_CODEX_AGENTS_DIR'
113
+ },
114
+ cursor: {
115
+ skillsDir: join(homedir(), '.cursor', 'skills'),
116
+ outputStylesDir: join(homedir(), '.cursor', 'output-styles'),
117
+ agentsDir: join(homedir(), '.cursor', 'agents'),
118
+ envVar: 'PEAKS_CURSOR_SKILLS_DIR',
119
+ outputStylesEnvVar: 'PEAKS_CURSOR_OUTPUT_STYLES_DIR',
120
+ agentsEnvVar: 'PEAKS_CURSOR_AGENTS_DIR'
121
+ },
122
+ qoder: {
123
+ skillsDir: join(homedir(), '.qoder', 'skills'),
124
+ outputStylesDir: join(homedir(), '.qoder', 'output-styles'),
125
+ envVar: 'PEAKS_QODER_SKILLS_DIR',
126
+ outputStylesEnvVar: 'PEAKS_QODER_OUTPUT_STYLES_DIR'
127
+ },
128
+ 'tongyi-lingma': {
129
+ skillsDir: join(homedir(), '.tongyi-lingma', 'skills'),
130
+ outputStylesDir: join(homedir(), '.tongyi-lingma', 'output-styles'),
131
+ envVar: 'PEAKS_TONGYI_SKILLS_DIR',
132
+ outputStylesEnvVar: 'PEAKS_TONGYI_OUTPUT_STYLES_DIR'
133
+ },
134
+ hermes: {
135
+ skillsDir: join(homedir(), '.hermes', 'skills'),
136
+ outputStylesDir: join(homedir(), '.hermes', 'output-styles'),
137
+ envVar: 'PEAKS_HERMES_SKILLS_DIR',
138
+ outputStylesEnvVar: 'PEAKS_HERMES_OUTPUT_STYLES_DIR'
139
+ },
140
+ openclaw: {
141
+ skillsDir: join(homedir(), '.openclaw', 'skills'),
142
+ outputStylesDir: join(homedir(), '.openclaw', 'output-styles'),
143
+ envVar: 'PEAKS_OPENCLAW_SKILLS_DIR',
144
+ outputStylesEnvVar: 'PEAKS_OPENCLAW_OUTPUT_STYLES_DIR'
145
+ },
146
+ zcode: {
147
+ skillsDir: join(homedir(), '.zcode', 'skills'),
148
+ outputStylesDir: join(homedir(), '.zcode', 'output-styles'),
149
+ agentsDir: join(homedir(), '.zcode', 'agents'),
150
+ envVar: 'PEAKS_ZCODE_SKILLS_DIR',
151
+ outputStylesEnvVar: 'PEAKS_ZCODE_OUTPUT_STYLES_DIR',
152
+ agentsEnvVar: 'PEAKS_ZCODE_AGENTS_DIR'
153
+ }
154
+ };
155
+
156
+ export function detectInstalledIdeId(projectRoot) {
157
+ if (!projectRoot) return null;
158
+ for (const { id, dir } of IDE_DETECTION_DIRS) {
159
+ if (existsSync(join(projectRoot, dir))) {
160
+ return id;
161
+ }
162
+ }
163
+ return null;
164
+ }
165
+
166
+ export function resolveIdeSkillInstallProfile(ideId) {
167
+ if (ideId === null) return null;
168
+ return IDE_SKILL_INSTALL_PROFILES[ideId] ?? null;
169
+ }
170
+
171
+ /**
172
+ * Is this platform actually installed FOR? (D9 fix, 2026-09-15.)
173
+ *
174
+ * Before this gate, the postinstall ran `mkdirSync(targetRoot, {recursive:
175
+ * true})` for ALL 10 profiles unconditionally, so `npm i -g peaks-loop` created
176
+ * `~/.hermes`, `~/.openclaw`, `~/.qoder`, `~/.tongyi-lingma` and `~/.zcode` in
177
+ * the home of a user who has never installed those tools. The peaks-loop tenet
178
+ * is "the user never has to run a per-platform install command" — it is NOT
179
+ * "peaks-loop guesses which tools you have". Creating a directory for a tool
180
+ * the user does not own is the tenet misread, and it is visible on disk.
181
+ *
182
+ * Present means EITHER:
183
+ * - the tool's marker directory exists in the project root (the same
184
+ * directory `detectInstalledIdeId` consults above), OR
185
+ * - the tool's own home directory (`~/.<tool>`, derived from its profile)
186
+ * already exists on this machine.
187
+ *
188
+ * `claude-code` is unconditionally present: it is peaks-loop's primary runtime
189
+ * and the documented legacy install target, so a machine with no `~/.claude`
190
+ * yet still gets the trees the user is installing peaks-loop for. That fact is
191
+ * declared as `alwaysPresent: true` IN THE VENDOR'S OWN PROFILE ROW — not as an
192
+ * `ideId === 'claude-code'` branch here. This file sits outside the adapter
193
+ * layer, so an identity comparison in it is the re-injection shape
194
+ * `tests/unit/runtime/vendor-neutral-identity-guard.test.ts` pins; reading the
195
+ * vendor's declaration keeps the policy in one place and vendor-neutral.
196
+ *
197
+ * A named target bypasses this gate entirely — `options.targetRoot`,
198
+ * `options.ideId`, and the `PEAKS_<TOOL>_SKILLS_DIR` env vars are callers who
199
+ * have already said which platform they mean; guessing a second time there
200
+ * would break the 1.x back-compat contract that slice 2026-06-12 restored.
201
+ */
202
+ export function isPlatformPresent(ideId, profile, projectRoot) {
203
+ if (profile.alwaysPresent === true) return true;
204
+ const detection = IDE_DETECTION_DIRS.find((entry) => entry.id === ideId);
205
+ if (
206
+ detection !== undefined &&
207
+ projectRoot !== null &&
208
+ existsSync(join(projectRoot, detection.dir))
209
+ ) {
210
+ return true;
211
+ }
212
+ return existsSync(dirname(profile.skillsDir));
213
+ }
214
+
215
+ export function warnUnverifiedIde(ideId, projectRoot) {
216
+ process.stderr.write(
217
+ `peaks install-skills: IDE '${ideId}' has no skillInstall profile declared; ` +
218
+ `falling back to the legacy Claude Code path (~/.claude/skills + ~/.claude/output-styles) ` +
219
+ `for project '${projectRoot}'. This is a slice #011 follow-up gap; ` +
220
+ `see .peaks/memory/ide-adapter-resource-profile-framework.md.\n`
221
+ );
222
+ }
223
+
224
+ export function warnNoIdeDetected(projectRoot) {
225
+ process.stderr.write(
226
+ `peaks install-skills: no IDE detected in '${projectRoot ?? '(project root unknown)'}'; ` +
227
+ `installing to the legacy Claude Code path (~/.claude/skills + ~/.claude/output-styles). ` +
228
+ `Set PEAKS_CLAUDE_SKILLS_DIR / PEAKS_CLAUDE_OUTPUT_STYLES_DIR to override.\n`
229
+ );
230
+ }
231
+
232
+ /**
233
+ * THE ONE DISPATCH PRECEDENCE — the three families that resolve a target root
234
+ * (skills, agents, output-styles) each stated it separately before rid-043. Highest
235
+ * first:
236
+ *
237
+ * 1. explicit `options.targetRoot` (test / hook override)
238
+ * 2. `options.ideId`'s `spec.profileField` (per-IDE dispatch)
239
+ * 3. `spec.envVar` (legacy 1.x back-compat)
240
+ * 4. the DETECTED ide's `spec.profileField` (auto-detect from projectRoot)
241
+ * 5. `join(homedir(), spec.fallback)` (no-IDE fallback)
242
+ *
243
+ * `spec.warn` is the ONE declared difference between the callers, and it is a field
244
+ * rather than a branch at each call site: the SKILLS installer is the only family
245
+ * that tells the user an IDE was seen without a profile, or that none was seen at
246
+ * all. Output styles and agents resolve identically in silence.
247
+ *
248
+ * The two warn arms are mutually exclusive (`detectedIdeId` cannot be both null and
249
+ * non-null), so the `else if` below is the same set of messages the two separate
250
+ * `if`s produced.
251
+ *
252
+ * @param {Record<string, unknown>} options
253
+ * @param {{ profileField: string, envVar: string, fallback: string, warn?: boolean }} spec
254
+ * @returns {string} the resolved, absolute target root
255
+ */
256
+ export function resolveBundleTargetRoot(options, spec) {
257
+ const projectRoot = resolveProjectRoot(options);
258
+ const detectedIdeId = detectInstalledIdeId(projectRoot);
259
+ const detectedProfile = resolveIdeSkillInstallProfile(detectedIdeId);
260
+
261
+ if (spec.warn === true && options.targetRoot === undefined && options.ideId === undefined) {
262
+ if (detectedProfile === null && detectedIdeId !== null) {
263
+ warnUnverifiedIde(detectedIdeId, projectRoot ?? '(project root unknown)');
264
+ } else if (detectedIdeId === null && projectRoot !== null) {
265
+ warnNoIdeDetected(projectRoot);
266
+ }
267
+ }
268
+
269
+ const profileDir = detectedProfile?.[spec.profileField] ?? null;
270
+ return resolve(
271
+ options.targetRoot ??
272
+ (options.ideId !== undefined
273
+ ? (resolveIdeSkillInstallProfile(options.ideId)?.[spec.profileField] ?? null)
274
+ : null) ??
275
+ process.env[spec.envVar] ??
276
+ profileDir ??
277
+ join(homedir(), spec.fallback)
278
+ );
279
+ }
@@ -0,0 +1,196 @@
1
+ // scripts/install-skills-output-style-default.mjs
2
+ //
3
+ // `settings.json` registration: after the style file lands, Claude Code still loads no
4
+ // Peaks style until `outputStyle` names it. Soft-fails on every error path, because the
5
+ // bundled file is already on disk by the time this runs.
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 } from 'node:fs';
12
+ import { homedir } from 'node:os';
13
+ import { join, resolve } from 'node:path';
14
+
15
+ import {
16
+ getPathStats,
17
+ isPlainObject,
18
+ readFileSafely,
19
+ writeFileAtomically
20
+ } from './install-skills-fs.mjs';
21
+
22
+ /**
23
+ * Slice 2026-08-02 — auto-register bundled output style.
24
+ *
25
+ * Real user feedback (2026-08-02): `npm i -g peaks-loop@latest` on a
26
+ * fresh 0-1 project copied `peaks-skill-swarm.md` into
27
+ * `~/.claude/output-styles/` but never wrote
28
+ * `outputStyle: 'peaks-skill-swarm'` into `~/.claude/settings.json`.
29
+ * Result: Claude Code loaded no Peaks output style in new sessions.
30
+ *
31
+ * The fix: when `peaks-skill-swarm.md` is present in the bundled output
32
+ * styles directory AND `~/.claude/settings.json` does NOT yet declare
33
+ * `outputStyle`, merge in `outputStyle: 'peaks-skill-swarm'` while
34
+ * preserving every other key. If the user already set `outputStyle`,
35
+ * leave it alone — the user is the source of truth.
36
+ *
37
+ * Resolution precedence:
38
+ * 1. options.settingsFile (explicit override / test hook)
39
+ * 2. PEAKS_CLAUDE_SETTINGS_FILE env var (CI override)
40
+ * 3. homedir-relative `<homedir>/.claude/settings.json` (default)
41
+ *
42
+ * Soft-fail contract: every error path (missing file, malformed JSON,
43
+ * missing bundled style file, permission denied) is logged to stderr
44
+ * and returns `{ skipped: true, ... }` instead of throwing. The
45
+ * postinstall must never fail on this step because the bundled file
46
+ * itself was already written successfully.
47
+ */
48
+ export function resolveSettingsFilePath(options = {}) {
49
+ if (typeof options.settingsFile === 'string' && options.settingsFile.length > 0) {
50
+ return resolve(options.settingsFile);
51
+ }
52
+ const envOverride = process.env.PEAKS_CLAUDE_SETTINGS_FILE;
53
+ if (typeof envOverride === 'string' && envOverride.length > 0) {
54
+ return resolve(envOverride);
55
+ }
56
+ return resolve(homedir(), '.claude', 'settings.json');
57
+ }
58
+
59
+ /** Is `targetPath` a plain single-linked regular file — not a link, not a directory? */
60
+ function isRegularFile(targetPath) {
61
+ const stats = getPathStats(targetPath);
62
+ return stats !== null && stats.isFile() && !stats.isSymbolicLink() && stats.nlink === 1;
63
+ }
64
+
65
+ /**
66
+ * The existing `settings.json` as an object, or the refusal that stops the write.
67
+ *
68
+ * Read FIRST so a malformed file surfaces as a parse error — more actionable to the
69
+ * user than the generic "bundled style not present" message — and because malformed
70
+ * JSON is a user-authored file this must never clobber.
71
+ *
72
+ * @param {string} settingsPath
73
+ * @returns {{ existing: Record<string, unknown> | null } | { refusal: { skipped: true, reason: string } }}
74
+ */
75
+ function readExistingSettings(settingsPath) {
76
+ if (!existsSync(settingsPath)) return { existing: null };
77
+ if (!isRegularFile(settingsPath)) {
78
+ process.stderr.write(
79
+ `peaks install-skills: refusing to overwrite non-regular settings.json at ${settingsPath}\n`
80
+ );
81
+ return { refusal: { skipped: true, reason: 'settings.json is not a regular file' } };
82
+ }
83
+ try {
84
+ const parsed = JSON.parse(
85
+ readFileSafely(settingsPath, 'Claude settings.json path changed during read')
86
+ );
87
+ if (!isPlainObject(parsed)) {
88
+ process.stderr.write(
89
+ `peaks install-skills: refusing to overwrite settings.json that is not a JSON object at ${settingsPath}\n`
90
+ );
91
+ return { refusal: { skipped: true, reason: 'settings.json is not a JSON object' } };
92
+ }
93
+ return { existing: parsed };
94
+ } catch (error) {
95
+ const message = error instanceof Error ? error.message : String(error);
96
+ process.stderr.write(
97
+ `peaks install-skills: failed to parse settings.json at ${settingsPath}: ${message}; leaving untouched\n`
98
+ );
99
+ return { refusal: { skipped: true, reason: 'settings.json parse error' } };
100
+ }
101
+ }
102
+
103
+ /**
104
+ * The atomic write, with the same soft-fail shape as the read: the refusal is RETURNED
105
+ * rather than thrown, and the message is written here so both callers cannot drift.
106
+ *
107
+ * @param {string} settingsPath
108
+ * @param {string} nextJson
109
+ * @returns {string | null} the error message on failure, `null` on success
110
+ */
111
+ function writeSettingsAtomically(settingsPath, nextJson) {
112
+ try {
113
+ writeFileAtomically(
114
+ settingsPath,
115
+ nextJson,
116
+ 'Claude settings.json path changed during write',
117
+ () => {
118
+ if (existsSync(settingsPath) && !isRegularFile(settingsPath)) {
119
+ throw new Error('Claude settings.json path is not a regular file');
120
+ }
121
+ }
122
+ );
123
+ return null;
124
+ } catch (error) {
125
+ const message = error instanceof Error ? error.message : String(error);
126
+ process.stderr.write(
127
+ `peaks install-skills: failed to write settings.json at ${settingsPath}: ${message}\n`
128
+ );
129
+ return message;
130
+ }
131
+ }
132
+
133
+ export function installBundledOutputStyleDefault(options = {}) {
134
+ if (
135
+ process.env.PEAKS_SKIP_SKILL_INSTALL === '1' ||
136
+ process.env.PEAKS_SKIP_OUTPUT_STYLE_DEFAULT === '1'
137
+ ) {
138
+ return { skipped: true, reason: 'PEAKS_SKIP_OUTPUT_STYLE_DEFAULT=1' };
139
+ }
140
+
141
+ const bundledStylesDir = resolve(
142
+ options.targetRoot ??
143
+ process.env.PEAKS_CLAUDE_OUTPUT_STYLES_DIR ??
144
+ join(homedir(), '.claude', 'output-styles')
145
+ );
146
+ const settingsPath = resolveSettingsFilePath(options);
147
+ const bundledStyleName = 'peaks-skill-swarm.md';
148
+ const bundledStylePath = join(bundledStylesDir, bundledStyleName);
149
+
150
+ const read = readExistingSettings(settingsPath);
151
+ if (read.refusal !== undefined) return read.refusal;
152
+ const existing = read.existing;
153
+
154
+ // Pre-condition: the bundled style file must be present in the
155
+ // dispatched target. If it's not, we MUST NOT inject
156
+ // `outputStyle: 'peaks-skill-swarm'` — Claude Code would then fail
157
+ // to load the style and fall back to default anyway, leaving the
158
+ // user with broken state. Skipping is the safe default.
159
+ if (!existsSync(bundledStylePath)) {
160
+ return { skipped: true, reason: `bundled output style not present at ${bundledStylePath}` };
161
+ }
162
+
163
+ // User-authored outputStyle wins — never overwrite.
164
+ if (
165
+ existing !== null &&
166
+ typeof existing.outputStyle === 'string' &&
167
+ existing.outputStyle.length > 0
168
+ ) {
169
+ return {
170
+ skipped: true,
171
+ reason: `user-defined outputStyle already set: ${existing.outputStyle}`
172
+ };
173
+ }
174
+
175
+ const next =
176
+ existing === null
177
+ ? { outputStyle: 'peaks-skill-swarm' }
178
+ : { ...existing, outputStyle: 'peaks-skill-swarm' };
179
+
180
+ const existingJson = existing === null ? null : `${JSON.stringify(existing, null, 2)}\n`;
181
+ const nextJson = `${JSON.stringify(next, null, 2)}\n`;
182
+ if (existingJson === nextJson) {
183
+ return { skipped: true, reason: 'no change' };
184
+ }
185
+
186
+ const writeError = writeSettingsAtomically(settingsPath, nextJson);
187
+ if (writeError !== null) return { skipped: true, reason: 'write error', error: writeError };
188
+
189
+ return {
190
+ installed: true,
191
+ created: existing === null,
192
+ updated: existing !== null,
193
+ settingsPath,
194
+ outputStyle: 'peaks-skill-swarm'
195
+ };
196
+ }