@lumenflow/cli 3.1.2 → 3.1.3

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 (389) hide show
  1. package/README.md +36 -35
  2. package/dist/agent-issues-query.js +13 -8
  3. package/dist/agent-log-issue.js +15 -4
  4. package/dist/agent-session-end.js +15 -4
  5. package/dist/agent-session.js +18 -6
  6. package/dist/backlog-prune.js +1 -1
  7. package/dist/commands/integrate.js +32 -18
  8. package/dist/config-get.js +27 -15
  9. package/dist/config-set.js +104 -37
  10. package/dist/delegation-list.js +1 -1
  11. package/dist/doctor.js +19 -13
  12. package/dist/file-delete.js +1 -1
  13. package/dist/file-edit.js +1 -1
  14. package/dist/file-read.js +1 -1
  15. package/dist/file-write.js +1 -1
  16. package/dist/flow-bottlenecks.js +1 -1
  17. package/dist/flow-report.js +10 -9
  18. package/dist/gates.js +3 -2
  19. package/dist/git-branch.js +1 -1
  20. package/dist/git-diff.js +1 -1
  21. package/dist/git-log.js +1 -1
  22. package/dist/init.js +238 -42
  23. package/dist/initiative-add-wu.js +1 -1
  24. package/dist/initiative-bulk-assign-wus.js +1 -1
  25. package/dist/initiative-create.js +2 -2
  26. package/dist/initiative-edit.js +1 -1
  27. package/dist/initiative-list.js +1 -1
  28. package/dist/initiative-plan.js +1 -3
  29. package/dist/initiative-status.js +47 -6
  30. package/dist/lane-edit.js +19 -10
  31. package/dist/lane-health.js +13 -24
  32. package/dist/lane-lock.js +4 -5
  33. package/dist/lane-setup.js +5 -5
  34. package/dist/lane-status.js +4 -5
  35. package/dist/lane-suggest.js +9 -7
  36. package/dist/lane-validate.js +4 -5
  37. package/dist/lumenflow-upgrade.js +17 -11
  38. package/dist/mem-checkpoint.js +1 -1
  39. package/dist/mem-cleanup.js +6 -23
  40. package/dist/mem-context.js +1 -1
  41. package/dist/mem-create.js +1 -1
  42. package/dist/mem-delete.js +1 -1
  43. package/dist/mem-export.js +1 -1
  44. package/dist/mem-inbox.js +1 -1
  45. package/dist/mem-init.js +1 -1
  46. package/dist/mem-ready.js +1 -1
  47. package/dist/mem-recover.js +1 -1
  48. package/dist/mem-signal.js +1 -1
  49. package/dist/mem-start.js +1 -1
  50. package/dist/mem-summarize.js +8 -7
  51. package/dist/mem-triage.js +7 -5
  52. package/dist/metrics-cli.js +1 -1
  53. package/dist/metrics-snapshot.js +1 -1
  54. package/dist/onboard.js +295 -120
  55. package/dist/orchestrate-init-status.js +12 -7
  56. package/dist/orchestrate-initiative.js +23 -12
  57. package/dist/orchestrate-monitor.js +20 -8
  58. package/dist/pack-scaffold.js +1 -1
  59. package/dist/plan-create.js +1 -3
  60. package/dist/plan-edit.js +1 -3
  61. package/dist/plan-link.js +1 -3
  62. package/dist/plan-promote.js +1 -3
  63. package/dist/release.js +1 -3
  64. package/dist/signal-cleanup.js +4 -18
  65. package/dist/state-bootstrap.js +11 -8
  66. package/dist/state-cleanup.js +5 -19
  67. package/dist/state-doctor.js +213 -9
  68. package/dist/task-claim.js +1 -1
  69. package/dist/validate.js +1 -1
  70. package/dist/workspace-init.js +61 -61
  71. package/dist/wu-block.js +1 -1
  72. package/dist/wu-brief.js +1 -1
  73. package/dist/wu-claim.js +1 -1
  74. package/dist/wu-cleanup.js +1 -1
  75. package/dist/wu-create.js +3 -3
  76. package/dist/wu-delegate.js +1 -1
  77. package/dist/wu-deps.js +1 -1
  78. package/dist/wu-done.js +66 -34
  79. package/dist/wu-edit.js +1 -1
  80. package/dist/wu-infer-lane.js +1 -1
  81. package/dist/wu-preflight.js +1 -1
  82. package/dist/wu-prep.js +1 -1
  83. package/dist/wu-proto.js +1 -1
  84. package/dist/wu-prune.js +1 -1
  85. package/dist/wu-recover.js +1 -1
  86. package/dist/wu-release.js +1 -1
  87. package/dist/wu-repair.js +1 -1
  88. package/dist/wu-sandbox.js +40 -27
  89. package/dist/wu-status.js +1 -1
  90. package/dist/wu-unblock.js +1 -1
  91. package/dist/wu-unlock-lane.js +1 -1
  92. package/dist/wu-validate.js +1 -1
  93. package/package.json +12 -8
  94. package/packs/software-delivery/constants.ts +10 -0
  95. package/packs/software-delivery/extensions.ts +140 -0
  96. package/packs/software-delivery/gate-policies.ts +134 -0
  97. package/packs/software-delivery/index.ts +8 -0
  98. package/packs/software-delivery/manifest-schema.ts +236 -0
  99. package/packs/software-delivery/manifest.ts +417 -0
  100. package/packs/software-delivery/manifest.yaml +711 -0
  101. package/packs/software-delivery/pack-registration.ts +113 -0
  102. package/packs/software-delivery/tool-impl/agent-tools.ts +263 -0
  103. package/packs/software-delivery/tool-impl/delegation-tools.ts +66 -0
  104. package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +219 -0
  105. package/packs/software-delivery/tool-impl/git-runner.ts +113 -0
  106. package/packs/software-delivery/tool-impl/git-tools.ts +316 -0
  107. package/packs/software-delivery/tool-impl/index.ts +15 -0
  108. package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +720 -0
  109. package/packs/software-delivery/tool-impl/lane-lock.ts +246 -0
  110. package/packs/software-delivery/tool-impl/memory-tools.ts +415 -0
  111. package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +21 -0
  112. package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +328 -0
  113. package/packs/software-delivery/tool-impl/runtime-native-tools.ts +687 -0
  114. package/packs/software-delivery/tool-impl/worker-loader.ts +52 -0
  115. package/packs/software-delivery/tool-impl/worktree-tools.ts +46 -0
  116. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +759 -0
  117. package/packs/software-delivery/tools/delegation-tools.ts +23 -0
  118. package/packs/software-delivery/tools/git-tools.ts +55 -0
  119. package/packs/software-delivery/tools/index.ts +8 -0
  120. package/packs/software-delivery/tools/lane-lock-tool.ts +37 -0
  121. package/packs/software-delivery/tools/types.ts +71 -0
  122. package/packs/software-delivery/tools/worktree-tools.ts +49 -0
  123. package/templates/core/LUMENFLOW.md.template +3 -3
  124. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  125. package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +1 -1
  126. package/templates/core/ai/onboarding/quick-ref-commands.md.template +5 -5
  127. package/templates/core/ai/onboarding/starting-prompt.md.template +3 -3
  128. package/templates/core/ai/onboarding/vendor-support.md.template +1 -1
  129. package/templates/core/ai/onboarding/wu-create-checklist.md.template +1 -1
  130. package/dist/agent-issues-query.js.map +0 -1
  131. package/dist/agent-log-issue.js.map +0 -1
  132. package/dist/agent-session-end.js.map +0 -1
  133. package/dist/agent-session.js.map +0 -1
  134. package/dist/backlog-prune.js.map +0 -1
  135. package/dist/cli-entry-point.js +0 -149
  136. package/dist/cli-entry-point.js.map +0 -1
  137. package/dist/commands/integrate.js.map +0 -1
  138. package/dist/commands.js.map +0 -1
  139. package/dist/config-get.js.map +0 -1
  140. package/dist/config-set.js.map +0 -1
  141. package/dist/delegation-list.js.map +0 -1
  142. package/dist/deps-add.js +0 -259
  143. package/dist/deps-add.js.map +0 -1
  144. package/dist/deps-remove.js +0 -105
  145. package/dist/deps-remove.js.map +0 -1
  146. package/dist/docs-sync.js.map +0 -1
  147. package/dist/doctor.js.map +0 -1
  148. package/dist/file-delete.js.map +0 -1
  149. package/dist/file-edit.js.map +0 -1
  150. package/dist/file-read.js.map +0 -1
  151. package/dist/file-write.js.map +0 -1
  152. package/dist/flow-bottlenecks.js.map +0 -1
  153. package/dist/flow-report.js.map +0 -1
  154. package/dist/formatters.js +0 -151
  155. package/dist/formatters.js.map +0 -1
  156. package/dist/gate-defaults.js +0 -131
  157. package/dist/gate-defaults.js.map +0 -1
  158. package/dist/gate-registry.js +0 -73
  159. package/dist/gate-registry.js.map +0 -1
  160. package/dist/gates-graceful-degradation.js +0 -153
  161. package/dist/gates-graceful-degradation.js.map +0 -1
  162. package/dist/gates-plan-resolvers.js +0 -152
  163. package/dist/gates-plan-resolvers.js.map +0 -1
  164. package/dist/gates-runners.js +0 -509
  165. package/dist/gates-runners.js.map +0 -1
  166. package/dist/gates-types.js +0 -4
  167. package/dist/gates-types.js.map +0 -1
  168. package/dist/gates-utils.js +0 -323
  169. package/dist/gates-utils.js.map +0 -1
  170. package/dist/gates.js.map +0 -1
  171. package/dist/git-branch.js.map +0 -1
  172. package/dist/git-diff.js.map +0 -1
  173. package/dist/git-log.js.map +0 -1
  174. package/dist/git-status.js.map +0 -1
  175. package/dist/guard-locked.js +0 -172
  176. package/dist/guard-locked.js.map +0 -1
  177. package/dist/guard-main-branch.js +0 -217
  178. package/dist/guard-main-branch.js.map +0 -1
  179. package/dist/guard-worktree-commit.js +0 -163
  180. package/dist/guard-worktree-commit.js.map +0 -1
  181. package/dist/hooks/auto-checkpoint-utils.js +0 -54
  182. package/dist/hooks/auto-checkpoint-utils.js.map +0 -1
  183. package/dist/hooks/enforcement-checks.js +0 -399
  184. package/dist/hooks/enforcement-checks.js.map +0 -1
  185. package/dist/hooks/enforcement-generator.js +0 -139
  186. package/dist/hooks/enforcement-generator.js.map +0 -1
  187. package/dist/hooks/enforcement-sync.js +0 -385
  188. package/dist/hooks/enforcement-sync.js.map +0 -1
  189. package/dist/hooks/generators/auto-checkpoint.js +0 -125
  190. package/dist/hooks/generators/auto-checkpoint.js.map +0 -1
  191. package/dist/hooks/generators/enforce-worktree.js +0 -190
  192. package/dist/hooks/generators/enforce-worktree.js.map +0 -1
  193. package/dist/hooks/generators/index.js +0 -18
  194. package/dist/hooks/generators/index.js.map +0 -1
  195. package/dist/hooks/generators/pre-compact-checkpoint.js +0 -136
  196. package/dist/hooks/generators/pre-compact-checkpoint.js.map +0 -1
  197. package/dist/hooks/generators/require-wu.js +0 -117
  198. package/dist/hooks/generators/require-wu.js.map +0 -1
  199. package/dist/hooks/generators/session-start-recovery.js +0 -103
  200. package/dist/hooks/generators/session-start-recovery.js.map +0 -1
  201. package/dist/hooks/generators/signal-utils.js +0 -54
  202. package/dist/hooks/generators/signal-utils.js.map +0 -1
  203. package/dist/hooks/generators/warn-incomplete.js +0 -67
  204. package/dist/hooks/generators/warn-incomplete.js.map +0 -1
  205. package/dist/hooks/index.js +0 -10
  206. package/dist/hooks/index.js.map +0 -1
  207. package/dist/index.js.map +0 -1
  208. package/dist/init-detection.js +0 -232
  209. package/dist/init-detection.js.map +0 -1
  210. package/dist/init-lane-validation.js +0 -143
  211. package/dist/init-lane-validation.js.map +0 -1
  212. package/dist/init-scaffolding.js +0 -158
  213. package/dist/init-scaffolding.js.map +0 -1
  214. package/dist/init-templates.js +0 -1982
  215. package/dist/init-templates.js.map +0 -1
  216. package/dist/init.js.map +0 -1
  217. package/dist/initiative-add-wu.js.map +0 -1
  218. package/dist/initiative-bulk-assign-wus.js.map +0 -1
  219. package/dist/initiative-create.js.map +0 -1
  220. package/dist/initiative-edit.js.map +0 -1
  221. package/dist/initiative-list.js.map +0 -1
  222. package/dist/initiative-plan.js.map +0 -1
  223. package/dist/initiative-remove-wu.js.map +0 -1
  224. package/dist/initiative-status.js.map +0 -1
  225. package/dist/lane-edit.js.map +0 -1
  226. package/dist/lane-health.js.map +0 -1
  227. package/dist/lane-lifecycle-process.js +0 -366
  228. package/dist/lane-lifecycle-process.js.map +0 -1
  229. package/dist/lane-lock.js.map +0 -1
  230. package/dist/lane-setup.js.map +0 -1
  231. package/dist/lane-status.js.map +0 -1
  232. package/dist/lane-suggest.js.map +0 -1
  233. package/dist/lane-validate.js.map +0 -1
  234. package/dist/lifecycle-regression-harness.js +0 -181
  235. package/dist/lifecycle-regression-harness.js.map +0 -1
  236. package/dist/lumenflow-upgrade.js.map +0 -1
  237. package/dist/mem-checkpoint.js.map +0 -1
  238. package/dist/mem-cleanup.js.map +0 -1
  239. package/dist/mem-context.js.map +0 -1
  240. package/dist/mem-create.js.map +0 -1
  241. package/dist/mem-delete.js.map +0 -1
  242. package/dist/mem-export.js.map +0 -1
  243. package/dist/mem-inbox.js.map +0 -1
  244. package/dist/mem-index.js +0 -214
  245. package/dist/mem-index.js.map +0 -1
  246. package/dist/mem-init.js.map +0 -1
  247. package/dist/mem-profile.js +0 -210
  248. package/dist/mem-profile.js.map +0 -1
  249. package/dist/mem-promote.js +0 -257
  250. package/dist/mem-promote.js.map +0 -1
  251. package/dist/mem-ready.js.map +0 -1
  252. package/dist/mem-recover.js.map +0 -1
  253. package/dist/mem-signal.js.map +0 -1
  254. package/dist/mem-start.js.map +0 -1
  255. package/dist/mem-summarize.js.map +0 -1
  256. package/dist/mem-triage.js.map +0 -1
  257. package/dist/merge-block.js +0 -225
  258. package/dist/merge-block.js.map +0 -1
  259. package/dist/metrics-cli.js.map +0 -1
  260. package/dist/metrics-snapshot.js.map +0 -1
  261. package/dist/onboard.js.map +0 -1
  262. package/dist/onboarding-smoke-test.js +0 -418
  263. package/dist/onboarding-smoke-test.js.map +0 -1
  264. package/dist/orchestrate-init-status.js.map +0 -1
  265. package/dist/orchestrate-initiative.js.map +0 -1
  266. package/dist/orchestrate-monitor.js.map +0 -1
  267. package/dist/pack-author.js.map +0 -1
  268. package/dist/pack-hash.js.map +0 -1
  269. package/dist/pack-install.js.map +0 -1
  270. package/dist/pack-publish.js.map +0 -1
  271. package/dist/pack-scaffold.js.map +0 -1
  272. package/dist/pack-search.js.map +0 -1
  273. package/dist/pack-validate.js.map +0 -1
  274. package/dist/plan-create.js.map +0 -1
  275. package/dist/plan-edit.js.map +0 -1
  276. package/dist/plan-link.js.map +0 -1
  277. package/dist/plan-promote.js.map +0 -1
  278. package/dist/public-manifest.js +0 -920
  279. package/dist/public-manifest.js.map +0 -1
  280. package/dist/release.js.map +0 -1
  281. package/dist/rotate-progress.js +0 -253
  282. package/dist/rotate-progress.js.map +0 -1
  283. package/dist/session-coordinator.js +0 -303
  284. package/dist/session-coordinator.js.map +0 -1
  285. package/dist/shared-validators.js +0 -81
  286. package/dist/shared-validators.js.map +0 -1
  287. package/dist/signal-cleanup.js.map +0 -1
  288. package/dist/state-bootstrap.js.map +0 -1
  289. package/dist/state-cleanup.js.map +0 -1
  290. package/dist/state-doctor-fix.js +0 -226
  291. package/dist/state-doctor-fix.js.map +0 -1
  292. package/dist/state-doctor-stamps.js +0 -23
  293. package/dist/state-doctor-stamps.js.map +0 -1
  294. package/dist/state-doctor.js.map +0 -1
  295. package/dist/strict-progress.js +0 -255
  296. package/dist/strict-progress.js.map +0 -1
  297. package/dist/sync-templates.js.map +0 -1
  298. package/dist/task-claim.js.map +0 -1
  299. package/dist/trace-gen.js +0 -401
  300. package/dist/trace-gen.js.map +0 -1
  301. package/dist/validate-agent-skills.js +0 -223
  302. package/dist/validate-agent-skills.js.map +0 -1
  303. package/dist/validate-agent-sync.js +0 -151
  304. package/dist/validate-agent-sync.js.map +0 -1
  305. package/dist/validate-backlog-sync.js +0 -77
  306. package/dist/validate-backlog-sync.js.map +0 -1
  307. package/dist/validate-skills-spec.js +0 -211
  308. package/dist/validate-skills-spec.js.map +0 -1
  309. package/dist/validate.js.map +0 -1
  310. package/dist/validator-defaults.js +0 -107
  311. package/dist/validator-defaults.js.map +0 -1
  312. package/dist/validator-registry.js +0 -71
  313. package/dist/validator-registry.js.map +0 -1
  314. package/dist/workspace-init.js.map +0 -1
  315. package/dist/wu-block.js.map +0 -1
  316. package/dist/wu-brief.js.map +0 -1
  317. package/dist/wu-claim-branch.js +0 -123
  318. package/dist/wu-claim-branch.js.map +0 -1
  319. package/dist/wu-claim-cloud.js +0 -79
  320. package/dist/wu-claim-cloud.js.map +0 -1
  321. package/dist/wu-claim-mode.js +0 -82
  322. package/dist/wu-claim-mode.js.map +0 -1
  323. package/dist/wu-claim-output.js +0 -85
  324. package/dist/wu-claim-output.js.map +0 -1
  325. package/dist/wu-claim-repair-guidance.js +0 -12
  326. package/dist/wu-claim-repair-guidance.js.map +0 -1
  327. package/dist/wu-claim-resume-handler.js +0 -87
  328. package/dist/wu-claim-resume-handler.js.map +0 -1
  329. package/dist/wu-claim-state.js +0 -581
  330. package/dist/wu-claim-state.js.map +0 -1
  331. package/dist/wu-claim-validation.js +0 -457
  332. package/dist/wu-claim-validation.js.map +0 -1
  333. package/dist/wu-claim-worktree.js +0 -223
  334. package/dist/wu-claim-worktree.js.map +0 -1
  335. package/dist/wu-claim.js.map +0 -1
  336. package/dist/wu-cleanup-cloud.js +0 -78
  337. package/dist/wu-cleanup-cloud.js.map +0 -1
  338. package/dist/wu-cleanup.js.map +0 -1
  339. package/dist/wu-code-path-coverage.js +0 -83
  340. package/dist/wu-code-path-coverage.js.map +0 -1
  341. package/dist/wu-create-cloud.js +0 -30
  342. package/dist/wu-create-cloud.js.map +0 -1
  343. package/dist/wu-create-content.js +0 -264
  344. package/dist/wu-create-content.js.map +0 -1
  345. package/dist/wu-create-readiness.js +0 -59
  346. package/dist/wu-create-readiness.js.map +0 -1
  347. package/dist/wu-create-validation.js +0 -128
  348. package/dist/wu-create-validation.js.map +0 -1
  349. package/dist/wu-create.js.map +0 -1
  350. package/dist/wu-delegate.js.map +0 -1
  351. package/dist/wu-delete.js.map +0 -1
  352. package/dist/wu-deps.js.map +0 -1
  353. package/dist/wu-done-auto-cleanup.js +0 -203
  354. package/dist/wu-done-auto-cleanup.js.map +0 -1
  355. package/dist/wu-done-check.js +0 -38
  356. package/dist/wu-done-check.js.map +0 -1
  357. package/dist/wu-done-cloud.js +0 -48
  358. package/dist/wu-done-cloud.js.map +0 -1
  359. package/dist/wu-done-decay.js +0 -86
  360. package/dist/wu-done-decay.js.map +0 -1
  361. package/dist/wu-done.js.map +0 -1
  362. package/dist/wu-edit-operations.js +0 -399
  363. package/dist/wu-edit-operations.js.map +0 -1
  364. package/dist/wu-edit-validators.js +0 -282
  365. package/dist/wu-edit-validators.js.map +0 -1
  366. package/dist/wu-edit.js.map +0 -1
  367. package/dist/wu-infer-lane.js.map +0 -1
  368. package/dist/wu-preflight.js.map +0 -1
  369. package/dist/wu-prep.js.map +0 -1
  370. package/dist/wu-proto.js.map +0 -1
  371. package/dist/wu-prune.js.map +0 -1
  372. package/dist/wu-recover.js.map +0 -1
  373. package/dist/wu-release.js.map +0 -1
  374. package/dist/wu-repair.js.map +0 -1
  375. package/dist/wu-sandbox.js.map +0 -1
  376. package/dist/wu-spawn-completion.js +0 -33
  377. package/dist/wu-spawn-completion.js.map +0 -1
  378. package/dist/wu-spawn-prompt-builders.js +0 -1197
  379. package/dist/wu-spawn-prompt-builders.js.map +0 -1
  380. package/dist/wu-spawn-strategy-resolver.js +0 -322
  381. package/dist/wu-spawn-strategy-resolver.js.map +0 -1
  382. package/dist/wu-spawn.js +0 -59
  383. package/dist/wu-spawn.js.map +0 -1
  384. package/dist/wu-state-cloud.js +0 -41
  385. package/dist/wu-state-cloud.js.map +0 -1
  386. package/dist/wu-status.js.map +0 -1
  387. package/dist/wu-unblock.js.map +0 -1
  388. package/dist/wu-unlock-lane.js.map +0 -1
  389. package/dist/wu-validate.js.map +0 -1
