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
@@ -0,0 +1,59 @@
1
+ // src/cli/commands/web-stop-command.ts
2
+ //
3
+ // `peaks web stop` — stop this session's daemon and clear its records. Split
4
+ // out of `web-lifecycle-commands.ts`; the verb name, its options, the
5
+ // `stopped`-means-gone contract and the warning lines are unchanged.
6
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
7
+ import { stopDaemon } from '../../services/web/daemon-supervisor.js';
8
+ import { addJsonOption, printResult } from '../cli-helpers.js';
9
+ import { noSession, resolveSession } from './web-command-shared.js';
10
+ /** Everything `stop` did NOT clean, said out loud rather than left implicit. */
11
+ function stopWarnings(result) {
12
+ const warnings = [];
13
+ const stuck = result.pids.length - result.stopped;
14
+ if (stuck > 0) {
15
+ warnings.push(`${String(stuck)} daemon process(es) did not exit after the stop request; they are recorded, ` +
16
+ 'so a later `peaks web stop` can try again');
17
+ }
18
+ if (result.orphanedPids.length > 0) {
19
+ warnings.push(`${String(result.orphanedPids.length)} daemon instance(s) are alive but could not be proven ` +
20
+ "to be this session's daemon (no authenticated identity); the processes were left running, " +
21
+ 'because a pid that cannot be proven is never signalled, and their records are kept so ' +
22
+ '`peaks web status` and a later `stop` still see them');
23
+ }
24
+ return warnings;
25
+ }
26
+ /**
27
+ * Stop the daemon and clear its records. `stopped` counts the daemons whose
28
+ * process is confirmed GONE by return — not merely the ones we signalled — so a
29
+ * caller that checks the process table right after this returns is not racing
30
+ * the teardown (AC6).
31
+ */
32
+ export async function runWebStop(io, asJson) {
33
+ const command = 'peaks.web.stop';
34
+ try {
35
+ const session = resolveSession();
36
+ if (session === null) {
37
+ printResult(io, noSession(command), asJson);
38
+ process.exitCode = 1;
39
+ return;
40
+ }
41
+ const result = await stopDaemon(session.projectRoot, session.sessionId);
42
+ printResult(io, ok(command, {
43
+ stopped: result.stopped,
44
+ pids: [...result.pids],
45
+ orphanedPids: [...result.orphanedPids]
46
+ }, stopWarnings(result)), asJson);
47
+ }
48
+ catch (error) {
49
+ printResult(io, fail(command, 'WEB_STOP_FAILED', `peaks web stop failed: ${getErrorMessage(error)}`, {}, []), asJson);
50
+ process.exitCode = 1;
51
+ }
52
+ }
53
+ export function registerWebStopCommand(web, io) {
54
+ addJsonOption(web
55
+ .command('stop')
56
+ .description("Stop this session's web daemon and close its browser. Scoped to this project root and " +
57
+ 'session; another worktree is untouched, and a process that cannot be proven to be this ' +
58
+ "session's daemon is left running rather than signalled.")).action((options) => runWebStop(io, options.json === true));
59
+ }
@@ -0,0 +1,18 @@
1
+ import type { WebOp } from '../../services/web/web-protocol.js';
2
+ export interface WebVerbSpec {
3
+ readonly name: string;
4
+ readonly op: WebOp;
5
+ readonly description: string;
6
+ readonly argument: {
7
+ readonly name: string;
8
+ readonly description: string;
9
+ } | null;
10
+ readonly takesProfile?: true;
11
+ readonly toArgs: (positional: readonly (string | undefined)[], profile: string | undefined) => Record<string, unknown>;
12
+ }
13
+ /**
14
+ * The option text names the read-only half out loud: a caller who browses with a
15
+ * profile must not assume the profile was refreshed by it.
16
+ */
17
+ export declare const PROFILE_OPTION_DESCRIPTION: string;
18
+ export declare const WEB_VERBS: readonly WebVerbSpec[];
@@ -0,0 +1,66 @@
1
+ // src/cli/commands/web-verb-specs.ts
2
+ //
3
+ // The six S1 `peaks web open|text|snap|click|shot|metrics` verbs, as data.
4
+ // Split out of `web-commands.ts`: the table is what `registerWebCommands`
5
+ // iterates, and keeping it beside the registration loop is what made that
6
+ // function's own body read as the whole command surface.
7
+ //
8
+ // `--profile <name>` is declared on `open` and nowhere else (design §2 lists it
9
+ // only there). Any other verb taking a profile would invent behaviour nobody
10
+ // asked for and multiply the isolation questions for no requested benefit.
11
+ /**
12
+ * The option text names the read-only half out loud: a caller who browses with a
13
+ * profile must not assume the profile was refreshed by it.
14
+ */
15
+ export const PROFILE_OPTION_DESCRIPTION = 'navigate with a saved login profile (`peaks web login --profile <name>`): [a-z0-9._-], ' +
16
+ '1-64 chars, upper case folds to lower. The profile is READ-ONLY here — this run loads it ' +
17
+ 'and never writes it back, so browser activity is not saved into it.';
18
+ export const WEB_VERBS = [
19
+ {
20
+ name: 'open',
21
+ op: 'open',
22
+ description: 'Navigate the dispatch browser context to <url>. With --profile, the page loads that ' +
23
+ 'saved login.',
24
+ argument: { name: '<url>', description: 'absolute URL to load' },
25
+ takesProfile: true,
26
+ toArgs: (positional, profile) => ({
27
+ url: positional[0] ?? '',
28
+ ...(profile === undefined ? {} : { profile })
29
+ })
30
+ },
31
+ {
32
+ name: 'text',
33
+ op: 'text',
34
+ description: 'Return the visible text of the page (or of [selector]), byte-capped.',
35
+ argument: { name: '[selector]', description: 'CSS selector (default: body)' },
36
+ toArgs: (positional) => ({ selector: positional[0] })
37
+ },
38
+ {
39
+ name: 'snap',
40
+ op: 'snap',
41
+ description: 'Return a pruned ARIA snapshot of the page (or of [selector]), byte-capped.',
42
+ argument: { name: '[selector]', description: 'CSS selector (default: body)' },
43
+ toArgs: (positional) => ({ selector: positional[0] })
44
+ },
45
+ {
46
+ name: 'click',
47
+ op: 'click',
48
+ description: 'Click the element matching <selector> in the dispatch browser context.',
49
+ argument: { name: '<selector>', description: 'CSS selector to click' },
50
+ toArgs: (positional) => ({ selector: positional[0] ?? '' })
51
+ },
52
+ {
53
+ name: 'shot',
54
+ op: 'shot',
55
+ description: 'Screenshot the page (or [selector]) into the session web/ directory.',
56
+ argument: { name: '[selector]', description: 'CSS selector (default: full page)' },
57
+ toArgs: (positional) => ({ selector: positional[0] })
58
+ },
59
+ {
60
+ name: 'metrics',
61
+ op: 'metrics',
62
+ description: 'Return Core Web Vitals for the dispatch page, or why they are unavailable.',
63
+ argument: null,
64
+ toArgs: () => ({})
65
+ }
66
+ ];
@@ -0,0 +1,102 @@
1
+ export interface WorkflowInitOptions {
2
+ readonly skill?: string;
3
+ readonly parentWorkflow?: string;
4
+ readonly workflowId?: string;
5
+ readonly project?: string;
6
+ readonly sessionId?: string;
7
+ readonly json?: boolean;
8
+ }
9
+ export interface WorkflowGraphShowOptions {
10
+ readonly workflow?: string;
11
+ readonly project?: string;
12
+ readonly sessionId?: string;
13
+ readonly json?: boolean;
14
+ }
15
+ export interface WorkflowGraphListOptions {
16
+ readonly project?: string;
17
+ readonly sessionId?: string;
18
+ readonly json?: boolean;
19
+ }
20
+ export interface WorkflowNodePrepareOptions {
21
+ readonly workflow?: string;
22
+ readonly node?: string;
23
+ readonly kind?: string;
24
+ readonly label?: string;
25
+ readonly dependsOn?: string;
26
+ readonly project?: string;
27
+ readonly sessionId?: string;
28
+ readonly json?: boolean;
29
+ }
30
+ export interface WorkflowNodeAckOptions {
31
+ readonly workflow?: string;
32
+ readonly node?: string;
33
+ readonly project?: string;
34
+ readonly sessionId?: string;
35
+ readonly json?: boolean;
36
+ }
37
+ export interface WorkflowNodeMarkLostOptions {
38
+ readonly workflow?: string;
39
+ readonly node?: string;
40
+ readonly reason?: string;
41
+ readonly project?: string;
42
+ readonly sessionId?: string;
43
+ readonly json?: boolean;
44
+ }
45
+ export interface WorkflowTerminalizeOptions {
46
+ readonly workflow?: string;
47
+ readonly reason?: string;
48
+ readonly project?: string;
49
+ readonly sessionId?: string;
50
+ readonly requireConsumed?: boolean;
51
+ readonly json?: boolean;
52
+ }
53
+ /**
54
+ * Base 36, so a `Date.now()` suffix stays short enough to read in a transcript.
55
+ * Named rather than inlined because two verbs generate ids this way.
56
+ */
57
+ export declare const GENERATED_ID_RADIX = 36;
58
+ export declare function deriveCallerId(): string;
59
+ export declare function deriveProjectRoot(options: {
60
+ project?: string;
61
+ }): string;
62
+ /**
63
+ * The literal that means "no session could be resolved". Kept as a named
64
+ * constant because three call sites now have to ASK whether resolution
65
+ * failed rather than consume the value as if it were an id.
66
+ */
67
+ export declare const UNKNOWN_SESSION_ID = "unknown-sid";
68
+ /**
69
+ * Resolve the session id for every `workflow *` command.
70
+ *
71
+ * Tier order (matches the idiom every other command family in this CLI
72
+ * already uses — see `job-commands.ts:85`, `container-commands.ts:138`):
73
+ *
74
+ * 1. `--session-id <sid>` — explicit wins
75
+ * 2. `PEAKS_SESSION_ID` env var — scripted / sub-process callers
76
+ * 3. `getCurrentSessionId(projectRoot)` — this caller's OWN binding
77
+ * (`callers/<callerId>.json`) falling back to the project-global
78
+ * `.peaks/_runtime/session.json`, the same resolver `peaks session
79
+ * info --active` and `peaks session checkpoint` use
80
+ * 4. `unknown-sid` — nothing is bound
81
+ *
82
+ * Tier 3 was MISSING until 2026-09-15 (S6), and its absence is the whole
83
+ * defect: `workflow init` resolved on tiers 1–2 only, so with no flag and no
84
+ * env var it wrote the graph into `.peaks/_runtime/unknown-sid/graphs/`
85
+ * regardless of what the binding file said. `peaks workflow node prepare`
86
+ * then ran under the CORRECT session dir and reported `PEAKS_GRAPH_NOT_FOUND`
87
+ * — the graph it was asking for had been written one bucket over. The bucket
88
+ * accumulated artifacts from at least 4 distinct caller ids between 2026-09-01
89
+ * and 2026-09-15, i.e. it had never worked for anyone.
90
+ *
91
+ * The same prior-art sweep (`.peaks/memory/archived/2026-06-26-unknown-sid-root-cause.md`)
92
+ * converted six inline `?? 'unknown-sid'` sites to this 4-tier chain;
93
+ * `workflow-lifecycle-commands.ts` was missed. This is that site.
94
+ *
95
+ * The project root passed to tier 3 goes through the same `findProjectRoot`
96
+ * walk `session info` uses, so a command run from a SUBDIRECTORY of the
97
+ * project resolves the project's binding instead of `cwd`'s (which has none).
98
+ */
99
+ export declare function deriveSessionId(options: {
100
+ sessionId?: string;
101
+ project?: string;
102
+ }): string;
@@ -0,0 +1,74 @@
1
+ // src/cli/commands/workflow-command-shared.ts
2
+ //
3
+ // What every `peaks workflow *` lifecycle verb shares: the option vocabulary,
4
+ // the caller/project/session derivation and the generated-id radix. Split out of
5
+ // `workflow-lifecycle-commands.ts`; the derivation tiers, the literal
6
+ // `unknown-sid` and every option name are unchanged.
7
+ import { getErrorMessage, fail } from 'peaks-loop-shared/result';
8
+ import { resolveCallerId } from '../../services/session/resolve-caller-id.js';
9
+ import { findProjectRoot } from '../../services/config/config-safety.js';
10
+ import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
11
+ /**
12
+ * Base 36, so a `Date.now()` suffix stays short enough to read in a transcript.
13
+ * Named rather than inlined because two verbs generate ids this way.
14
+ */
15
+ export const GENERATED_ID_RADIX = 36;
16
+ export function deriveCallerId() {
17
+ try {
18
+ return resolveCallerId({});
19
+ }
20
+ catch (err) {
21
+ // The thrown value is the `fail` envelope, not an `Error`: the callers'
22
+ // catch reads `.code` off it. Left as-is — changing the thrown type would
23
+ // change the envelope those callers render.
24
+ throw fail('workflow.init', 'PEAKS_CALLER_NOT_RESOLVED', getErrorMessage(err), { callerId: null }, ['Resolve the IDE session identity before running workflow commands.']);
25
+ }
26
+ }
27
+ export function deriveProjectRoot(options) {
28
+ return options.project ?? process.cwd();
29
+ }
30
+ /**
31
+ * The literal that means "no session could be resolved". Kept as a named
32
+ * constant because three call sites now have to ASK whether resolution
33
+ * failed rather than consume the value as if it were an id.
34
+ */
35
+ export const UNKNOWN_SESSION_ID = 'unknown-sid';
36
+ /**
37
+ * Resolve the session id for every `workflow *` command.
38
+ *
39
+ * Tier order (matches the idiom every other command family in this CLI
40
+ * already uses — see `job-commands.ts:85`, `container-commands.ts:138`):
41
+ *
42
+ * 1. `--session-id <sid>` — explicit wins
43
+ * 2. `PEAKS_SESSION_ID` env var — scripted / sub-process callers
44
+ * 3. `getCurrentSessionId(projectRoot)` — this caller's OWN binding
45
+ * (`callers/<callerId>.json`) falling back to the project-global
46
+ * `.peaks/_runtime/session.json`, the same resolver `peaks session
47
+ * info --active` and `peaks session checkpoint` use
48
+ * 4. `unknown-sid` — nothing is bound
49
+ *
50
+ * Tier 3 was MISSING until 2026-09-15 (S6), and its absence is the whole
51
+ * defect: `workflow init` resolved on tiers 1–2 only, so with no flag and no
52
+ * env var it wrote the graph into `.peaks/_runtime/unknown-sid/graphs/`
53
+ * regardless of what the binding file said. `peaks workflow node prepare`
54
+ * then ran under the CORRECT session dir and reported `PEAKS_GRAPH_NOT_FOUND`
55
+ * — the graph it was asking for had been written one bucket over. The bucket
56
+ * accumulated artifacts from at least 4 distinct caller ids between 2026-09-01
57
+ * and 2026-09-15, i.e. it had never worked for anyone.
58
+ *
59
+ * The same prior-art sweep (`.peaks/memory/archived/2026-06-26-unknown-sid-root-cause.md`)
60
+ * converted six inline `?? 'unknown-sid'` sites to this 4-tier chain;
61
+ * `workflow-lifecycle-commands.ts` was missed. This is that site.
62
+ *
63
+ * The project root passed to tier 3 goes through the same `findProjectRoot`
64
+ * walk `session info` uses, so a command run from a SUBDIRECTORY of the
65
+ * project resolves the project's binding instead of `cwd`'s (which has none).
66
+ */
67
+ export function deriveSessionId(options) {
68
+ if (typeof options.sessionId === 'string' && options.sessionId.length > 0)
69
+ return options.sessionId;
70
+ const fromEnv = process.env.PEAKS_SESSION_ID;
71
+ if (typeof fromEnv === 'string' && fromEnv.length > 0)
72
+ return fromEnv;
73
+ return (getCurrentSessionId(findProjectRoot(options.project ?? process.cwd()) ?? options.project ?? process.cwd()) ?? UNKNOWN_SESSION_ID);
74
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerWorkflowGraphCommands(workflow: Command, io: ProgramIO): void;
@@ -0,0 +1,73 @@
1
+ // src/cli/commands/workflow-graph-commands.ts
2
+ //
3
+ // `peaks workflow graph show` / `graph list` — the workflow graph read
4
+ // commands. Split out of `workflow-lifecycle-commands.ts`; both verb names,
5
+ // their options and both envelope shapes are unchanged.
6
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
7
+ import { printResult } from '../cli-helpers.js';
8
+ import { readGraph } from '../../services/workflow/workflow-graph-store.js';
9
+ import { WORKFLOW_ID_REGEX } from '../../services/workflow/workflow-graph-types.js';
10
+ import { deriveProjectRoot, deriveSessionId, UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
11
+ function runWorkflowGraphShow(io, options) {
12
+ const asJson = options.json === true;
13
+ try {
14
+ const sessionId = deriveSessionId(options);
15
+ const projectRoot = deriveProjectRoot(options);
16
+ const workflowId = options.workflow ?? '';
17
+ if (!workflowId || !WORKFLOW_ID_REGEX.test(workflowId)) {
18
+ throw new Error('workflowId is required');
19
+ }
20
+ const graph = readGraph({
21
+ projectRoot,
22
+ sessionId,
23
+ graphRef: `graphs/${workflowId}.json`,
24
+ workflowId
25
+ });
26
+ printResult(io, ok('workflow.graph.show', { envelopeVersion: '4.0.8', graph }), asJson);
27
+ }
28
+ catch (err) {
29
+ const code = err.code ?? 'PEAKS_GRAPH_NOT_FOUND';
30
+ printResult(io, fail('workflow.graph.show', code, getErrorMessage(err), { graph: null }, []), asJson);
31
+ process.exitCode = 1;
32
+ }
33
+ }
34
+ function runWorkflowGraphList(io, options) {
35
+ const asJson = options.json === true;
36
+ try {
37
+ const sessionId = deriveSessionId(options);
38
+ if (sessionId === UNKNOWN_SESSION_ID) {
39
+ throw new Error('PEAKS_SESSION_NOT_BOUND: no session id');
40
+ }
41
+ const result = { envelopeVersion: '4.0.8', sessionId, graphs: [] };
42
+ printResult(io, ok('workflow.graph.list', result), asJson);
43
+ }
44
+ catch (err) {
45
+ const code = err.code ?? 'PEAKS_SESSION_NOT_BOUND';
46
+ printResult(io, fail('workflow.graph.list', code, getErrorMessage(err), { graphs: [] }, []), asJson);
47
+ process.exitCode = 1;
48
+ }
49
+ }
50
+ export function registerWorkflowGraphCommands(workflow, io) {
51
+ // Note: `.command('graph show')` and `.command('graph list')` each
52
+ // implicitly create a NEW `graph` parent under `workflow` in
53
+ // Commander v12 (no auto-reuse), so calling them in sequence throws
54
+ // "cannot add command 'graph' as already have command 'graph'" at
55
+ // startup. Reuse the first created `graph` parent for the second
56
+ // registration.
57
+ const graphCmd = workflow.command('graph').description('workflow graph read commands');
58
+ graphCmd
59
+ .command('show')
60
+ .description('Read a workflow graph.')
61
+ .option('--workflow <id>', 'workflow id')
62
+ .option('--session-id <sid>', 'session id')
63
+ .option('--project <path>', 'project root')
64
+ .option('--json', 'json output')
65
+ .action((options) => runWorkflowGraphShow(io, options));
66
+ graphCmd
67
+ .command('list')
68
+ .description('List workflow graphs (metadata only).')
69
+ .option('--session-id <sid>', 'session id')
70
+ .option('--project <path>', 'project root')
71
+ .option('--json', 'json output')
72
+ .action((options) => runWorkflowGraphList(io, options));
73
+ }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type ProgramIO } from '../cli-helpers.js';
3
+ export declare function registerWorkflowInitCommand(workflow: Command, io: ProgramIO): void;
@@ -0,0 +1,68 @@
1
+ // src/cli/commands/workflow-init-command.ts
2
+ //
3
+ // `peaks workflow init` — initialize a workflow graph + canonical lease + caller
4
+ // index. Split out of `workflow-lifecycle-commands.ts`; the verb name, its
5
+ // options, the session-binding refusal and the envelope shape are unchanged.
6
+ import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
7
+ import { addJsonOption, printResult } from '../cli-helpers.js';
8
+ import { initWorkflow } from '../../services/workflow/workflow-presence-lifecycle.js';
9
+ import { WORKFLOW_ID_REGEX } from '../../services/workflow/workflow-graph-types.js';
10
+ import { deriveCallerId, deriveProjectRoot, deriveSessionId, GENERATED_ID_RADIX, UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
11
+ /**
12
+ * Tier 3 resolving to `unknown-sid` means NO session is bound at all. A
13
+ * `workflow` subcommand that WRITES must fail loudly on that rather than
14
+ * create a bucket named after a failure — `graph list` already does (see its
15
+ * `PEAKS_SESSION_NOT_BOUND` guard); `init` did not.
16
+ */
17
+ function buildSessionNotBoundEnvelope(sessionId, projectRoot) {
18
+ return fail('workflow.init', 'PEAKS_SESSION_NOT_BOUND', `No peaks session is bound for '${projectRoot}' (derived session id '${sessionId}'): --session-id, PEAKS_SESSION_ID and the project binding are all absent.`, { workflowId: null }, [
19
+ 'Run `peaks workspace init --project <p>` to bind a session, then re-run.',
20
+ 'Or pass `--session-id <sid>` explicitly.'
21
+ ]);
22
+ }
23
+ async function runWorkflowInit(io, options) {
24
+ const asJson = options.json === true;
25
+ try {
26
+ const callerId = deriveCallerId();
27
+ const projectRoot = deriveProjectRoot(options);
28
+ const sessionId = deriveSessionId(options);
29
+ if (sessionId === UNKNOWN_SESSION_ID) {
30
+ printResult(io, buildSessionNotBoundEnvelope(sessionId, projectRoot), asJson);
31
+ process.exitCode = 1;
32
+ return;
33
+ }
34
+ const workflowId = options.workflowId ?? `wf-${Date.now().toString(GENERATED_ID_RADIX)}`;
35
+ if (!WORKFLOW_ID_REGEX.test(workflowId)) {
36
+ throw new Error(`workflowId shape invalid: ${workflowId}`);
37
+ }
38
+ const result = await initWorkflow({
39
+ projectRoot,
40
+ sessionId,
41
+ callerId,
42
+ skill: options.skill ?? 'peaks-code',
43
+ workflowId,
44
+ ...(options.parentWorkflow ? { parentWorkflowId: options.parentWorkflow } : {})
45
+ });
46
+ printResult(io, ok('workflow.init', {
47
+ envelopeVersion: '4.0.8',
48
+ workflowId: result.workflowId,
49
+ graphRef: result.graphRef,
50
+ events: result.events
51
+ }), asJson);
52
+ }
53
+ catch (err) {
54
+ const code = err.code ?? 'PEAKS_GRAPH_WRITE_FAILED';
55
+ printResult(io, fail('workflow.init', code, getErrorMessage(err), { workflowId: null }, []), asJson);
56
+ process.exitCode = 1;
57
+ }
58
+ }
59
+ export function registerWorkflowInitCommand(workflow, io) {
60
+ addJsonOption(workflow
61
+ .command('init')
62
+ .description('Initialize a workflow graph + canonical lease + caller index.')
63
+ .requiredOption('--skill <name>', 'the skill owning this workflow (e.g. peaks-code)')
64
+ .option('--workflow-id <id>', 'optional explicit workflowId (auto-generated if omitted)')
65
+ .option('--parent-workflow <id>', 'parent workflowId for nested runs')
66
+ .option('--session-id <sid>', 'override session id (default: derived from session.json / env)')
67
+ .option('--project <path>', 'target project root (defaults to cwd)')).action((options) => runWorkflowInit(io, options));
68
+ }
@@ -5,65 +5,15 @@
5
5
  * prepare / node ack / node mark-lost / terminalize`. All commands
6
6
  * delegate to the canonical services. Each action emits the typed
7
7
  * envelope via `ok` / `fail` so the LLM runner can branch on `code`.
8
+ *
9
+ * The verb implementations live beside this file, one module per verb group:
10
+ * `workflow-init-command.ts`, `workflow-graph-commands.ts`,
11
+ * `workflow-node-commands.ts`, `workflow-terminalize-command.ts`, with the
12
+ * option vocabulary and the caller / project / session derivation in
13
+ * `workflow-command-shared.ts`.
8
14
  */
9
15
  import type { Command } from 'commander';
10
- import { type ProgramIO } from '../cli-helpers.js';
11
- export interface WorkflowInitOptions {
12
- readonly skill?: string;
13
- readonly parentWorkflow?: string;
14
- readonly workflowId?: string;
15
- readonly project?: string;
16
- readonly sessionId?: string;
17
- readonly json?: boolean;
18
- }
19
- export interface WorkflowGraphShowOptions {
20
- readonly workflow?: string;
21
- readonly project?: string;
22
- readonly sessionId?: string;
23
- readonly json?: boolean;
24
- }
25
- export interface WorkflowGraphListOptions {
26
- readonly project?: string;
27
- readonly sessionId?: string;
28
- readonly json?: boolean;
29
- }
30
- export interface WorkflowNodePrepareOptions {
31
- readonly workflow?: string;
32
- readonly node?: string;
33
- readonly kind?: string;
34
- readonly label?: string;
35
- readonly dependsOn?: string;
36
- readonly project?: string;
37
- readonly sessionId?: string;
38
- readonly json?: boolean;
39
- }
40
- export interface WorkflowNodeAckOptions {
41
- readonly workflow?: string;
42
- readonly node?: string;
43
- readonly project?: string;
44
- readonly sessionId?: string;
45
- readonly json?: boolean;
46
- }
47
- export interface WorkflowNodeMarkLostOptions {
48
- readonly workflow?: string;
49
- readonly node?: string;
50
- readonly reason?: string;
51
- readonly project?: string;
52
- readonly sessionId?: string;
53
- readonly json?: boolean;
54
- }
55
- export interface WorkflowTerminalizeOptions {
56
- readonly workflow?: string;
57
- readonly reason?: string;
58
- readonly project?: string;
59
- readonly sessionId?: string;
60
- readonly requireConsumed?: boolean;
61
- readonly json?: boolean;
62
- }
63
- /**
64
- * The literal that means "no session could be resolved". Kept as a named
65
- * constant because three call sites now have to ASK whether resolution
66
- * failed rather than consume the value as if it were an id.
67
- */
68
- export declare const UNKNOWN_SESSION_ID = "unknown-sid";
16
+ import type { ProgramIO } from '../cli-helpers.js';
17
+ export type { WorkflowGraphListOptions, WorkflowGraphShowOptions, WorkflowInitOptions, WorkflowNodeAckOptions, WorkflowNodeMarkLostOptions, WorkflowNodePrepareOptions, WorkflowTerminalizeOptions } from './workflow-command-shared.js';
18
+ export { UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
69
19
  export declare function registerWorkflowLifecycleCommand(parent: Command, io: ProgramIO): void;