@lumenflow/cli 5.4.0 → 5.7.12

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 (227) hide show
  1. package/README.md +42 -40
  2. package/dist/db-journal-recover.js +400 -0
  3. package/dist/db-journal-recover.js.map +1 -0
  4. package/dist/docs-sync.js +8 -3
  5. package/dist/docs-sync.js.map +1 -1
  6. package/dist/gate-defaults.js +191 -9
  7. package/dist/gate-defaults.js.map +1 -1
  8. package/dist/gate-registry.js.map +1 -1
  9. package/dist/gates/monolithic-file-contention-guard.js +167 -0
  10. package/dist/gates/monolithic-file-contention-guard.js.map +1 -0
  11. package/dist/gates/prod-migration-drift.js +207 -0
  12. package/dist/gates/prod-migration-drift.js.map +1 -0
  13. package/dist/gates/test-over-deletion-guard.js +255 -0
  14. package/dist/gates/test-over-deletion-guard.js.map +1 -0
  15. package/dist/gates-runners.js +401 -2
  16. package/dist/gates-runners.js.map +1 -1
  17. package/dist/gates.js +349 -4
  18. package/dist/gates.js.map +1 -1
  19. package/dist/lumenflow-setup.js +144 -0
  20. package/dist/lumenflow-setup.js.map +1 -0
  21. package/dist/lumenflow-upgrade.js +2 -1
  22. package/dist/lumenflow-upgrade.js.map +1 -1
  23. package/dist/mem-create.js +10 -1
  24. package/dist/mem-create.js.map +1 -1
  25. package/dist/mem-signal.js +21 -4
  26. package/dist/mem-signal.js.map +1 -1
  27. package/dist/metrics-cli.js +19 -2
  28. package/dist/metrics-cli.js.map +1 -1
  29. package/dist/metrics-snapshot.js +25 -2
  30. package/dist/metrics-snapshot.js.map +1 -1
  31. package/dist/orchestrate-initiative.js +28 -3
  32. package/dist/orchestrate-initiative.js.map +1 -1
  33. package/dist/public-manifest.js +17 -0
  34. package/dist/public-manifest.js.map +1 -1
  35. package/dist/release.js +53 -18
  36. package/dist/release.js.map +1 -1
  37. package/dist/wu-done-gates.js +121 -8
  38. package/dist/wu-done-gates.js.map +1 -1
  39. package/dist/wu-done.js +30 -6
  40. package/dist/wu-done.js.map +1 -1
  41. package/dist/wu-edit-operations.js +74 -0
  42. package/dist/wu-edit-operations.js.map +1 -1
  43. package/dist/wu-edit-validators.js +58 -0
  44. package/dist/wu-edit-validators.js.map +1 -1
  45. package/dist/wu-edit.js +106 -4
  46. package/dist/wu-edit.js.map +1 -1
  47. package/dist/wu-prep.js +132 -8
  48. package/dist/wu-prep.js.map +1 -1
  49. package/dist/wu-recover.js +6 -0
  50. package/dist/wu-recover.js.map +1 -1
  51. package/dist/wu-release.js +120 -2
  52. package/dist/wu-release.js.map +1 -1
  53. package/dist/wu-sizing-validation.js +47 -17
  54. package/dist/wu-sizing-validation.js.map +1 -1
  55. package/dist/wu-status.js +33 -0
  56. package/dist/wu-status.js.map +1 -1
  57. package/package.json +13 -11
  58. package/packs/agent-runtime/package.json +1 -1
  59. package/packs/sidekick/package.json +1 -1
  60. package/packs/software-delivery/package.json +1 -1
  61. package/templates/core/AGENTS.md.template +162 -26
  62. package/templates/core/LUMENFLOW.md.template +381 -70
  63. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +0 -5
  64. package/templates/core/ai/onboarding/agent-safety-card.md.template +63 -17
  65. package/templates/core/ai/onboarding/initiative-orchestration.md.template +4 -0
  66. package/templates/core/ai/onboarding/release-process.md.template +7 -7
  67. package/templates/core/ai/onboarding/vendor-support.md.template +74 -10
  68. package/templates/vendors/claude/.claude/skills/frontend-design/SKILL.md.template +1 -1
  69. package/templates/vendors/claude/.claude/skills/wu-lifecycle/SKILL.md.template +28 -0
  70. package/packs/agent-runtime/agent-heartbeat.ts +0 -163
  71. package/packs/agent-runtime/auto-session-integration.ts +0 -888
  72. package/packs/agent-runtime/capability-factory.ts +0 -104
  73. package/packs/agent-runtime/constants.ts +0 -21
  74. package/packs/agent-runtime/delegation-registry-schema.ts +0 -220
  75. package/packs/agent-runtime/delegation-registry-store.ts +0 -269
  76. package/packs/agent-runtime/delegation-tree.ts +0 -328
  77. package/packs/agent-runtime/index.ts +0 -20
  78. package/packs/agent-runtime/manifest.ts +0 -348
  79. package/packs/agent-runtime/memory-coordination-contract.ts +0 -86
  80. package/packs/agent-runtime/orchestration.ts +0 -2027
  81. package/packs/agent-runtime/pack-registration.ts +0 -110
  82. package/packs/agent-runtime/policy-factory.ts +0 -165
  83. package/packs/agent-runtime/remote-controls/index.ts +0 -7
  84. package/packs/agent-runtime/remote-controls/operations.ts +0 -405
  85. package/packs/agent-runtime/remote-controls/port.ts +0 -48
  86. package/packs/agent-runtime/remote-controls/state-store.ts +0 -258
  87. package/packs/agent-runtime/remote-controls/types.ts +0 -105
  88. package/packs/agent-runtime/session-schema.ts +0 -467
  89. package/packs/agent-runtime/tool-impl/agent-turn-tools.ts +0 -793
  90. package/packs/agent-runtime/tool-impl/index.ts +0 -6
  91. package/packs/agent-runtime/tool-impl/provider-adapters.ts +0 -1245
  92. package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +0 -256
  93. package/packs/agent-runtime/tool-impl/remote-controls.ts +0 -273
  94. package/packs/agent-runtime/tools/index.ts +0 -4
  95. package/packs/agent-runtime/tools/types.ts +0 -47
  96. package/packs/agent-runtime/turn-lifecycle-events.ts +0 -590
  97. package/packs/agent-runtime/types.ts +0 -128
  98. package/packs/agent-runtime/vitest.config.ts +0 -11
  99. package/packs/sidekick/channel-ingress.ts +0 -137
  100. package/packs/sidekick/constants.ts +0 -10
  101. package/packs/sidekick/index.ts +0 -8
  102. package/packs/sidekick/manifest-schema.ts +0 -49
  103. package/packs/sidekick/manifest.ts +0 -512
  104. package/packs/sidekick/pack-registration.ts +0 -110
  105. package/packs/sidekick/policy-factory.ts +0 -38
  106. package/packs/sidekick/sidekick-events.ts +0 -694
  107. package/packs/sidekick/src/adapters/cloud-queue.ts +0 -101
  108. package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +0 -386
  109. package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +0 -228
  110. package/packs/sidekick/src/domain/channel.types.ts +0 -64
  111. package/packs/sidekick/src/ports/channel-bridge.port.ts +0 -92
  112. package/packs/sidekick/src/routines/commit.ts +0 -74
  113. package/packs/sidekick/tool-impl/channel-tools.ts +0 -577
  114. package/packs/sidekick/tool-impl/channel-transports.ts +0 -75
  115. package/packs/sidekick/tool-impl/index.ts +0 -29
  116. package/packs/sidekick/tool-impl/memory-tools.ts +0 -290
  117. package/packs/sidekick/tool-impl/routine-commit.ts +0 -102
  118. package/packs/sidekick/tool-impl/routine-tools.ts +0 -440
  119. package/packs/sidekick/tool-impl/runtime-context.ts +0 -28
  120. package/packs/sidekick/tool-impl/shared.ts +0 -125
  121. package/packs/sidekick/tool-impl/storage.ts +0 -325
  122. package/packs/sidekick/tool-impl/system-tools.ts +0 -160
  123. package/packs/sidekick/tool-impl/task-tools.ts +0 -506
  124. package/packs/sidekick/tools/channel-tools.ts +0 -53
  125. package/packs/sidekick/tools/index.ts +0 -9
  126. package/packs/sidekick/tools/memory-tools.ts +0 -53
  127. package/packs/sidekick/tools/routine-tools.ts +0 -53
  128. package/packs/sidekick/tools/system-tools.ts +0 -47
  129. package/packs/sidekick/tools/task-tools.ts +0 -61
  130. package/packs/sidekick/tools/types.ts +0 -57
  131. package/packs/sidekick/vitest.config.ts +0 -11
  132. package/packs/software-delivery/constants.ts +0 -10
  133. package/packs/software-delivery/extensions.ts +0 -140
  134. package/packs/software-delivery/gate-policies.ts +0 -134
  135. package/packs/software-delivery/index.ts +0 -8
  136. package/packs/software-delivery/manifest-schema.ts +0 -268
  137. package/packs/software-delivery/manifest.ts +0 -657
  138. package/packs/software-delivery/pack-registration.ts +0 -113
  139. package/packs/software-delivery/src/commands/index.ts +0 -5
  140. package/packs/software-delivery/src/config/delivery-review-contract.ts +0 -256
  141. package/packs/software-delivery/src/config/env-accessors.ts +0 -66
  142. package/packs/software-delivery/src/config/index.ts +0 -8
  143. package/packs/software-delivery/src/config/normalize-config-keys.ts +0 -9
  144. package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +0 -460
  145. package/packs/software-delivery/src/config/workspace-reader.ts +0 -375
  146. package/packs/software-delivery/src/constants/backlog-patterns.ts +0 -31
  147. package/packs/software-delivery/src/constants/client-ids.ts +0 -19
  148. package/packs/software-delivery/src/constants/config-contract.ts +0 -7
  149. package/packs/software-delivery/src/constants/docs-layout-presets.ts +0 -50
  150. package/packs/software-delivery/src/constants/duration-constants.ts +0 -20
  151. package/packs/software-delivery/src/constants/gate-constants.ts +0 -32
  152. package/packs/software-delivery/src/constants/index.ts +0 -29
  153. package/packs/software-delivery/src/constants/lock-constants.ts +0 -35
  154. package/packs/software-delivery/src/constants/object-guards.ts +0 -12
  155. package/packs/software-delivery/src/constants/section-headings.ts +0 -107
  156. package/packs/software-delivery/src/constants/wu-cli-constants.ts +0 -488
  157. package/packs/software-delivery/src/constants/wu-domain-constants.ts +0 -466
  158. package/packs/software-delivery/src/constants/wu-git-constants.ts +0 -7
  159. package/packs/software-delivery/src/constants/wu-id-format.ts +0 -327
  160. package/packs/software-delivery/src/constants/wu-paths-constants.ts +0 -384
  161. package/packs/software-delivery/src/constants/wu-statuses.ts +0 -287
  162. package/packs/software-delivery/src/constants/wu-type-helpers.ts +0 -67
  163. package/packs/software-delivery/src/constants/wu-ui-constants.ts +0 -267
  164. package/packs/software-delivery/src/constants/wu-validation-constants.ts +0 -73
  165. package/packs/software-delivery/src/domain/index.ts +0 -5
  166. package/packs/software-delivery/src/domain/orchestration.constants.ts +0 -166
  167. package/packs/software-delivery/src/domain/orchestration.schemas.ts +0 -238
  168. package/packs/software-delivery/src/domain/orchestration.types.ts +0 -176
  169. package/packs/software-delivery/src/methodology/incremental-test.ts +0 -122
  170. package/packs/software-delivery/src/methodology/index.ts +0 -6
  171. package/packs/software-delivery/src/methodology/manual-test-validator.ts +0 -292
  172. package/packs/software-delivery/src/policy/coverage-gate.ts +0 -270
  173. package/packs/software-delivery/src/policy/gates-agent-mode.ts +0 -223
  174. package/packs/software-delivery/src/policy/gates-config-internal.ts +0 -121
  175. package/packs/software-delivery/src/policy/gates-config.ts +0 -300
  176. package/packs/software-delivery/src/policy/gates-coverage.ts +0 -356
  177. package/packs/software-delivery/src/policy/gates-presets.ts +0 -134
  178. package/packs/software-delivery/src/policy/gates-schemas.ts +0 -173
  179. package/packs/software-delivery/src/policy/index.ts +0 -22
  180. package/packs/software-delivery/src/policy/package-manager-resolver.ts +0 -319
  181. package/packs/software-delivery/src/policy/resolve-policy.ts +0 -601
  182. package/packs/software-delivery/src/ports/config.ports.ts +0 -90
  183. package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +0 -125
  184. package/packs/software-delivery/src/ports/index.ts +0 -10
  185. package/packs/software-delivery/src/ports/sync-validator.ports.ts +0 -59
  186. package/packs/software-delivery/src/ports/wu-helpers.ports.ts +0 -168
  187. package/packs/software-delivery/src/ports/wu-state.ports.ts +0 -241
  188. package/packs/software-delivery/src/primitives/index.ts +0 -5
  189. package/packs/software-delivery/src/runtime/index.ts +0 -6
  190. package/packs/software-delivery/src/runtime/work-classifier.ts +0 -561
  191. package/packs/software-delivery/src/sandbox/index.ts +0 -10
  192. package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +0 -118
  193. package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +0 -88
  194. package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +0 -154
  195. package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +0 -47
  196. package/packs/software-delivery/src/sandbox/sandbox-profile.ts +0 -153
  197. package/packs/software-delivery/src/schemas/index.ts +0 -5
  198. package/packs/software-delivery/src/state/date-utils.ts +0 -158
  199. package/packs/software-delivery/src/state/index.ts +0 -15
  200. package/packs/software-delivery/src/state/state-machine.ts +0 -119
  201. package/packs/software-delivery/src/state/wu-doc-types.ts +0 -51
  202. package/packs/software-delivery/src/state/wu-paths.ts +0 -381
  203. package/packs/software-delivery/src/state/wu-schema.ts +0 -1139
  204. package/packs/software-delivery/src/state/wu-state-schema.ts +0 -255
  205. package/packs/software-delivery/src/state/wu-yaml.ts +0 -338
  206. package/packs/software-delivery/tool-impl/agent-tools.ts +0 -263
  207. package/packs/software-delivery/tool-impl/delegation-tools.ts +0 -66
  208. package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +0 -219
  209. package/packs/software-delivery/tool-impl/git-runner.ts +0 -113
  210. package/packs/software-delivery/tool-impl/git-tools.ts +0 -316
  211. package/packs/software-delivery/tool-impl/index.ts +0 -15
  212. package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +0 -720
  213. package/packs/software-delivery/tool-impl/lane-lock.ts +0 -246
  214. package/packs/software-delivery/tool-impl/memory-tools.ts +0 -470
  215. package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +0 -21
  216. package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +0 -329
  217. package/packs/software-delivery/tool-impl/runtime-native-tools.ts +0 -687
  218. package/packs/software-delivery/tool-impl/worker-loader.ts +0 -52
  219. package/packs/software-delivery/tool-impl/worktree-tools.ts +0 -46
  220. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +0 -807
  221. package/packs/software-delivery/tools/delegation-tools.ts +0 -23
  222. package/packs/software-delivery/tools/git-tools.ts +0 -55
  223. package/packs/software-delivery/tools/index.ts +0 -8
  224. package/packs/software-delivery/tools/lane-lock-tool.ts +0 -37
  225. package/packs/software-delivery/tools/types.ts +0 -71
  226. package/packs/software-delivery/tools/worktree-tools.ts +0 -49
  227. package/packs/software-delivery/vitest.config.ts +0 -11