@@ -0,0 +1,328 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ import { resolve as resolvePath } from 'node:path';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { format } from 'node:util';
7
+ import { UTF8_ENCODING } from '../constants.js';
8
+
9
+ export const RUNTIME_CLI_COMMANDS = {
10
+ AGENT_ISSUES_QUERY: 'agent-issues-query',
11
+ AGENT_LOG_ISSUE: 'agent-log-issue',
12
+ AGENT_SESSION: 'agent-session',
13
+ AGENT_SESSION_END: 'agent-session-end',
14
+ BACKLOG_PRUNE: 'backlog-prune',
15
+ CONFIG_GET: 'config-get',
16
+ CONFIG_SET: 'config-set',
17
+ DELEGATION_LIST: 'delegation-list',
18
+ DOCS_SYNC: 'docs-sync',
19
+ FILE_DELETE: 'file-delete',
20
+ FILE_EDIT: 'file-edit',
21
+ FILE_READ: 'file-read',
22
+ FILE_WRITE: 'file-write',
23
+ FLOW_BOTTLENECKS: 'flow-bottlenecks',
24
+ FLOW_REPORT: 'flow-report',
25
+ GATES: 'gates',
26
+ GIT_BRANCH: 'git-branch',
27
+ GIT_DIFF: 'git-diff',
28
+ GIT_LOG: 'git-log',
29
+ INIT: 'init',
30
+ INITIATIVE_ADD_WU: 'initiative-add-wu',
31
+ INITIATIVE_BULK_ASSIGN: 'initiative-bulk-assign-wus',
32
+ INITIATIVE_CREATE: 'initiative-create',
33
+ INITIATIVE_EDIT: 'initiative-edit',
34
+ INITIATIVE_LIST: 'initiative-list',
35
+ INITIATIVE_PLAN: 'initiative-plan',
36
+ INITIATIVE_REMOVE_WU: 'initiative-remove-wu',
37
+ INITIATIVE_STATUS: 'initiative-status',
38
+ INTEGRATE: 'commands/integrate',
39
+ LANE_HEALTH: 'lane-health',
40
+ LANE_SUGGEST: 'lane-suggest',
41
+ LUMENFLOW_DOCTOR: 'doctor',
42
+ LUMENFLOW_UPGRADE: 'lumenflow-upgrade',
43
+ MEM_CHECKPOINT: 'mem-checkpoint',
44
+ MEM_CLEANUP: 'mem-cleanup',
45
+ MEM_CONTEXT: 'mem-context',
46
+ MEM_CREATE: 'mem-create',
47
+ MEM_DELETE: 'mem-delete',
48
+ MEM_EXPORT: 'mem-export',
49
+ MEM_INBOX: 'mem-inbox',
50
+ MEM_INIT: 'mem-init',
51
+ MEM_READY: 'mem-ready',
52
+ MEM_RECOVER: 'mem-recover',
53
+ MEM_SIGNAL: 'mem-signal',
54
+ MEM_START: 'mem-start',
55
+ MEM_SUMMARIZE: 'mem-summarize',
56
+ MEM_TRIAGE: 'mem-triage',
57
+ METRICS: 'metrics-cli',
58
+ METRICS_SNAPSHOT: 'metrics-snapshot',
59
+ ORCHESTRATE_INIT_STATUS: 'orchestrate-init-status',
60
+ ORCHESTRATE_INITIATIVE: 'orchestrate-initiative',
61
+ ORCHESTRATE_MONITOR: 'orchestrate-monitor',
62
+ PLAN_CREATE: 'plan-create',
63
+ PLAN_EDIT: 'plan-edit',
64
+ PLAN_LINK: 'plan-link',
65
+ PLAN_PROMOTE: 'plan-promote',
66
+ RELEASE: 'release',
67
+ SIGNAL_CLEANUP: 'signal-cleanup',
68
+ STATE_BOOTSTRAP: 'state-bootstrap',
69
+ STATE_CLEANUP: 'state-cleanup',
70
+ STATE_DOCTOR: 'state-doctor',
71
+ SYNC_TEMPLATES: 'sync-templates',
72
+ VALIDATE: 'validate',
73
+ VALIDATE_AGENT_SKILLS: 'validate-agent-skills',
74
+ VALIDATE_AGENT_SYNC: 'validate-agent-sync',
75
+ VALIDATE_BACKLOG_SYNC: 'validate-backlog-sync',
76
+ VALIDATE_SKILLS_SPEC: 'validate-skills-spec',
77
+ WU_BLOCK: 'wu-block',
78
+ WU_BRIEF: 'wu-brief',
79
+ WU_CLAIM: 'wu-claim',
80
+ WU_CLEANUP: 'wu-cleanup',
81
+ WU_CREATE: 'wu-create',
82
+ WU_DELEGATE: 'wu-delegate',
83
+ WU_DELETE: 'wu-delete',
84
+ WU_DEPS: 'wu-deps',
85
+ WU_DONE: 'wu-done',
86
+ WU_EDIT: 'wu-edit',
87
+ WU_INFER_LANE: 'wu-infer-lane',
88
+ WU_PREFLIGHT: 'wu-preflight',
89
+ WU_PREP: 'wu-prep',
90
+ WU_PROTO: 'wu-proto',
91
+ WU_PRUNE: 'wu-prune',
92
+ WU_RECOVER: 'wu-recover',
93
+ WU_RELEASE: 'wu-release',
94
+ WU_REPAIR: 'wu-repair',
95
+ WU_SANDBOX: 'wu-sandbox',
96
+ WU_STATUS: 'wu-status',
97
+ WU_UNBLOCK: 'wu-unblock',
98
+ WU_UNLOCK_LANE: 'wu-unlock-lane',
99
+ WU_VALIDATE: 'wu-validate',
100
+ WORKSPACE_INIT: 'workspace-init',
101
+ } as const;
102
+
103
+ export type RuntimeCliCommand = (typeof RUNTIME_CLI_COMMANDS)[keyof typeof RUNTIME_CLI_COMMANDS];
104
+
105
+ export interface RuntimeCliModule {
106
+ main: () => Promise<void>;
107
+ }
108
+
109
+ type RuntimeCliModuleLoader = (command: RuntimeCliCommand) => Promise<RuntimeCliModule>;
110
+
111
+ type WriteCallback = ((error?: Error | null) => void) | undefined;
112
+ type WriteEncodingOrCallback = BufferEncoding | WriteCallback;
113
+ type WriteFn = (
114
+ chunk: string | Uint8Array,
115
+ encodingOrCallback?: WriteEncodingOrCallback,
116
+ callback?: (error?: Error | null) => void,
117
+ ) => boolean;
118
+
119
+ const EXIT_STATUS_DEFAULT_OK = 0;
120
+ const EXIT_STATUS_DEFAULT_ERROR = 1;
121
+ const OUTPUT_LINE_SUFFIX = '\n';
122
+ const CLI_SOURCE_ROOT = 'packages/@lumenflow/cli/src';
123
+ const CLI_MODULE_FILE_EXTENSION = '.js';
124
+
125
+ type ConsoleCaptureMethodName = 'debug' | 'error' | 'info' | 'log' | 'warn';
126
+ type ConsoleCaptureMethod = (...args: unknown[]) => void;
127
+ const STDOUT_CONSOLE_METHODS: readonly ConsoleCaptureMethodName[] = ['debug', 'info', 'log'];
128
+ const STDERR_CONSOLE_METHODS: readonly ConsoleCaptureMethodName[] = ['error', 'warn'];
129
+
130
+ function resolveCliModuleRelativePath(command: RuntimeCliCommand): string {
131
+ return `${command}${CLI_MODULE_FILE_EXTENSION}`;
132
+ }
133
+
134
+ function resolveCliModuleUrl(command: RuntimeCliCommand): string {
135
+ const absolutePath = resolvePath(
136
+ process.cwd(),
137
+ CLI_SOURCE_ROOT,
138
+ resolveCliModuleRelativePath(command),
139
+ );
140
+ return pathToFileURL(absolutePath).href;
141
+ }
142
+
143
+ function toErrorMessage(error: unknown): string {
144
+ if (error instanceof Error) {
145
+ return error.message;
146
+ }
147
+ return String(error);
148
+ }
149
+
150
+ function normalizeExitCode(code: number | string | undefined): number {
151
+ if (typeof code === 'number' && Number.isFinite(code)) {
152
+ return Math.trunc(code);
153
+ }
154
+ if (typeof code === 'string') {
155
+ const parsed = Number.parseInt(code, 10);
156
+ if (Number.isFinite(parsed)) {
157
+ return parsed;
158
+ }
159
+ }
160
+ return EXIT_STATUS_DEFAULT_OK;
161
+ }
162
+
163
+ function appendCapturedChunk(
164
+ target: string[],
165
+ chunk: string | Uint8Array,
166
+ encoding: BufferEncoding,
167
+ ): void {
168
+ if (typeof chunk === 'string') {
169
+ target.push(chunk);
170
+ return;
171
+ }
172
+ target.push(Buffer.from(chunk).toString(encoding));
173
+ }
174
+
175
+ class RuntimeCliExitSignal extends Error {
176
+ readonly exitCode: number;
177
+
178
+ constructor(exitCode: number) {
179
+ super(`CLI requested process exit (${exitCode})`);
180
+ this.exitCode = exitCode;
181
+ }
182
+ }
183
+
184
+ function patchStreamWrite(stream: NodeJS.WriteStream, target: string[]): () => void {
185
+ const original = stream.write as unknown as WriteFn;
186
+ const patched: WriteFn = (chunk, encodingOrCallback, callback) => {
187
+ const encoding = typeof encodingOrCallback === 'string' ? encodingOrCallback : UTF8_ENCODING;
188
+ const resolvedCallback: WriteCallback =
189
+ typeof encodingOrCallback === 'function' ? encodingOrCallback : callback;
190
+
191
+ appendCapturedChunk(target, chunk, encoding);
192
+
193
+ if (resolvedCallback) {
194
+ resolvedCallback(null);
195
+ }
196
+ return true;
197
+ };
198
+
199
+ stream.write = patched as unknown as typeof stream.write;
200
+ return () => {
201
+ stream.write = original as unknown as typeof stream.write;
202
+ };
203
+ }
204
+
205
+ function patchConsoleMethod(methodName: ConsoleCaptureMethodName, target: string[]): () => void {
206
+ const globalConsole = console as unknown as Record<
207
+ ConsoleCaptureMethodName,
208
+ ConsoleCaptureMethod
209
+ >;
210
+ const original = globalConsole[methodName];
211
+ const patched: ConsoleCaptureMethod = (...args) => {
212
+ target.push(`${format(...args)}${OUTPUT_LINE_SUFFIX}`);
213
+ };
214
+ globalConsole[methodName] = patched;
215
+ return () => {
216
+ globalConsole[methodName] = original;
217
+ };
218
+ }
219
+
220
+ function patchConsoleOutput(stdoutChunks: string[], stderrChunks: string[]): () => void {
221
+ const restoreMethods: Array<() => void> = [];
222
+ for (const methodName of STDOUT_CONSOLE_METHODS) {
223
+ restoreMethods.push(patchConsoleMethod(methodName, stdoutChunks));
224
+ }
225
+ for (const methodName of STDERR_CONSOLE_METHODS) {
226
+ restoreMethods.push(patchConsoleMethod(methodName, stderrChunks));
227
+ }
228
+
229
+ return () => {
230
+ for (let index = restoreMethods.length - 1; index >= 0; index -= 1) {
231
+ restoreMethods[index]();
232
+ }
233
+ };
234
+ }
235
+
236
+ async function defaultLoadRuntimeCliModule(command: RuntimeCliCommand): Promise<RuntimeCliModule> {
237
+ const moduleUrl = resolveCliModuleUrl(command);
238
+ const loaded = (await import(moduleUrl)) as RuntimeCliModule;
239
+ if (!loaded || typeof loaded.main !== 'function') {
240
+ throw new Error(`Runtime CLI command "${command}" does not export main()`);
241
+ }
242
+ return loaded;
243
+ }
244
+
245
+ export interface RuntimeCliExecutionResult {
246
+ ok: boolean;
247
+ status: number;
248
+ stdout: string;
249
+ stderr: string;
250
+ executionError?: string;
251
+ }
252
+
253
+ export interface RuntimeCliAdapter {
254
+ run(command: RuntimeCliCommand, args: string[]): Promise<RuntimeCliExecutionResult>;
255
+ }
256
+
257
+ export interface RuntimeCliAdapterOptions {
258
+ loadModule?: RuntimeCliModuleLoader;
259
+ }
260
+
261
+ let executionQueue: Promise<void> = Promise.resolve();
262
+
263
+ async function runExclusive<T>(operation: () => Promise<T>): Promise<T> {
264
+ const scheduled = executionQueue.then(operation, operation);
265
+ executionQueue = scheduled.then(
266
+ () => undefined,
267
+ () => undefined,
268
+ );
269
+ return scheduled;
270
+ }
271
+
272
+ export function createRuntimeCliAdapter(options: RuntimeCliAdapterOptions = {}): RuntimeCliAdapter {
273
+ const loadModule = options.loadModule ?? defaultLoadRuntimeCliModule;
274
+
275
+ return {
276
+ async run(command: RuntimeCliCommand, args: string[]): Promise<RuntimeCliExecutionResult> {
277
+ return runExclusive(async () => {
278
+ const stdoutChunks: string[] = [];
279
+ const stderrChunks: string[] = [];
280
+ const originalArgv = [...process.argv];
281
+ const originalExit = process.exit;
282
+ const restoreStdout = patchStreamWrite(process.stdout, stdoutChunks);
283
+ const restoreStderr = patchStreamWrite(process.stderr, stderrChunks);
284
+ const restoreConsole = patchConsoleOutput(stdoutChunks, stderrChunks);
285
+
286
+ process.argv = [process.execPath, command, ...args];
287
+ process.exit = ((code?: number | string | null | undefined) => {
288
+ throw new RuntimeCliExitSignal(normalizeExitCode(code ?? undefined));
289
+ }) as typeof process.exit;
290
+
291
+ let status = EXIT_STATUS_DEFAULT_OK;
292
+ let executionError: string | undefined;
293
+
294
+ try {
295
+ const module = await loadModule(command);
296
+ await module.main();
297
+ } catch (error) {
298
+ if (error instanceof RuntimeCliExitSignal) {
299
+ status = error.exitCode;
300
+ } else {
301
+ status = EXIT_STATUS_DEFAULT_ERROR;
302
+ executionError = toErrorMessage(error);
303
+ stderrChunks.push(`${executionError}\n`);
304
+ }
305
+ } finally {
306
+ process.argv = originalArgv;
307
+ process.exit = originalExit;
308
+ restoreConsole();
309
+ restoreStdout();
310
+ restoreStderr();
311
+ }
312
+
313
+ const stdout = stdoutChunks.join('');
314
+ const stderr = stderrChunks.join('');
315
+
316
+ return {
317
+ ok: status === EXIT_STATUS_DEFAULT_OK && executionError === undefined,
318
+ status,
319
+ stdout,
320
+ stderr,
321
+ executionError,
322
+ };
323
+ });
324
+ },
325
+ };
326
+ }
327
+
328
+ export const runtimeCliAdapter = createRuntimeCliAdapter();