@lumenflow/cli 4.23.0 → 5.0.0

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 (296) 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-cli.js +3 -2
  83. package/dist/metrics-cli.js.map +1 -1
  84. package/dist/metrics-snapshot.js +271 -13
  85. package/dist/metrics-snapshot.js.map +1 -1
  86. package/dist/orchestrate-init-status.js +117 -2
  87. package/dist/orchestrate-init-status.js.map +1 -1
  88. package/dist/orchestrate-initiative.js +83 -10
  89. package/dist/orchestrate-initiative.js.map +1 -1
  90. package/dist/orchestrate-monitor-quality.js +289 -0
  91. package/dist/orchestrate-monitor-quality.js.map +1 -0
  92. package/dist/orchestrate-monitor.js +85 -0
  93. package/dist/orchestrate-monitor.js.map +1 -1
  94. package/dist/pack-validate.js +127 -2
  95. package/dist/pack-validate.js.map +1 -1
  96. package/dist/plan-create.js +18 -0
  97. package/dist/plan-create.js.map +1 -1
  98. package/dist/plan-link.js +13 -0
  99. package/dist/plan-link.js.map +1 -1
  100. package/dist/plan-promote.js +14 -0
  101. package/dist/plan-promote.js.map +1 -1
  102. package/dist/pre-commit-check.js +4 -3
  103. package/dist/pre-commit-check.js.map +1 -1
  104. package/dist/public-manifest.js +17 -3
  105. package/dist/public-manifest.js.map +1 -1
  106. package/dist/release.js +10 -10
  107. package/dist/release.js.map +1 -1
  108. package/dist/session-cross-link.js +139 -0
  109. package/dist/session-cross-link.js.map +1 -0
  110. package/dist/sidecar-manager.js +208 -0
  111. package/dist/sidecar-manager.js.map +1 -0
  112. package/dist/state-path-resolvers.js +18 -0
  113. package/dist/state-path-resolvers.js.map +1 -1
  114. package/dist/stream-heartbeat.js +151 -0
  115. package/dist/stream-heartbeat.js.map +1 -0
  116. package/dist/sync-templates.js +56 -2
  117. package/dist/sync-templates.js.map +1 -1
  118. package/dist/wu-block.js +47 -5
  119. package/dist/wu-block.js.map +1 -1
  120. package/dist/wu-claim-branch.js +8 -4
  121. package/dist/wu-claim-branch.js.map +1 -1
  122. package/dist/wu-claim-state.js +5 -3
  123. package/dist/wu-claim-state.js.map +1 -1
  124. package/dist/wu-claim-worktree.js +5 -3
  125. package/dist/wu-claim-worktree.js.map +1 -1
  126. package/dist/wu-claim.js +261 -9
  127. package/dist/wu-claim.js.map +1 -1
  128. package/dist/wu-done-auto-cleanup.js +3 -2
  129. package/dist/wu-done-auto-cleanup.js.map +1 -1
  130. package/dist/wu-done-git-ops.js +12 -8
  131. package/dist/wu-done-git-ops.js.map +1 -1
  132. package/dist/wu-done-preflight.js +3 -3
  133. package/dist/wu-done-preflight.js.map +1 -1
  134. package/dist/wu-done.js +46 -10
  135. package/dist/wu-done.js.map +1 -1
  136. package/dist/wu-lifecycle-sync/gate-scope-resolver.js +16 -0
  137. package/dist/wu-lifecycle-sync/gate-scope-resolver.js.map +1 -0
  138. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js +10 -0
  139. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js.map +1 -0
  140. package/dist/wu-prep.js +363 -22
  141. package/dist/wu-prep.js.map +1 -1
  142. package/dist/wu-prune.js +68 -27
  143. package/dist/wu-prune.js.map +1 -1
  144. package/dist/wu-release.js +34 -3
  145. package/dist/wu-release.js.map +1 -1
  146. package/dist/wu-review.js +167 -0
  147. package/dist/wu-review.js.map +1 -0
  148. package/dist/wu-spawn-prompt-builders.js +296 -40
  149. package/dist/wu-spawn-prompt-builders.js.map +1 -1
  150. package/dist/wu-spawn-strategy-resolver.js +126 -14
  151. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  152. package/dist/wu-unblock.js +52 -22
  153. package/dist/wu-unblock.js.map +1 -1
  154. package/package.json +13 -8
  155. package/packs/agent-runtime/.turbo/turbo-build.log +1 -1
  156. package/packs/agent-runtime/.turbo/turbo-test.log +25 -0
  157. package/packs/agent-runtime/.turbo/turbo-typecheck.log +4 -0
  158. package/packs/agent-runtime/agent-heartbeat.ts +163 -0
  159. package/packs/agent-runtime/auto-session-integration.ts +874 -0
  160. package/packs/agent-runtime/delegation-registry-schema.ts +220 -0
  161. package/packs/agent-runtime/delegation-registry-store.ts +269 -0
  162. package/packs/agent-runtime/delegation-tree.ts +328 -0
  163. package/packs/agent-runtime/index.ts +9 -0
  164. package/packs/agent-runtime/manifest.ts +103 -19
  165. package/packs/agent-runtime/manifest.yaml +132 -0
  166. package/packs/agent-runtime/memory-coordination-contract.ts +86 -0
  167. package/packs/agent-runtime/memory.d.ts +19 -0
  168. package/packs/agent-runtime/orchestration.ts +238 -23
  169. package/packs/agent-runtime/package.json +11 -2
  170. package/packs/agent-runtime/remote-controls/index.ts +7 -0
  171. package/packs/agent-runtime/remote-controls/operations.ts +399 -0
  172. package/packs/agent-runtime/remote-controls/port.ts +48 -0
  173. package/packs/agent-runtime/remote-controls/state-store.ts +258 -0
  174. package/packs/agent-runtime/remote-controls/types.ts +105 -0
  175. package/packs/agent-runtime/session-schema.ts +423 -0
  176. package/packs/agent-runtime/tool-impl/index.ts +1 -0
  177. package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +252 -0
  178. package/packs/agent-runtime/tool-impl/remote-controls.ts +273 -0
  179. package/packs/agent-runtime/tsconfig.json +1 -1
  180. package/packs/agent-runtime/turn-lifecycle-events.ts +501 -0
  181. package/packs/sidekick/.lumenflow/state/conductor/outbox/sidekick-events.jsonl +213 -0
  182. package/packs/sidekick/.turbo/turbo-build.log +1 -1
  183. package/packs/sidekick/.turbo/turbo-test.log +25 -0
  184. package/packs/sidekick/.turbo/turbo-typecheck.log +4 -0
  185. package/packs/sidekick/channel-ingress.ts +137 -0
  186. package/packs/sidekick/manifest.ts +74 -0
  187. package/packs/sidekick/manifest.yaml +88 -0
  188. package/packs/sidekick/package.json +3 -1
  189. package/packs/sidekick/sidekick-events.ts +517 -0
  190. package/packs/sidekick/src/adapters/cloud-queue.ts +101 -0
  191. package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +378 -0
  192. package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +224 -0
  193. package/packs/sidekick/src/domain/channel.types.ts +84 -0
  194. package/packs/sidekick/src/ports/channel-bridge.port.ts +75 -0
  195. package/packs/sidekick/src/routines/commit.ts +74 -0
  196. package/packs/sidekick/tool-impl/channel-tools.ts +47 -0
  197. package/packs/sidekick/tool-impl/memory-tools.ts +17 -0
  198. package/packs/sidekick/tool-impl/routine-commit.ts +102 -0
  199. package/packs/sidekick/tool-impl/routine-tools.ts +67 -7
  200. package/packs/sidekick/tool-impl/runtime-context.ts +4 -0
  201. package/packs/sidekick/tool-impl/storage.ts +3 -0
  202. package/packs/sidekick/tool-impl/system-tools.ts +7 -0
  203. package/packs/sidekick/tool-impl/task-tools.ts +46 -0
  204. package/packs/sidekick/tsconfig.json +1 -1
  205. package/packs/software-delivery/.turbo/turbo-build.log +1 -1
  206. package/packs/software-delivery/.turbo/turbo-test.log +63 -0
  207. package/packs/software-delivery/.turbo/turbo-typecheck.log +4 -0
  208. package/packs/software-delivery/manifest-schema.ts +30 -0
  209. package/packs/software-delivery/manifest.ts +99 -1
  210. package/packs/software-delivery/manifest.yaml +46 -0
  211. package/packs/software-delivery/package.json +88 -3
  212. package/packs/software-delivery/src/commands/index.ts +5 -0
  213. package/packs/software-delivery/src/config/delivery-review-contract.ts +20 -0
  214. package/packs/software-delivery/src/config/env-accessors.ts +19 -0
  215. package/packs/software-delivery/src/config/index.ts +8 -0
  216. package/packs/software-delivery/src/config/normalize-config-keys.ts +19 -0
  217. package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +436 -0
  218. package/packs/software-delivery/src/config/workspace-reader.ts +310 -0
  219. package/packs/software-delivery/src/constants/backlog-patterns.ts +31 -0
  220. package/packs/software-delivery/src/constants/client-ids.ts +19 -0
  221. package/packs/software-delivery/src/constants/config-contract.ts +7 -0
  222. package/packs/software-delivery/src/constants/docs-layout-presets.ts +50 -0
  223. package/packs/software-delivery/src/constants/duration-constants.ts +20 -0
  224. package/packs/software-delivery/src/constants/gate-constants.ts +32 -0
  225. package/packs/software-delivery/src/constants/index.ts +29 -0
  226. package/packs/software-delivery/src/constants/lock-constants.ts +35 -0
  227. package/packs/software-delivery/src/constants/object-guards.ts +12 -0
  228. package/packs/software-delivery/src/constants/section-headings.ts +107 -0
  229. package/packs/software-delivery/src/constants/wu-cli-constants.ts +485 -0
  230. package/packs/software-delivery/src/constants/wu-domain-constants.ts +466 -0
  231. package/packs/software-delivery/src/constants/wu-git-constants.ts +7 -0
  232. package/packs/software-delivery/src/constants/wu-id-format.ts +327 -0
  233. package/packs/software-delivery/src/constants/wu-paths-constants.ts +358 -0
  234. package/packs/software-delivery/src/constants/wu-statuses.ts +287 -0
  235. package/packs/software-delivery/src/constants/wu-type-helpers.ts +67 -0
  236. package/packs/software-delivery/src/constants/wu-ui-constants.ts +267 -0
  237. package/packs/software-delivery/src/constants/wu-validation-constants.ts +73 -0
  238. package/packs/software-delivery/src/domain/index.ts +5 -0
  239. package/packs/software-delivery/src/domain/orchestration.constants.ts +168 -0
  240. package/packs/software-delivery/src/domain/orchestration.schemas.ts +239 -0
  241. package/packs/software-delivery/src/domain/orchestration.types.ts +178 -0
  242. package/packs/software-delivery/src/methodology/incremental-test.ts +90 -0
  243. package/packs/software-delivery/src/methodology/index.ts +6 -0
  244. package/packs/software-delivery/src/methodology/manual-test-validator.ts +292 -0
  245. package/packs/software-delivery/src/policy/coverage-gate.ts +270 -0
  246. package/packs/software-delivery/src/policy/gates-agent-mode.ts +223 -0
  247. package/packs/software-delivery/src/policy/gates-config-internal.ts +121 -0
  248. package/packs/software-delivery/src/policy/gates-config.ts +293 -0
  249. package/packs/software-delivery/src/policy/gates-coverage.ts +247 -0
  250. package/packs/software-delivery/src/policy/gates-presets.ts +134 -0
  251. package/packs/software-delivery/src/policy/gates-schemas.ts +173 -0
  252. package/packs/software-delivery/src/policy/index.ts +22 -0
  253. package/packs/software-delivery/src/policy/package-manager-resolver.ts +319 -0
  254. package/packs/software-delivery/src/policy/resolve-policy.ts +518 -0
  255. package/packs/software-delivery/src/ports/config.ports.ts +90 -0
  256. package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +125 -0
  257. package/packs/software-delivery/src/ports/index.ts +10 -0
  258. package/packs/software-delivery/src/ports/sync-validator.ports.ts +59 -0
  259. package/packs/software-delivery/src/ports/wu-helpers.ports.ts +168 -0
  260. package/packs/software-delivery/src/ports/wu-state.ports.ts +241 -0
  261. package/packs/software-delivery/src/primitives/index.ts +5 -0
  262. package/packs/software-delivery/src/runtime/index.ts +6 -0
  263. package/packs/software-delivery/src/runtime/work-classifier.ts +561 -0
  264. package/packs/software-delivery/src/sandbox/index.ts +10 -0
  265. package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +118 -0
  266. package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +88 -0
  267. package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +154 -0
  268. package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +47 -0
  269. package/packs/software-delivery/src/sandbox/sandbox-profile.ts +153 -0
  270. package/packs/software-delivery/src/schemas/index.ts +5 -0
  271. package/packs/software-delivery/src/state/date-utils.ts +158 -0
  272. package/packs/software-delivery/src/state/index.ts +15 -0
  273. package/packs/software-delivery/src/state/state-machine.ts +119 -0
  274. package/packs/software-delivery/src/state/wu-doc-types.ts +51 -0
  275. package/packs/software-delivery/src/state/wu-paths.ts +381 -0
  276. package/packs/software-delivery/src/state/wu-schema.ts +1139 -0
  277. package/packs/software-delivery/src/state/wu-state-schema.ts +255 -0
  278. package/packs/software-delivery/src/state/wu-yaml.ts +338 -0
  279. package/packs/software-delivery/src/types.d.ts +16 -0
  280. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +18 -0
  281. package/packs/software-delivery/tsconfig.json +28 -2
  282. package/templates/core/AGENTS.md.template +76 -17
  283. package/templates/core/LUMENFLOW.md.template +265 -66
  284. package/templates/core/_frameworks/lumenflow/wu-sizing-guide.md.template +180 -116
  285. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +26 -8
  286. package/templates/core/ai/onboarding/existing-project-bootstrap.md.template +171 -0
  287. package/templates/core/ai/onboarding/first-15-mins.md.template +3 -1
  288. package/templates/core/ai/onboarding/first-wu-mistakes.md.template +1 -1
  289. package/templates/core/ai/onboarding/initiative-orchestration.md.template +46 -30
  290. package/templates/core/ai/onboarding/quick-ref-commands.md.template +36 -33
  291. package/templates/core/ai/onboarding/release-process.md.template +8 -7
  292. package/templates/core/ai/onboarding/starting-prompt.md.template +2 -0
  293. package/templates/core/ai/onboarding/troubleshooting-wu-done.md.template +62 -0
  294. package/templates/vendors/claude/.claude/CLAUDE.md.template +29 -54
  295. package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +24 -52
  296. package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +24 -52