@@ -40,28 +40,12 @@ Quick reference for AI agents working in LumenFlow projects.
40
40
  | Read WU spec first | Understand scope |
41
41
  | cd to worktree after claim | Isolation |
42
42
  | Write tests before code | TDD |
43
- | Treat unread inbox signals as decisions | Prevent missed redirects |
44
43
  | Run wu:prep in the claimed workspace | Quality and lifecycle correctness |
45
44
  | Run wu:done from main | Complete WU |
46
45
  | Stay within code_paths | Scope discipline |
47
46
 
48
47
  ---
49
48
 
50
- ## Coordination Signals
51
-
52
- `wu:brief` includes an Inbox Snapshot when memory is available. Also check `mem:inbox`
53
- after checkpoints and before `wu:prep`.
54
-
55
- An unread signal is a decision point:
56
-
57
- 1. Read it.
58
- 2. Decide whether it changes, blocks, or does not affect the WU.
59
- 3. Reply, acknowledge, or dismiss it before continuing.
60
-
61
- Do not leave directed signals for `wu:done`; by then the coordination window has already passed.
62
-
63
- ---
64
-
65
49
  ## Universal Safety Mechanisms
66
50
 
67
51
  ### Git Safety Wrapper
@@ -114,7 +98,69 @@ not guess-and-retry.
114
98
  1. Read the error message
