@lumenflow/cli 4.24.0 → 5.0.1

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 (287) hide show
  1. package/README.md +54 -52
  2. package/dist/agent-issues-query.js +10 -2
  3. package/dist/agent-issues-query.js.map +1 -1
  4. package/dist/agent-runtime-enrollment-events.js +44 -0
  5. package/dist/agent-runtime-enrollment-events.js.map +1 -0
  6. package/dist/agent-session-end.js +47 -0
  7. package/dist/agent-session-end.js.map +1 -1
  8. package/dist/agent-session-heartbeat.js +250 -0
  9. package/dist/agent-session-heartbeat.js.map +1 -0
  10. package/dist/agent-session.js +299 -5
  11. package/dist/agent-session.js.map +1 -1
  12. package/dist/capacity-snapshot-emitter.js +73 -0
  13. package/dist/capacity-snapshot-emitter.js.map +1 -0
  14. package/dist/claim-queue.js +276 -0
  15. package/dist/claim-queue.js.map +1 -0
  16. package/dist/config-set.js +22 -3
  17. package/dist/config-set.js.map +1 -1
  18. package/dist/control-plane-sidecar-runner.js +145 -0
  19. package/dist/control-plane-sidecar-runner.js.map +1 -0
  20. package/dist/delegation-list.js +160 -1
  21. package/dist/delegation-list.js.map +1 -1
  22. package/dist/delegation-role-resolver.js +69 -0
  23. package/dist/delegation-role-resolver.js.map +1 -0
  24. package/dist/docs-generate-pack-reference.js +500 -0
  25. package/dist/docs-generate-pack-reference.js.map +1 -0
  26. package/dist/docs-sync.js +116 -1
  27. package/dist/docs-sync.js.map +1 -1
  28. package/dist/file-edit.js +28 -8
  29. package/dist/file-edit.js.map +1 -1
  30. package/dist/file-write.js +29 -5
  31. package/dist/file-write.js.map +1 -1
  32. package/dist/gate-co-change.js +25 -7
  33. package/dist/gate-co-change.js.map +1 -1
  34. package/dist/gate-conditional.js +19 -7
  35. package/dist/gate-conditional.js.map +1 -1
  36. package/dist/gates-runners.js +42 -33
  37. package/dist/gates-runners.js.map +1 -1
  38. package/dist/gates-utils.js +34 -20
  39. package/dist/gates-utils.js.map +1 -1
  40. package/dist/gates.js +79 -7
  41. package/dist/gates.js.map +1 -1
  42. package/dist/hooks/config-resolver.js +10 -1
  43. package/dist/hooks/config-resolver.js.map +1 -1
  44. package/dist/init-package-config.js +1 -1
  45. package/dist/init-package-config.js.map +1 -1
  46. package/dist/init-scaffolding.js +5 -1
  47. package/dist/init-scaffolding.js.map +1 -1
  48. package/dist/init-templates.js +10 -0
  49. package/dist/init-templates.js.map +1 -1
  50. package/dist/init.js +1 -1
  51. package/dist/init.js.map +1 -1
  52. package/dist/initiative-create.js +17 -0
  53. package/dist/initiative-create.js.map +1 -1
  54. package/dist/initiative-remove-wu.js +17 -3
  55. package/dist/initiative-remove-wu.js.map +1 -1
  56. package/dist/kernel-event-sync/emitters.js +104 -0
  57. package/dist/kernel-event-sync/emitters.js.map +1 -0
  58. package/dist/kernel-event-sync/index.js +13 -0
  59. package/dist/kernel-event-sync/index.js.map +1 -0
  60. package/dist/kernel-event-sync/lifecycle-emitters.js +160 -0
  61. package/dist/kernel-event-sync/lifecycle-emitters.js.map +1 -0
  62. package/dist/kernel-event-sync/narrow-emissions.js +89 -0
  63. package/dist/kernel-event-sync/narrow-emissions.js.map +1 -0
  64. package/dist/kernel-event-sync/software-delivery-emitters.js +297 -0
  65. package/dist/kernel-event-sync/software-delivery-emitters.js.map +1 -0
  66. package/dist/lane-lock.js +14 -1
  67. package/dist/lane-lock.js.map +1 -1
  68. package/dist/lane-suggest.js +21 -0
  69. package/dist/lane-suggest.js.map +1 -1
  70. package/dist/lumenflow-upgrade.js +7 -5
  71. package/dist/lumenflow-upgrade.js.map +1 -1
  72. package/dist/mem-context.js +145 -0
  73. package/dist/mem-context.js.map +1 -1
  74. package/dist/mem-create.js +39 -6
  75. package/dist/mem-create.js.map +1 -1
  76. package/dist/mem-inbox.js +16 -0
  77. package/dist/mem-inbox.js.map +1 -1
  78. package/dist/mem-roster.js +95 -0
  79. package/dist/mem-roster.js.map +1 -0
  80. package/dist/mem-signal.js +97 -2
  81. package/dist/mem-signal.js.map +1 -1
  82. package/dist/metrics-snapshot.js +3 -2
  83. package/dist/metrics-snapshot.js.map +1 -1
  84. package/dist/orchestrate-init-status.js +117 -2
  85. package/dist/orchestrate-init-status.js.map +1 -1
  86. package/dist/orchestrate-initiative.js +83 -10
  87. package/dist/orchestrate-initiative.js.map +1 -1
  88. package/dist/orchestrate-monitor-quality.js +289 -0
  89. package/dist/orchestrate-monitor-quality.js.map +1 -0
  90. package/dist/orchestrate-monitor.js +85 -0
  91. package/dist/orchestrate-monitor.js.map +1 -1
  92. package/dist/pack-validate.js +127 -2
  93. package/dist/pack-validate.js.map +1 -1
  94. package/dist/plan-create.js +18 -0
  95. package/dist/plan-create.js.map +1 -1
  96. package/dist/plan-link.js +13 -0
  97. package/dist/plan-link.js.map +1 -1
  98. package/dist/plan-promote.js +14 -0
  99. package/dist/plan-promote.js.map +1 -1
  100. package/dist/pre-commit-check.js +4 -3
  101. package/dist/pre-commit-check.js.map +1 -1
  102. package/dist/public-manifest.js +17 -3
  103. package/dist/public-manifest.js.map +1 -1
  104. package/dist/release.js +28 -10
  105. package/dist/release.js.map +1 -1
  106. package/dist/session-cross-link.js +139 -0
  107. package/dist/session-cross-link.js.map +1 -0
  108. package/dist/sidecar-manager.js +208 -0
  109. package/dist/sidecar-manager.js.map +1 -0
  110. package/dist/state-path-resolvers.js +18 -0
  111. package/dist/state-path-resolvers.js.map +1 -1
  112. package/dist/stream-heartbeat.js +151 -0
  113. package/dist/stream-heartbeat.js.map +1 -0
  114. package/dist/sync-templates.js +56 -2
  115. package/dist/sync-templates.js.map +1 -1
  116. package/dist/wu-block.js +47 -5
  117. package/dist/wu-block.js.map +1 -1
  118. package/dist/wu-claim-branch.js +8 -4
  119. package/dist/wu-claim-branch.js.map +1 -1
  120. package/dist/wu-claim-state.js +5 -3
  121. package/dist/wu-claim-state.js.map +1 -1
  122. package/dist/wu-claim-worktree.js +5 -3
  123. package/dist/wu-claim-worktree.js.map +1 -1
  124. package/dist/wu-claim.js +261 -9
  125. package/dist/wu-claim.js.map +1 -1
  126. package/dist/wu-done-auto-cleanup.js +3 -2
  127. package/dist/wu-done-auto-cleanup.js.map +1 -1
  128. package/dist/wu-done-git-ops.js +12 -8
  129. package/dist/wu-done-git-ops.js.map +1 -1
  130. package/dist/wu-done-preflight.js +3 -3
  131. package/dist/wu-done-preflight.js.map +1 -1
  132. package/dist/wu-done.js +46 -10
  133. package/dist/wu-done.js.map +1 -1
  134. package/dist/wu-lifecycle-sync/gate-scope-resolver.js +16 -0
  135. package/dist/wu-lifecycle-sync/gate-scope-resolver.js.map +1 -0
  136. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js +10 -0
  137. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js.map +1 -0
  138. package/dist/wu-prep.js +363 -22
  139. package/dist/wu-prep.js.map +1 -1
  140. package/dist/wu-prune.js +68 -27
  141. package/dist/wu-prune.js.map +1 -1
  142. package/dist/wu-release.js +34 -3
  143. package/dist/wu-release.js.map +1 -1
  144. package/dist/wu-review.js +167 -0
  145. package/dist/wu-review.js.map +1 -0
  146. package/dist/wu-spawn-prompt-builders.js +296 -40
  147. package/dist/wu-spawn-prompt-builders.js.map +1 -1
  148. package/dist/wu-spawn-strategy-resolver.js +126 -14
  149. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  150. package/dist/wu-unblock.js +52 -22
  151. package/dist/wu-unblock.js.map +1 -1
  152. package/package.json +13 -8
  153. package/packs/agent-runtime/agent-heartbeat.ts +163 -0
  154. package/packs/agent-runtime/auto-session-integration.ts +874 -0
  155. package/packs/agent-runtime/delegation-registry-schema.ts +220 -0
  156. package/packs/agent-runtime/delegation-registry-store.ts +269 -0
  157. package/packs/agent-runtime/delegation-tree.ts +328 -0
  158. package/packs/agent-runtime/index.ts +9 -0
  159. package/packs/agent-runtime/manifest.ts +109 -19
  160. package/packs/agent-runtime/manifest.yaml +150 -0
  161. package/packs/agent-runtime/memory-coordination-contract.ts +86 -0
  162. package/packs/agent-runtime/memory.d.ts +19 -0
  163. package/packs/agent-runtime/orchestration.ts +238 -23
  164. package/packs/agent-runtime/package.json +11 -2
  165. package/packs/agent-runtime/remote-controls/index.ts +7 -0
  166. package/packs/agent-runtime/remote-controls/operations.ts +399 -0
  167. package/packs/agent-runtime/remote-controls/port.ts +48 -0
  168. package/packs/agent-runtime/remote-controls/state-store.ts +258 -0
  169. package/packs/agent-runtime/remote-controls/types.ts +105 -0
  170. package/packs/agent-runtime/session-schema.ts +423 -0
  171. package/packs/agent-runtime/tool-impl/index.ts +1 -0
  172. package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +252 -0
  173. package/packs/agent-runtime/tool-impl/remote-controls.ts +273 -0
  174. package/packs/agent-runtime/tsconfig.json +1 -1
  175. package/packs/agent-runtime/turn-lifecycle-events.ts +501 -0
  176. package/packs/sidekick/channel-ingress.ts +137 -0
  177. package/packs/sidekick/manifest.ts +74 -0
  178. package/packs/sidekick/manifest.yaml +88 -0
  179. package/packs/sidekick/package.json +3 -1
  180. package/packs/sidekick/sidekick-events.ts +517 -0
  181. package/packs/sidekick/src/adapters/cloud-queue.ts +101 -0
  182. package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +378 -0
  183. package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +224 -0
  184. package/packs/sidekick/src/domain/channel.types.ts +84 -0
  185. package/packs/sidekick/src/ports/channel-bridge.port.ts +75 -0
  186. package/packs/sidekick/src/routines/commit.ts +74 -0
  187. package/packs/sidekick/tool-impl/channel-tools.ts +47 -0
  188. package/packs/sidekick/tool-impl/memory-tools.ts +17 -0
  189. package/packs/sidekick/tool-impl/routine-commit.ts +102 -0
  190. package/packs/sidekick/tool-impl/routine-tools.ts +67 -7
  191. package/packs/sidekick/tool-impl/runtime-context.ts +4 -0
  192. package/packs/sidekick/tool-impl/storage.ts +3 -0
  193. package/packs/sidekick/tool-impl/system-tools.ts +7 -0
  194. package/packs/sidekick/tool-impl/task-tools.ts +46 -0
  195. package/packs/sidekick/tsconfig.json +1 -1
  196. package/packs/software-delivery/manifest-schema.ts +30 -0
  197. package/packs/software-delivery/manifest.ts +160 -11
  198. package/packs/software-delivery/manifest.yaml +210 -230
  199. package/packs/software-delivery/package.json +88 -3
  200. package/packs/software-delivery/src/commands/index.ts +5 -0
  201. package/packs/software-delivery/src/config/delivery-review-contract.ts +20 -0
  202. package/packs/software-delivery/src/config/env-accessors.ts +19 -0
  203. package/packs/software-delivery/src/config/index.ts +8 -0
  204. package/packs/software-delivery/src/config/normalize-config-keys.ts +19 -0
  205. package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +436 -0
  206. package/packs/software-delivery/src/config/workspace-reader.ts +310 -0
  207. package/packs/software-delivery/src/constants/backlog-patterns.ts +31 -0
  208. package/packs/software-delivery/src/constants/client-ids.ts +19 -0
  209. package/packs/software-delivery/src/constants/config-contract.ts +7 -0
  210. package/packs/software-delivery/src/constants/docs-layout-presets.ts +50 -0
  211. package/packs/software-delivery/src/constants/duration-constants.ts +20 -0
  212. package/packs/software-delivery/src/constants/gate-constants.ts +32 -0
  213. package/packs/software-delivery/src/constants/index.ts +29 -0
  214. package/packs/software-delivery/src/constants/lock-constants.ts +35 -0
  215. package/packs/software-delivery/src/constants/object-guards.ts +12 -0
  216. package/packs/software-delivery/src/constants/section-headings.ts +107 -0
  217. package/packs/software-delivery/src/constants/wu-cli-constants.ts +485 -0
  218. package/packs/software-delivery/src/constants/wu-domain-constants.ts +466 -0
  219. package/packs/software-delivery/src/constants/wu-git-constants.ts +7 -0
  220. package/packs/software-delivery/src/constants/wu-id-format.ts +327 -0
  221. package/packs/software-delivery/src/constants/wu-paths-constants.ts +358 -0
  222. package/packs/software-delivery/src/constants/wu-statuses.ts +287 -0
  223. package/packs/software-delivery/src/constants/wu-type-helpers.ts +67 -0
  224. package/packs/software-delivery/src/constants/wu-ui-constants.ts +267 -0
  225. package/packs/software-delivery/src/constants/wu-validation-constants.ts +73 -0
  226. package/packs/software-delivery/src/domain/index.ts +5 -0
  227. package/packs/software-delivery/src/domain/orchestration.constants.ts +168 -0
  228. package/packs/software-delivery/src/domain/orchestration.schemas.ts +239 -0
  229. package/packs/software-delivery/src/domain/orchestration.types.ts +178 -0
  230. package/packs/software-delivery/src/methodology/incremental-test.ts +90 -0
  231. package/packs/software-delivery/src/methodology/index.ts +6 -0
  232. package/packs/software-delivery/src/methodology/manual-test-validator.ts +292 -0
  233. package/packs/software-delivery/src/policy/coverage-gate.ts +270 -0
  234. package/packs/software-delivery/src/policy/gates-agent-mode.ts +223 -0
  235. package/packs/software-delivery/src/policy/gates-config-internal.ts +121 -0
  236. package/packs/software-delivery/src/policy/gates-config.ts +293 -0
  237. package/packs/software-delivery/src/policy/gates-coverage.ts +247 -0
  238. package/packs/software-delivery/src/policy/gates-presets.ts +134 -0
  239. package/packs/software-delivery/src/policy/gates-schemas.ts +173 -0
  240. package/packs/software-delivery/src/policy/index.ts +22 -0
  241. package/packs/software-delivery/src/policy/package-manager-resolver.ts +319 -0
  242. package/packs/software-delivery/src/policy/resolve-policy.ts +518 -0
  243. package/packs/software-delivery/src/ports/config.ports.ts +90 -0
  244. package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +125 -0
  245. package/packs/software-delivery/src/ports/index.ts +10 -0
  246. package/packs/software-delivery/src/ports/sync-validator.ports.ts +59 -0
  247. package/packs/software-delivery/src/ports/wu-helpers.ports.ts +168 -0
  248. package/packs/software-delivery/src/ports/wu-state.ports.ts +241 -0
  249. package/packs/software-delivery/src/primitives/index.ts +5 -0
  250. package/packs/software-delivery/src/runtime/index.ts +6 -0
  251. package/packs/software-delivery/src/runtime/work-classifier.ts +561 -0
  252. package/packs/software-delivery/src/sandbox/index.ts +10 -0
  253. package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +118 -0
  254. package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +88 -0
  255. package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +154 -0
  256. package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +47 -0
  257. package/packs/software-delivery/src/sandbox/sandbox-profile.ts +153 -0
  258. package/packs/software-delivery/src/schemas/index.ts +5 -0
  259. package/packs/software-delivery/src/state/date-utils.ts +158 -0
  260. package/packs/software-delivery/src/state/index.ts +15 -0
  261. package/packs/software-delivery/src/state/state-machine.ts +119 -0
  262. package/packs/software-delivery/src/state/wu-doc-types.ts +51 -0
  263. package/packs/software-delivery/src/state/wu-paths.ts +381 -0
  264. package/packs/software-delivery/src/state/wu-schema.ts +1139 -0
  265. package/packs/software-delivery/src/state/wu-state-schema.ts +255 -0
  266. package/packs/software-delivery/src/state/wu-yaml.ts +338 -0
  267. package/packs/software-delivery/src/types.d.ts +16 -0
  268. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +18 -0
  269. package/packs/software-delivery/tsconfig.json +28 -2
  270. package/templates/core/AGENTS.md.template +76 -17
  271. package/templates/core/LUMENFLOW.md.template +265 -66
  272. package/templates/core/_frameworks/lumenflow/wu-sizing-guide.md.template +180 -116
  273. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +26 -8
  274. package/templates/core/ai/onboarding/existing-project-bootstrap.md.template +171 -0
  275. package/templates/core/ai/onboarding/first-15-mins.md.template +3 -1
  276. package/templates/core/ai/onboarding/first-wu-mistakes.md.template +1 -1
  277. package/templates/core/ai/onboarding/initiative-orchestration.md.template +46 -30
  278. package/templates/core/ai/onboarding/quick-ref-commands.md.template +36 -33
  279. package/templates/core/ai/onboarding/release-process.md.template +8 -7
  280. package/templates/core/ai/onboarding/starting-prompt.md.template +2 -0
  281. package/templates/core/ai/onboarding/troubleshooting-wu-done.md.template +62 -0
  282. package/templates/vendors/claude/.claude/CLAUDE.md.template +29 -54
  283. package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +24 -52
  284. package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +24 -52
  285. package/packs/agent-runtime/.turbo/turbo-build.log +0 -4
  286. package/packs/sidekick/.turbo/turbo-build.log +0 -4
  287. package/packs/software-delivery/.turbo/turbo-build.log +0 -4