@@ -18,6 +18,13 @@ import {
18
18
  type ToolContextLike,
19
19
  type ToolOutput,
20
20
  } from './shared.js';
21
+ import {
22
+ buildTaskCompletedEvent,
23
+ buildTaskCreatedEvent,
24
+ buildTaskScheduledEvent,
25
+ buildTaskSnoozedEvent,
26
+ emitSidekickEvent,
27
+ } from '../sidekick-events.js';
21
28
 
22
29
  // ---------------------------------------------------------------------------
23
30
  // Constants
@@ -97,6 +104,16 @@ function buildCanceledTask(task: TaskRecord): TaskRecord {
97
104
  };
98
105
  }
99
106
 
107
+ function movedDueDateLater(
108
+ previousDueAt: string | undefined,
109
+ nextDueAt: string | undefined,
110
+ ): boolean {
111
+ if (!previousDueAt || !nextDueAt) {
112
+ return false;
113
+ }
114
+ return Date.parse(nextDueAt) > Date.parse(previousDueAt);
115
+ }
116
+
100
117
  // ---------------------------------------------------------------------------
101
118
  // task:create
102
119
  // ---------------------------------------------------------------------------
@@ -140,6 +157,8 @@ async function taskCreateTool(input: unknown, context?: ToolContextLike): Promis
140
157
  );