115
99
  2. Fix the underlying issue
116
100
  3. Re-run gates
117
- 4. Never use `--skip-gates` for new failures
101
+ 4. Never use `--skip-gate` (or legacy `--skip-gates`) for new failures
102
+ 5. WU-2925: prefer `--skip-gate <name>` (repeatable, per-gate) over
103
+ `--skip-gates` (legacy binary, deprecated for one minor cycle). Only gates
104
+ marked `skippable: true` (allow-list: `migration-verify`, `lane-health`,
105
+ `tdd-diff-evidence`, plus the WU-2927 opt-in local-prep gates `build`,
106
+ `integration-test`, `e2e-smoke`) or overridden per-repo at
107
+ `software_delivery.gates.overrides.<gate_id>.skippable=true` may be skipped.
108
+ Both flags require `--reason` and `--fix-wu`.
109
+
110
+ ### Skip-vs-Block decision matrix (WU-2926)
111
+
112
+ The runtime distinguishes six discriminated `GateResult` states with stable
113
+ glyphs. The decision matrix encodes when a gate runs, auto-skips, or BLOCKS:
114
+
115
+ | Applicability | Preconditions | Skippable | `prereq_strategy` | Result | Glyph |
116
+ | -------------- | ------------- | --------- | ----------------- | -------------------------------- | ----- |
117
+ | not-applicable | — | — | — | `skipped-auto-not-applicable` | ⊘ |
118
+ | applicable | satisfied | — | — | run → `passed` or `failed` | ✅/❌ |
119
+ | applicable | missing | false | — | `blocked-missing-prereq` (BLOCK) | 🚫 |
120
+ | applicable | missing | true | `'auto-skip'` | `skipped-auto-missing-prereq` | ⊘ |
121
+ | applicable | missing | true | `'fail'` | `failed` | ❌ |
122
+
123
+ Key invariant: `applicable + missing + skippable=false` ALWAYS blocks. This is
124
+ the silent-bypass guard. `--skip-gate <name>` cannot bypass it. The only
125
+ escape hatch is a deliberate per-repo override at
126
+ `software_delivery.gates.overrides.<gate_id>.skippable=true`, used only when
127
+ the missing prerequisite is genuinely environmental (not a missing
128
+ implementation).
129
+
130
+ Audit NDJSON `source` field discriminates all four non-running outcomes:
131
+ `agent` | `auto-skip-not-applicable` | `auto-skip-missing-prereq` | `blocked`.
132
+ CFR/DORA only counts `source: 'agent'` so auto-skips and blocks never inflate
133
+ change-failure-rate.
134
+
135
+ ### Override syntax (copy-pasteable, WU-2925/2926)
136
+
137
+ ```bash
138
+ # Per-gate skip at wu:prep or wu:done (--skip-gate is repeatable)
139
+ pnpm wu:prep --id WU-XXX --skip-gate lane-health \
140
+ --reason "no DB infra in agent worktree" --fix-wu WU-YYY
141
+
142
+ # Make a non-allow-listed gate skippable per repo
143
+ pnpm config:set software_delivery.gates.overrides.<gate_id>.skippable=true
144
+
145
+ # Narrow a safety-critical gate's reach via applicability_paths
146
+ # (preferred over flipping skippable for safety-critical gates)
147
+ pnpm config:set software_delivery.gates.overrides.safety-critical-test.applicability_paths \
148
+ --json-value '["app/security/**","lib/auth/**"]'
149
+ ```
150
+
151
+ ### Latency-budget guidance (`local_prep` profile, WU-2927)
152
+
153
+ The opt-in `software_delivery.gates.local_prep` profile extends `wu:prep` with
154
+ `build`, `integration-test`, and `e2e-smoke` gates. All three are
155
+ `skippable: true` and accept `--skip-gate <name>`. Latency budget defaults:
156
+
157
+ - **`latency_budget_warn_ms: 180000`** (3 min): default soft warn, never blocks.
158
+ - **60–90s**: tight, suits greenfield repos; expect false-positive warnings as
159
+ suites grow.
160
+ - **5–10 min**: loose, suits monorepos with full Playwright; consider
161
+ `--skip-gate e2e-smoke` per-WU for cosmetic-only changes.
162
+
163
+ Public reference: <https://lumenflow.dev/reference/gates#local_prep-profile-550>.
118
164
 