@@ -0,0 +1,500 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ import fg from 'fast-glob';
6
+ import { format as formatWithPrettier, resolveConfig as resolvePrettierConfig } from 'prettier';
7
+ import YAML from 'yaml';
8
+ import { createError, ErrorCodes } from '@lumenflow/core/error-handler';
9
+ import { updateMergeBlock } from './merge-block.js';
10
+ import { runCLI } from './cli-entry-point.js';
11
+ const UTF8_ENCODING = 'utf-8';
12
+ const DEFAULT_PACKS_ROOT = path.join('packages', '@lumenflow', 'packs');
13
+ const DEFAULT_DOCS_ROOT = path.join('apps', 'docs', 'src', 'content', 'docs', 'packs');
14
+ const MANIFEST_GLOB = '*/manifest.yaml';
15
+ const EVENTS_SECTION = 'events';
16
+ const TOOLS_SECTION = 'tools';
17
+ const PAGE_FILE_NAME = 'index.mdx';
18
+ const GENERATED_WITH_COMMAND = 'pnpm docs:generate:pack-reference';
19
+ const PACK_TITLES = {
20
+ 'agent-runtime': 'Agent Runtime',
21
+ sidekick: 'Sidekick',
22
+ 'software-delivery': 'Software Delivery',
23
+ };
24
+ const SOFTWARE_DELIVERY_EVENT_KINDS = {
25
+ GATE_STARTED: 'software-delivery:gate_started',
26
+ GATE_PASSED: 'software-delivery:gate_passed',
27
+ GATE_FAILED: 'software-delivery:gate_failed',
28
+ CO_CHANGE_RULE_FIRED: 'software-delivery:co_change_rule_fired',
29
+ CONDITIONAL_COMMAND_FIRED: 'software-delivery:conditional_command_fired',
30
+ LANE_WIP_BREACHED: 'software-delivery:lane_wip_breached',
31
+ LANE_LOCKED: 'software-delivery:lane_locked',
32
+ LANE_UNLOCKED: 'software-delivery:lane_unlocked',
33
+ LANE_SUGGESTION_EMITTED: 'software-delivery:lane_suggestion_emitted',
34
+ INITIATIVE_CREATED: 'software-delivery:initiative_created',
35
+ INITIATIVE_CLOSED: 'software-delivery:initiative_closed',
36
+ INITIATIVE_PHASE_ADVANCED: 'software-delivery:initiative_phase_advanced',
37
+ PLAN_CREATED: 'software-delivery:plan_created',
38
+ PLAN_LINKED: 'software-delivery:plan_linked',
39
+ PLAN_PROMOTED: 'software-delivery:plan_promoted',
40
+ };
41
+ const SOFTWARE_DELIVERY_EVENT_DOCS = {
42
+ [SOFTWARE_DELIVERY_EVENT_KINDS.GATE_STARTED]: {
43
+ payloadShape: '{ wu_id, lane, gate_name, channel_id, seq }',
44
+ backpressurePolicy: 'ephemeral',
45
+ emissionSearchTerm: 'buildGateStartedEvent(',
46
+ },
47
+ [SOFTWARE_DELIVERY_EVENT_KINDS.GATE_PASSED]: {
48
+ payloadShape: '{ wu_id, lane, gate_name, duration_ms, channel_id, seq }',
49
+ backpressurePolicy: 'ephemeral',
50
+ emissionSearchTerm: 'buildGatePassedEvent(',
51
+ },
52
+ [SOFTWARE_DELIVERY_EVENT_KINDS.GATE_FAILED]: {
53
+ payloadShape: '{ wu_id, lane, gate_name, duration_ms, reason, channel_id, seq }',
54
+ backpressurePolicy: 'ephemeral',
55
+ emissionSearchTerm: 'buildGateFailedEvent(',
56
+ },
57
+ [SOFTWARE_DELIVERY_EVENT_KINDS.CO_CHANGE_RULE_FIRED]: {
58
+ payloadShape: '{ wu_id, rule_id, triggered_paths, channel_id, seq }',
59
+ backpressurePolicy: 'ephemeral',
60
+ emissionSearchTerm: 'buildCoChangeRuleFiredEvent(',
61
+ },
62
+ [SOFTWARE_DELIVERY_EVENT_KINDS.CONDITIONAL_COMMAND_FIRED]: {
63
+ payloadShape: '{ wu_id, command_id, trigger, channel_id, seq }',
64
+ backpressurePolicy: 'ephemeral',
65
+ emissionSearchTerm: 'buildConditionalCommandFiredEvent(',
66
+ },
67
+ [SOFTWARE_DELIVERY_EVENT_KINDS.LANE_WIP_BREACHED]: {
68
+ payloadShape: '{ lane, wip_limit, current_wip, channel_id, seq }',
69
+ backpressurePolicy: 'ephemeral',
70
+ emissionSearchTerm: 'buildLaneWipBreachedEvent(',
71
+ },
72
+ [SOFTWARE_DELIVERY_EVENT_KINDS.LANE_LOCKED]: {
73
+ payloadShape: '{ lane, held_by, channel_id, seq }',
74
+ backpressurePolicy: 'ephemeral',
75
+ emissionSearchTerm: 'buildLaneLockedEvent(',
76
+ },
77
+ [SOFTWARE_DELIVERY_EVENT_KINDS.LANE_UNLOCKED]: {
78
+ payloadShape: '{ lane, channel_id, seq }',
79
+ backpressurePolicy: 'ephemeral',
80
+ emissionSearchTerm: 'buildLaneUnlockedEvent(',
81
+ },
82
+ [SOFTWARE_DELIVERY_EVENT_KINDS.LANE_SUGGESTION_EMITTED]: {
83
+ payloadShape: '{ wu_id, suggested_lane, confidence, channel_id, seq }',
84
+ backpressurePolicy: 'ephemeral',
85
+ emissionSearchTerm: 'buildLaneSuggestionEmittedEvent(',
86
+ },
87
+ [SOFTWARE_DELIVERY_EVENT_KINDS.INITIATIVE_CREATED]: {
88
+ payloadShape: '{ initiative, wu_count, channel_id, seq }',
89
+ backpressurePolicy: 'ephemeral',
90
+ emissionSearchTerm: 'buildInitiativeCreatedEvent(',
91
+ },
92
+ [SOFTWARE_DELIVERY_EVENT_KINDS.INITIATIVE_CLOSED]: {
93
+ payloadShape: '{ initiative, reason, channel_id, seq }',
94
+ backpressurePolicy: 'ephemeral',
95
+ emissionSearchTerm: 'buildInitiativeClosedEvent(',
96
+ },
97
+ [SOFTWARE_DELIVERY_EVENT_KINDS.INITIATIVE_PHASE_ADVANCED]: {
98
+ payloadShape: '{ initiative, from_phase, to_phase, channel_id, seq }',
99
+ backpressurePolicy: 'ephemeral',
100
+ emissionSearchTerm: 'buildInitiativePhaseAdvancedEvent(',
101
+ },
102
+ [SOFTWARE_DELIVERY_EVENT_KINDS.PLAN_CREATED]: {
103
+ payloadShape: '{ plan_id, initiative, channel_id, seq }',
104
+ backpressurePolicy: 'ephemeral',
105
+ emissionSearchTerm: 'buildPlanCreatedEvent(',
106
+ },
107
+ [SOFTWARE_DELIVERY_EVENT_KINDS.PLAN_LINKED]: {
108
+ payloadShape: '{ plan_id, wu_id, channel_id, seq }',
109
+ backpressurePolicy: 'ephemeral',
110
+ emissionSearchTerm: 'buildPlanLinkedEvent(',
111
+ },
112
+ [SOFTWARE_DELIVERY_EVENT_KINDS.PLAN_PROMOTED]: {
113
+ payloadShape: '{ plan_id, promoted_wu_id, channel_id, seq }',
114
+ backpressurePolicy: 'ephemeral',
115
+ emissionSearchTerm: 'buildPlanPromotedEvent(',
116
+ },
117
+ };
118
+ const CODE_GLOBS = ['packages/@lumenflow/cli/src/**/*.ts', 'packages/@lumenflow/cli/src/**/*.tsx'];
119
+ const CODE_IGNORE = ['**/__tests__/**', '**/*.test.ts', '**/*.test.tsx', '**/*.spec.ts'];
120
+ const EMITTER_DEFINITION_FILE = path.join('packages', '@lumenflow', 'cli', 'src', 'kernel-event-sync', 'software-delivery-emitters.ts');
121
+ const GENERATOR_SOURCE_FILE = path.join('packages', '@lumenflow', 'cli', 'src', 'docs-generate-pack-reference.ts');
122
+ function formatUsage() {
123
+ return [
124
+ 'Usage: docs:generate:pack-reference [options]',
125
+ '',
126
+ 'Generate Starlight /packs/<pack>/events/ and /tools/ reference pages from pack manifests.',
127
+ '',
128
+ 'Options:',
129
+ ' --help Show this help message',
130
+ ].join('\n');
131
+ }
132
+ function resolvePackTitle(packId) {
133
+ return PACK_TITLES[packId] ?? packId;
134
+ }
135
+ function resolveProjectRoot(projectRoot) {
136
+ return path.resolve(projectRoot ?? process.cwd());
137
+ }
138
+ function resolvePacksRoot(projectRoot, packsRoot) {
139
+ return path.resolve(projectRoot, packsRoot ?? DEFAULT_PACKS_ROOT);
140
+ }
141
+ function resolveDocsRoot(projectRoot, docsRoot) {
142
+ return path.resolve(projectRoot, docsRoot ?? DEFAULT_DOCS_ROOT);
143
+ }
144
+ function relativeToProject(projectRoot, targetPath) {
145
+ return path.relative(projectRoot, targetPath).split(path.sep).join('/');
146
+ }
147
+ function loadPackManifest(manifestPath) {
148
+ const rawContent = readFileSync(manifestPath, UTF8_ENCODING);
149
+ return parseManifestRecord(YAML.parse(rawContent), manifestPath);
150
+ }
151
+ function sortManifestPaths(paths) {
152
+ return [...paths].sort((left, right) => left.localeCompare(right));
153
+ }
154
+ function discoverManifestPaths(packsRoot) {
155
+ return sortManifestPaths(fg.sync(MANIFEST_GLOB, {
156
+ cwd: packsRoot,
157
+ absolute: true,
158
+ onlyFiles: true,
159
+ }));
160
+ }
161
+ function stringifyJsonBlock(schema) {
162
+ if (!schema || typeof schema !== 'object') {
163
+ return 'Not declared in the pack manifest.';
164
+ }
165
+ return `\`\`\`json\n${JSON.stringify(schema, null, 2)}\n\`\`\``;
166
+ }
167
+ function formatScope(scope) {
168
+ if (scope.type === 'path') {
169
+ return `\`path ${scope.access} ${scope.pattern}\``;
170
+ }
171
+ if (scope.type === 'network') {
172
+ if (scope.posture === 'allowlist') {
173
+ const entries = scope.allowlist_entries?.map((entry) => `\`${entry}\``).join(', ') ?? '[]';
174
+ return `\`network allowlist\` (${entries})`;
175
+ }
176
+ return `\`network ${scope.posture}\``;
177
+ }
178
+ return `\`${JSON.stringify(scope)}\``;
179
+ }
180
+ function formatApprovals(approvals) {
181
+ if (approvals.length === 0) {
182
+ return 'None';
183
+ }
184
+ return approvals.map((approval) => `\`${approval}\``).join(', ');
185
+ }
186
+ function buildToolSummaryTable(manifest) {
187
+ const rows = manifest.tools
188
+ .map((tool) => {
189
+ const approvals = formatApprovals(tool.required_approvals ?? []);
190
+ const scopes = tool.required_scopes.map(formatScope).join('<br />');
191
+ return `| \`${tool.name}\` | \`${tool.permission}\` | ${approvals} | ${scopes} |`;
192
+ })
193
+ .join('\n');
194
+ return [
195
+ '## Tool Summary',
196
+ '',
197
+ '| Tool | Permission | Required approvals | Required scopes |',
198
+ '| --- | --- | --- | --- |',
199
+ rows,
200
+ ].join('\n');
201
+ }
202
+ function buildToolDetails(manifest) {
203
+ if (manifest.tools.length === 0) {
204
+ return '## Tool Details\n\nNo tools are declared in this pack manifest.';
205
+ }
206
+ const sections = manifest.tools.map((tool) => [
207
+ `### \`${tool.name}\``,
208
+ '',
209
+ `- Permission: \`${tool.permission}\``,
210
+ `- Required approvals: ${formatApprovals(tool.required_approvals ?? [])}`,
211
+ `- Required scopes: ${tool.required_scopes.map(formatScope).join(', ')}`,
212
+ '',
213
+ '#### Input schema',
214
+ '',
215
+ stringifyJsonBlock(tool.input_schema),
216
+ '',
217
+ '#### Output schema',
218
+ '',
219
+ stringifyJsonBlock(tool.output_schema),
220
+ ].join('\n'));
221
+ return ['## Tool Details', '', ...sections].join('\n\n');
222
+ }
223
+ function asRecord(value, label) {
224
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
225
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${label}: expected an object.`);
226
+ }
227
+ return value;
228
+ }
229
+ function asString(value, label) {
230
+ if (typeof value !== 'string' || value.trim().length === 0) {
231
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${label}: expected a non-empty string.`);
232
+ }
233
+ return value;
234
+ }
235
+ function asStringArray(value, label) {
236
+ if (value === undefined) {
237
+ return [];
238
+ }
239
+ if (!Array.isArray(value)) {
240
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${label}: expected an array.`);
241
+ }
242
+ return value.map((entry, index) => asString(entry, `${label}[${index}]`));
243
+ }
244
+ function parseScope(input, label) {
245
+ const scope = asRecord(input, label);
246
+ const scopeType = asString(scope.type, `${label}.type`);
247
+ if (scopeType === 'path') {
248
+ return {
249
+ type: 'path',
250
+ pattern: asString(scope.pattern, `${label}.pattern`),
251
+ access: asString(scope.access, `${label}.access`),
252
+ };
253
+ }
254
+ if (scopeType === 'network') {
255
+ return {
256
+ type: 'network',
257
+ posture: asString(scope.posture, `${label}.posture`),
258
+ allowlist_entries: asStringArray(scope.allowlist_entries, `${label}.allowlist_entries`),
259
+ };
260
+ }
261
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${label}: unsupported scope type "${scopeType}".`);
262
+ }
263
+ function parseTool(input, label) {
264
+ const tool = asRecord(input, label);
265
+ const requiredScopesValue = tool.required_scopes;
266
+ if (!Array.isArray(requiredScopesValue)) {
267
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${label}.required_scopes: expected an array.`);
268
+ }
269
+ return {
270
+ name: asString(tool.name, `${label}.name`),
271
+ permission: asString(tool.permission ?? 'read', `${label}.permission`),
272
+ required_scopes: requiredScopesValue.map((scope, index) => parseScope(scope, `${label}.required_scopes[${index}]`)),
273
+ input_schema: tool.input_schema,
274
+ output_schema: tool.output_schema,
275
+ required_approvals: asStringArray(tool.required_approvals, `${label}.required_approvals`),
276
+ };
277
+ }
278
+ function parseManifestRecord(value, manifestPath) {
279
+ const manifest = asRecord(value, manifestPath);
280
+ const toolsValue = manifest.tools ?? [];
281
+ if (!Array.isArray(toolsValue)) {
282
+ throw createError(ErrorCodes.PARSE_ERROR, `Failed to parse ${manifestPath}: tools must be an array.`);
283
+ }
284
+ return {
285
+ id: asString(manifest.id, `${manifestPath}: id`),
286
+ tools: toolsValue.map((tool, index) => parseTool(tool, `${manifestPath}: tools[${index}]`)),
287
+ emitted_event_kinds: asStringArray(manifest.emitted_event_kinds, `${manifestPath}: emitted_event_kinds`),
288
+ subscribed_event_kinds: asStringArray(manifest.subscribed_event_kinds, `${manifestPath}: subscribed_event_kinds`),
289
+ };
290
+ }
291
+ function lookupEventDocs(eventKind) {
292
+ const metadata = SOFTWARE_DELIVERY_EVENT_DOCS[eventKind];
293
+ if (metadata) {
294
+ return metadata;
295
+ }
296
+ return {
297
+ payloadShape: 'Manifest-declared kind; typed payload summary is not yet published for this pack.',
298
+ backpressurePolicy: 'not declared',
299
+ };
300
+ }
301
+ function buildCodeIndex(projectRoot) {
302
+ const files = fg.sync(CODE_GLOBS, {
303
+ cwd: projectRoot,
304
+ absolute: true,
305
+ onlyFiles: true,
306
+ ignore: CODE_IGNORE,
307
+ });
308
+ return files
309
+ .map((filePath) => ({
310
+ relativePath: relativeToProject(projectRoot, filePath),
311
+ lines: readFileSync(filePath, UTF8_ENCODING).split('\n'),
312
+ }))
313
+ .filter((entry) => entry.relativePath !== EMITTER_DEFINITION_FILE &&
314
+ entry.relativePath !== GENERATOR_SOURCE_FILE);
315
+ }
316
+ function findEmissionSites(codeIndex, searchTerm) {
317
+ if (!searchTerm) {
318
+ return [];
319
+ }
320
+ const matches = [];
321
+ for (const file of codeIndex) {
322
+ file.lines.forEach((line, index) => {
323
+ if (line.includes(searchTerm)) {
324
+ matches.push(`${file.relativePath}:${index + 1}`);
325
+ }
326
+ });
327
+ }
328
+ return matches;
329
+ }
330
+ function buildEventRows(manifest, codeIndex) {
331
+ const emittedRows = manifest.emitted_event_kinds.map((kind) => {
332
+ const metadata = lookupEventDocs(kind);
333
+ return {
334
+ kind,
335
+ direction: 'emitted',
336
+ payloadShape: metadata.payloadShape,
337
+ backpressurePolicy: metadata.backpressurePolicy,
338
+ emissionSites: findEmissionSites(codeIndex, metadata.emissionSearchTerm),
339
+ };
340
+ });
341
+ const subscribedRows = manifest.subscribed_event_kinds.map((kind) => ({
342
+ kind,
343
+ direction: 'subscribed',
344
+ payloadShape: 'Inbound handler surface declared by the pack manifest.',
345
+ backpressurePolicy: 'handled by subscriber',
346
+ emissionSites: [],
347
+ }));
348
+ return [...emittedRows, ...subscribedRows];
349
+ }
350
+ function renderEmissionSitesTableCell(emissionSites) {
351
+ if (emissionSites.length === 0) {
352
+ return 'Not found';
353
+ }
354
+ return emissionSites.map((site) => `\`${site}\``).join('<br />');
355
+ }
356
+ function buildEventSummary(rows) {
357
+ if (rows.length === 0) {
358
+ return '## Event Summary\n\nNo manifest-declared event kinds for this pack yet.';
359
+ }
360
+ const tableRows = rows
361
+ .map((row) => `| \`${row.kind}\` | \`${row.direction}\` | ${row.payloadShape} | \`${row.backpressurePolicy}\` | ${renderEmissionSitesTableCell(row.emissionSites)} |`)
362
+ .join('\n');
363
+ return [
364
+ '## Event Summary',
365
+ '',
366
+ '| Kind | Direction | Payload shape | Backpressure policy | Emission sites |',
367
+ '| --- | --- | --- | --- | --- |',
368
+ tableRows,
369
+ ].join('\n');
370
+ }
371
+ function buildEventDetails(rows) {
372
+ if (rows.length === 0) {
373
+ return '';
374
+ }
375
+ const sections = rows.map((row) => [
376
+ `### \`${row.kind}\``,
377
+ '',
378
+ `- Direction: \`${row.direction}\``,
379
+ `- Payload shape: ${row.payloadShape}`,
380
+ `- Backpressure policy: \`${row.backpressurePolicy}\``,
381
+ `- Emission sites: ${row.emissionSites.length > 0
382
+ ? row.emissionSites.map((site) => `\`${site}\``).join(', ')
383
+ : 'Not found in source scan'}`,
384
+ ].join('\n'));
385
+ return ['## Event Details', '', ...sections].join('\n\n');
386
+ }
387
+ function buildGeneratedPageBody(sections) {
388
+ return sections.filter((section) => section.trim().length > 0).join('\n\n');
389
+ }
390
+ async function formatReferencePageContent(content, pagePath) {
391
+ const prettierConfig = (await resolvePrettierConfig(pagePath)) ?? {};
392
+ return formatWithPrettier(content, {
393
+ ...prettierConfig,
394
+ filepath: pagePath,
395
+ });
396
+ }
397
+ function createPageScaffold(title, description) {
398
+ return [
399
+ '---',
400
+ `title: ${title}`,
401
+ `description: ${description}`,
402
+ '---',
403
+ '',
404
+ `This page is generated by \`${GENERATED_WITH_COMMAND}\`. Add any pack-specific notes outside the managed block below; reruns preserve them.`,
405
+ '',
406
+ ].join('\n');
407
+ }
408
+ async function updateReferencePage(options) {
409
+ const { projectRoot, docsRoot, manifest, section, generatedBody } = options;
410
+ const titlePrefix = resolvePackTitle(manifest.id);
411
+ const pageTitle = section === EVENTS_SECTION ? `${titlePrefix} Events` : `${titlePrefix} Tools`;
412
+ const pageDescription = section === EVENTS_SECTION
413
+ ? `Auto-generated event reference for the ${titlePrefix} Pack`
414
+ : `Auto-generated tool catalog for the ${titlePrefix} Pack`;
415
+ const pagePath = path.join(docsRoot, manifest.id, section, PAGE_FILE_NAME);
416
+ const relativePath = relativeToProject(projectRoot, pagePath);
417
+ const fileExisted = existsSync(pagePath);
418
+ mkdirSync(path.dirname(pagePath), { recursive: true });
419
+ const existingContent = fileExisted
420
+ ? readFileSync(pagePath, UTF8_ENCODING)
421
+ : createPageScaffold(pageTitle, pageDescription);
422
+ const mergeResult = updateMergeBlock(existingContent, generatedBody);
423
+ const formattedContent = await formatReferencePageContent(mergeResult.content, pagePath);
424
+ if (formattedContent === existingContent) {
425
+ return { relativePath, status: 'unchanged' };
426
+ }
427
+ writeFileSync(pagePath, formattedContent, UTF8_ENCODING);
428
+ return {
429
+ relativePath,
430
+ status: fileExisted ? 'updated' : 'created',
431
+ };
432
+ }
433
+ function pushResult(result, update) {
434
+ if (update.status === 'created') {
435
+ result.created.push(update.relativePath);
436
+ return;
437
+ }
438
+ if (update.status === 'updated') {
439
+ result.updated.push(update.relativePath);
440
+ return;
441
+ }
442
+ result.unchanged.push(update.relativePath);
443
+ }
444
+ export async function generatePackReferenceDocs(options = {}) {
445
+ const projectRoot = resolveProjectRoot(options.projectRoot);
446
+ const packsRoot = resolvePacksRoot(projectRoot, options.packsRoot);
447
+ const docsRoot = resolveDocsRoot(projectRoot, options.docsRoot);
448
+ const manifestPaths = discoverManifestPaths(packsRoot);
449
+ const codeIndex = buildCodeIndex(projectRoot);
450
+ const result = {
451
+ created: [],
452
+ updated: [],
453
+ unchanged: [],
454
+ };
455
+ for (const manifestPath of manifestPaths) {
456
+ const manifest = loadPackManifest(manifestPath);
457
+ const eventRows = buildEventRows(manifest, codeIndex);
458
+ const eventsBody = buildGeneratedPageBody([
459
+ buildEventSummary(eventRows),
460
+ buildEventDetails(eventRows),
461
+ ]);
462
+ const toolsBody = buildGeneratedPageBody([
463
+ buildToolSummaryTable(manifest),
464
+ buildToolDetails(manifest),
465
+ ]);
466
+ pushResult(result, await updateReferencePage({
467
+ projectRoot,
468
+ docsRoot,
469
+ manifest,
470
+ section: EVENTS_SECTION,
471
+ generatedBody: eventsBody,
472
+ }));
473
+ pushResult(result, await updateReferencePage({
474
+ projectRoot,
475
+ docsRoot,
476
+ manifest,
477
+ section: TOOLS_SECTION,
478
+ generatedBody: toolsBody,
479
+ }));
480
+ }
481
+ return result;
482
+ }
483
+ export async function main(argv = process.argv.slice(2)) {
484
+ if (argv.includes('--help')) {
485
+ console.log(formatUsage());
486
+ return;
487
+ }
488
+ if (argv.length > 0) {
489
+ throw createError(ErrorCodes.INVALID_ARGUMENT, `Unknown option(s): ${argv.join(', ')}\n\n${formatUsage()}`);
490
+ }
491
+ const result = await generatePackReferenceDocs();
492
+ console.log('[docs:generate:pack-reference] Pack reference generation complete.');
493
+ console.log(` Created: ${result.created.length}`);
494
+ console.log(` Updated: ${result.updated.length}`);
495
+ console.log(` Unchanged: ${result.unchanged.length}`);
496
+ }
497
+ if (import.meta.main) {
498
+ void runCLI(main);
499
+ }
500
+ //# sourceMappingURL=docs-generate-pack-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-generate-pack-reference.js","sourceRoot":"","sources":["../src/docs-generate-pack-reference.ts"],"names":[],"mappings":"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"}
package/dist/docs-sync.js CHANGED
@@ -18,6 +18,7 @@ import { isMainBranch, isInWorktree } from '@lumenflow/core/core/worktree-guard'
18
18
  // WU-2373: Import micro-worktree for isolation on main branch
