@lumenflow/cli 2.18.3 → 2.20.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 (128) hide show
  1. package/README.md +44 -42
  2. package/dist/agent-session.js +1 -1
  3. package/dist/agent-session.js.map +1 -1
  4. package/dist/commands/integrate.js +1 -0
  5. package/dist/commands/integrate.js.map +1 -1
  6. package/dist/commands.js +1 -0
  7. package/dist/commands.js.map +1 -1
  8. package/dist/delegation-list.js +140 -0
  9. package/dist/delegation-list.js.map +1 -0
  10. package/dist/docs-sync.js +1 -0
  11. package/dist/docs-sync.js.map +1 -1
  12. package/dist/doctor.js +36 -99
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/gates-plan-resolvers.js +150 -0
  15. package/dist/gates-plan-resolvers.js.map +1 -0
  16. package/dist/gates-runners.js +533 -0
  17. package/dist/gates-runners.js.map +1 -0
  18. package/dist/gates-types.js +3 -0
  19. package/dist/gates-types.js.map +1 -1
  20. package/dist/gates-utils.js +316 -0
  21. package/dist/gates-utils.js.map +1 -0
  22. package/dist/gates.js +44 -1016
  23. package/dist/gates.js.map +1 -1
  24. package/dist/hooks/enforcement-generator.js +16 -880
  25. package/dist/hooks/enforcement-generator.js.map +1 -1
  26. package/dist/hooks/enforcement-sync.js +6 -5
  27. package/dist/hooks/enforcement-sync.js.map +1 -1
  28. package/dist/hooks/generators/auto-checkpoint.js +123 -0
  29. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  30. package/dist/hooks/generators/enforce-worktree.js +188 -0
  31. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  32. package/dist/hooks/generators/index.js +16 -0
  33. package/dist/hooks/generators/index.js.map +1 -0
  34. package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
  35. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  36. package/dist/hooks/generators/require-wu.js +115 -0
  37. package/dist/hooks/generators/require-wu.js.map +1 -0
  38. package/dist/hooks/generators/session-start-recovery.js +101 -0
  39. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  40. package/dist/hooks/generators/signal-utils.js +52 -0
  41. package/dist/hooks/generators/signal-utils.js.map +1 -0
  42. package/dist/hooks/generators/warn-incomplete.js +65 -0
  43. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  44. package/dist/init-detection.js +228 -0
  45. package/dist/init-detection.js.map +1 -0
  46. package/dist/init-scaffolding.js +146 -0
  47. package/dist/init-scaffolding.js.map +1 -0
  48. package/dist/init-templates.js +1928 -0
  49. package/dist/init-templates.js.map +1 -0
  50. package/dist/init.js +137 -2425
  51. package/dist/init.js.map +1 -1
  52. package/dist/initiative-edit.js +42 -11
  53. package/dist/initiative-edit.js.map +1 -1
  54. package/dist/initiative-remove-wu.js +0 -0
  55. package/dist/initiative-status.js +29 -2
  56. package/dist/initiative-status.js.map +1 -1
  57. package/dist/mem-context.js +22 -9
  58. package/dist/mem-context.js.map +1 -1
  59. package/dist/orchestrate-init-status.js +32 -1
  60. package/dist/orchestrate-init-status.js.map +1 -1
  61. package/dist/orchestrate-initiative.js +2 -2
  62. package/dist/orchestrate-initiative.js.map +1 -1
  63. package/dist/orchestrate-monitor.js +38 -38
  64. package/dist/orchestrate-monitor.js.map +1 -1
  65. package/dist/plan-link.js +7 -14
  66. package/dist/plan-link.js.map +1 -1
  67. package/dist/public-manifest.js +19 -5
  68. package/dist/public-manifest.js.map +1 -1
  69. package/dist/shared-validators.js +1 -0
  70. package/dist/shared-validators.js.map +1 -1
  71. package/dist/spawn-list.js +0 -0
  72. package/dist/sync-templates.js +2 -1
  73. package/dist/sync-templates.js.map +1 -1
  74. package/dist/wu-claim-branch.js +121 -0
  75. package/dist/wu-claim-branch.js.map +1 -0
  76. package/dist/wu-claim-output.js +83 -0
  77. package/dist/wu-claim-output.js.map +1 -0
  78. package/dist/wu-claim-resume-handler.js +85 -0
  79. package/dist/wu-claim-resume-handler.js.map +1 -0
  80. package/dist/wu-claim-state.js +572 -0
  81. package/dist/wu-claim-state.js.map +1 -0
  82. package/dist/wu-claim-validation.js +439 -0
  83. package/dist/wu-claim-validation.js.map +1 -0
  84. package/dist/wu-claim-worktree.js +221 -0
  85. package/dist/wu-claim-worktree.js.map +1 -0
  86. package/dist/wu-claim.js +96 -1394
  87. package/dist/wu-claim.js.map +1 -1
  88. package/dist/wu-code-path-coverage.js +81 -0
  89. package/dist/wu-code-path-coverage.js.map +1 -0
  90. package/dist/wu-create-content.js +256 -0
  91. package/dist/wu-create-content.js.map +1 -0
  92. package/dist/wu-create-readiness.js +57 -0
  93. package/dist/wu-create-readiness.js.map +1 -0
  94. package/dist/wu-create-validation.js +124 -0
  95. package/dist/wu-create-validation.js.map +1 -0
  96. package/dist/wu-create.js +45 -442
  97. package/dist/wu-create.js.map +1 -1
  98. package/dist/wu-done.js +151 -249
  99. package/dist/wu-done.js.map +1 -1
  100. package/dist/wu-edit-operations.js +401 -0
  101. package/dist/wu-edit-operations.js.map +1 -0
  102. package/dist/wu-edit-validators.js +280 -0
  103. package/dist/wu-edit-validators.js.map +1 -0
  104. package/dist/wu-edit.js +43 -759
  105. package/dist/wu-edit.js.map +1 -1
  106. package/dist/wu-prep.js +43 -127
  107. package/dist/wu-prep.js.map +1 -1
  108. package/dist/wu-repair.js +1 -1
  109. package/dist/wu-repair.js.map +1 -1
  110. package/dist/wu-sandbox.js +253 -0
  111. package/dist/wu-sandbox.js.map +1 -0
  112. package/dist/wu-spawn-prompt-builders.js +1124 -0
  113. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  114. package/dist/wu-spawn-strategy-resolver.js +319 -0
  115. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  116. package/dist/wu-spawn.js +9 -1398
  117. package/dist/wu-spawn.js.map +1 -1
  118. package/dist/wu-status.js +4 -0
  119. package/dist/wu-status.js.map +1 -1
  120. package/dist/wu-validate.js +1 -1
  121. package/dist/wu-validate.js.map +1 -1
  122. package/package.json +15 -11
  123. package/templates/core/LUMENFLOW.md.template +29 -99
  124. package/templates/core/UPGRADING.md.template +2 -2
  125. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  126. package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
  127. package/templates/core/ai/onboarding/release-process.md.template +1 -1
  128. package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +8 -8
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Gates Utility Helpers
3
+ *
4
+ * WU-1647: Extracted utility functions used across gate runners,
5
+ * plan resolvers, and the gates orchestrator.
6
+ *
7
+ * @module gates-utils
8
+ */
9
+ import { execSync, spawnSync } from 'node:child_process';
10
+ import { closeSync, mkdirSync, openSync, readSync, statSync, writeSync } from 'node:fs';
11
+ import { access } from 'node:fs/promises';
12
+ import path from 'node:path';
13
+ import { buildGatesLogPath } from '@lumenflow/core/gates-agent-mode';
14
+ import { createGitForPath } from '@lumenflow/core/git-adapter';
15
+ import { getCurrentWU } from '@lumenflow/core/telemetry';
16
+ import { createWuPaths } from '@lumenflow/core/wu-paths';
17
+ import { readWURaw } from '@lumenflow/core/wu-yaml';
18
+ import { PKG_MANAGER, SCRIPTS, FILE_SYSTEM, EXIT_CODES, PRETTIER_ARGS, PRETTIER_FLAGS, } from '@lumenflow/core/wu-constants';
19
+ // ── Shell command builders ─────────────────────────────────────────────
20
+ /**
21
+ * Build a pnpm command string
22
+ */
23
+ export function pnpmCmd(...parts) {
24
+ return `${PKG_MANAGER} ${parts.join(' ')}`;
25
+ }
26
+ /**
27
+ * Build a pnpm run command string
28
+ */
29
+ export function pnpmRun(script, ...args) {
30
+ const argsStr = args.length > 0 ? ` ${args.join(' ')}` : '';
31
+ return `${PKG_MANAGER} ${SCRIPTS.RUN} ${script}${argsStr}`;
32
+ }
33
+ // ── Path/string helpers ────────────────────────────────────────────────
34
+ export function normalizePath(filePath) {
35
+ return filePath.replace(/\\/g, '/');
36
+ }
37
+ export function getBasename(filePath) {
38
+ const normalized = normalizePath(filePath);
39
+ const parts = normalized.split('/');
40
+ return parts[parts.length - 1] || normalized;
41
+ }
42
+ export function quoteShellArgs(files) {
43
+ return files.map((file) => `"${file}"`).join(' ');
44
+ }
45
+ // ── Prettier helpers ───────────────────────────────────────────────────
46
+ export function parsePrettierListOutput(output) {
47
+ if (!output)
48
+ return [];
49
+ return output
50
+ .split(/\r?\n/)
51
+ .map((line) => line.trim())
52
+ .filter(Boolean)
53
+ .map((line) => line.replace(/^\[error\]\s*/i, '').trim())
54
+ .filter((line) => !line.toLowerCase().includes('code style issues found') &&
55
+ !line.toLowerCase().includes('all matched files use prettier') &&
56
+ !line.toLowerCase().includes('checking formatting'));
57
+ }
58
+ export function buildPrettierWriteCommand(files) {
59
+ const quotedFiles = files.map((file) => `"${file}"`).join(' ');
60
+ const base = pnpmCmd(SCRIPTS.PRETTIER, PRETTIER_FLAGS.WRITE);
61
+ return quotedFiles ? `${base} ${quotedFiles}` : base;
62
+ }
63
+ export function buildPrettierCheckCommand(files) {
64
+ const filesArg = files.length > 0 ? quoteShellArgs(files) : '.';
65
+ return pnpmCmd(SCRIPTS.PRETTIER, PRETTIER_ARGS.CHECK, filesArg);
66
+ }
67
+ export function formatFormatCheckGuidance(files) {
68
+ if (!files.length)
69
+ return [];
70
+ const command = buildPrettierWriteCommand(files);
71
+ return [
72
+ '',
73
+ '\u274C format:check failed',
74
+ 'Fix with:',
75
+ ` ${command}`,
76
+ '',
77
+ 'Affected files:',
78
+ ...files.map((file) => ` - ${file}`),
79
+ '',
80
+ ];
81
+ }
82
+ export function collectPrettierListDifferent(cwd, files = []) {
83
+ const filesArg = files.length > 0 ? quoteShellArgs(files) : '.';
84
+ const cmd = pnpmCmd(SCRIPTS.PRETTIER, PRETTIER_ARGS.LIST_DIFFERENT, filesArg);
85
+ const result = spawnSync(cmd, [], {
86
+ shell: true,
87
+ cwd,
88
+ encoding: FILE_SYSTEM.ENCODING,
89
+ });
90
+ const output = `${result.stdout || ''}\n${result.stderr || ''}`;
91
+ return parsePrettierListOutput(output);
92
+ }
93
+ export function emitFormatCheckGuidance({ agentLog, useAgentMode, files, cwd, }) {
94
+ const formattedFiles = collectPrettierListDifferent(cwd, files ?? []);
95
+ if (!formattedFiles.length)
96
+ return;
97
+ const lines = formatFormatCheckGuidance(formattedFiles);
98
+ const logLine = useAgentMode && agentLog
99
+ ? (line) => writeSync(agentLog.logFd, `${line}\n`)
100
+ : (line) => console.log(line);
101
+ for (const line of lines) {
102
+ logLine(line);
103
+ }
104
+ }
105
+ // ── Process execution ──────────────────────────────────────────────────
106
+ export function run(cmd, { agentLog, cwd = process.cwd(), } = {}) {
107
+ const start = Date.now();
108
+ if (!agentLog) {
109
+ console.log(`\n> ${cmd}\n`);
110
+ try {
111
+ // Pre-existing: execSync is intentional here for synchronous gate execution
112
+ execSync(cmd, {
113
+ stdio: 'inherit',
114
+ encoding: FILE_SYSTEM.ENCODING,
115
+ cwd,
116
+ });
117
+ return { ok: true, duration: Date.now() - start };
118
+ }
119
+ catch {
120
+ return { ok: false, duration: Date.now() - start };
121
+ }
122
+ }
123
+ writeSync(agentLog.logFd, `\n> ${cmd}\n\n`);
124
+ const result = spawnSync(cmd, [], {
125
+ shell: true,
126
+ stdio: ['ignore', agentLog.logFd, agentLog.logFd],
127
+ cwd,
128
+ encoding: FILE_SYSTEM.ENCODING,
129
+ });
130
+ return { ok: result.status === EXIT_CODES.SUCCESS, duration: Date.now() - start };
131
+ }
132
+ // ── Logging ────────────────────────────────────────────────────────────
133
+ export function makeGateLogger({ agentLog, useAgentMode }) {
134
+ return (line) => {
135
+ if (!useAgentMode) {
136
+ console.log(line);
137
+ return;
138
+ }
139
+ if (agentLog) {
140
+ writeSync(agentLog.logFd, `${line}\n`);
141
+ }
142
+ };
143
+ }
144
+ export function readLogTail(logPath, { maxLines = 40, maxBytes = 64 * 1024 } = {}) {
145
+ try {
146
+ const stats = statSync(logPath);
147
+ const startPos = Math.max(0, stats.size - maxBytes);
148
+ const bytesToRead = stats.size - startPos;
149
+ const fd = openSync(logPath, 'r');
150
+ try {
151
+ const buffer = Buffer.alloc(bytesToRead);
152
+ readSync(fd, buffer, 0, bytesToRead, startPos);
153
+ const text = buffer.toString(FILE_SYSTEM.ENCODING);
154
+ const lines = text.split(/\r?\n/).filter(Boolean);
155
+ return lines.slice(-maxLines).join('\n');
156
+ }
157
+ finally {
158
+ closeSync(fd);
159
+ }
160
+ }
161
+ catch {
162
+ return '';
163
+ }
164
+ }
165
+ export function createAgentLogContext({ wuId, lane, cwd, }) {
166
+ const logPath = buildGatesLogPath({ cwd, env: process.env, wuId, lane });
167
+ mkdirSync(path.dirname(logPath), { recursive: true });
168
+ const logFd = openSync(logPath, 'a');
169
+ const header = `# gates log\n# lane: ${lane || 'unknown'}\n# wu: ${wuId || 'unknown'}\n# started: ${new Date().toISOString()}\n\n`;
170
+ writeSync(logFd, header);
171
+ // Ensure we close the FD even if gates exit via die().
172
+ process.on('exit', () => {
173
+ try {
174
+ closeSync(logFd);
175
+ }
176
+ catch {
177
+ // ignore
178
+ }
179
+ });
180
+ return { logPath, logFd };
181
+ }
182
+ // ── File system helpers ────────────────────────────────────────────────
183
+ export async function filterExistingFiles(files) {
184
+ const existingFiles = await Promise.all(files.map(async (file) => {
185
+ try {
186
+ await access(file);
187
+ return file;
188
+ }
189
+ catch {
190
+ return null;
191
+ }
192
+ }));
193
+ return existingFiles.filter((file) => Boolean(file));
194
+ }
195
+ // ── Git helpers ────────────────────────────────────────────────────────
196
+ export async function getChangedFilesForIncremental({ git, baseBranch = 'origin/main', }) {
197
+ const mergeBase = await git.mergeBase('HEAD', baseBranch);
198
+ const committedOutput = await git.raw(['diff', '--name-only', `${mergeBase}...HEAD`]);
199
+ const committedFiles = committedOutput
200
+ .split('\n')
201
+ .map((f) => f.trim())
202
+ .filter(Boolean);
203
+ const unstagedOutput = await git.raw(['diff', '--name-only']);
204
+ const unstagedFiles = unstagedOutput
205
+ .split('\n')
206
+ .map((f) => f.trim())
207
+ .filter(Boolean);
208
+ const untrackedOutput = await git.raw(['ls-files', '--others', '--exclude-standard']);
209
+ const untrackedFiles = untrackedOutput
210
+ .split('\n')
211
+ .map((f) => f.trim())
212
+ .filter(Boolean);
213
+ return [...new Set([...committedFiles, ...unstagedFiles, ...untrackedFiles])];
214
+ }
215
+ export async function getAllChangedFiles(options = {}) {
216
+ const { git = createGitForPath(options.cwd ?? process.cwd()) } = options;
217
+ try {
218
+ return await getChangedFilesForIncremental({ git });
219
+ }
220
+ catch (error) {
221
+ console.error('\u26A0\uFE0F Failed to get changed files:', error.message);
222
+ return [];
223
+ }
224
+ }
225
+ // ── WU helpers ─────────────────────────────────────────────────────────
226
+ /**
227
+ * Parse a WU ID from a branch name.
228
+ * Returns canonical upper-case ID (e.g., WU-123) or null when not present.
229
+ */
230
+ export function parseWUFromBranchName(branchName) {
231
+ if (!branchName) {
232
+ return null;
233
+ }
234
+ const match = branchName.match(/wu-(\d+)/i);
235
+ if (!match) {
236
+ return null;
237
+ }
238
+ return `WU-${match[1]}`.toUpperCase();
239
+ }
240
+ export async function detectCurrentWUForCwd(cwd) {
241
+ const workingDir = cwd ?? process.cwd();
242
+ try {
243
+ const branch = await createGitForPath(workingDir).getCurrentBranch();
244
+ const parsed = parseWUFromBranchName(branch);
245
+ if (parsed) {
246
+ return parsed;
247
+ }
248
+ }
249
+ catch {
250
+ // Fall back to legacy process-cwd based resolver below.
251
+ }
252
+ return getCurrentWU();
253
+ }
254
+ // ── Package extraction (WU-1299) ──────────────────────────────────────
255
+ /**
256
+ * WU-1299: Extract package name from a single code path
257
+ */
258
+ function extractPackageFromPath(codePath) {
259
+ if (!codePath || typeof codePath !== 'string') {
260
+ return null;
261
+ }
262
+ const normalized = codePath.replace(/\\/g, '/');
263
+ // Handle packages/@scope/name/... or packages/name/...
264
+ if (normalized.startsWith('packages/')) {
265
+ const parts = normalized.slice('packages/'.length).split('/');
266
+ // Scoped package (@scope/name)
267
+ if (parts[0]?.startsWith('@') && parts[1]) {
268
+ return `${parts[0]}/${parts[1]}`;
269
+ }
270
+ // Unscoped package
271
+ if (parts[0]) {
272
+ return parts[0];
273
+ }
274
+ }
275
+ // WU-1415: Skip apps/ paths - they aren't valid turbo packages for test filtering
276
+ return null;
277
+ }
278
+ /**
279
+ * WU-1299: Extract package/app names from code_paths
280
+ */
281
+ export function extractPackagesFromCodePaths(codePaths) {
282
+ if (!codePaths || !Array.isArray(codePaths) || codePaths.length === 0) {
283
+ return [];
284
+ }
285
+ const packages = new Set();
286
+ for (const codePath of codePaths) {
287
+ const pkg = extractPackageFromPath(codePath);
288
+ if (pkg) {
289
+ packages.add(pkg);
290
+ }
291
+ }
292
+ return Array.from(packages);
293
+ }
294
+ /**
295
+ * WU-1299: Load code_paths from current WU YAML
296
+ */
297
+ export function loadCurrentWUCodePaths(options = {}) {
298
+ const cwd = options.cwd ?? process.cwd();
299
+ const wuId = getCurrentWU();
300
+ if (!wuId) {
301
+ return [];
302
+ }
303
+ try {
304
+ const wuPaths = createWuPaths({ projectRoot: cwd });
305
+ const wuYamlPath = wuPaths.WU(wuId);
306
+ const wuDoc = readWURaw(wuYamlPath);
307
+ if (wuDoc && Array.isArray(wuDoc.code_paths)) {
308
+ return wuDoc.code_paths.filter((p) => typeof p === 'string');
309
+ }
310
+ }
311
+ catch {
312
+ // WU YAML not found or unreadable - return empty array
313
+ }
314
+ return [];
315
+ }
316
+ //# sourceMappingURL=gates-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates-utils.js","sourceRoot":"","sources":["../src/gates-utils.ts"],"names":[],"mappings":"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"}