141
158
  });
142
159
 
160
+ await emitSidekickEvent(buildTaskCreatedEvent(task));
161
+
143
162
  return success({ task: task as unknown as Record<string, unknown> });
144
163
  }
145
164
 
@@ -234,6 +253,8 @@ async function taskUpdateTool(input: unknown, context?: ToolContextLike): Promis
234
253
  });
235
254
  }
236
255
 
256
+ const previousDueAt = task.due_at ?? null;
257
+
237
258
  await storage.withLock(async () => {
238
259
  const latest = await storage.readStore('tasks');
239
260
  const target = latest.find((entry) => entry.id === id);
@@ -254,6 +275,15 @@ async function taskUpdateTool(input: unknown, context?: ToolContextLike): Promis
254
275
 
255
276
  const updated = await storage.readStore('tasks');
256
277
  const updatedTask = updated.find((entry) => entry.id === id);
278
+ if (updatedTask && movedDueDateLater(previousDueAt ?? undefined, updatedTask.due_at)) {
279
+ await emitSidekickEvent(
280
+ buildTaskSnoozedEvent({
281
+ task_id: id,
282
+ previous_due_at: previousDueAt,
283
+ due_at: updatedTask.due_at ?? previousDueAt ?? '',
284
+ }),
285
+ );
286
+ }
257
287
  return success({ task: updatedTask as unknown as Record<string, unknown> });
258
288
  }
259
289
 
@@ -309,6 +339,9 @@ async function taskCompleteTool(input: unknown, context?: ToolContextLike): Prom
309
339
 
310
340
  const updated = await storage.readStore('tasks');
311
341
  const completedTask = updated.find((t) => t.id === id);
342
+ if (completedTask) {
343
+ await emitSidekickEvent(buildTaskCompletedEvent(completedTask));
344
+ }
312
345
 
313
346
  return success({ task: completedTask as unknown as Record<string, unknown> });
314
347
  }
@@ -391,6 +424,7 @@ async function taskScheduleTool(input: unknown, context?: ToolContextLike): Prom
391
424
 
392
425
  const dueAt = asNonEmptyString(parsed.due_at);
393
426
  const cron = asNonEmptyString(parsed.cron);
427
+ const previousDueAt = task.due_at ?? null;
394
428
 
395
429
  if (isDryRun(parsed)) {
396
430
  const preview = {
@@ -429,6 +463,18 @@ async function taskScheduleTool(input: unknown, context?: ToolContextLike): Prom
429
463
 
430
464
  const updated = await storage.readStore('tasks');
431
465
  const scheduledTask = updated.find((t) => t.id === id);
466
+ if (scheduledTask) {
467
+ await emitSidekickEvent(buildTaskScheduledEvent(scheduledTask));
468
+ if (movedDueDateLater(previousDueAt ?? undefined, scheduledTask.due_at)) {
469
+ await emitSidekickEvent(
470
+ buildTaskSnoozedEvent({
471
+ task_id: id,
472
+ previous_due_at: previousDueAt,
473
+ due_at: scheduledTask.due_at ?? previousDueAt ?? '',
474
+ }),
475
+ );
476
+ }
477
+ }
432
478
 
433
479
  return success({ task: scheduledTask as unknown as Record<string, unknown> });
434
480
  }
@@ -15,6 +15,6 @@
15
15
  "checkJs": false,
16
16
  "noEmitOnError": true
17
17
  },
