peaks-loop 4.1.3 → 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 (402) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +56 -0
  3. package/README-en.md +1 -1
  4. package/README.md +1 -1
  5. package/dist/cli/commands/asset-command-shared.d.ts +12 -0
  6. package/dist/cli/commands/asset-command-shared.js +45 -0
  7. package/dist/cli/commands/asset-commands.d.ts +6 -1
  8. package/dist/cli/commands/asset-commands.js +11 -372
  9. package/dist/cli/commands/asset-crystallize-command.d.ts +3 -0
  10. package/dist/cli/commands/asset-crystallize-command.js +60 -0
  11. package/dist/cli/commands/asset-crystallize-payload.d.ts +47 -0
  12. package/dist/cli/commands/asset-crystallize-payload.js +85 -0
  13. package/dist/cli/commands/asset-crystallize-runner.d.ts +3 -0
  14. package/dist/cli/commands/asset-crystallize-runner.js +133 -0
  15. package/dist/cli/commands/asset-dispose-command.d.ts +3 -0
  16. package/dist/cli/commands/asset-dispose-command.js +99 -0
  17. package/dist/cli/commands/asset-status-command.d.ts +3 -0
  18. package/dist/cli/commands/asset-status-command.js +100 -0
  19. package/dist/cli/commands/baseline-audit-command.d.ts +3 -0
  20. package/dist/cli/commands/baseline-audit-command.js +64 -0
  21. package/dist/cli/commands/baseline-command-shared.d.ts +23 -0
  22. package/dist/cli/commands/baseline-command-shared.js +39 -0
  23. package/dist/cli/commands/baseline-commands.js +33 -313
  24. package/dist/cli/commands/baseline-freeze-commands.d.ts +4 -0
  25. package/dist/cli/commands/baseline-freeze-commands.js +81 -0
  26. package/dist/cli/commands/baseline-guard-command.d.ts +3 -0
  27. package/dist/cli/commands/baseline-guard-command.js +52 -0
  28. package/dist/cli/commands/baseline-read-commands.d.ts +5 -0
  29. package/dist/cli/commands/baseline-read-commands.js +72 -0
  30. package/dist/cli/commands/baseline-rollback-commands.d.ts +4 -0
  31. package/dist/cli/commands/baseline-rollback-commands.js +88 -0
  32. package/dist/cli/commands/classify-downgrade-command.d.ts +9 -0
  33. package/dist/cli/commands/classify-downgrade-command.js +21 -0
  34. package/dist/cli/commands/classify-run-command.d.ts +9 -0
  35. package/dist/cli/commands/classify-run-command.js +73 -0
  36. package/dist/cli/commands/classify-signals.d.ts +5 -0
  37. package/dist/cli/commands/classify-signals.js +104 -0
  38. package/dist/cli/commands/code-emit-handoff-command.js +40 -3
  39. package/dist/cli/commands/code-gate-step-08-command.js +25 -9
  40. package/dist/cli/commands/codegraph-command-options.d.ts +22 -0
  41. package/dist/cli/commands/codegraph-command-options.js +22 -0
  42. package/dist/cli/commands/codegraph-commands.d.ts +2 -2
  43. package/dist/cli/commands/codegraph-commands.js +14 -397
  44. package/dist/cli/commands/codegraph-config-restore-command.d.ts +3 -0
  45. package/dist/cli/commands/codegraph-config-restore-command.js +200 -0
  46. package/dist/cli/commands/codegraph-proxy-commands.d.ts +10 -0
  47. package/dist/cli/commands/codegraph-proxy-commands.js +159 -0
  48. package/dist/cli/commands/codegraph-repair-commands.d.ts +3 -0
  49. package/dist/cli/commands/codegraph-repair-commands.js +94 -0
  50. package/dist/cli/commands/codegraph-status-command.d.ts +1 -1
  51. package/dist/cli/commands/codegraph-status-command.js +27 -214
  52. package/dist/cli/commands/codegraph-status-integrity.d.ts +44 -0
  53. package/dist/cli/commands/codegraph-status-integrity.js +121 -0
  54. package/dist/cli/commands/codegraph-status-json.d.ts +5 -0
  55. package/dist/cli/commands/codegraph-status-json.js +127 -0
  56. package/dist/cli/commands/container-command-shared.d.ts +60 -0
  57. package/dist/cli/commands/container-command-shared.js +52 -0
  58. package/dist/cli/commands/container-commands.d.ts +1 -1
  59. package/dist/cli/commands/container-commands.js +4 -216
  60. package/dist/cli/commands/container-release-command.d.ts +3 -0
  61. package/dist/cli/commands/container-release-command.js +105 -0
  62. package/dist/cli/commands/container-spawn-command.d.ts +3 -0
  63. package/dist/cli/commands/container-spawn-command.js +148 -0
  64. package/dist/cli/commands/context-check-command.d.ts +3 -0
  65. package/dist/cli/commands/context-check-command.js +81 -0
  66. package/dist/cli/commands/context-commands.d.ts +2 -7
  67. package/dist/cli/commands/context-commands.js +6 -276
  68. package/dist/cli/commands/context-layer-command.d.ts +3 -0
  69. package/dist/cli/commands/context-layer-command.js +34 -0
  70. package/dist/cli/commands/context-layer-fetchers.d.ts +15 -0
  71. package/dist/cli/commands/context-layer-fetchers.js +162 -0
  72. package/dist/cli/commands/context-status-command.d.ts +17 -0
  73. package/dist/cli/commands/context-status-command.js +41 -0
  74. package/dist/cli/commands/contract-write-command.d.ts +3 -0
  75. package/dist/cli/commands/contract-write-command.js +144 -0
  76. package/dist/cli/commands/core/doctor-bindings.d.ts +17 -0
  77. package/dist/cli/commands/core/doctor-bindings.js +30 -0
  78. package/dist/cli/commands/core/doctor-command.d.ts +4 -18
  79. package/dist/cli/commands/core/doctor-command.js +2 -323
  80. package/dist/cli/commands/core/doctor-logs.d.ts +8 -0
  81. package/dist/cli/commands/core/doctor-logs.js +32 -0
  82. package/dist/cli/commands/core/doctor-probes.d.ts +3 -0
  83. package/dist/cli/commands/core/doctor-probes.js +55 -0
  84. package/dist/cli/commands/core/doctor-run-command.d.ts +12 -0
  85. package/dist/cli/commands/core/doctor-run-command.js +172 -0
  86. package/dist/cli/commands/core/doctor-summary.d.ts +7 -0
  87. package/dist/cli/commands/core/doctor-summary.js +39 -0
  88. package/dist/cli/commands/core/memory-command-shared.d.ts +25 -0
  89. package/dist/cli/commands/core/memory-command-shared.js +20 -0
  90. package/dist/cli/commands/core/memory-command.d.ts +1 -1
  91. package/dist/cli/commands/core/memory-command.js +6 -227
  92. package/dist/cli/commands/core/memory-delegated-verbs.d.ts +4 -0
  93. package/dist/cli/commands/core/memory-delegated-verbs.js +178 -0
  94. package/dist/cli/commands/core/memory-extract-command.d.ts +3 -0
  95. package/dist/cli/commands/core/memory-extract-command.js +90 -0
  96. package/dist/cli/commands/core/memory-sync-command.d.ts +3 -0
  97. package/dist/cli/commands/core/memory-sync-command.js +38 -0
  98. package/dist/cli/commands/core/session-command.d.ts +1 -1
  99. package/dist/cli/commands/core/session-command.js +12 -206
  100. package/dist/cli/commands/core/session-info-command.d.ts +3 -0
  101. package/dist/cli/commands/core/session-info-command.js +142 -0
  102. package/dist/cli/commands/core/session-verb-commands.d.ts +5 -0
  103. package/dist/cli/commands/core/session-verb-commands.js +58 -0
  104. package/dist/cli/commands/core/standards-command.d.ts +1 -24
  105. package/dist/cli/commands/core/standards-command.js +33 -201
  106. package/dist/cli/commands/core/standards-init-command.d.ts +3 -0
  107. package/dist/cli/commands/core/standards-init-command.js +87 -0
  108. package/dist/cli/commands/core/standards-lint.d.ts +24 -0
  109. package/dist/cli/commands/core/standards-lint.js +57 -0
  110. package/dist/cli/commands/core/standards-migrate-command.d.ts +3 -0
  111. package/dist/cli/commands/core/standards-migrate-command.js +57 -0
  112. package/dist/cli/commands/cron-scheduler-commands.d.ts +5 -1
  113. package/dist/cli/commands/cron-scheduler-commands.js +36 -206
  114. package/dist/cli/commands/cron-scheduler-run-once-command.d.ts +7 -0
  115. package/dist/cli/commands/cron-scheduler-run-once-command.js +35 -0
  116. package/dist/cli/commands/cron-scheduler-shared.d.ts +6 -0
  117. package/dist/cli/commands/cron-scheduler-shared.js +48 -0
  118. package/dist/cli/commands/cron-scheduler-start-command.d.ts +7 -0
  119. package/dist/cli/commands/cron-scheduler-start-command.js +65 -0
  120. package/dist/cli/commands/cron-scheduler-status-command.d.ts +7 -0
  121. package/dist/cli/commands/cron-scheduler-status-command.js +46 -0
  122. package/dist/cli/commands/cron-scheduler-stop-command.d.ts +7 -0
  123. package/dist/cli/commands/cron-scheduler-stop-command.js +61 -0
  124. package/dist/cli/commands/dispatch-dag-envelope.d.ts +41 -0
  125. package/dist/cli/commands/dispatch-dag-envelope.js +49 -0
  126. package/dist/cli/commands/dispatch-dag-failure.d.ts +18 -0
  127. package/dist/cli/commands/dispatch-dag-failure.js +16 -0
  128. package/dist/cli/commands/dispatch-dag-preflight.d.ts +51 -0
  129. package/dist/cli/commands/dispatch-dag-preflight.js +105 -0
  130. package/dist/cli/commands/dispatch-dag-runners.d.ts +48 -0
  131. package/dist/cli/commands/dispatch-dag-runners.js +73 -0
  132. package/dist/cli/commands/dispatch-from-dag.d.ts +27 -0
  133. package/dist/cli/commands/dispatch-from-dag.js +87 -257
  134. package/dist/cli/commands/final-review-command-envelopes.d.ts +44 -0
  135. package/dist/cli/commands/final-review-command-envelopes.js +100 -0
  136. package/dist/cli/commands/final-review-command-shared.d.ts +52 -0
  137. package/dist/cli/commands/final-review-command-shared.js +35 -0
  138. package/dist/cli/commands/final-review-commands.d.ts +7 -27
  139. package/dist/cli/commands/final-review-commands.js +13 -240
  140. package/dist/cli/commands/final-review-prepare-command.d.ts +3 -0
  141. package/dist/cli/commands/final-review-prepare-command.js +200 -0
  142. package/dist/cli/commands/governance-classify-contract-commands.d.ts +23 -9
  143. package/dist/cli/commands/governance-classify-contract-commands.js +26 -269
  144. package/dist/cli/commands/hooks-command-shared.d.ts +42 -0
  145. package/dist/cli/commands/hooks-command-shared.js +32 -0
  146. package/dist/cli/commands/hooks-commands.d.ts +20 -0
  147. package/dist/cli/commands/hooks-commands.js +75 -309
  148. package/dist/cli/commands/hooks-install-envelopes.d.ts +6 -0
  149. package/dist/cli/commands/hooks-install-envelopes.js +144 -0
  150. package/dist/cli/commands/hooks-status-command.d.ts +3 -0
  151. package/dist/cli/commands/hooks-status-command.js +93 -0
  152. package/dist/cli/commands/hooks-uninstall-command.d.ts +3 -0
  153. package/dist/cli/commands/hooks-uninstall-command.js +43 -0
  154. package/dist/cli/commands/loop-command-shared.d.ts +31 -0
  155. package/dist/cli/commands/loop-command-shared.js +15 -0
  156. package/dist/cli/commands/loop-commands.d.ts +12 -17
  157. package/dist/cli/commands/loop-commands.js +56 -238
  158. package/dist/cli/commands/loop-export-command.d.ts +3 -0
  159. package/dist/cli/commands/loop-export-command.js +73 -0
  160. package/dist/cli/commands/loop-goal-compose-command.d.ts +3 -0
  161. package/dist/cli/commands/loop-goal-compose-command.js +36 -0
  162. package/dist/cli/commands/loop-import-command.d.ts +3 -0
  163. package/dist/cli/commands/loop-import-command.js +86 -0
  164. package/dist/cli/commands/loop-placeholder-commands.d.ts +3 -0
  165. package/dist/cli/commands/loop-placeholder-commands.js +52 -0
  166. package/dist/cli/commands/memory-command-shared.d.ts +59 -0
  167. package/dist/cli/commands/memory-command-shared.js +39 -0
  168. package/dist/cli/commands/memory-commands.d.ts +6 -79
  169. package/dist/cli/commands/memory-commands.js +19 -309
  170. package/dist/cli/commands/memory-ingest-command.d.ts +3 -0
  171. package/dist/cli/commands/memory-ingest-command.js +50 -0
  172. package/dist/cli/commands/memory-list-command.d.ts +16 -0
  173. package/dist/cli/commands/memory-list-command.js +129 -0
  174. package/dist/cli/commands/memory-reindex-command.d.ts +9 -0
  175. package/dist/cli/commands/memory-reindex-command.js +78 -0
  176. package/dist/cli/commands/memory-rotate-command.d.ts +3 -0
  177. package/dist/cli/commands/memory-rotate-command.js +55 -0
  178. package/dist/cli/commands/memory-search-command.d.ts +7 -0
  179. package/dist/cli/commands/memory-search-command.js +46 -0
  180. package/dist/cli/commands/openspec-archive-command.d.ts +3 -0
  181. package/dist/cli/commands/openspec-archive-command.js +55 -0
  182. package/dist/cli/commands/openspec-command-shared.d.ts +62 -0
  183. package/dist/cli/commands/openspec-command-shared.js +135 -0
  184. package/dist/cli/commands/openspec-commands.d.ts +1 -1
  185. package/dist/cli/commands/openspec-commands.js +33 -306
  186. package/dist/cli/commands/openspec-from-doctor-command.d.ts +3 -0
  187. package/dist/cli/commands/openspec-from-doctor-command.js +66 -0
  188. package/dist/cli/commands/openspec-init-command.d.ts +3 -0
  189. package/dist/cli/commands/openspec-init-command.js +49 -0
  190. package/dist/cli/commands/openspec-list-command.d.ts +3 -0
  191. package/dist/cli/commands/openspec-list-command.js +27 -0
  192. package/dist/cli/commands/openspec-render-command.d.ts +3 -0
  193. package/dist/cli/commands/openspec-render-command.js +33 -0
  194. package/dist/cli/commands/openspec-show-command.d.ts +3 -0
  195. package/dist/cli/commands/openspec-show-command.js +33 -0
  196. package/dist/cli/commands/openspec-to-rd-command.d.ts +3 -0
  197. package/dist/cli/commands/openspec-to-rd-command.js +33 -0
  198. package/dist/cli/commands/openspec-validate-command.d.ts +3 -0
  199. package/dist/cli/commands/openspec-validate-command.js +45 -0
  200. package/dist/cli/commands/playwright-browser-command.d.ts +8 -0
  201. package/dist/cli/commands/playwright-browser-command.js +61 -0
  202. package/dist/cli/commands/playwright-commands.d.ts +10 -62
  203. package/dist/cli/commands/playwright-commands.js +77 -400
  204. package/dist/cli/commands/playwright-envelope.d.ts +8 -0
  205. package/dist/cli/commands/playwright-envelope.js +29 -0
  206. package/dist/cli/commands/playwright-ls-stop-commands.d.ts +4 -0
  207. package/dist/cli/commands/playwright-ls-stop-commands.js +74 -0
  208. package/dist/cli/commands/playwright-session-store.d.ts +65 -0
  209. package/dist/cli/commands/playwright-session-store.js +189 -0
  210. package/dist/cli/commands/project-commands.d.ts +19 -0
  211. package/dist/cli/commands/project-commands.js +98 -259
  212. package/dist/cli/commands/project-context-command.d.ts +3 -0
  213. package/dist/cli/commands/project-context-command.js +44 -0
  214. package/dist/cli/commands/project-dashboard-command.d.ts +3 -0
  215. package/dist/cli/commands/project-dashboard-command.js +74 -0
  216. package/dist/cli/commands/project-knowledge-command.d.ts +3 -0
  217. package/dist/cli/commands/project-knowledge-command.js +48 -0
  218. package/dist/cli/commands/project-memories-show-command.d.ts +3 -0
  219. package/dist/cli/commands/project-memories-show-command.js +87 -0
  220. package/dist/cli/commands/project-memory-index-command.d.ts +3 -0
  221. package/dist/cli/commands/project-memory-index-command.js +31 -0
  222. package/dist/cli/commands/qa-archive-screenshots-command.d.ts +3 -0
  223. package/dist/cli/commands/qa-archive-screenshots-command.js +53 -0
  224. package/dist/cli/commands/qa-commands.d.ts +14 -87
  225. package/dist/cli/commands/qa-commands.js +17 -315
  226. package/dist/cli/commands/qa-context-prestep.d.ts +1 -0
  227. package/dist/cli/commands/qa-context-prestep.js +34 -0
  228. package/dist/cli/commands/qa-run-command.d.ts +3 -0
  229. package/dist/cli/commands/qa-run-command.js +105 -0
  230. package/dist/cli/commands/qa-run-options.d.ts +23 -0
  231. package/dist/cli/commands/qa-run-options.js +31 -0
  232. package/dist/cli/commands/qa-run-slice.d.ts +41 -0
  233. package/dist/cli/commands/qa-run-slice.js +145 -0
  234. package/dist/cli/commands/release-canary-command.d.ts +28 -0
  235. package/dist/cli/commands/release-canary-command.js +129 -0
  236. package/dist/cli/commands/release-command-shared.d.ts +13 -0
  237. package/dist/cli/commands/release-command-shared.js +18 -0
  238. package/dist/cli/commands/release-commands.d.ts +10 -18
  239. package/dist/cli/commands/release-commands.js +25 -298
  240. package/dist/cli/commands/release-done-command.d.ts +3 -0
  241. package/dist/cli/commands/release-done-command.js +64 -0
  242. package/dist/cli/commands/release-hotfix-command.d.ts +3 -0
  243. package/dist/cli/commands/release-hotfix-command.js +50 -0
  244. package/dist/cli/commands/release-plan-command.d.ts +3 -0
  245. package/dist/cli/commands/release-plan-command.js +33 -0
  246. package/dist/cli/commands/release-precheck-command.d.ts +3 -0
  247. package/dist/cli/commands/release-precheck-command.js +28 -0
  248. package/dist/cli/commands/release-promote-command.d.ts +3 -0
  249. package/dist/cli/commands/release-promote-command.js +34 -0
  250. package/dist/cli/commands/release-rollback-command.d.ts +3 -0
  251. package/dist/cli/commands/release-rollback-command.js +33 -0
  252. package/dist/cli/commands/release-watch-command.d.ts +3 -0
  253. package/dist/cli/commands/release-watch-command.js +44 -0
  254. package/dist/cli/commands/sediment-argv-flags.d.ts +54 -0
  255. package/dist/cli/commands/sediment-argv-flags.js +116 -0
  256. package/dist/cli/commands/sediment-command-shared.d.ts +15 -0
  257. package/dist/cli/commands/sediment-command-shared.js +5 -0
  258. package/dist/cli/commands/sediment-commands.d.ts +35 -59
  259. package/dist/cli/commands/sediment-commands.js +36 -590
  260. package/dist/cli/commands/sediment-pool-commands.d.ts +9 -0
  261. package/dist/cli/commands/sediment-pool-commands.js +185 -0
  262. package/dist/cli/commands/sediment-query-commands.d.ts +4 -0
  263. package/dist/cli/commands/sediment-query-commands.js +94 -0
  264. package/dist/cli/commands/sediment-release-commands.d.ts +8 -0
  265. package/dist/cli/commands/sediment-release-commands.js +232 -0
  266. package/dist/cli/commands/sop-advance-command.d.ts +3 -0
  267. package/dist/cli/commands/sop-advance-command.js +160 -0
  268. package/dist/cli/commands/sop-check-command.d.ts +3 -0
  269. package/dist/cli/commands/sop-check-command.js +44 -0
  270. package/dist/cli/commands/sop-command-shared.d.ts +23 -0
  271. package/dist/cli/commands/sop-command-shared.js +18 -0
  272. package/dist/cli/commands/sop-commands.d.ts +15 -1
  273. package/dist/cli/commands/sop-commands.js +26 -240
  274. package/dist/cli/commands/sop-init-command.d.ts +3 -0
  275. package/dist/cli/commands/sop-init-command.js +51 -0
  276. package/dist/cli/commands/sop-lint-command.d.ts +3 -0
  277. package/dist/cli/commands/sop-lint-command.js +64 -0
  278. package/dist/cli/commands/sop-register-command.d.ts +3 -0
  279. package/dist/cli/commands/sop-register-command.js +48 -0
  280. package/dist/cli/commands/sop-registry-command.d.ts +3 -0
  281. package/dist/cli/commands/sop-registry-command.js +30 -0
  282. package/dist/cli/commands/statusline-command-shared.d.ts +73 -0
  283. package/dist/cli/commands/statusline-command-shared.js +90 -0
  284. package/dist/cli/commands/statusline-commands.d.ts +1 -19
  285. package/dist/cli/commands/statusline-commands.js +48 -287
  286. package/dist/cli/commands/statusline-compact-command.d.ts +4 -0
  287. package/dist/cli/commands/statusline-compact-command.js +54 -0
  288. package/dist/cli/commands/statusline-install-command.d.ts +3 -0
  289. package/dist/cli/commands/statusline-install-command.js +48 -0
  290. package/dist/cli/commands/statusline-render-command.d.ts +9 -0
  291. package/dist/cli/commands/statusline-render-command.js +55 -0
  292. package/dist/cli/commands/statusline-status-command.d.ts +3 -0
  293. package/dist/cli/commands/statusline-status-command.js +23 -0
  294. package/dist/cli/commands/statusline-uninstall-command.d.ts +3 -0
  295. package/dist/cli/commands/statusline-uninstall-command.js +23 -0
  296. package/dist/cli/commands/test-command-run-helpers.d.ts +27 -0
  297. package/dist/cli/commands/test-command-run-helpers.js +73 -0
  298. package/dist/cli/commands/test-command-runner-resolution.d.ts +57 -0
  299. package/dist/cli/commands/test-command-runner-resolution.js +183 -0
  300. package/dist/cli/commands/test-commands.d.ts +8 -56
  301. package/dist/cli/commands/test-commands.js +26 -249
  302. package/dist/cli/commands/vm-command-shared.d.ts +23 -0
  303. package/dist/cli/commands/vm-command-shared.js +23 -0
  304. package/dist/cli/commands/vm-commands.d.ts +1 -28
  305. package/dist/cli/commands/vm-commands.js +36 -270
  306. package/dist/cli/commands/vm-hypervisor-runtime.d.ts +15 -0
  307. package/dist/cli/commands/vm-hypervisor-runtime.js +64 -0
  308. package/dist/cli/commands/vm-release-command.d.ts +5 -0
  309. package/dist/cli/commands/vm-release-command.js +101 -0
  310. package/dist/cli/commands/vm-spawn-command.d.ts +5 -0
  311. package/dist/cli/commands/vm-spawn-command.js +177 -0
  312. package/dist/cli/commands/web-command-shared.d.ts +12 -0
  313. package/dist/cli/commands/web-command-shared.js +30 -0
  314. package/dist/cli/commands/web-commands.d.ts +7 -14
  315. package/dist/cli/commands/web-commands.js +6 -314
  316. package/dist/cli/commands/web-install-command.d.ts +10 -0
  317. package/dist/cli/commands/web-install-command.js +116 -0
  318. package/dist/cli/commands/web-lifecycle-commands.d.ts +9 -30
  319. package/dist/cli/commands/web-lifecycle-commands.js +14 -322
  320. package/dist/cli/commands/web-login-command.d.ts +14 -0
  321. package/dist/cli/commands/web-login-command.js +189 -0
  322. package/dist/cli/commands/web-op-payload.d.ts +22 -0
  323. package/dist/cli/commands/web-op-payload.js +89 -0
  324. package/dist/cli/commands/web-op-refusals.d.ts +37 -0
  325. package/dist/cli/commands/web-op-refusals.js +73 -0
  326. package/dist/cli/commands/web-op-runner.d.ts +14 -0
  327. package/dist/cli/commands/web-op-runner.js +166 -0
  328. package/dist/cli/commands/web-status-command.d.ts +4 -0
  329. package/dist/cli/commands/web-status-command.js +32 -0
  330. package/dist/cli/commands/web-stop-command.d.ts +10 -0
  331. package/dist/cli/commands/web-stop-command.js +59 -0
  332. package/dist/cli/commands/web-verb-specs.d.ts +18 -0
  333. package/dist/cli/commands/web-verb-specs.js +66 -0
  334. package/dist/cli/commands/workflow-command-shared.d.ts +102 -0
  335. package/dist/cli/commands/workflow-command-shared.js +74 -0
  336. package/dist/cli/commands/workflow-graph-commands.d.ts +3 -0
  337. package/dist/cli/commands/workflow-graph-commands.js +73 -0
  338. package/dist/cli/commands/workflow-init-command.d.ts +3 -0
  339. package/dist/cli/commands/workflow-init-command.js +68 -0
  340. package/dist/cli/commands/workflow-lifecycle-commands.d.ts +9 -59
  341. package/dist/cli/commands/workflow-lifecycle-commands.js +14 -348
  342. package/dist/cli/commands/workflow-node-commands.d.ts +3 -0
  343. package/dist/cli/commands/workflow-node-commands.js +154 -0
  344. package/dist/cli/commands/workflow-terminalize-command.d.ts +3 -0
  345. package/dist/cli/commands/workflow-terminalize-command.js +56 -0
  346. package/dist/services/code/auto-compact-artifacts.d.ts +54 -0
  347. package/dist/services/code/auto-compact-artifacts.js +135 -0
  348. package/dist/services/code/auto-compact-attempt.d.ts +46 -0
  349. package/dist/services/code/auto-compact-attempt.js +88 -0
  350. package/dist/services/code/auto-compact-decision.d.ts +74 -0
  351. package/dist/services/code/auto-compact-decision.js +149 -0
  352. package/dist/services/code/auto-compact-dispatch-gate.d.ts +36 -0
  353. package/dist/services/code/auto-compact-dispatch-gate.js +86 -0
  354. package/dist/services/code/auto-compact-envelopes.d.ts +33 -0
  355. package/dist/services/code/auto-compact-envelopes.js +134 -0
  356. package/dist/services/code/auto-compact-history.d.ts +46 -0
  357. package/dist/services/code/auto-compact-history.js +17 -0
  358. package/dist/services/code/auto-compact-orchestrator.d.ts +11 -240
  359. package/dist/services/code/auto-compact-orchestrator.js +165 -686
  360. package/dist/services/code/auto-compact-run-types.d.ts +123 -0
  361. package/dist/services/code/auto-compact-run-types.js +1 -0
  362. package/dist/services/code/emit-handoff.d.ts +35 -1
  363. package/dist/services/code/emit-handoff.js +128 -7
  364. package/dist/services/code/step-08-gate.d.ts +28 -19
  365. package/dist/services/code/step-08-gate.js +92 -35
  366. package/dist/services/config/config-coercion.d.ts +7 -0
  367. package/dist/services/config/config-coercion.js +156 -0
  368. package/dist/services/config/config-file-io.d.ts +11 -0
  369. package/dist/services/config/config-file-io.js +61 -0
  370. package/dist/services/config/config-get.d.ts +2 -0
  371. package/dist/services/config/config-get.js +36 -0
  372. package/dist/services/config/config-global-loader.d.ts +15 -0
  373. package/dist/services/config/config-global-loader.js +111 -0
  374. package/dist/services/config/config-nested-path.d.ts +3 -0
  375. package/dist/services/config/config-nested-path.js +53 -0
  376. package/dist/services/config/config-primitives.d.ts +16 -0
  377. package/dist/services/config/config-primitives.js +24 -0
  378. package/dist/services/config/config-service.d.ts +9 -33
  379. package/dist/services/config/config-service.js +16 -665
  380. package/dist/services/config/config-validation.d.ts +19 -0
  381. package/dist/services/config/config-validation.js +152 -0
  382. package/dist/services/config/config-workspace.d.ts +10 -0
  383. package/dist/services/config/config-workspace.js +158 -0
  384. package/dist/services/skills/hooks-settings-deny-list.d.ts +61 -0
  385. package/dist/services/skills/hooks-settings-deny-list.js +173 -0
  386. package/dist/services/skills/hooks-settings-envelopes.d.ts +20 -0
  387. package/dist/services/skills/hooks-settings-envelopes.js +79 -0
  388. package/dist/services/skills/hooks-settings-file-shape.d.ts +43 -0
  389. package/dist/services/skills/hooks-settings-file-shape.js +207 -0
  390. package/dist/services/skills/hooks-settings-paths.d.ts +34 -0
  391. package/dist/services/skills/hooks-settings-paths.js +75 -0
  392. package/dist/services/skills/hooks-settings-read-installed.d.ts +39 -0
  393. package/dist/services/skills/hooks-settings-read-installed.js +60 -0
  394. package/dist/services/skills/hooks-settings-service.d.ts +12 -212
  395. package/dist/services/skills/hooks-settings-service.js +71 -657
  396. package/dist/services/skills/hooks-settings-types.d.ts +139 -0
  397. package/dist/services/skills/hooks-settings-types.js +1 -0
  398. package/dist/services/workspace/claude-settings-template-merge.d.ts +89 -0
  399. package/dist/services/workspace/claude-settings-template-merge.js +243 -0
  400. package/dist/services/workspace/claude-settings-template.d.ts +29 -87
  401. package/dist/services/workspace/claude-settings-template.js +81 -236
  402. package/package.json +5 -5
