@lumenflow/cli 5.5.0 → 5.7.14

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 (229) hide show
  1. package/README.md +41 -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/doctor.js +11 -0
  7. package/dist/doctor.js.map +1 -1
  8. package/dist/gate-defaults.js +37 -0
  9. package/dist/gate-defaults.js.map +1 -1
  10. package/dist/gates/monolithic-file-contention-guard.js +167 -0
  11. package/dist/gates/monolithic-file-contention-guard.js.map +1 -0
  12. package/dist/gates/prod-migration-drift.js +207 -0
  13. package/dist/gates/prod-migration-drift.js.map +1 -0
  14. package/dist/gates/test-over-deletion-guard.js +280 -0
  15. package/dist/gates/test-over-deletion-guard.js.map +1 -0
  16. package/dist/gates-runners.js +44 -3
  17. package/dist/gates-runners.js.map +1 -1
  18. package/dist/gates.js +3 -2
  19. package/dist/gates.js.map +1 -1
  20. package/dist/hooks/config-resolver.js +16 -1
  21. package/dist/hooks/config-resolver.js.map +1 -1
  22. package/dist/hooks/dirty-guard.js +43 -2
  23. package/dist/hooks/dirty-guard.js.map +1 -1
  24. package/dist/hooks/git-status-parser.js +22 -8
  25. package/dist/hooks/git-status-parser.js.map +1 -1
  26. package/dist/init-templates.js +241 -0
  27. package/dist/init-templates.js.map +1 -1
  28. package/dist/init.js +122 -16
  29. package/dist/init.js.map +1 -1
  30. package/dist/lumenflow-setup.js +144 -0
  31. package/dist/lumenflow-setup.js.map +1 -0
  32. package/dist/lumenflow-upgrade.js +43 -1
  33. package/dist/lumenflow-upgrade.js.map +1 -1
  34. package/dist/mem-create.js +10 -1
  35. package/dist/mem-create.js.map +1 -1
  36. package/dist/mem-signal.js +21 -4
  37. package/dist/mem-signal.js.map +1 -1
  38. package/dist/orchestrate-initiative.js +28 -3
  39. package/dist/orchestrate-initiative.js.map +1 -1
  40. package/dist/public-manifest.js +17 -7
  41. package/dist/public-manifest.js.map +1 -1
  42. package/dist/release.js +53 -18
  43. package/dist/release.js.map +1 -1
  44. package/dist/wu-done-gates.js +13 -9
  45. package/dist/wu-done-gates.js.map +1 -1
  46. package/dist/wu-done.js +14 -2
  47. package/dist/wu-done.js.map +1 -1
  48. package/dist/wu-edit-operations.js +74 -0
  49. package/dist/wu-edit-operations.js.map +1 -1
  50. package/dist/wu-edit-validators.js +58 -0
  51. package/dist/wu-edit-validators.js.map +1 -1
  52. package/dist/wu-edit.js +106 -4
  53. package/dist/wu-edit.js.map +1 -1
  54. package/dist/wu-prep.js +57 -9
  55. package/dist/wu-prep.js.map +1 -1
  56. package/dist/wu-recover.js +6 -0
  57. package/dist/wu-recover.js.map +1 -1
  58. package/dist/wu-release.js +120 -2
  59. package/dist/wu-release.js.map +1 -1
  60. package/dist/wu-sizing-validation.js +47 -17
  61. package/dist/wu-sizing-validation.js.map +1 -1
  62. package/dist/wu-status.js +33 -0
  63. package/dist/wu-status.js.map +1 -1
  64. package/package.json +13 -12
  65. package/packs/agent-runtime/package.json +1 -1
  66. package/packs/sidekick/package.json +1 -1
  67. package/packs/software-delivery/package.json +1 -1
  68. package/templates/core/AGENTS.md.template +67 -3
  69. package/templates/core/LUMENFLOW.md.template +196 -47
  70. package/dist/distribution-preflight.js +0 -230
  71. package/dist/distribution-preflight.js.map +0 -1
  72. package/packs/agent-runtime/agent-heartbeat.ts +0 -163
  73. package/packs/agent-runtime/auto-session-integration.ts +0 -888
  74. package/packs/agent-runtime/capability-factory.ts +0 -104
  75. package/packs/agent-runtime/constants.ts +0 -21
  76. package/packs/agent-runtime/delegation-registry-schema.ts +0 -220
  77. package/packs/agent-runtime/delegation-registry-store.ts +0 -269
  78. package/packs/agent-runtime/delegation-tree.ts +0 -328
  79. package/packs/agent-runtime/index.ts +0 -20
  80. package/packs/agent-runtime/manifest.ts +0 -348
  81. package/packs/agent-runtime/memory-coordination-contract.ts +0 -86
  82. package/packs/agent-runtime/orchestration.ts +0 -2027
  83. package/packs/agent-runtime/pack-registration.ts +0 -110
  84. package/packs/agent-runtime/policy-factory.ts +0 -165
  85. package/packs/agent-runtime/remote-controls/index.ts +0 -7
  86. package/packs/agent-runtime/remote-controls/operations.ts +0 -405
  87. package/packs/agent-runtime/remote-controls/port.ts +0 -48
  88. package/packs/agent-runtime/remote-controls/state-store.ts +0 -258
  89. package/packs/agent-runtime/remote-controls/types.ts +0 -105
  90. package/packs/agent-runtime/session-schema.ts +0 -467
  91. package/packs/agent-runtime/tool-impl/agent-turn-tools.ts +0 -793
  92. package/packs/agent-runtime/tool-impl/index.ts +0 -6
  93. package/packs/agent-runtime/tool-impl/provider-adapters.ts +0 -1245
  94. package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +0 -256
  95. package/packs/agent-runtime/tool-impl/remote-controls.ts +0 -273
  96. package/packs/agent-runtime/tools/index.ts +0 -4
  97. package/packs/agent-runtime/tools/types.ts +0 -47
  98. package/packs/agent-runtime/turn-lifecycle-events.ts +0 -590
  99. package/packs/agent-runtime/types.ts +0 -128
  100. package/packs/agent-runtime/vitest.config.ts +0 -11
  101. package/packs/sidekick/channel-ingress.ts +0 -137
  102. package/packs/sidekick/constants.ts +0 -10
  103. package/packs/sidekick/index.ts +0 -8
  104. package/packs/sidekick/manifest-schema.ts +0 -49
  105. package/packs/sidekick/manifest.ts +0 -512
  106. package/packs/sidekick/pack-registration.ts +0 -110
  107. package/packs/sidekick/policy-factory.ts +0 -38
  108. package/packs/sidekick/sidekick-events.ts +0 -694
  109. package/packs/sidekick/src/adapters/cloud-queue.ts +0 -101
  110. package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +0 -386
  111. package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +0 -228
  112. package/packs/sidekick/src/domain/channel.types.ts +0 -64
  113. package/packs/sidekick/src/ports/channel-bridge.port.ts +0 -92
  114. package/packs/sidekick/src/routines/commit.ts +0 -74
  115. package/packs/sidekick/tool-impl/channel-tools.ts +0 -577
  116. package/packs/sidekick/tool-impl/channel-transports.ts +0 -75
  117. package/packs/sidekick/tool-impl/index.ts +0 -29
  118. package/packs/sidekick/tool-impl/memory-tools.ts +0 -290
  119. package/packs/sidekick/tool-impl/routine-commit.ts +0 -102
  120. package/packs/sidekick/tool-impl/routine-tools.ts +0 -440
  121. package/packs/sidekick/tool-impl/runtime-context.ts +0 -28
  122. package/packs/sidekick/tool-impl/shared.ts +0 -125
  123. package/packs/sidekick/tool-impl/storage.ts +0 -325
  124. package/packs/sidekick/tool-impl/system-tools.ts +0 -160
  125. package/packs/sidekick/tool-impl/task-tools.ts +0 -506
  126. package/packs/sidekick/tools/channel-tools.ts +0 -53
  127. package/packs/sidekick/tools/index.ts +0 -9
  128. package/packs/sidekick/tools/memory-tools.ts +0 -53
  129. package/packs/sidekick/tools/routine-tools.ts +0 -53
  130. package/packs/sidekick/tools/system-tools.ts +0 -47
  131. package/packs/sidekick/tools/task-tools.ts +0 -61
  132. package/packs/sidekick/tools/types.ts +0 -57
  133. package/packs/sidekick/vitest.config.ts +0 -11
  134. package/packs/software-delivery/constants.ts +0 -10
  135. package/packs/software-delivery/extensions.ts +0 -140
  136. package/packs/software-delivery/gate-policies.ts +0 -134
  137. package/packs/software-delivery/index.ts +0 -8
  138. package/packs/software-delivery/manifest-schema.ts +0 -268
  139. package/packs/software-delivery/manifest.ts +0 -657
  140. package/packs/software-delivery/pack-registration.ts +0 -113
  141. package/packs/software-delivery/src/commands/index.ts +0 -5
  142. package/packs/software-delivery/src/config/delivery-review-contract.ts +0 -256
  143. package/packs/software-delivery/src/config/env-accessors.ts +0 -66
  144. package/packs/software-delivery/src/config/index.ts +0 -8
  145. package/packs/software-delivery/src/config/normalize-config-keys.ts +0 -9
  146. package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +0 -460
  147. package/packs/software-delivery/src/config/workspace-reader.ts +0 -375
  148. package/packs/software-delivery/src/constants/backlog-patterns.ts +0 -31
  149. package/packs/software-delivery/src/constants/client-ids.ts +0 -19
  150. package/packs/software-delivery/src/constants/config-contract.ts +0 -7
  151. package/packs/software-delivery/src/constants/docs-layout-presets.ts +0 -50
  152. package/packs/software-delivery/src/constants/duration-constants.ts +0 -20
  153. package/packs/software-delivery/src/constants/gate-constants.ts +0 -32
  154. package/packs/software-delivery/src/constants/index.ts +0 -29
  155. package/packs/software-delivery/src/constants/lock-constants.ts +0 -35
  156. package/packs/software-delivery/src/constants/object-guards.ts +0 -12
  157. package/packs/software-delivery/src/constants/section-headings.ts +0 -107
  158. package/packs/software-delivery/src/constants/wu-cli-constants.ts +0 -500
  159. package/packs/software-delivery/src/constants/wu-domain-constants.ts +0 -466
  160. package/packs/software-delivery/src/constants/wu-git-constants.ts +0 -7
  161. package/packs/software-delivery/src/constants/wu-id-format.ts +0 -327
  162. package/packs/software-delivery/src/constants/wu-paths-constants.ts +0 -384
  163. package/packs/software-delivery/src/constants/wu-statuses.ts +0 -287
  164. package/packs/software-delivery/src/constants/wu-type-helpers.ts +0 -67
  165. package/packs/software-delivery/src/constants/wu-ui-constants.ts +0 -267
  166. package/packs/software-delivery/src/constants/wu-validation-constants.ts +0 -73
  167. package/packs/software-delivery/src/domain/index.ts +0 -5
  168. package/packs/software-delivery/src/domain/orchestration.constants.ts +0 -166
  169. package/packs/software-delivery/src/domain/orchestration.schemas.ts +0 -238
  170. package/packs/software-delivery/src/domain/orchestration.types.ts +0 -176
  171. package/packs/software-delivery/src/methodology/incremental-test.ts +0 -122
  172. package/packs/software-delivery/src/methodology/index.ts +0 -6
  173. package/packs/software-delivery/src/methodology/manual-test-validator.ts +0 -292
  174. package/packs/software-delivery/src/policy/coverage-gate.ts +0 -270
  175. package/packs/software-delivery/src/policy/gates-agent-mode.ts +0 -223
  176. package/packs/software-delivery/src/policy/gates-config-internal.ts +0 -121
  177. package/packs/software-delivery/src/policy/gates-config.ts +0 -300
  178. package/packs/software-delivery/src/policy/gates-coverage.ts +0 -356
  179. package/packs/software-delivery/src/policy/gates-presets.ts +0 -134
  180. package/packs/software-delivery/src/policy/gates-schemas.ts +0 -173
  181. package/packs/software-delivery/src/policy/index.ts +0 -22
  182. package/packs/software-delivery/src/policy/package-manager-resolver.ts +0 -319
  183. package/packs/software-delivery/src/policy/resolve-policy.ts +0 -601
  184. package/packs/software-delivery/src/ports/config.ports.ts +0 -90
  185. package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +0 -125
  186. package/packs/software-delivery/src/ports/index.ts +0 -10
  187. package/packs/software-delivery/src/ports/sync-validator.ports.ts +0 -59
  188. package/packs/software-delivery/src/ports/wu-helpers.ports.ts +0 -168
  189. package/packs/software-delivery/src/ports/wu-state.ports.ts +0 -241
  190. package/packs/software-delivery/src/primitives/index.ts +0 -5
  191. package/packs/software-delivery/src/runtime/index.ts +0 -6
  192. package/packs/software-delivery/src/runtime/work-classifier.ts +0 -561
  193. package/packs/software-delivery/src/sandbox/index.ts +0 -10
  194. package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +0 -118
  195. package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +0 -88
  196. package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +0 -154
  197. package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +0 -47
  198. package/packs/software-delivery/src/sandbox/sandbox-profile.ts +0 -153
  199. package/packs/software-delivery/src/schemas/index.ts +0 -5
  200. package/packs/software-delivery/src/state/date-utils.ts +0 -158
  201. package/packs/software-delivery/src/state/index.ts +0 -15
  202. package/packs/software-delivery/src/state/state-machine.ts +0 -119
  203. package/packs/software-delivery/src/state/wu-doc-types.ts +0 -51
  204. package/packs/software-delivery/src/state/wu-paths.ts +0 -381
  205. package/packs/software-delivery/src/state/wu-schema.ts +0 -1139
  206. package/packs/software-delivery/src/state/wu-state-schema.ts +0 -255
  207. package/packs/software-delivery/src/state/wu-yaml.ts +0 -338
  208. package/packs/software-delivery/tool-impl/agent-tools.ts +0 -263
  209. package/packs/software-delivery/tool-impl/delegation-tools.ts +0 -66
  210. package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +0 -219
  211. package/packs/software-delivery/tool-impl/git-runner.ts +0 -113
  212. package/packs/software-delivery/tool-impl/git-tools.ts +0 -316
  213. package/packs/software-delivery/tool-impl/index.ts +0 -15
  214. package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +0 -720
  215. package/packs/software-delivery/tool-impl/lane-lock.ts +0 -246
  216. package/packs/software-delivery/tool-impl/memory-tools.ts +0 -470
  217. package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +0 -21
  218. package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +0 -329
  219. package/packs/software-delivery/tool-impl/runtime-native-tools.ts +0 -687
  220. package/packs/software-delivery/tool-impl/worker-loader.ts +0 -52
  221. package/packs/software-delivery/tool-impl/worktree-tools.ts +0 -46
  222. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +0 -807
  223. package/packs/software-delivery/tools/delegation-tools.ts +0 -23
  224. package/packs/software-delivery/tools/git-tools.ts +0 -55
  225. package/packs/software-delivery/tools/index.ts +0 -8
  226. package/packs/software-delivery/tools/lane-lock-tool.ts +0 -37
  227. package/packs/software-delivery/tools/types.ts +0 -71
  228. package/packs/software-delivery/tools/worktree-tools.ts +0 -49
  229. package/packs/software-delivery/vitest.config.ts +0 -11