18
- "include": ["*.ts", "tools/**/*.ts", "tool-impl/**/*.ts"],
18
+ "include": ["*.ts", "tools/**/*.ts", "tool-impl/**/*.ts", "src/**/*.ts"],
19
19
  "exclude": ["node_modules", "dist", "__tests__"]
20
20
  }
@@ -1,4 +1,4 @@
1
1
 
2
- > @lumenflow/packs-software-delivery@4.23.0 build /home/runner/work/lumenflow-dev/lumenflow-dev/packages/@lumenflow/packs/software-delivery
2
+ > @lumenflow/packs-software-delivery@5.0.0 build /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
3
3
  > tsc
4
4
 
@@ -0,0 +1,63 @@
1
+
2
+ > @lumenflow/packs-software-delivery@4.24.0 test /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
3
+ > vitest run
4
+
5
+
6
+ RUN v4.0.18 /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
7
+
8
+ ✓ __tests__/bridge-regression.test.ts (1 test) 23ms
9
+ ✓ __tests__/runtime/work-classifier.test.ts (46 tests) 89ms
10
+ ✓ __tests__/git-runner.test.ts (3 tests) 374ms
11
+ ✓ uses explicit LUMENFLOW_GIT_BINARY override when provided 327ms
12
+ ✓ __tests__/memory-tools.test.ts (18 tests) 66ms
13
+ ✓ __tests__/wu-lifecycle-tools.test.ts (23 tests) 45ms
14
+ ✓ __tests__/runtime-cli-adapter.test.ts (5 tests) 160ms
15
+ ✓ __tests__/runtime-native-tools.test.ts (5 tests) 204ms
16
+ ✓ __tests__/lane-lock.test.ts (6 tests) 95ms
17
+ ✓ __tests__/extensions.test.ts (3 tests) 27ms
18
+ ✓ __tests__/agent-tools.test.ts (7 tests) 16ms
19
+ ✓ __tests__/state/wu-paths.test.ts (49 tests) 65ms
20
+ ✓ __tests__/manifest.test.ts (8 tests) 23ms
21
+ ✓ __tests__/config/workspace-reader.test.ts (12 tests) 181ms
22
+ ✓ __tests__/initiative-orchestration-tools.test.ts (5 tests) 11ms
23
+ ✓ __tests__/gate-policies.test.ts (4 tests) 582ms
24
+ ✓ resolves state alias and registers pack with integrity hash 562ms
25
+ ✓ __tests__/sandbox/sandbox-profile.test.ts (4 tests) 13ms
26
+ ✓ __tests__/flow-metrics-tools.test.ts (17 tests) 97ms
27
+ ✓ __tests__/constants/wu-id-format.test.ts (43 tests) 36ms
28
+ ✓ __tests__/constants/wu-type-helpers.test.ts (11 tests) 1854ms
29
+ ✓ pack constants barrel re-exports wu-type-helpers predicates 1850ms
30
+ ✓ __tests__/git-tools.test.ts (6 tests) 1161ms
31
+ ✓ rejects command arrays that try to execute non-git binaries 392ms
32
+ ✓ returns command output payloads for allowed git command arrays 429ms
33
+ ✓ __tests__/sandbox/sandbox-allowlist.test.ts (4 tests) 56ms
34
+ ✓ __tests__/constants/config-contract.test.ts (28 tests) 44ms
35
+ ✓ __tests__/tools/remote-exposure.test.ts (34 tests) 43ms
36
+ ✓ __tests__/constants/wu-validation-constants.test.ts (4 tests) 35ms
37
+ ✓ __tests__/worktree-tools.test.ts (3 tests) 19ms
38
+ ✓ __tests__/config/pack-wrappers-consumer-migration.test.ts (7 tests) 1168ms
39
+ ✓ no repo code imports @lumenflow/core/{env-accessors,normalize-config-keys,delivery-review-contract} 1154ms
40
+ ✓ __tests__/sandbox/sandbox-backend-macos.test.ts (17 tests) 91ms
41
+ ✓ __tests__/state/state-machine.test.ts (20 tests) 54ms
42
+ ✓ __tests__/constants/backlog-patterns.test.ts (10 tests) 38ms
43
+ ✓ __tests__/packaging/deps-manifest.test.ts (7 tests) 5ms
44
+ ✓ __tests__/ports/transitive-clean-ports-moved.test.ts (2 tests) 596ms
45
+ ✓ wu-helpers.ports.ts lives at the new pack path 358ms
46
+ ✓ __tests__/domain/orchestration-moved.test.ts (3 tests) 35ms
47
+ ✓ __tests__/constants/wu-git-constants.test.ts (2 tests) 13ms
48
+ ✓ __tests__/sandbox/sandbox-backend-windows.test.ts (3 tests) 20ms
49
+ ✓ __tests__/config/schema-rename.test.ts (2 tests) 2ms
50
+ ✓ __tests__/constants/gate-constants.test.ts (5 tests) 23ms
51
+ ✓ __tests__/sandbox/sandbox-backend-linux.test.ts (3 tests) 54ms
52
+ ✓ __tests__/config/env-accessors.test.ts (1 test) 7ms
53
+ ✓ __tests__/adr-013-examples-validator-parity.test.ts (4 tests) 22ms
54
+ ✓ __tests__/ports/dashboard-renderer-port-moved.test.ts (1 test) 30ms
55
+ ✓ __tests__/state/date-utils.test.ts (23 tests) 18ms
56
+ ✓ __tests__/state/wu-schema.test.ts (18 tests) 47ms
57
+ ✓ __tests__/state/wu-yaml.test.ts (38 tests) 840ms
58
+
59
+ Test Files 43 passed (43)
60
+ Tests 515 passed (515)
61
+ Start at 11:11:52
62
+ Duration 10.27s (transform 26.33s, setup 0ms, import 52.36s, tests 8.38s, environment 59ms)
63
+
@@ -0,0 +1,4 @@
1
+
2
+ > @lumenflow/packs-software-delivery@4.24.0 typecheck /home/tom/source/hellmai/lumenflow-dev/worktrees/framework-agent-wu-2764/packages/@lumenflow/packs/software-delivery
3
+ > tsc --noEmit
4
+
@@ -37,6 +37,13 @@ export interface SoftwareDeliveryManifestTool {
37
37
  permission: ToolPermission;
38
38
  required_scopes: PathScope[];
39
39
  internal_only?: boolean;
40
+ /**
41
+ * WU-2729 (INIT-060 Phase 2, ADR-013 §3): approval-surface identifiers the
42
+ * tool must present to callers before runtime dispatch. Empty array means
43
+ * no approval gate; undefined means the tool does not declare approval
44
+ * metadata (treated the same as empty by the discovery surface).
45
+ */
46
+ required_approvals?: string[];
40
47
  }