@@ -1,211 +1,43 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join, resolve } from 'node:path';
3
- import { summarizeProjectStandardsInitResult, summarizeProjectStandardsUpdateResult } from '../../../services/standards/project-standards-service.js';
4
- import { executeProjectStandardsInitIdeAware, executeProjectStandardsUpdateIdeAware } from '../../../services/standards/ide-aware-standards-service.js';
5
- import { migrateStandards } from '../../../services/standards/migrate-service.js';
6
- import { migrateClaudeRules } from '../../../services/standards/migrate-claude-rules-service.js';
7
- import { lintLoopEngineeringGuidelines, EXPECTED_RED_LINE_IDS } from '../../../services/standards/loop-engineering-lint.js';
8
1
  import { fail, ok } from 'peaks-loop-shared/result';
9
2
  import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
10
- /** The only `--category` this subcommand implements today. */
11
- export const LOOP_ENGINEERING_CATEGORY = 'loop-engineering';
12
- /** Project-relative location of the file the `loop-engineering` lint reads. */
13
- export const LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH = '.peaks/standards/loop-engineering-guidelines.md';
14
- /**
15
- * Pure helper: read the loop-engineering guideline file under `projectRoot`
16
- * and lint it. Kept out of the Commander action so unit tests can drive it
17
- * without spawning a child process (same shape as
18
- * `runReadinessLint` in skill-loop-engineering-readiness-commands.ts).
19
- */
20
- export function runLoopEngineeringLint(projectRoot) {
21
- const root = resolve(projectRoot);
22
- const guidelinePath = join(root, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH);
23
- const data = {
24
- category: LOOP_ENGINEERING_CATEGORY,
25
- path: guidelinePath,
26
- redLineCount: 0,
27
- redLineIds: [],
28
- findings: []
29
- };
30
- if (!existsSync(guidelinePath)) {
31
- return {
32
- ok: false,
33
- code: 'LINT_FILE_NOT_FOUND',
34
- message: `no ${LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH} under ${root}`,
35
- data,
36
- nextActions: [
37
- `Pass --project pointing at a peaks-loop checkout (the lint reads its own guideline file).`
38
- ]
39
- };
3
+ import { registerStandardsInitCommands } from './standards-init-command.js';
4
+ import { LOOP_ENGINEERING_CATEGORY, runLoopEngineeringLint } from './standards-lint.js';
5
+ import { registerStandardsMigrateCommand } from './standards-migrate-command.js';
6
+ export { LOOP_ENGINEERING_CATEGORY, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH, runLoopEngineeringLint } from './standards-lint.js';
7
+ /** `standards lint` prints the pure lint result as a CLI envelope. */
8
+ function runStandardsLint(io, options) {
9
+ if (options.category !== LOOP_ENGINEERING_CATEGORY) {
10
+ printResult(io, fail('standards.lint', 'UNKNOWN_LINT_CATEGORY', `only --category ${LOOP_ENGINEERING_CATEGORY} is implemented`, { category: options.category }, [`Pass --category ${LOOP_ENGINEERING_CATEGORY}.`]), options.json);
11
+ process.exitCode = 1;
12
+ return;
40
13
  }
41
- const result = lintLoopEngineeringGuidelines(readFileSync(guidelinePath, 'utf-8'));
42
- const redLineIds = result.redLines.map((rl) => rl.id);
43
- const fullData = { ...data, redLineCount: redLineIds.length, redLineIds };
44
- if (result.ok) {
45
- return {
46
- ok: true,
47
- code: 'STANDARDS_LINT_OK',
48
- message: `${redLineIds.length} red line(s) present with all 4 sections (expected: ${EXPECTED_RED_LINE_IDS.join(', ')})`,
49
- data: fullData,
50
- nextActions: ['Any new red line must use the 4-section form or this lint will reject it.']
51
- };
52
- }
53
- return {
54
- ok: false,
55
- code: 'STANDARDS_LINT_FAILED',
56
- message: `guideline file failed the lint (${result.findings.length} finding(s))`,
57
- data: { ...fullData, findings: result.findings },
58
- nextActions: [
59
- 'Address every finding in data.findings, then re-run the lint.',
60
- 'Each red line must be a `## RL-N — <title>` heading with the 4 sections: Failure modes / Rewrite / Self-check / Out-of-scope.'
61
- ]
62
- };
63
- }
64
- export function registerStandardsCommand(program, io) {
65
- const standards = program
66
- .command('standards')
67
- .description('Manage project-local coding standards');
68
- addJsonOption(standards
69
- .command('init')
70
- .description('Initialize project-local coding standards for Peaks skill preflight')
71
- .requiredOption('--project <path>', 'target project root')
72
- .option('--language <language>', 'standards language pack')
73
- .option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
74
- .option('--dry-run', 'preview writes without changing files')
75
- .option('--apply', 'write missing standards into the target project')).action((options) => {
76
- if (options.dryRun === true && options.apply === true) {
77
- printResult(io, fail('standards.init', 'INVALID_STANDARDS_INIT_FLAGS', 'Use either --dry-run or --apply, not both', {}, ['Run without --apply to preview writes, or omit --dry-run when applying standards']), options.json);
78
- process.exitCode = 1;
79
- return;
80
- }
81
- try {
82
- const result = executeProjectStandardsInitIdeAware({
83
- projectRoot: options.project,
84
- ...(options.language !== undefined ? { language: options.language } : {}),
85
- ...(options.ide !== undefined
86
- ? {
87
- ideId: options.ide
88
- }
89
- : {}),
90
- apply: options.apply === true
91
- });
92
- printResult(io, ok('standards.init', summarizeProjectStandardsInitResult(result)), options.json);
93
- }
94
- catch (error) {
95
- printResult(io, fail('standards.init', 'STANDARDS_INIT_FAILED', getErrorMessage(error), {}, [
96
- 'Check the project path and existing .claude/rules directory before retrying'
97
- ]), options.json);
98
- process.exitCode = 1;
99
- }
100
- });
101
- addJsonOption(standards
102
- .command('update')
103
- .description('Append managed standards metadata to an existing CLAUDE.md without rewriting the body')
104
- .requiredOption('--project <path>', 'target project root')
105
- .option('--language <language>', 'standards language pack')
106
- .option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
107
- .option('--dry-run', 'preview writes without changing files')
108
- .option('--apply', 'append managed metadata to the target project')).action((options) => {
109
- if (options.dryRun === true && options.apply === true) {
110
- printResult(io, fail('standards.update', 'INVALID_STANDARDS_UPDATE_FLAGS', 'Use either --dry-run or --apply, not both', {}, [
111
- 'Run without --apply to preview writes, or omit --dry-run when applying standards updates'
112
- ]), options.json);
113
- process.exitCode = 1;
114
- return;
115
- }
116
- try {
117
- const result = executeProjectStandardsUpdateIdeAware({
118
- projectRoot: options.project,
119
- ...(options.language !== undefined ? { language: options.language } : {}),
120
- ...(options.ide !== undefined
121
- ? {
122
- ideId: options.ide
123
- }
124
- : {}),
125
- apply: options.apply === true
126
- });
127
- const summary = summarizeProjectStandardsUpdateResult(result);
128
- const response = summary.reviewSuggestions.length > 0
129
- ? fail('standards.update', 'STANDARDS_UPDATE_REVIEW_REQUIRED', 'Standards update requires manual review', summary, summary.reviewSuggestions)
130
- : ok('standards.update', summary);
131
- printResult(io, response, options.json);
132
- if (summary.reviewSuggestions.length > 0) {
133
- process.exitCode = 1;
134
- }
135
- }
136
- catch (error) {
137
- printResult(io, fail('standards.update', 'STANDARDS_UPDATE_FAILED', getErrorMessage(error), {}, [
138
- 'Check the project path, CLAUDE.md contents, and existing .claude/rules directory before retrying'
139
- ]), options.json);
140
- process.exitCode = 1;
141
- }
142
- });
143
- addJsonOption(standards
144
- .command('migrate')
145
- .description('Rewrite a consumer project CLAUDE.md to drop the legacy heartbeat block (slice 028). Dry-run by default; pass --apply to write. With --from-claude-rules, thins the 1.x .claude/rules/ tree to 2-line pointers and scaffolds .peaks/standards/ (slice 2026-06-12-standards-migrate-claude-rules).')
146
- .option('--project <path>', 'target project root')
147
- .option('--apply', 'rewrite the legacy block in place; default is dry-run')
148
- .option('--from-claude-rules', 'thin .claude/rules/ to pointers and scaffold .peaks/standards/')).action((options) => {
149
- const projectRoot = options.project ?? process.cwd();
150
- if (options.fromClaudeRules === true) {
151
- try {
152
- const result = migrateClaudeRules({ projectRoot, apply: options.apply === true });
153
- printResult(io, ok('standards.migrate', result.data, [], [...result.data.nextActions]), options.json);
154
- }
155
- catch (error) {
156
- printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
157
- backupPath: null,
158
- thinnedFiles: [],
159
- scaffoldedFiles: [],
160
- preservedFiles: [],
161
- wouldChange: false,
162
- applied: false,
163
- nextActions: []
164
- }, [getErrorMessage(error)]), options.json);
165
- process.exitCode = 1;
166
- }
167
- return;
168
- }
169
- try {
170
- const result = migrateStandards({ project: projectRoot, apply: options.apply === true });
171
- printResult(io, ok('standards.migrate', result.data, [], result.data.nextActions), options.json);
172
- }
173
- catch (error) {
174
- printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
175
- file: null,
176
- foundOldBlock: false,
177
- wouldChange: false,
178
- applied: false,
179
- before: null,
180
- after: null,
181
- nextActions: []
182
- }, [getErrorMessage(error)]), options.json);
14
+ try {
15
+ const envelope = runLoopEngineeringLint(options.project ?? process.cwd());
16
+ const response = envelope.ok
17
+ ? ok('standards.lint', envelope.data, [], envelope.nextActions)
18
+ : fail('standards.lint', envelope.code, envelope.message, envelope.data, envelope.nextActions);
19
+ printResult(io, response, options.json);
20
+ if (!envelope.ok) {
183
21
  process.exitCode = 1;
184
22
  }
185
- });
23
+ }
24
+ catch (error) {
25
+ printResult(io, fail('standards.lint', 'STANDARDS_LINT_ERROR', getErrorMessage(error), { category: options.category }, ['Verify the guideline file is readable.']), options.json);
26
+ process.exitCode = 1;
27
+ }
28
+ }
29
+ function registerStandardsLintCommand(standards, io) {
186
30
  addJsonOption(standards
187
31
  .command('lint')
188
32
  .description('Lint a guideline file for structural completeness (the loop-engineering red lines)')
189
33
  .requiredOption('--category <category>', `guideline category to lint (${LOOP_ENGINEERING_CATEGORY})`)
190
- .option('--project <path>', 'project root holding .peaks/standards/ (default: cwd)')).action((options) => {
191
- if (options.category !== LOOP_ENGINEERING_CATEGORY) {
192
- printResult(io, fail('standards.lint', 'UNKNOWN_LINT_CATEGORY', `only --category ${LOOP_ENGINEERING_CATEGORY} is implemented`, { category: options.category }, [`Pass --category ${LOOP_ENGINEERING_CATEGORY}.`]), options.json);
193
- process.exitCode = 1;
194
- return;
195
- }
196
- try {
197
- const envelope = runLoopEngineeringLint(options.project ?? process.cwd());
198
- const response = envelope.ok
199
- ? ok('standards.lint', envelope.data, [], envelope.nextActions)
200
- : fail('standards.lint', envelope.code, envelope.message, envelope.data, envelope.nextActions);
201
- printResult(io, response, options.json);
202
- if (!envelope.ok) {
203
- process.exitCode = 1;
204
- }
205
- }
206
- catch (error) {
207
- printResult(io, fail('standards.lint', 'STANDARDS_LINT_ERROR', getErrorMessage(error), { category: options.category }, ['Verify the guideline file is readable.']), options.json);
208
- process.exitCode = 1;
209
- }
210
- });
34
+ .option('--project <path>', 'project root holding .peaks/standards/ (default: cwd)')).action((options) => runStandardsLint(io, options));
35
+ }
36
+ export function registerStandardsCommand(program, io) {
37
+ const standards = program
38
+ .command('standards')
39
+ .description('Manage project-local coding standards');
40
+ registerStandardsInitCommands(standards, io);
41
+ registerStandardsMigrateCommand(standards, io);
42
+ registerStandardsLintCommand(standards, io);
211
43
  }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../../cli-helpers.js';