119
165
  ---
120
166
 
@@ -87,6 +87,10 @@ pnpm wu:brief --id WU-100 --client claude-code
87
87
  pnpm wu:delegate --id WU-100 --parent-wu WU-050 --client claude-code
88
88
  ```
89
89
 
90
+ When the work is initiative decomposition or execution design rather than direct implementation, the
91
+ default framework role to brief or delegate is `initiative-architect`. That role now replaces the
92
+ retired docs-planning vocabulary in the default agent roster.
93
+
90
94
  **Use `wu:delegate` (not `wu:brief`) when:**
91
95
 
92
96
  - You are the orchestrator agent managing the initiative
@@ -39,14 +39,14 @@ pnpm release --release-version 1.3.0 --skip-publish
39
39
 
40
40
  ### Options
41
41
 
42
- | Flag | Description |
43
- | --------------------------- | --------------------------------------- |
44
- | `--release-version <X.Y.Z>` | **Required.** Semver version to release |
45
- | `--dry-run` | Preview changes without making them |
42
+ | Flag | Description |
43
+ | --------------------------- | -------------------------------------------- |
44
+ | `--release-version <X.Y.Z>` | **Required.** Semver version to release |
45
+ | `--dry-run` | Preview changes without making them |
46
46
  | `--skip-publish` | Skip npm publish only; validation still runs |
47
- | `--skip-build` | Skip build step (use existing dist) |
48
- | `--version`, `-V` | Show CLI version |
49
- | `--help`, `-h` | Show help |
47
+ | `--skip-build` | Skip build step (use existing dist) |
48
+ | `--version`, `-V` | Show CLI version |
49
+ | `--help`, `-h` | Show help |
50
50
 
51
51
  ### Examples
52
52
 
@@ -31,15 +31,73 @@ lumenflow init
31
31
 
32
32
  For popular AI coding assistants, LumenFlow provides **optional enhanced integrations** with deeper features like auto-detection, skills, and vendor-specific configurations.
33
33
 
34
- | Assistant | Config File | Auto-detected | Enhanced Features |
35
- | ----------- | ------------------------------ | ------------- | ---------------------------------------------------------------- |
36
- | Claude Code | `CLAUDE.md`, `.claude/` | Yes | Skills, agents, hooks, settings, A2A `signal:received` delivery |
37
- | Cursor | `.cursor/rules/lumenflow.md` | Yes | Rules integration; A2A push deferred to `mem:watch` |
38
- | Windsurf | `.windsurf/rules/lumenflow.md` | Yes | Rules integration; A2A push deferred to `mem:watch` |
39
- | Cline | `.clinerules` | No | Rules file; poll `mem:inbox` for A2A signals |
40
- | Codex | `AGENTS.md` (native) | No | Universal files directly; A2A push deferred to `mem:watch` |
41
- | Aider | `.aider.conf.yml` | No | Config file; poll `mem:inbox` for A2A signals |
42
- | Antigravity | `AGENTS.md` (native) | Unknown | Research phase |
34
+ | Assistant | Config File | Auto-detected | Enhanced Features |
35
+ | ----------- | -------------------------------------------------- | ------------- | ---------------------------------------------------------------- |
36
+ | Claude Code | `CLAUDE.md`, `.claude/` | Yes | Skills, agents, hooks, settings, A2A `signal:received` delivery |
37
+ | Cursor | `AGENTS.md`, `.cursor/rules/` | Yes | Rules integration; foreground `mem:watch` A2A delivery |
38
+ | Windsurf | `AGENTS.md`, `.agents/skills/`, `.windsurf/rules/` | Yes | Rules integration plus shared skills; foreground `mem:watch` A2A |
39
+ | Cline | `.clinerules` | No | Rules file; foreground `mem:watch` or `mem:inbox` for A2A |
40
+ | Codex | `AGENTS.md`, `.agents/skills/`, `.codex/agents/` | No | Universal files plus overlays; foreground `mem:watch` A2A |
41
+ | Aider | `.aider.conf.yml` | No | Config file; foreground `mem:watch` or `mem:inbox` for A2A |
42
+ | Antigravity | `AGENTS.md` (native) | Unknown | Research phase |
43
+
44
+ ### Shared Cross-Vendor Surfaces
45
+
46
+ LumenFlow stays vendor-agnostic by anchoring on shared repo surfaces first, then layering
47
+ vendor-specific overlays where a client has extra capabilities.
48
+
49
+ - `AGENTS.md` is the shared instruction baseline. Codex reads it natively, Cursor and Windsurf
50
+ both support it as a repo instruction surface, and other vendors can usually consume it as plain
51
+ project guidance.
52
+ - `.agents/skills/` is the shared skills projection surface. Codex and Windsurf can both consume
53
+ it today, while Claude Code still uses its own `.claude/skills/` overlay.
54
+ - Vendor overlays stay additive: `.claude/agents/`, `.codex/agents/`, `.cursor/rules/`,
55
+ `.windsurf/rules/`, and similar files add client-specific behavior on top of the shared
56
+ instruction and skills layers.
57
+
58
+ ### Agent Plugin Distribution
59
+
60
+ ADR-018 adds plugin distribution as a discoverability on-ramp for Claude Code and Codex. It does
61
+ not replace the repo-level integration surfaces above and it does not replace the Software Delivery
62
+ Pack runtime.
63
+
64
+ **Current source identity:**
65
+
66
+ - Canonical bundle: `plugins/lumenflow/`
67
+ - Claude manifest: `plugins/lumenflow/.claude-plugin/plugin.json`
68
+ - Codex manifest: `plugins/lumenflow/.codex-plugin/plugin.json`
69
+ - Claude repo marketplace catalog: `.claude-plugin/marketplace.json`
70
+ - Codex repo marketplace catalog: `.agents/plugins/marketplace.json`
71
+
72
+ The `lumenflow-dev` repository is the first release train's marketplace source repository. Do not
73
+ create a separate `lumenflow-marketplace` repository unless ADR-018 is amended.
74
+
75
+ **Namespace and coexistence rules:**
76
+
77
+ - Canonical skill authoring remains `.lumenflow/skills/<name>/SKILL.md`.
78
+ - Standalone projections keep local names such as `design-first` and `tdd-workflow`.
79
+ - Claude plugin skills are plugin-qualified, for example `/lumenflow:design-first`.
80
+ - Codex plugin prompts should name the installed `lumenflow` plugin or bundled skill through
81
+ Codex's `@` plugin selection surface; do not invent a Codex slash namespace.
82
+ - Plugin installation must not delete `.claude/skills/`, `.agents/skills/`, or other standalone
83
+ projections. A future `--plugin-only` cleanup path must be explicit and dry-run-first.
84
+
85
+ **First-run handoff:**
86
+
87
+ The plugin can provide skills, hooks, MCP configuration, and first-run guidance. It cannot install
88
+ `.husky/`, GitHub Actions, WU state, conditional gates, co-change gates, or package aliases inside a
89
+ consumer repository. First-run plugin text must direct users to run `npx lumenflow init` for a new
90
+ repo or `pnpm lumenflow:integrate --sync` in an already initialized repo when they want governed
91
+ workflow state, enforcement, gates, and evidence.
92
+
93
+ **Marketplace preflight:**
94
+
95
+ - Anthropic official marketplace submission exists today, so a maintainer must confirm or reserve
96
+ the `lumenflow` plugin name through the Anthropic submission path before marketplace packaging
97
+ relies on `/lumenflow:*` names.
98
+ - Codex official self-serve publishing is documented as coming later. Until then, Codex readiness
99
+ targets repo/personal marketplace install with the `lumenflow` id and an official-directory
100
+ checklist that does not claim undocumented vendor gates.
43
101
 
44
102
  ---
45
103
 
@@ -70,6 +128,7 @@ Cursor is an AI-first code editor built on VS Code.
70
128
 
71
129
  **Config Files:**
72
130
 
131
+ - `AGENTS.md` - Shared repo instructions
73
132
  - `.cursor/rules/lumenflow.md` - LumenFlow rules
74
133
 
75
134
  **Auto-detection:** Environment variables starting with `CURSOR_`
@@ -86,6 +145,8 @@ Windsurf (Codeium) is an AI IDE with agentic capabilities.
86
145
 
87
146
  **Config Files:**
88
147
 
148
+ - `AGENTS.md` - Shared repo instructions
149
+ - `.agents/skills/` - Shared skills discovered by Windsurf
89
150
  - `.windsurf/rules/lumenflow.md` - LumenFlow rules
90
151
 
91
152
  **Auto-detection:** Environment variables starting with `WINDSURF_`
@@ -114,11 +175,14 @@ lumenflow init --client cline
114
175
 
115
176
  ### OpenAI Codex
116
177
 
117
- Codex reads the AGENTS.md file directly for universal instructions.
178
+ Codex reads shared repo instructions from `AGENTS.md`, shared skills from `.agents/skills/`, and
179
+ vendor-specific subagent overlays from `.codex/agents/`.
118
180
 
119
181
  **Config Files:**
120
182
 
121
183
  - `AGENTS.md` - Universal agent instructions (always created)
184
+ - `.agents/skills/` - Shared skills surface
185
+ - `.codex/agents/` - Codex subagent overlays (explicit invocation only)
122
186
 
123
187
  **Initialize:**
124
188
 
@@ -2,7 +2,7 @@
2
2
  name: frontend-design
3
3
  description: Create distinctive, production-grade frontend interfaces. Use when building React components, pages, UI features, or when user requests visual/design work.
4
4
  version: 1.0.0
5
- source: docs/operations/_frameworks/lumenflow/lumenflow-agent-capsule.md
5
+ source: {{DOCS_OPERATIONS_PATH}}/_frameworks/lumenflow/lumenflow-agent-capsule.md
6
6
  last_updated: {{DATE}}
7
7
  allowed-tools: Read, Write, Edit, Bash
8
8
  ---
@@ -65,6 +65,34 @@ pnpm wu:prune --execute # Clean stale worktrees
65
65
  pnpm wu:cleanup --id WU-XXX # After PR merge
66
66
  ```