@@ -1,319 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
3
-
4
- /**
5
- * Package Manager and Test Runner Resolution
6
- *
7
- * WU-2037: Extracted from gates-config.ts
8
- *
9
- * Resolves package manager, test runner, build commands, gates commands,
10
- * and ignore patterns from workspace.yaml software_delivery configuration.
11
- *
12
- * @module package-manager-resolver
13
- */
14
-
15
- import { asRecord, isString } from '../constants/object-guards.js';
16
- import type { GatesCommands } from './gates-schemas.js';
17
- import {
18
- GATES_RUNTIME_DEFAULTS,
19
- SOFTWARE_DELIVERY_FIELDS,
20
- GATES_FIELDS,
21
- GATES_COMMAND_FIELDS,
22
- loadSoftwareDeliveryConfig,
23
- getGatesSection,
24
- } from './gates-config-internal.js';
25
-
26
- // ---------------------------------------------------------------------------
27
- // Supported values
28
- // ---------------------------------------------------------------------------
29
-
30
- const SUPPORTED_PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn', 'bun'] as const;
31
- const SUPPORTED_TEST_RUNNERS = ['vitest', 'jest', 'mocha'] as const;
32
- const GATE_PRESET_FIELD = 'preset';
33
- const NODE_GATE_PRESET = 'node';
34
-
35
- /**
36
- * WU-1356: Supported package managers type
37
- */
38
- type PackageManager = (typeof SUPPORTED_PACKAGE_MANAGERS)[number];
39
-
40
- /**
41
- * WU-1356: Supported test runners type
42
- */
43
- type TestRunner = (typeof SUPPORTED_TEST_RUNNERS)[number];
44
-
45
- export type ScopedUnitTestExecutionPlan =
46
- | {
47
- mode: 'direct';
48
- runner: TestRunner;
49
- args: string[];
50
- }
51
- | {
52
- mode: 'default-flow';
53
- preset: string;
54
- };
55
-
56
- // ---------------------------------------------------------------------------
57
- // Default command tables
58
- // ---------------------------------------------------------------------------
59
-
60
- /**
61
- * WU-1356: Default gates commands by package manager
62
- *
63
- * Provides sensible defaults for different package manager and test runner combinations.
64
- */
65
- const DEFAULT_GATES_COMMANDS: Record<PackageManager, GatesCommands> = {
66
- pnpm: {
67
- test_full: 'pnpm turbo run test',
68
- test_docs_only: '',
69
- test_incremental: 'pnpm vitest run --changed origin/main',
70
- lint: 'pnpm lint',
71
- typecheck: 'pnpm typecheck',
72
- format: 'pnpm format:check',
73
- migration_verify: '',
74
- },
75
- npm: {
76
- test_full: 'npm test',
77
- test_docs_only: '',
78
- test_incremental: 'npm test -- --onlyChanged',
79
- lint: 'npm run lint',
80
- typecheck: 'npm run typecheck',
81
- format: 'npm run format:check',
82
- migration_verify: '',
83
- },
84
- yarn: {
85
- test_full: 'yarn test',
86
- test_docs_only: '',
87
- test_incremental: 'yarn test --onlyChanged',
88
- lint: 'yarn lint',
89
- typecheck: 'yarn typecheck',
90
- format: 'yarn format:check',
91
- migration_verify: '',
92
- },
93
- bun: {
94
- test_full: 'bun test',
95
- test_docs_only: '',
96
- test_incremental: 'bun test --changed',
97
- lint: 'bun run lint',
98
- typecheck: 'bun run typecheck',
99
- format: 'bun run format:check',
100
- migration_verify: '',
101
- },
102
- };
103
-
104
- /**
105
- * WU-1356: Default build commands by package manager
106
- */
107
- const DEFAULT_BUILD_COMMANDS: Record<PackageManager, string> = {
108
- pnpm: 'pnpm --filter @lumenflow/cli build',
109
- npm: 'npm run build --workspace @lumenflow/cli',
110
- yarn: 'yarn workspace @lumenflow/cli build',
111
- bun: 'bun run --filter @lumenflow/cli build',
112
- };
113
-
114
- /**
115
- * WU-1356: Ignore patterns by test runner
116
- *
117
- * Different test runners use different cache directories that should be ignored.
118
- */
119
- const IGNORE_PATTERNS_BY_RUNNER: Record<TestRunner, string[]> = {
120
- vitest: ['.turbo'],
121
- jest: ['coverage', '.jest-cache'],
122
- mocha: ['coverage', '.nyc_output'],
123
- };
124
-
125
- const SCOPED_UNIT_TEST_ARGS_BY_RUNNER: Record<TestRunner, (paths: string[]) => string[]> = {
126
- vitest: (paths) => ['vitest', 'run', ...paths, '--passWithNoTests', '--maxWorkers=1'],
127
- jest: (paths) => ['jest', ...paths, '--passWithNoTests'],
128
- mocha: (paths) => ['mocha', ...paths],
129
- };
130
-
131
- function normalizeScopedUnitTestPaths(scopedUnitTests: string[]): string[] {
132
- return scopedUnitTests
133
- .filter((entry): entry is string => typeof entry === 'string')
134
- .map((entry) => entry.trim())
135
- .filter(Boolean);
136
- }
137
-
138
- export function resolveGatePreset(projectRoot: string): string | undefined {
139
- const gates = getGatesSection(projectRoot);
140
- const execution = asRecord(gates?.[GATES_FIELDS.EXECUTION]);
141
- const preset = execution?.[GATE_PRESET_FIELD];
142
-
143
- if (!isString(preset)) {
144
- return undefined;
145
- }
146
-
147
- const normalized = preset.trim();
148
- return normalized.length > 0 ? normalized : undefined;
149
- }
150
-
151
- export function resolveScopedUnitTestExecutionPlan(options: {
152
- projectRoot: string;
153
- scopedUnitTests: string[];
154
- }): ScopedUnitTestExecutionPlan | null {
155
- const normalizedPaths = normalizeScopedUnitTestPaths(options.scopedUnitTests);
156
- if (normalizedPaths.length === 0) {
157
- return null;
158
- }
159
-
160
- const preset = resolveGatePreset(options.projectRoot);
161
- if (preset && preset !== NODE_GATE_PRESET) {
162
- return {
163
- mode: 'default-flow',
164
- preset,
165
- };
166
- }
167
-
168
- const runner = resolveTestRunner(options.projectRoot);
169
- return {
170
- mode: 'direct',
171
- runner,
172
- args: SCOPED_UNIT_TEST_ARGS_BY_RUNNER[runner](normalizedPaths),
173
- };
174
- }
175
-
176
- export function formatScopedUnitTestFallbackMessage(
177
- plan: Extract<ScopedUnitTestExecutionPlan, { mode: 'default-flow' }>,
178
- ): string {
179
- return (
180
- `gates.execution.preset "${plan.preset}" does not support path-scoped tests.unit execution; ` +
181
- 'falling back to the configured default test flow.'
182
- );
183
- }
184
-
185
- // ---------------------------------------------------------------------------
186
- // Public API
187
- // ---------------------------------------------------------------------------
188
-
189
- /**
190
- * WU-1356: Resolve package manager from configuration
191
- *
192
- * Reads the package_manager field from workspace.yaml software_delivery.
193
- * Returns 'pnpm' as default if not configured.
194
- *
195
- * @param projectRoot - Project root directory
196
- * @returns Resolved package manager ('pnpm', 'npm', 'yarn', or 'bun')
197
- */
198
- export function resolvePackageManager(projectRoot: string): PackageManager {
199
- const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
200
- if (!softwareDelivery) {
201
- return GATES_RUNTIME_DEFAULTS.DEFAULT_PACKAGE_MANAGER;
202
- }
203
-
204
- const pm =
205
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.PACKAGE_MANAGER] ??
206
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.PACKAGE_MANAGER_CAMEL];
207
- if (isString(pm) && SUPPORTED_PACKAGE_MANAGERS.includes(pm as PackageManager)) {
208
- return pm as PackageManager;
209
- }
210
- return GATES_RUNTIME_DEFAULTS.DEFAULT_PACKAGE_MANAGER;
211
- }
212
-
213
- /**
214
- * WU-1356: Resolve test runner from configuration
215
- *
216
- * Reads the test_runner field from workspace.yaml software_delivery.
217
- * Returns 'vitest' as default if not configured.
218
- *
219
- * @param projectRoot - Project root directory
220
- * @returns Resolved test runner ('vitest', 'jest', or 'mocha')
221
- */
222
- export function resolveTestRunner(projectRoot: string): TestRunner {
223
- const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
224
- if (!softwareDelivery) {
225
- return GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER;
226
- }
227
-
228
- const runner =
229
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.TEST_RUNNER] ??
230
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.TEST_RUNNER_CAMEL];
231
- if (isString(runner) && SUPPORTED_TEST_RUNNERS.includes(runner as TestRunner)) {
232
- return runner as TestRunner;
233
- }
234
- return GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER;
235
- }
236
-
237
- /**
238
- * WU-1356: Resolve build command from configuration
239
- *
240
- * Reads the build_command field from workspace.yaml software_delivery.
241
- * If not configured, uses default based on package_manager.
242
- *
243
- * @param projectRoot - Project root directory
244
- * @returns Resolved build command
245
- */
246
- export function resolveBuildCommand(projectRoot: string): string {
247
- const defaultPm = resolvePackageManager(projectRoot);
248
- const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
249
- if (!softwareDelivery) {
250
- return DEFAULT_BUILD_COMMANDS[defaultPm];
251
- }
252
-
253
- const configuredBuildCommand =
254
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.BUILD_COMMAND] ??
255
- softwareDelivery[SOFTWARE_DELIVERY_FIELDS.BUILD_COMMAND_CAMEL];
256
- if (isString(configuredBuildCommand) && configuredBuildCommand.length > 0) {
257
- return configuredBuildCommand;
258
- }
259
-
260
- return DEFAULT_BUILD_COMMANDS[defaultPm];
261
- }
262
-
263
- /**
264
- * WU-1356: Resolve gates commands from configuration
265
- *
266
- * Reads gates.commands from workspace.yaml software_delivery.
267
- * Merges with defaults based on package_manager if not fully specified.
268
- *
269
- * @param projectRoot - Project root directory
270
- * @returns Resolved gates commands configuration
271
- */
272
- export function resolveGatesCommands(projectRoot: string): GatesCommands {
273
- const pm = resolvePackageManager(projectRoot);
274
- const defaults = DEFAULT_GATES_COMMANDS[pm];
275
- const gates = getGatesSection(projectRoot);
276
- if (!gates) {
277
- return defaults;
278
- }
279
-
280
- const commands = asRecord(gates[GATES_FIELDS.COMMANDS]);
281
- if (!commands) {
282
- return defaults;
283
- }
284
-
285
- // Merge user config with defaults (user config wins)
286
- return {
287
- test_full:
288
- (commands[GATES_COMMAND_FIELDS.TEST_FULL] as string | undefined) ?? defaults.test_full,
289
- test_docs_only:
290
- (commands[GATES_COMMAND_FIELDS.TEST_DOCS_ONLY] as string | undefined) ??
291
- defaults.test_docs_only,
292
- test_incremental:
293
- (commands[GATES_COMMAND_FIELDS.TEST_INCREMENTAL] as string | undefined) ??
294
- defaults.test_incremental,
295
- lint: (commands[GATES_COMMAND_FIELDS.LINT] as string | undefined) ?? defaults.lint,
296
- typecheck:
297
- (commands[GATES_COMMAND_FIELDS.TYPECHECK] as string | undefined) ?? defaults.typecheck,
298
- format: (commands[GATES_COMMAND_FIELDS.FORMAT] as string | undefined) ?? defaults.format,
299
- migration_verify:
300
- (commands[GATES_COMMAND_FIELDS.MIGRATION_VERIFY] as string | undefined) ??
301
- defaults.migration_verify,
302
- };
303
- }
304
-
305
- /**
306
- * WU-1356: Get ignore patterns for test runner
307
- *
308
- * Returns patterns to ignore when detecting changed tests,
309
- * based on the test runner configuration.
310
- *
311
- * @param testRunner - Test runner type (vitest, jest, mocha)
312
- * @returns Array of ignore patterns
313
- */
314
- export function getIgnorePatterns(testRunner: TestRunner): string[] {
315
- return (
316
- IGNORE_PATTERNS_BY_RUNNER[testRunner] ??
317
- IGNORE_PATTERNS_BY_RUNNER[GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER]
318
- );
319
- }