3
+ export declare function registerStandardsInitCommands(standards: Command, io: ProgramIO): void;
@@ -0,0 +1,87 @@
1
+ import { summarizeProjectStandardsInitResult, summarizeProjectStandardsUpdateResult } from '../../../services/standards/project-standards-service.js';
2
+ import { executeProjectStandardsInitIdeAware, executeProjectStandardsUpdateIdeAware } from '../../../services/standards/ide-aware-standards-service.js';
3
+ import { fail, ok } from 'peaks-loop-shared/result';
4
+ import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
5
+ /** The five flags `init` and `update` share, in registration order. */
6
+ function withWriteFlags(cmd, applyHelp) {
7
+ return cmd
8
+ .requiredOption('--project <path>', 'target project root')
9
+ .option('--language <language>', 'standards language pack')
10
+ .option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
11
+ .option('--dry-run', 'preview writes without changing files')
12
+ .option('--apply', applyHelp);
13
+ }
14
+ /** The ide-aware request both verbs build from the same flag set. */
15
+ function buildIdeAwareRequest(options) {
16
+ return {
17
+ projectRoot: options.project,
18
+ ...(options.language !== undefined ? { language: options.language } : {}),
19
+ ...(options.ide !== undefined ? { ideId: options.ide } : {}),
20
+ apply: options.apply === true
21
+ };
22
+ }
23
+ /** `--dry-run --apply` together is ambiguous; refuse before doing any work. */
24
+ function refuseConflictingFlags(io, options, refusal) {
25
+ if (!(options.dryRun === true && options.apply === true))
26
+ return false;
27
+ printResult(io, fail(refusal.command, refusal.code, 'Use either --dry-run or --apply, not both', {}, refusal.nextActions), options.json);
28
+ process.exitCode = 1;
29
+ return true;
30
+ }
31
+ function runStandardsInit(io, options) {
32
+ const refused = refuseConflictingFlags(io, options, {
33
+ command: 'standards.init',
34
+ code: 'INVALID_STANDARDS_INIT_FLAGS',
35
+ nextActions: [
36
+ 'Run without --apply to preview writes, or omit --dry-run when applying standards'
37
+ ]
38
+ });
39
+ if (refused)
40
+ return;
41
+ try {
42
+ const result = executeProjectStandardsInitIdeAware(buildIdeAwareRequest(options));
43
+ printResult(io, ok('standards.init', summarizeProjectStandardsInitResult(result)), options.json);
44
+ }
45
+ catch (error) {
46
+ printResult(io, fail('standards.init', 'STANDARDS_INIT_FAILED', getErrorMessage(error), {}, [
47
+ 'Check the project path and existing .claude/rules directory before retrying'
48
+ ]), options.json);
49
+ process.exitCode = 1;
50
+ }
51
+ }
52
+ function runStandardsUpdate(io, options) {
53
+ const refused = refuseConflictingFlags(io, options, {
54
+ command: 'standards.update',
55
+ code: 'INVALID_STANDARDS_UPDATE_FLAGS',
56
+ nextActions: [
57
+ 'Run without --apply to preview writes, or omit --dry-run when applying standards updates'
58
+ ]
59
+ });
60
+ if (refused)
61
+ return;
62
+ try {
63
+ const result = executeProjectStandardsUpdateIdeAware(buildIdeAwareRequest(options));
64
+ const summary = summarizeProjectStandardsUpdateResult(result);
65
+ const response = summary.reviewSuggestions.length > 0
66
+ ? fail('standards.update', 'STANDARDS_UPDATE_REVIEW_REQUIRED', 'Standards update requires manual review', summary, summary.reviewSuggestions)
67
+ : ok('standards.update', summary);
68
+ printResult(io, response, options.json);
69
+ if (summary.reviewSuggestions.length > 0) {
70
+ process.exitCode = 1;
71
+ }
72
+ }
73
+ catch (error) {
74
+ printResult(io, fail('standards.update', 'STANDARDS_UPDATE_FAILED', getErrorMessage(error), {}, [
75
+ 'Check the project path, CLAUDE.md contents, and existing .claude/rules directory before retrying'
76
+ ]), options.json);
77
+ process.exitCode = 1;
78
+ }
79
+ }
80
+ export function registerStandardsInitCommands(standards, io) {
81
+ addJsonOption(withWriteFlags(standards
82
+ .command('init')
83
+ .description('Initialize project-local coding standards for Peaks skill preflight'), 'write missing standards into the target project')).action((options) => runStandardsInit(io, options));
84
+ addJsonOption(withWriteFlags(standards
85
+ .command('update')
86
+ .description('Append managed standards metadata to an existing CLAUDE.md without rewriting the body'), 'append managed metadata to the target project')).action((options) => runStandardsUpdate(io, options));
87
+ }
@@ -0,0 +1,24 @@
1
+ /** The only `--category` this subcommand implements today. */
2
+ export declare const LOOP_ENGINEERING_CATEGORY = "loop-engineering";
3
+ /** Project-relative location of the file the `loop-engineering` lint reads. */
4
+ export declare const LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH = ".peaks/standards/loop-engineering-guidelines.md";
5
+ export interface StandardsLintEnvelope {
6
+ ok: boolean;
7
+ code: string;
8
+ message: string;
9
+ data: {
10
+ category: string;
11
+ path: string;
12
+ redLineCount: number;
13
+ redLineIds: string[];
14
+ findings: string[];
15
+ };
16
+ nextActions: string[];
17
+ }
18
+ /**
19
+ * Pure helper: read the loop-engineering guideline file under `projectRoot`
20
+ * and lint it. Kept out of the Commander action so unit tests can drive it
21
+ * without spawning a child process (same shape as
22
+ * `runReadinessLint` in skill-loop-engineering-readiness-commands.ts).
23
+ */
24
+ export declare function runLoopEngineeringLint(projectRoot: string): StandardsLintEnvelope;
@@ -0,0 +1,57 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { lintLoopEngineeringGuidelines, EXPECTED_RED_LINE_IDS } from '../../../services/standards/loop-engineering-lint.js';
4
+ /** The only `--category` this subcommand implements today. */
5
+ export const LOOP_ENGINEERING_CATEGORY = 'loop-engineering';
6
+ /** Project-relative location of the file the `loop-engineering` lint reads. */
7
+ export const LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH = '.peaks/standards/loop-engineering-guidelines.md';
8
+ /**
9
+ * Pure helper: read the loop-engineering guideline file under `projectRoot`
10
+ * and lint it. Kept out of the Commander action so unit tests can drive it
11
+ * without spawning a child process (same shape as
12
+ * `runReadinessLint` in skill-loop-engineering-readiness-commands.ts).
13
+ */
14
+ export function runLoopEngineeringLint(projectRoot) {
15
+ const root = resolve(projectRoot);
16
+ const guidelinePath = join(root, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH);
17
+ const data = {
18
+ category: LOOP_ENGINEERING_CATEGORY,
19
+ path: guidelinePath,
20
+ redLineCount: 0,
21
+ redLineIds: [],
22
+ findings: []
23
+ };
24
+ if (!existsSync(guidelinePath)) {
25
+ return {
26
+ ok: false,
27
+ code: 'LINT_FILE_NOT_FOUND',
28
+ message: `no ${LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH} under ${root}`,
29
+ data,
30
+ nextActions: [
31
+ `Pass --project pointing at a peaks-loop checkout (the lint reads its own guideline file).`
32
+ ]
33
+ };
34
+ }
35
+ const result = lintLoopEngineeringGuidelines(readFileSync(guidelinePath, 'utf-8'));
36
+ const redLineIds = result.redLines.map((rl) => rl.id);
37
+ const fullData = { ...data, redLineCount: redLineIds.length, redLineIds };
38
+ if (result.ok) {
39
+ return {
40
+ ok: true,
41
+ code: 'STANDARDS_LINT_OK',
42
+ message: `${redLineIds.length} red line(s) present with all 4 sections (expected: ${EXPECTED_RED_LINE_IDS.join(', ')})`,
43
+ data: fullData,
44
+ nextActions: ['Any new red line must use the 4-section form or this lint will reject it.']
45
+ };
46
+ }
47
+ return {
48
+ ok: false,
49
+ code: 'STANDARDS_LINT_FAILED',
50
+ message: `guideline file failed the lint (${result.findings.length} finding(s))`,
51
+ data: { ...fullData, findings: result.findings },
52
+ nextActions: [
53
+ 'Address every finding in data.findings, then re-run the lint.',
54
+ 'Each red line must be a `## RL-N — <title>` heading with the 4 sections: Failure modes / Rewrite / Self-check / Out-of-scope.'
55
+ ]
56
+ };
57
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../../cli-helpers.js';
3
+ export declare function registerStandardsMigrateCommand(standards: Command, io: ProgramIO): void;
@@ -0,0 +1,57 @@
1
+ import { migrateStandards } from '../../../services/standards/migrate-service.js';
2
+ import { migrateClaudeRules } from '../../../services/standards/migrate-claude-rules-service.js';
3
+ import { fail, ok } from 'peaks-loop-shared/result';
4
+ import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
5
+ /** `--from-claude-rules`: thin `.claude/rules/` to pointers, scaffold `.peaks/standards/`. */
6
+ function runMigrateClaudeRules(io, options, projectRoot) {
7
+ try {
8
+ const result = migrateClaudeRules({ projectRoot, apply: options.apply === true });
9
+ printResult(io, ok('standards.migrate', result.data, [], [...result.data.nextActions]), options.json);
10
+ }
11
+ catch (error) {
12
+ printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
13
+ backupPath: null,
14
+ thinnedFiles: [],
15
+ scaffoldedFiles: [],
16
+ preservedFiles: [],
17
+ wouldChange: false,
18
+ applied: false,
19
+ nextActions: []
20
+ }, [getErrorMessage(error)]), options.json);
21
+ process.exitCode = 1;
22
+ }
23
+ }
24
+ /** Default branch: rewrite the legacy heartbeat block in CLAUDE.md. */
25
+ function runMigrateLegacy(io, options, projectRoot) {
26
+ try {
27
+ const result = migrateStandards({ project: projectRoot, apply: options.apply === true });
28
+ printResult(io, ok('standards.migrate', result.data, [], result.data.nextActions), options.json);
29
+ }
30
+ catch (error) {
31
+ printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
32
+ file: null,
33
+ foundOldBlock: false,
34
+ wouldChange: false,
35
+ applied: false,
36
+ before: null,
37
+ after: null,
38
+ nextActions: []
39
+ }, [getErrorMessage(error)]), options.json);
40
+ process.exitCode = 1;
41
+ }
42
+ }
43
+ export function registerStandardsMigrateCommand(standards, io) {
44
+ addJsonOption(standards
45
+ .command('migrate')
46
+ .description('Rewrite a consumer project CLAUDE.md to drop the legacy heartbeat block (slice 028). Dry-run by default; pass --apply to write. With --from-claude-rules, thins the 1.x .claude/rules/ tree to 2-line pointers and scaffolds .peaks/standards/ (slice 2026-06-12-standards-migrate-claude-rules).')
47
+ .option('--project <path>', 'target project root')
48
+ .option('--apply', 'rewrite the legacy block in place; default is dry-run')
49
+ .option('--from-claude-rules', 'thin .claude/rules/ to pointers and scaffold .peaks/standards/')).action((options) => {
50
+ const projectRoot = options.project ?? process.cwd();
51
+ if (options.fromClaudeRules === true) {
52
+ runMigrateClaudeRules(io, options, projectRoot);
53
+ return;
54
+ }
55
+ runMigrateLegacy(io, options, projectRoot);
56
+ });
57
+ }
@@ -1,5 +1,4 @@
1
1
  /**
2
- *
3
2
  * Companion CLI to Part 14 (peaks cron init/list/run). The
4
3
  * scheduler is a long-running background daemon that wakes up
5
4
  * once per minute, reads `.peaks/cron/schedule.json`, and runs
@@ -25,6 +24,11 @@
25
24
  * the scheduler to write its own pid. Or just run from
26
25
  * `nohup peaks-cron-scheduler start &` if you don't need
27
26
  * restart-on-crash.
27
+ *
28
+ * This file owns `registerCronSchedulerCommand`, `runSchedulerLoop` and the
29
+ * standalone entry shim the `bin/peaks-cron-scheduler.js` script loads; the
30
+ * four verb bodies live beside it, over the pid-file vocabulary in
31
+ * `cron-scheduler-shared.ts`.
28
32
  */
29
33
  import type { Command } from 'commander';
30
34
  import { type ProgramIO } from '../cli-helpers.js';