67
67
 
68
+ ## Coordination Signal Checkpoints
69
+
70
+ `wu:brief` includes an Inbox Snapshot for the current WU/session when memory is enabled.
71
+ Treat every unread signal surfaced there, at any `mem:checkpoint`, or before `wu:prep`
72
+ as a decision point, not background noise.
73
+
74
+ Before continuing after an unread signal:
75
+
76
+ 1. Read the signal context.
77
+ 2. Decide whether it changes the work, blocks progress, or is not actionable.
78
+ 3. Reply, acknowledge, or dismiss it through `mem:signal` / shared memory before moving on.
79
+
80
+ Do not wait until `wu:done` to inspect coordination traffic. Mid-flight redirects, peer review,
81
+ and orchestrator-worker handoffs depend on agents consuming signals during the WU.
82
+
83
+ ## A2A Signal Hook Delivery
84
+
85
+ Claude Code sessions with generated LumenFlow hooks receive directed A2A
86
+ `signal:received` events at the next `PostToolUse` boundary. Treat the hook
87
+ payload the same way as an unread `mem:inbox` result:
88
+
89
+ 1. Read the signal message, `intent`, `interrupt_class`, and WU/thread scope.
90
+ 2. If `requires_ack: true`, reply on the same thread with `pnpm mem:signal ... --reply-to <signal_id> --intent AGREE` or `--intent REJECT`.
91
+ 3. Continue only after the decision is recorded, unless an explicit `wu:prep --allow-unread-signals --reason '<audit reason>'` override is justified.
92
+
93
+ Non-hook clients still rely on `wu:brief`, `mem:checkpoint`, and explicit
94
+ `mem:inbox` polling until the daemon fallback lands.
95
+
68
96
  ## wu:prep + wu:done Workflow (WU-1223)