41
48
 
42
49
  export interface SoftwareDeliveryManifestPolicy {
@@ -57,6 +64,11 @@ export interface SoftwareDeliveryPackManifest {
57
64
  evidence_types: string[];
58
65
  state_aliases: Record<string, string>;
59
66
  lane_templates: Array<{ id: string }>;
67
+ /** WU-2718 (INIT-060 WU-1, ADR-013). */
68
+ emitted_event_kinds: string[];
69
+ subscribed_event_kinds: string[];
70
+ required_approvals: string[];
71
+ surfaces_required: string[];
60
72
  }
61
73
 
62
74
  function asRecord(input: unknown, label: string): Record<string, unknown> {
@@ -166,6 +178,12 @@ function parseTool(input: unknown, index: number): SoftwareDeliveryManifestTool
166
178
  throw new Error(`tools[${index}].permission is invalid.`);
167
179
  }
168
180
 
181
+ // WU-2729: optional per-tool required_approvals list.
182
+ const parsedApprovals =
183
+ tool.required_approvals === undefined
184
+ ? undefined
185
+ : parseStringArray(tool.required_approvals, `tools[${index}].required_approvals`);
186
+
169
187
  return {
170
188
  name: parseNonEmptyString(tool.name, `tools[${index}].name`),
171
189
  entry: parseNonEmptyString(tool.entry, `tools[${index}].entry`),
@@ -180,6 +198,7 @@ function parseTool(input: unknown, index: number): SoftwareDeliveryManifestTool
180
198
  }
181
199
  return tool.internal_only;
182
200
  })(),
201
+ ...(parsedApprovals === undefined ? {} : { required_approvals: parsedApprovals }),
183
202
  };
184
203
  }
185
204
 
@@ -233,6 +252,17 @@ export const SoftwareDeliveryManifestSchema: Parser<SoftwareDeliveryPackManifest
233
252
  const entry = asRecord(laneTemplate, `lane_templates[${index}]`);
234
253
  return { id: parseNonEmptyString(entry.id, `lane_templates[${index}].id`) };
235
254
  }),
255
+ // WU-2718 (INIT-060 WU-1, ADR-013): manifest extension fields.
256
+ emitted_event_kinds: parseStringArray(
257
+ manifest.emitted_event_kinds ?? [],
258
+ 'emitted_event_kinds',
259
+ ),
260
+ subscribed_event_kinds: parseStringArray(
261
+ manifest.subscribed_event_kinds ?? [],
262
+ 'subscribed_event_kinds',
263
+ ),
264
+ required_approvals: parseStringArray(manifest.required_approvals ?? [], 'required_approvals'),
265
+ surfaces_required: parseStringArray(manifest.surfaces_required ?? [], 'surfaces_required'),
236
266
  };
237
267
  },
238
268
  };
@@ -55,6 +55,10 @@ const WU_RELEASE_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuReleaseTool';
55
55
  const WU_RECOVER_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuRecoverTool';
56
56
  const WU_REPAIR_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuRepairTool';
57
57
  const GATES_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#gatesTool';
58
+ // WU-2729 (INIT-060 Phase 2): gates:docs exposes docs-only gate runs via a
59
+ // dedicated manifest entry so remote callers can request the docs gate
60
+ // without opting into the permissive gates handler surface.
61
+ const GATES_DOCS_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#gatesDocsTool';
58
62
  const CONFIG_SET_TOOL_ENTRY = 'tool-impl/runtime-native-tools.ts#configSetTool';
59
63
  const CONFIG_GET_TOOL_ENTRY = 'tool-impl/runtime-native-tools.ts#configGetTool';
60
64
  const MEM_INIT_TOOL_ENTRY = 'tool-impl/memory-tools.ts#memInitTool';