19
19
  import { withMicroWorktree, isInGitWorktree } from '@lumenflow/core/micro-worktree';
20
20
  import { SCAFFOLDED_ONBOARDING_TEMPLATE_PATHS } from './onboarding-template-paths.js';
21
+ import { PUBLIC_MANIFEST } from './public-manifest.js';
21
22
  import { resolveCliTemplatesDir } from './template-directory-resolver.js';
22
23
  import { updateMergeBlock, extractMergeBlock, MARKERS } from './merge-block.js';
23
24
  /**
@@ -71,6 +72,119 @@ function resolveDocsSyncDirectories(targetDir) {
71
72
  export function getTemplatesDir() {
72
73
  return resolveCliTemplatesDir();
73
74
  }
75
+ const CANONICAL_COMMAND_DOC_TEMPLATE_PATHS = Object.freeze([
76
+ 'core/ai/onboarding/quick-ref-commands.md.template',
77
+ 'core/ai/onboarding/starting-prompt.md.template',
78
+ ]);
79
+ const DOCS_SYNC_MANAGED_ONBOARDING_DEFAULT = true;
80
+ const DOC_COMMAND_ALLOWLIST = new Set([
81
+ 'add',
82
+ 'bootstrap',
83
+ 'build',
84
+ 'build:dist',
85
+ 'changeset',
86
+ 'clean',
87
+ 'create',
88
+ 'dev',
89
+ 'docs:generate',
90
+ 'docs:validate',
91
+ 'format',
92
+ 'format:check',
93
+ 'install',
94
+ 'lint',
95
+ 'pre-release:check',
96
+ 'release',
97
+ 'release:changeset',
98
+ 'setup',
99
+ 'spec:linter',
100
+ 'strict:progress',
101
+ 'test',
102
+ 'typecheck',
103
+ 'update',
104
+ 'version',
105
+ ]);
106
+ const PNPM_COMMAND_PATTERN = /\bpnpm\s+([a-z0-9][a-z0-9:-]*)\b/gi;
107
+ const NPX_LUMENFLOW_COMMAND_PATTERN = /\bnpx\s+lumenflow(?:\s+([a-z0-9:-]+))?\b/gi;
108
+ const MARKDOWN_FENCE_PATTERN = /```[a-z0-9-]*\n([\s\S]*?)```/gi;
109
+ const INLINE_CODE_PATTERN = /`([^`\n]+)`/g;
110
+ function buildKnownDocumentedCommandNames() {
111
+ return new Set([...PUBLIC_MANIFEST.map((command) => command.name), ...DOC_COMMAND_ALLOWLIST]);
112
+ }
113
+ function normalizeDocumentedCommand(rawCommand) {
114
+ if (rawCommand === 'commands') {
115
+ return 'lumenflow:commands';
116
+ }
117
+ if (rawCommand.includes(':')) {
118
+ return rawCommand;
119
+ }
120
+ return `lumenflow:${rawCommand}`;
121
+ }
122
+ export function extractDocumentedCommandNames(content) {
123
+ const commands = new Set();
124
+ const codeSegments = [];
125
+ let remainingContent = content;
126
+ for (const match of content.matchAll(MARKDOWN_FENCE_PATTERN)) {
127
+ const segment = match[1]?.trim();
128
+ if (segment) {
129
+ codeSegments.push(segment);
130
+ }
131
+ remainingContent = remainingContent.replace(match[0], '\n');
132
+ }
133
+ for (const match of remainingContent.matchAll(INLINE_CODE_PATTERN)) {
134
+ const segment = match[1]?.trim();
135
+ if (segment) {
136
+ codeSegments.push(segment);
137
+ }
138
+ }
139
+ for (const segment of codeSegments) {
140
+ for (const match of segment.matchAll(PNPM_COMMAND_PATTERN)) {
141
+ const command = match[1]?.trim();
142
+ if (command) {
143
+ commands.add(command);
144
+ }
145
+ }
146
+ for (const match of segment.matchAll(NPX_LUMENFLOW_COMMAND_PATTERN)) {
147
+ const subcommand = match[1]?.trim();
148
+ commands.add(subcommand ? normalizeDocumentedCommand(subcommand) : 'lumenflow');
149
+ }
150
+ }
151
+ return [...commands];
152
+ }
153
+ export function findUnknownCommandDocReferences(sources) {
154
+ const knownCommands = buildKnownDocumentedCommandNames();
155
+ const issues = [];
156
+ for (const source of sources) {
157
+ for (const command of extractDocumentedCommandNames(source.content)) {
158
+ if (!knownCommands.has(command)) {
159
+ issues.push({
160
+ docPath: source.docPath,
161
+ command,
162
+ });
163
+ }
164
+ }
165
+ }
166
+ return issues;
167
+ }
168
+ function createCommandDocParityError(issues) {
169
+ const details = issues.map((issue) => `${issue.docPath}: ${issue.command}`).join('; ');
170
+ const canonicalSources = CANONICAL_COMMAND_DOC_TEMPLATE_PATHS.join(', ');
171
+ return createError(ErrorCodes.VALIDATION_ERROR, 'Canonical command docs reference unknown CLI commands. ' +
172
+ `Update the canonical onboarding sources (${canonicalSources}), then run ` +
173
+ '`pnpm docs:sync` to refresh scaffold-like onboarding copies. ' +
174
+ `Unknown references: ${details}`);
175
+ }
176
+ export function assertCanonicalCommandDocParity(sources) {
177
+ const issues = findUnknownCommandDocReferences(sources);
178
+ if (issues.length > 0) {
179
+ throw createCommandDocParityError(issues);
180
+ }
181
+ }
182
+ function loadCanonicalCommandDocSources() {
183
+ return CANONICAL_COMMAND_DOC_TEMPLATE_PATHS.map((templatePath) => ({
184
+ docPath: templatePath,
185
+ content: loadTemplate(templatePath),
186
+ }));
187
+ }
74
188
  /**
75
189
  * WU-1124: Load a template file from the bundled templates directory
76
190
  * @param templatePath - Relative path from templates directory (e.g., 'core/ai/onboarding/quick-ref-commands.md.template')
@@ -568,13 +682,14 @@ async function shouldUseMicroWorktree(targetDir) {
568
682
  * @returns Object with created files list and commit message
569
683
  */
570
684
  export async function executeDocsSyncInDir(targetDir, options) {
685
+ assertCanonicalCommandDocParity(loadCanonicalCommandDocSources());
571
686
  const selectedVendors = options.vendor === undefined
572
687
  ? inferConfiguredVendors(targetDir)
573
688
  : resolveSelectedVendors(options.vendor, options.vendors);
574
689
  const coreResult = await syncCoreDocs(targetDir, { force: options.force });
575
690
  const docsResult = await syncAgentDocs(targetDir, {
576
691
  force: options.force,
577
- refreshManagedOnboarding: options.refreshManagedOnboarding,
692
+ refreshManagedOnboarding: options.refreshManagedOnboarding ?? DOCS_SYNC_MANAGED_ONBOARDING_DEFAULT,
578
693
  });
579
694
  const vendorBootstrapResult = await syncVendorBootstraps(targetDir, {
580
695
  force: options.force,