69
97
 
70
98
  **Two-step completion:**
@@ -1,163 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
3
-
4
- export interface HeartbeatHealth {
5
- busy?: boolean;
6
- stalled?: boolean;
7
- last_progress_at?: string;
8
- }
9
-
10
- export interface HeartbeatAssignment {
11
- wu_id: string;
12
- action: 'claim' | 'continue' | 'abort';
13
- hint?: string;
14
- }
15
-
16
- export interface AgentHeartbeatInput {
17
- workspace_id: string;
18
- session_id: string;
19
- agent_id?: string;
20
- wu_id?: string;
21
- health?: HeartbeatHealth;
22
- }
23
-
24
- export interface AgentHeartbeatResult {
25
- status: 'ok';
26
- server_time: string;
27
- next_heartbeat_ms?: number;
28
- assignment?: HeartbeatAssignment;
29
- budget_remaining_usd?: number;
30
- coalesced_signals?: number;
31
- }
32
-
33
- export interface AgentHeartbeatPort {
34
- heartbeat(input: AgentHeartbeatInput): Promise<AgentHeartbeatResult>;
35
- }
36
-
37
- export interface HeartbeatManagerOptions {
38
- maxAttempts?: number;
39
- baseBackoffMs?: number;
40
- maxBackoffMs?: number;
41
- sleepFn?: (delayMs: number) => Promise<void>;
42
- logger?: Pick<Console, 'warn'>;
43
- }
44
-
45
- const DEFAULT_MAX_ATTEMPTS = 3;
46
- const DEFAULT_BASE_BACKOFF_MS = 500;
47
- const DEFAULT_MAX_BACKOFF_MS = 30_000;
48
-
49
- function defaultSleep(delayMs: number): Promise<void> {
50
- return new Promise((resolve) => setTimeout(resolve, delayMs));
51
- }
52
-
53
- /**
54
- * Enforces single-flight heartbeat execution and coalesces concurrent signals
55
- * into one follow-up heartbeat, with retry/backoff on transient failures.
56
- */
57
- export class HeartbeatManager {
58
- private readonly maxAttempts: number;
59
- private readonly baseBackoffMs: number;
60
- private readonly maxBackoffMs: number;
61
- private readonly sleepFn: (delayMs: number) => Promise<void>;
62
- private readonly logger?: Pick<Console, 'warn'>;
63
-
64
- private inFlight: Promise<AgentHeartbeatResult> | null = null;
65
- private queuedInput: AgentHeartbeatInput | null = null;
66
- private queuedSignals = 0;
67
- private consecutiveFailures = 0;
68
-
69
- public constructor(
70
- private readonly port: AgentHeartbeatPort,
71
- options: HeartbeatManagerOptions = {},
72
- ) {
73
- this.maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
74
- this.baseBackoffMs = options.baseBackoffMs ?? DEFAULT_BASE_BACKOFF_MS;
75
- this.maxBackoffMs = options.maxBackoffMs ?? DEFAULT_MAX_BACKOFF_MS;
76
- this.sleepFn = options.sleepFn ?? defaultSleep;
77
- this.logger = options.logger;
78
- }
79
-
80
- public async heartbeat(input: AgentHeartbeatInput): Promise<AgentHeartbeatResult> {
81
- if (this.inFlight) {
82
- this.queuedInput = input;
83
- this.queuedSignals += 1;
84
- return this.inFlight;
85
- }
86
-
87
- const request = this.drainQueue(input);
88
- this.inFlight = request;
89
- try {
90
- return await request;
91
- } finally {
92
- this.inFlight = null;
93
- }
94
- }
95
-
96
- public getState(): {
97
- inFlight: boolean;
98
- queuedSignals: number;
99
- consecutiveFailures: number;
100
- } {
101
- return {
102
- inFlight: this.inFlight !== null,
103
- queuedSignals: this.queuedSignals,
104
- consecutiveFailures: this.consecutiveFailures,
105
- };
106
- }
107
-
108
- private async drainQueue(initialInput: AgentHeartbeatInput): Promise<AgentHeartbeatResult> {
109
- let currentInput = initialInput;
110
- let localCoalescedSignals = 0;
111
-
112
- while (true) {
113
- const result = await this.sendWithRetry(currentInput);
114
- const queuedInput = this.queuedInput;
115
- localCoalescedSignals += this.queuedSignals;
116
- this.queuedInput = null;
117
- this.queuedSignals = 0;
118
-
119
- if (!queuedInput) {
120
- const mergedCoalesced = (result.coalesced_signals ?? 0) + localCoalescedSignals;
121
- if (mergedCoalesced > 0) {
122
- return {
123
- ...result,
124
- coalesced_signals: mergedCoalesced,
125
- };
126
- }
127
- return result;
128
- }
129
-
130
- currentInput = queuedInput;
131
- }
132
- }
133
-
134
- private async sendWithRetry(input: AgentHeartbeatInput): Promise<AgentHeartbeatResult> {
135
- let attempt = 0;
136
-
137
- while (true) {
138
- try {
139
- const result = await this.port.heartbeat(input);
140
- this.consecutiveFailures = 0;
141
- return result;
142
- } catch (error) {
143
- this.consecutiveFailures += 1;
144
- attempt += 1;
145
-
146
- if (attempt >= this.maxAttempts) {
147
- throw error;
148
- }
149
-
150
- const delayMs = this.getBackoffDelayMs();
151
- this.logger?.warn?.(
152
- `[agent:heartbeat] attempt ${attempt} failed; retrying in ${delayMs}ms`,
153
- );
154
- await this.sleepFn(delayMs);
155
- }
156
- }
157
- }
158
-
159
- private getBackoffDelayMs(): number {
160
- const exponent = Math.max(0, this.consecutiveFailures - 1);
161
- return Math.min(this.baseBackoffMs * 2 ** exponent, this.maxBackoffMs);
162
- }
163
- }