@@ -193,6 +197,7 @@ const TOOL_PERMISSIONS = {
193
197
  'flow:bottlenecks': 'read',
194
198
  'flow:report': 'read',
195
199
  gates: 'write',
200
+ 'gates:docs': 'write',
196
201
  'file:delete': 'write',
197
202
  'file:edit': 'write',
198
203
  'file:read': 'read',
@@ -272,6 +277,7 @@ const TOOL_ENTRY_OVERRIDES: Partial<Record<ToolName, string>> = {
272
277
  'wu:repair': WU_REPAIR_TOOL_ENTRY,
273
278
  'wu:infer-lane': WU_INFER_LANE_TOOL_ENTRY,
274
279
  gates: GATES_TOOL_ENTRY,
280
+ 'gates:docs': GATES_DOCS_TOOL_ENTRY,
275
281
  'mem:init': MEM_INIT_TOOL_ENTRY,
276
282
  'mem:start': MEM_START_TOOL_ENTRY,
277
283
  'mem:ready': MEM_READY_TOOL_ENTRY,
@@ -361,15 +367,85 @@ function requiredScopesForPermission(permission: ToolPermission): PathScope[] {
361
367
  ];
362
368
  }
363
369
 
370
+ /**
371
+ * WU-2729 (INIT-060 Phase 2): the 10 software-delivery pack tools that are
372
+ * callable remotely via POST /tools/:name. The HTTP surface uses this list
373
+ * to build its allowlist so the set is the single source of truth (no
374
+ * duplicate allowlist in surface code). ADR-013 §3 tool exposure.
375
+ */
376
+ export const REMOTE_CALLABLE_TOOLS = [
377
+ 'gates',
378
+ 'gates:docs',
379
+ 'lane:suggest',
380
+ 'lane:health',
381
+ 'plan:create',
382
+ 'plan:promote',
383
+ 'initiative:create',
384
+ 'initiative:add-wu',
385
+ 'initiative:status',
386
+ 'flow:report',
387
+ ] as const satisfies readonly ToolName[];
388
+
389
+ export type RemoteCallableToolName = (typeof REMOTE_CALLABLE_TOOLS)[number];
390
+
391
+ /**
392
+ * Well-known approval identifiers the software-delivery pack may request.
393
+ * Kept narrow on purpose; adding a new identifier requires an ADR.
394
+ */
395
+ export const SOFTWARE_DELIVERY_APPROVAL_IDS = {
396
+ REMOTE_MUTATION: 'software-delivery:remote_mutation',
397
+ } as const;
398
+
399
+ /**
400
+ * WU-2729 (INIT-060 Phase 2): per-tool required_approvals overrides.
401
+ * Tools absent from this table default to `[]` (no approval required).
402
+ * Read-only tools MUST remain at `[]`; state-mutating remote-callable
403
+ * tools SHOULD request an explicit approval identifier so the conductor
404
+ * UI can surface the approval gate to operators.
405
+ */
406
+ const APPROVAL_OVERRIDES: Partial<Record<ToolName, readonly string[]>> = {
407
+ 'lane:suggest': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
408
+ 'plan:create': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
409
+ 'plan:promote': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
410
+ 'initiative:create': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
411
+ 'initiative:add-wu': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
412
+ };
413
+
414
+ function requiredApprovalsForTool(name: ToolName): string[] | undefined {
415
+ // WU-2729: only the 10 remote-callable tools carry explicit
416
+ // required_approvals metadata (even if empty). Other tools leave the
417
+ // field undefined so the manifest stays minimally descriptive.
418
+ const isRemoteCallable = (REMOTE_CALLABLE_TOOLS as readonly string[]).includes(name);
419
+ if (!isRemoteCallable) {
420
+ return undefined;
421
+ }
422
+ const override = APPROVAL_OVERRIDES[name];
423
+ return override ? [...override] : [];
424
+ }
425
+
426
+ /**
427
+ * WU-2729: ordered list of the 10 remote-callable tool names. Preserves
428
+ * declaration order from REMOTE_CALLABLE_TOOLS so callers can render
429
+ * stable UIs without re-sorting.
430
+ */
431
+ export function getRemoteCallableToolNames(): RemoteCallableToolName[] {
432
+ return [...REMOTE_CALLABLE_TOOLS];
433
+ }
434
+
364
435
  function createManifestTools(): SoftwareDeliveryManifestTool[] {
365
436
  return (Object.keys(TOOL_PERMISSIONS) as ToolName[]).map((name) => {
366
437
  const permission = TOOL_PERMISSIONS[name];
367
- return {
438
+ const approvals = requiredApprovalsForTool(name);
439
+ const entry: SoftwareDeliveryManifestTool = {
368
440
  name,
369
441
  entry: resolveToolEntry(name),
370
442
  permission,
371
443
  required_scopes: requiredScopesForPermission(permission),
372
444
  };
445
+ if (approvals !== undefined) {
446
+ entry.required_approvals = approvals;
447
+ }
448
+ return entry;
373
449
  });
374
450
  }
375
451
 
@@ -400,6 +476,24 @@ export function renderSoftwareDeliveryMigrationScorecard(
400
476
  }
401
477
 
402
478
  const POLICY_SUFFIXES = ['format', 'lint', 'typecheck', 'test', 'coverage'] as const;
479
+ const SOFTWARE_DELIVERY_EMITTED_EVENT_KINDS = [
480
+ 'software-delivery:gate_started',
481
+ 'software-delivery:gate_passed',
482
+ 'software-delivery:gate_failed',
483
+ 'software-delivery:co_change_rule_fired',
484
+ 'software-delivery:conditional_command_fired',
485
+ 'software-delivery:lane_wip_breached',
486
+ 'software-delivery:lane_locked',
487
+ 'software-delivery:lane_unlocked',
488
+ 'software-delivery:lane_suggestion_emitted',
489
+ 'software-delivery:initiative_created',
490
+ 'software-delivery:initiative_closed',
491
+ 'software-delivery:initiative_phase_advanced',
492
+ 'software-delivery:plan_created',
493
+ 'software-delivery:plan_linked',
494
+ 'software-delivery:plan_promoted',
495
+ ] as const;
496
+ const SOFTWARE_DELIVERY_REQUIRED_SURFACES = ['http'] as const;
403
497
 
404
498
  export const SOFTWARE_DELIVERY_MANIFEST: SoftwareDeliveryPackManifest = {
405
499
  id: SOFTWARE_DELIVERY_PACK_ID,
@@ -415,4 +509,8 @@ export const SOFTWARE_DELIVERY_MANIFEST: SoftwareDeliveryPackManifest = {
415
509
  evidence_types: ['gate-run'],
416
510
  state_aliases: { active: 'in_progress' },
417
511
  lane_templates: [],
512
+ emitted_event_kinds: [...SOFTWARE_DELIVERY_EMITTED_EVENT_KINDS],
513
+ subscribed_event_kinds: [],
514
+ required_approvals: [],
515
+ surfaces_required: [...SOFTWARE_DELIVERY_REQUIRED_SURFACES],
418
516
  };
@@ -273,6 +273,8 @@ tools:
273
273
  - type: path
274
274
  pattern: '**'
275
275
  access: write
276
+ required_approvals:
277
+ - software-delivery:remote_mutation
276
278
  - name: initiative:bulk-assign
277
279
  entry: tool-impl/initiative-orchestration-tools.ts#initiativeBulkAssignTool
278
280
  permission: write
@@ -287,6 +289,8 @@ tools:
287
289
  - type: path
288
290
  pattern: '**'
289
291
  access: write
292
+ required_approvals:
293
+ - software-delivery:remote_mutation
290
294
  - name: initiative:edit
291
295
  entry: tool-impl/initiative-orchestration-tools.ts#initiativeEditTool
292
296
  permission: write
@@ -322,6 +326,7 @@ tools:
322
326
  - type: path
323
327
  pattern: '**'
324
328
  access: read
329
+ required_approvals: []
325
330
  # lane:*
326
331
  - name: lane:health
327
332
  entry: tool-impl/runtime-native-tools.ts#laneHealthTool
@@ -330,6 +335,7 @@ tools:
330
335
  - type: path
331
336
  pattern: '**'
332
337
  access: read
338
+ required_approvals: []
333
339
  - name: lane:suggest
334
340
  entry: tool-impl/runtime-native-tools.ts#laneSuggestTool
335
341
  permission: write
@@ -337,6 +343,8 @@ tools:
337
343
  - type: path
338
344
  pattern: '**'
339
345
  access: write
346
+ required_approvals:
347
+ - software-delivery:remote_mutation
340
348
  # flow:*
341
349
  - name: flow:bottlenecks
342
350
  entry: tool-impl/flow-metrics-tools.ts#flowBottlenecksTool
@@ -352,6 +360,7 @@ tools:
352
360
  - type: path
353
361
  pattern: '**'
354
362
  access: read
363
+ required_approvals: []
355
364
  # gate:*
356
365
  - name: gates
357
366
  entry: tool-impl/wu-lifecycle-tools.ts#gatesTool
@@ -360,6 +369,15 @@ tools:
360
369
  - type: path
361
370
  pattern: '**'
362
371
  access: write
372
+ required_approvals: []
373
+ - name: gates:docs
374
+ entry: tool-impl/wu-lifecycle-tools.ts#gatesDocsTool
375
+ permission: write
376
+ required_scopes:
377
+ - type: path
378
+ pattern: '**'
379
+ access: write
380
+ required_approvals: []
363
381
  # file:*
364
382
  - name: file:delete
365
383
  entry: tool-impl/runtime-native-tools.ts#fileDeleteTool
@@ -499,6 +517,8 @@ tools:
499
517
  - type: path
500
518
  pattern: '**'
501
519
  access: write
520
+ required_approvals:
521
+ - software-delivery:remote_mutation
502
522
  - name: plan:edit
503
523
  entry: tool-impl/initiative-orchestration-tools.ts#planEditTool
504
524
  permission: write
@@ -520,6 +540,8 @@ tools:
520
540
  - type: path
521
541
  pattern: '**'
522
542
  access: write
543
+ required_approvals:
544
+ - software-delivery:remote_mutation
523
545
  # setup:*
524
546
  - name: backlog:prune
525
547
  entry: tool-impl/runtime-native-tools.ts#backlogPruneTool
@@ -710,3 +732,27 @@ evidence_types:
710
732
  state_aliases:
711
733
  active: in_progress
712
734
  lane_templates: []
735
+ # WU-2728 (INIT-060, ADR-013): software-delivery pack emits 15 namespaced
736
+ # event kinds on a single channel (software-delivery). All kinds are
737
+ # ephemeral per ADR-013 §4 backpressure split; fail-silent when
738
+ # control_plane.org_id is unset (WU-2643 precedent).
739
+ emitted_event_kinds:
740
+ - software-delivery:gate_started
741
+ - software-delivery:gate_passed
742
+ - software-delivery:gate_failed
743
+ - software-delivery:co_change_rule_fired
744
+ - software-delivery:conditional_command_fired
745
+ - software-delivery:lane_wip_breached
746
+ - software-delivery:lane_locked
747
+ - software-delivery:lane_unlocked
748
+ - software-delivery:lane_suggestion_emitted
749
+ - software-delivery:initiative_created
750
+ - software-delivery:initiative_closed
751
+ - software-delivery:initiative_phase_advanced
752
+ - software-delivery:plan_created
753
+ - software-delivery:plan_linked
754
+ - software-delivery:plan_promoted
755
+ subscribed_event_kinds: []
756
+ required_approvals: []
757
+ surfaces_required:
758
+ - http
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumenflow/packs-software-delivery",
3
- "version": "4.23.0",
3
+ "version": "5.0.0",
4
4
  "description": "Software delivery pack for LumenFlow — work units, gates, lanes, initiatives, and agent coordination",
5
5
  "keywords": [
6
6
  "lumenflow",
@@ -25,7 +25,71 @@
25
25
  "exports": {
26
26
  ".": "./dist/index.js",
27
27
  "./tools": "./dist/tools/index.js",
28
- "./tool-impl": "./dist/tool-impl/index.js"
28
+ "./tool-impl": "./dist/tool-impl/index.js",
29
+ "./constants": "./dist/src/constants/index.js",
30
+ "./constants/wu-statuses": "./dist/src/constants/wu-statuses.js",
31
+ "./constants/object-guards": "./dist/src/constants/object-guards.js",
32
+ "./constants/config-contract": "./dist/src/constants/config-contract.js",
33
+ "./constants/gate-constants": "./dist/src/constants/gate-constants.js",
34
+ "./constants/wu-ui-constants": "./dist/src/constants/wu-ui-constants.js",
35
+ "./constants/wu-paths-constants": "./dist/src/constants/wu-paths-constants.js",
36
+ "./constants/docs-layout-presets": "./dist/src/constants/docs-layout-presets.js",
37
+ "./constants/wu-git-constants": "./dist/src/constants/wu-git-constants.js",
38
+ "./constants/wu-cli-constants": "./dist/src/constants/wu-cli-constants.js",
39
+ "./constants/client-ids": "./dist/src/constants/client-ids.js",
40
+ "./constants/wu-domain-constants": "./dist/src/constants/wu-domain-constants.js",
41
+ "./constants/wu-type-helpers": "./dist/src/constants/wu-type-helpers.js",
42
+ "./constants/wu-validation-constants": "./dist/src/constants/wu-validation-constants.js",
43
+ "./constants/backlog-patterns": "./dist/src/constants/backlog-patterns.js",
44
+ "./constants/duration-constants": "./dist/src/constants/duration-constants.js",
45
+ "./constants/section-headings": "./dist/src/constants/section-headings.js",
46
+ "./constants/wu-id-format": "./dist/src/constants/wu-id-format.js",
47
+ "./runtime": "./dist/src/runtime/index.js",
48
+ "./runtime/work-classifier": "./dist/src/runtime/work-classifier.js",
49
+ "./sandbox": "./dist/src/sandbox/index.js",
50
+ "./sandbox/sandbox-profile": "./dist/src/sandbox/sandbox-profile.js",
51
+ "./sandbox/sandbox-allowlist": "./dist/src/sandbox/sandbox-allowlist.js",
52
+ "./sandbox/sandbox-backend-linux": "./dist/src/sandbox/sandbox-backend-linux.js",
53
+ "./sandbox/sandbox-backend-macos": "./dist/src/sandbox/sandbox-backend-macos.js",
54
+ "./sandbox/sandbox-backend-windows": "./dist/src/sandbox/sandbox-backend-windows.js",
55
+ "./state": "./dist/src/state/index.js",
56
+ "./state/wu-state-schema": "./dist/src/state/wu-state-schema.js",
57
+ "./state/wu-doc-types": "./dist/src/state/wu-doc-types.js",
58
+ "./state/wu-paths": "./dist/src/state/wu-paths.js",
59
+ "./state/wu-yaml": "./dist/src/state/wu-yaml.js",
60
+ "./state/wu-schema": "./dist/src/state/wu-schema.js",
61
+ "./state/date-utils": "./dist/src/state/date-utils.js",
62
+ "./state/state-machine": "./dist/src/state/state-machine.js",
63
+ "./ports": "./dist/src/ports/index.js",
64
+ "./ports/wu-state.ports": "./dist/src/ports/wu-state.ports.js",
65
+ "./ports/sync-validator.ports": "./dist/src/ports/sync-validator.ports.js",
66
+ "./ports/wu-helpers.ports": "./dist/src/ports/wu-helpers.ports.js",
67
+ "./ports/config.ports": "./dist/src/ports/config.ports.js",
68
+ "./ports/dashboard-renderer.port": "./dist/src/ports/dashboard-renderer.port.js",
69
+ "./policy": "./dist/src/policy/index.js",
70
+ "./policy/gates-schemas": "./dist/src/policy/gates-schemas.js",
71
+ "./policy/resolve-policy": "./dist/src/policy/resolve-policy.js",
72
+ "./policy/coverage-gate": "./dist/src/policy/coverage-gate.js",
73
+ "./policy/gates-config": "./dist/src/policy/gates-config.js",
74
+ "./policy/gates-presets": "./dist/src/policy/gates-presets.js",
75
+ "./policy/gates-config-internal": "./dist/src/policy/gates-config-internal.js",
76
+ "./policy/gates-agent-mode": "./dist/src/policy/gates-agent-mode.js",
77
+ "./policy/gates-coverage": "./dist/src/policy/gates-coverage.js",
78
+ "./policy/package-manager-resolver": "./dist/src/policy/package-manager-resolver.js",
79
+ "./config": "./dist/src/config/index.js",
80
+ "./config/workspace-reader": "./dist/src/config/workspace-reader.js",
81
+ "./config/schemas/lumenflow-config-schema-types": "./dist/src/config/schemas/lumenflow-config-schema-types.js",
82
+ "./config/env-accessors": "./dist/src/config/env-accessors.js",
83
+ "./config/normalize-config-keys": "./dist/src/config/normalize-config-keys.js",
84
+ "./config/delivery-review-contract": "./dist/src/config/delivery-review-contract.js",
85
+ "./constants/lock-constants": "./dist/src/constants/lock-constants.js",
86
+ "./domain": "./dist/src/domain/index.js",
87
+ "./domain/orchestration.types": "./dist/src/domain/orchestration.types.js",
88
+ "./domain/orchestration.schemas": "./dist/src/domain/orchestration.schemas.js",
89
+ "./domain/orchestration.constants": "./dist/src/domain/orchestration.constants.js",
90
+ "./methodology": "./dist/src/methodology/index.js",
91
+ "./methodology/manual-test-validator": "./dist/src/methodology/manual-test-validator.js",
92
+ "./methodology/incremental-test": "./dist/src/methodology/incremental-test.js"
29
93
  },
30
94
  "main": "./dist/index.js",
31
95
  "types": "./dist/index.d.ts",
@@ -42,13 +106,34 @@
42
106
  "typecheck": "tsc --noEmit"
43
107
  },
44
108
  "dependencies": {
45
- "@lumenflow/kernel": "workspace:^"
109
+ "@lumenflow/host": "workspace:^",
110
+ "@lumenflow/kernel": "workspace:^",
111
+ "change-case": "^5.4.4",
112
+ "commander": "^14.0.3",
113
+ "date-fns": "^4.1.0",
114
+ "fast-glob": "^3.3.3",
115
+ "glob": "^13.0.3",
116
+ "gray-matter": "^4.0.3",
117
+ "micromatch": "^4.0.8",
118
+ "minimatch": "^10.2.0",
119
+ "p-retry": "^7.1.1",
120
+ "picocolors": "^1.1.1",
121
+ "yaml": "^2.8.2",
122
+ "zod": "^4.3.6"
46
123
  },
47
124
  "devDependencies": {
48
125
  "simple-git": "^3.27.0",
49
126
  "typescript": "^5.9.3",
50
127
  "vitest": "^4.0.18"
51
128
  },
129
+ "peerDependencies": {
130
+ "@lumenflow/core": "workspace:*"
131
+ },
132
+ "peerDependenciesMeta": {
133
+ "@lumenflow/core": {
134
+ "optional": true
135
+ }
136
+ },
52
137
  "engines": {
53
138
  "node": ">=22"
54
139
  },
@@ -0,0 +1,5 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ // Barrel for pack-cli-handlers. Populated by Layer 5 of INIT-058.
5
+ export {};
@@ -0,0 +1,20 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ /**
5
+ * Pack-side wrapper for delivery-review-contract (INIT-058 WU-2727).
6
+ *
7
+ * Part of the staged migration pattern: consumers migrate OFF the
8
+ * `@lumenflow/core/delivery-review-contract` subpath and onto
9
+ * `@lumenflow/packs-software-delivery/config/delivery-review-contract` FIRST,
10
+ * while the canonical implementation still lives in `@lumenflow/core`. A
11
+ * follow-up WU will move the canonical file into the pack and update this
12
+ * wrapper to become the canonical definition.
13
+ *
14
+ * This file must re-export DIRECTLY from
15
+ * `@lumenflow/core/delivery-review-contract` (single level). Do NOT introduce
16
+ * a shim chain — WU-2712 hit TS2305 on type-only imports through chained
17
+ * shims.
18
+ */
19
+
20
+ export * from '@lumenflow/core/delivery-review-contract';
@@ -0,0 +1,19 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ /**
5
+ * Pack-side wrapper for env-accessors (INIT-058 WU-2727).
6
+ *
7
+ * Part of the staged migration pattern: consumers migrate OFF the
8
+ * `@lumenflow/core/env-accessors` subpath and onto
9
+ * `@lumenflow/packs-software-delivery/config/env-accessors` FIRST, while the
10
+ * canonical implementation still lives in `@lumenflow/core`. A follow-up WU
11
+ * will move the canonical file into the pack and update this wrapper to
12
+ * become the canonical definition.
13
+ *
14
+ * This file must re-export DIRECTLY from `@lumenflow/core/env-accessors`
15
+ * (single level). Do NOT introduce a shim chain — WU-2712 hit TS2305 on
16
+ * type-only imports through chained shims.
17
+ */
18
+
19
+ export * from '@lumenflow/core/env-accessors';