@lumenflow/cli 2.21.0 → 3.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.
- package/README.md +53 -47
- package/dist/commands.js +3 -0
- package/dist/commands.js.map +1 -1
- package/dist/config-get.js +56 -0
- package/dist/config-get.js.map +1 -0
- package/dist/config-set.js +287 -0
- package/dist/config-set.js.map +1 -0
- package/dist/gates-runners.js +1 -1
- package/dist/gates-runners.js.map +1 -1
- package/dist/git-log.js +5 -3
- package/dist/git-log.js.map +1 -1
- package/dist/guard-worktree-commit.js +1 -1
- package/dist/guard-worktree-commit.js.map +1 -1
- package/dist/init-templates.js +17 -1
- package/dist/init-templates.js.map +1 -1
- package/dist/init.js +21 -3
- package/dist/init.js.map +1 -1
- package/dist/initiative-create.js +19 -4
- package/dist/initiative-create.js.map +1 -1
- package/dist/lane-edit.js +318 -0
- package/dist/lane-edit.js.map +1 -0
- package/dist/lane-lifecycle-process.js +92 -2
- package/dist/lane-lifecycle-process.js.map +1 -1
- package/dist/lane-setup.js +19 -2
- package/dist/lane-setup.js.map +1 -1
- package/dist/mem-checkpoint.js +70 -3
- package/dist/mem-checkpoint.js.map +1 -1
- package/dist/orchestrate-initiative.js +15 -1
- package/dist/orchestrate-initiative.js.map +1 -1
- package/dist/pack-hash.js +101 -0
- package/dist/pack-hash.js.map +1 -0
- package/dist/pack-install.js +407 -0
- package/dist/pack-install.js.map +1 -0
- package/dist/pack-publish.js +277 -0
- package/dist/pack-publish.js.map +1 -0
- package/dist/pack-scaffold.js +269 -0
- package/dist/pack-scaffold.js.map +1 -0
- package/dist/pack-search.js +142 -0
- package/dist/pack-search.js.map +1 -0
- package/dist/pack-validate.js +208 -0
- package/dist/pack-validate.js.map +1 -0
- package/dist/public-manifest.js +46 -0
- package/dist/public-manifest.js.map +1 -1
- package/dist/release.js +1 -1
- package/dist/release.js.map +1 -1
- package/dist/task-claim.js +667 -0
- package/dist/task-claim.js.map +1 -0
- package/dist/workspace-init.js +321 -0
- package/dist/workspace-init.js.map +1 -0
- package/dist/wu-block.js +1 -1
- package/dist/wu-block.js.map +1 -1
- package/dist/wu-claim-cloud.js +16 -0
- package/dist/wu-claim-cloud.js.map +1 -1
- package/dist/wu-claim-state.js +0 -1
- package/dist/wu-claim-state.js.map +1 -1
- package/dist/wu-claim.js +13 -3
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-create-content.js +8 -2
- package/dist/wu-create-content.js.map +1 -1
- package/dist/wu-create-validation.js +5 -3
- package/dist/wu-create-validation.js.map +1 -1
- package/dist/wu-create.js +5 -1
- package/dist/wu-create.js.map +1 -1
- package/dist/wu-done.js +5 -3
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +86 -28
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/package.json +19 -7
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @file lane-edit.ts
|
|
4
|
+
* WU-1854: Safe in-place lane definition editing via micro-worktree
|
|
5
|
+
*
|
|
6
|
+
* Enables editing lane definitions in .lumenflow.config.yaml without
|
|
7
|
+
* directly writing to main. Uses the micro-worktree isolation pattern
|
|
8
|
+
* (WU-1262) to commit changes atomically.
|
|
9
|
+
*
|
|
10
|
+
* Supports: --rename, --wip-limit, --add-path, --remove-path, --description
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* pnpm lane:edit --name 'Framework: CLI' --rename 'Framework: CLI WU Commands'
|
|
14
|
+
* pnpm lane:edit --name 'Feature: API' --wip-limit 3
|
|
15
|
+
* pnpm lane:edit --name 'Core: Domain' --add-path 'packages/events/'
|
|
16
|
+
*/
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import YAML from 'yaml';
|
|
20
|
+
import { findProjectRoot } from '@lumenflow/core/config';
|
|
21
|
+
import { die } from '@lumenflow/core/error-handler';
|
|
22
|
+
import { CONFIG_FILES, FILE_SYSTEM } from '@lumenflow/core/wu-constants';
|
|
23
|
+
import { withMicroWorktree } from '@lumenflow/core/micro-worktree';
|
|
24
|
+
import { runCLI } from './cli-entry-point.js';
|
|
25
|
+
import { validateLaneArtifacts, classifyLaneLifecycleForProject, LANE_LIFECYCLE_STATUS, } from './lane-lifecycle-process.js';
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Constants
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
const LOG_PREFIX = '[lane:edit]';
|
|
30
|
+
const OPERATION_NAME = 'lane-edit';
|
|
31
|
+
const ARG_NAME = '--name';
|
|
32
|
+
const ARG_RENAME = '--rename';
|
|
33
|
+
const ARG_WIP_LIMIT = '--wip-limit';
|
|
34
|
+
const ARG_ADD_PATH = '--add-path';
|
|
35
|
+
const ARG_REMOVE_PATH = '--remove-path';
|
|
36
|
+
const ARG_DESCRIPTION = '--description';
|
|
37
|
+
const ARG_HELP = '--help';
|
|
38
|
+
const COMMIT_PREFIX = 'chore: lane:edit';
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Help
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
const HELP_TEXT = `Usage: pnpm lane:edit --name <lane> [options]
|
|
43
|
+
|
|
44
|
+
Edit a lane definition in .lumenflow.config.yaml via micro-worktree commit.
|
|
45
|
+
|
|
46
|
+
Required:
|
|
47
|
+
${ARG_NAME} <name> Target lane name (exact match)
|
|
48
|
+
|
|
49
|
+
Edit flags (at least one required):
|
|
50
|
+
${ARG_RENAME} <name> Rename the lane
|
|
51
|
+
${ARG_WIP_LIMIT} <n> Set WIP limit (positive integer)
|
|
52
|
+
${ARG_ADD_PATH} <path> Add a code path (repeatable)
|
|
53
|
+
${ARG_REMOVE_PATH} <path> Remove a code path (repeatable)
|
|
54
|
+
${ARG_DESCRIPTION} <text> Set lane description
|
|
55
|
+
|
|
56
|
+
Examples:
|
|
57
|
+
pnpm lane:edit --name 'Framework: CLI' --rename 'Framework: CLI WU Commands'
|
|
58
|
+
pnpm lane:edit --name 'Feature: API' --wip-limit 3
|
|
59
|
+
pnpm lane:edit --name 'Core: Domain' --add-path 'packages/events/'
|
|
60
|
+
`;
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Argument parsing
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
export function parseLaneEditArgs(argv) {
|
|
65
|
+
if (argv.includes(ARG_HELP)) {
|
|
66
|
+
console.log(HELP_TEXT);
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
let name;
|
|
70
|
+
let rename;
|
|
71
|
+
let wipLimit;
|
|
72
|
+
const addPaths = [];
|
|
73
|
+
const removePaths = [];
|
|
74
|
+
let description;
|
|
75
|
+
for (let i = 0; i < argv.length; i++) {
|
|
76
|
+
const arg = argv[i];
|
|
77
|
+
const next = argv[i + 1];
|
|
78
|
+
switch (arg) {
|
|
79
|
+
case ARG_NAME:
|
|
80
|
+
name = next;
|
|
81
|
+
i++;
|
|
82
|
+
break;
|
|
83
|
+
case ARG_RENAME:
|
|
84
|
+
rename = next;
|
|
85
|
+
i++;
|
|
86
|
+
break;
|
|
87
|
+
case ARG_WIP_LIMIT: {
|
|
88
|
+
const parsed = parseInt(next, 10);
|
|
89
|
+
if (isNaN(parsed) || parsed <= 0) {
|
|
90
|
+
throw new Error(`${ARG_WIP_LIMIT} must be a positive integer, got: ${next}`);
|
|
91
|
+
}
|
|
92
|
+
wipLimit = parsed;
|
|
93
|
+
i++;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case ARG_ADD_PATH:
|
|
97
|
+
addPaths.push(next);
|
|
98
|
+
i++;
|
|
99
|
+
break;
|
|
100
|
+
case ARG_REMOVE_PATH:
|
|
101
|
+
removePaths.push(next);
|
|
102
|
+
i++;
|
|
103
|
+
break;
|
|
104
|
+
case ARG_DESCRIPTION:
|
|
105
|
+
description = next;
|
|
106
|
+
i++;
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!name) {
|
|
113
|
+
throw new Error(`${ARG_NAME} is required. Run with ${ARG_HELP} for usage.`);
|
|
114
|
+
}
|
|
115
|
+
const hasEdits = rename !== undefined ||
|
|
116
|
+
wipLimit !== undefined ||
|
|
117
|
+
addPaths.length > 0 ||
|
|
118
|
+
removePaths.length > 0 ||
|
|
119
|
+
description !== undefined;
|
|
120
|
+
if (!hasEdits) {
|
|
121
|
+
throw new Error(`At least one edit flag is required (${ARG_RENAME}, ${ARG_WIP_LIMIT}, ${ARG_ADD_PATH}, ${ARG_REMOVE_PATH}, ${ARG_DESCRIPTION}). Run with ${ARG_HELP} for usage.`);
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
name,
|
|
125
|
+
rename,
|
|
126
|
+
wipLimit,
|
|
127
|
+
addPaths: addPaths.length > 0 ? addPaths : undefined,
|
|
128
|
+
removePaths: removePaths.length > 0 ? removePaths : undefined,
|
|
129
|
+
description,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// Precondition validation
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
export function validateLaneEditPreconditions(projectRoot) {
|
|
136
|
+
const configPath = path.join(projectRoot, CONFIG_FILES.LUMENFLOW_CONFIG);
|
|
137
|
+
if (!existsSync(configPath)) {
|
|
138
|
+
return {
|
|
139
|
+
ok: false,
|
|
140
|
+
error: `${LOG_PREFIX} Missing ${CONFIG_FILES.LUMENFLOW_CONFIG}. Run \`pnpm exec lumenflow init\` first.`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const classification = classifyLaneLifecycleForProject(projectRoot);
|
|
144
|
+
const { status } = classification;
|
|
145
|
+
if (status !== LANE_LIFECYCLE_STATUS.LOCKED && status !== LANE_LIFECYCLE_STATUS.DRAFT) {
|
|
146
|
+
return {
|
|
147
|
+
ok: false,
|
|
148
|
+
error: `${LOG_PREFIX} Lane lifecycle status is "${status}". ` +
|
|
149
|
+
`lane:edit requires lanes to be in locked or draft status. ` +
|
|
150
|
+
`Run: pnpm lane:setup && pnpm lane:lock`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return { ok: true };
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Pure lane mutation logic (no side effects, testable)
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
export function applyLaneEdit(definitions, options) {
|
|
159
|
+
const { name, rename, wipLimit, addPaths, removePaths, description } = options;
|
|
160
|
+
// Find the target lane
|
|
161
|
+
const targetIndex = definitions.findIndex((d) => d.name === name);
|
|
162
|
+
if (targetIndex === -1) {
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
error: `${LOG_PREFIX} Lane "${name}" not found in definitions.`,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Deep clone definitions to avoid mutating the input
|
|
169
|
+
const updated = JSON.parse(JSON.stringify(definitions));
|
|
170
|
+
const target = updated[targetIndex];
|
|
171
|
+
// Apply rename
|
|
172
|
+
if (rename !== undefined) {
|
|
173
|
+
// Check that new name doesn't already exist
|
|
174
|
+
const nameConflict = updated.some((d, i) => i !== targetIndex && d.name === rename);
|
|
175
|
+
if (nameConflict) {
|
|
176
|
+
return {
|
|
177
|
+
ok: false,
|
|
178
|
+
error: `${LOG_PREFIX} Lane "${rename}" already exists. Cannot rename.`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
target.name = rename;
|
|
182
|
+
}
|
|
183
|
+
// Apply wip_limit
|
|
184
|
+
if (wipLimit !== undefined) {
|
|
185
|
+
target.wip_limit = wipLimit;
|
|
186
|
+
}
|
|
187
|
+
// Apply add-path
|
|
188
|
+
if (addPaths !== undefined) {
|
|
189
|
+
const currentPaths = target.code_paths ?? [];
|
|
190
|
+
for (const addPath of addPaths) {
|
|
191
|
+
if (currentPaths.includes(addPath)) {
|
|
192
|
+
return {
|
|
193
|
+
ok: false,
|
|
194
|
+
error: `${LOG_PREFIX} Path "${addPath}" already exists in code_paths for lane "${target.name}".`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
currentPaths.push(addPath);
|
|
198
|
+
}
|
|
199
|
+
target.code_paths = currentPaths;
|
|
200
|
+
}
|
|
201
|
+
// Apply remove-path
|
|
202
|
+
if (removePaths !== undefined) {
|
|
203
|
+
const currentPaths = target.code_paths ?? [];
|
|
204
|
+
for (const removePath of removePaths) {
|
|
205
|
+
const pathIndex = currentPaths.indexOf(removePath);
|
|
206
|
+
if (pathIndex === -1) {
|
|
207
|
+
return {
|
|
208
|
+
ok: false,
|
|
209
|
+
error: `${LOG_PREFIX} Path "${removePath}" not found in code_paths for lane "${target.name}".`,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
currentPaths.splice(pathIndex, 1);
|
|
213
|
+
}
|
|
214
|
+
target.code_paths = currentPaths;
|
|
215
|
+
}
|
|
216
|
+
// Apply description
|
|
217
|
+
if (description !== undefined) {
|
|
218
|
+
target.description = description;
|
|
219
|
+
}
|
|
220
|
+
return { ok: true, definitions: updated };
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Config I/O helpers
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
function readConfigDoc(configPath) {
|
|
226
|
+
const content = readFileSync(configPath, FILE_SYSTEM.UTF8);
|
|
227
|
+
const parsed = YAML.parse(content);
|
|
228
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
229
|
+
}
|
|
230
|
+
function writeConfigDoc(configPath, config) {
|
|
231
|
+
const nextContent = YAML.stringify(config);
|
|
232
|
+
writeFileSync(configPath, nextContent, FILE_SYSTEM.UTF8);
|
|
233
|
+
}
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
// Build commit message
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
function buildCommitMessage(options) {
|
|
238
|
+
const parts = [];
|
|
239
|
+
if (options.rename) {
|
|
240
|
+
parts.push(`rename '${options.name}' to '${options.rename}'`);
|
|
241
|
+
}
|
|
242
|
+
if (options.wipLimit !== undefined) {
|
|
243
|
+
parts.push(`set wip_limit=${options.wipLimit} on '${options.rename ?? options.name}'`);
|
|
244
|
+
}
|
|
245
|
+
if (options.addPaths) {
|
|
246
|
+
parts.push(`add path(s) ${options.addPaths.join(', ')} to '${options.rename ?? options.name}'`);
|
|
247
|
+
}
|
|
248
|
+
if (options.removePaths) {
|
|
249
|
+
parts.push(`remove path(s) ${options.removePaths.join(', ')} from '${options.rename ?? options.name}'`);
|
|
250
|
+
}
|
|
251
|
+
if (options.description !== undefined) {
|
|
252
|
+
parts.push(`set description on '${options.rename ?? options.name}'`);
|
|
253
|
+
}
|
|
254
|
+
return `${COMMIT_PREFIX} ${parts.join(', ')}`;
|
|
255
|
+
}
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
// Main
|
|
258
|
+
// ---------------------------------------------------------------------------
|
|
259
|
+
async function main() {
|
|
260
|
+
const userArgs = process.argv.slice(2);
|
|
261
|
+
const options = parseLaneEditArgs(userArgs);
|
|
262
|
+
const projectRoot = findProjectRoot();
|
|
263
|
+
// Step 1: Validate preconditions
|
|
264
|
+
const preconditions = validateLaneEditPreconditions(projectRoot);
|
|
265
|
+
if (!preconditions.ok) {
|
|
266
|
+
die(preconditions.error);
|
|
267
|
+
}
|
|
268
|
+
console.log(`${LOG_PREFIX} Editing lane "${options.name}" via micro-worktree isolation (WU-1854)`);
|
|
269
|
+
// Step 2: Use micro-worktree to make atomic changes
|
|
270
|
+
await withMicroWorktree({
|
|
271
|
+
operation: OPERATION_NAME,
|
|
272
|
+
id: `lane-edit-${Date.now()}`,
|
|
273
|
+
logPrefix: LOG_PREFIX,
|
|
274
|
+
pushOnly: true,
|
|
275
|
+
async execute({ worktreePath }) {
|
|
276
|
+
const configRelPath = CONFIG_FILES.LUMENFLOW_CONFIG;
|
|
277
|
+
const configPath = path.join(worktreePath, configRelPath);
|
|
278
|
+
if (!existsSync(configPath)) {
|
|
279
|
+
die(`${LOG_PREFIX} Config file not found in micro-worktree: ${configRelPath}`);
|
|
280
|
+
}
|
|
281
|
+
// Read current config
|
|
282
|
+
const config = readConfigDoc(configPath);
|
|
283
|
+
const definitions = (config.lanes?.definitions ?? []);
|
|
284
|
+
// Apply edits
|
|
285
|
+
const editResult = applyLaneEdit(definitions, options);
|
|
286
|
+
if (!editResult.ok) {
|
|
287
|
+
die(editResult.error);
|
|
288
|
+
}
|
|
289
|
+
// Write updated config
|
|
290
|
+
if (!config.lanes) {
|
|
291
|
+
config.lanes = {};
|
|
292
|
+
}
|
|
293
|
+
config.lanes.definitions = editResult.definitions;
|
|
294
|
+
writeConfigDoc(configPath, config);
|
|
295
|
+
// Run lane:validate on the updated config to surface errors before commit
|
|
296
|
+
const validation = validateLaneArtifacts(worktreePath);
|
|
297
|
+
if (validation.warnings.length > 0 || validation.invalidLanes.length > 0) {
|
|
298
|
+
const issues = [
|
|
299
|
+
...validation.warnings.map((w) => ` - ${w}`),
|
|
300
|
+
...validation.invalidLanes.map((l) => ` - Invalid lane: ${l}`),
|
|
301
|
+
].join('\n');
|
|
302
|
+
die(`${LOG_PREFIX} lane:validate failed after edit. Changes NOT committed.\n${issues}`);
|
|
303
|
+
}
|
|
304
|
+
console.log(`${LOG_PREFIX} lane:validate passed after edit.`);
|
|
305
|
+
return {
|
|
306
|
+
commitMessage: buildCommitMessage(options),
|
|
307
|
+
files: [configRelPath],
|
|
308
|
+
};
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
// Step 3: Report success
|
|
312
|
+
const displayName = options.rename ?? options.name;
|
|
313
|
+
console.log(`${LOG_PREFIX} Lane "${displayName}" updated successfully.`);
|
|
314
|
+
}
|
|
315
|
+
if (import.meta.main) {
|
|
316
|
+
void runCLI(main);
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=lane-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-edit.js","sourceRoot":"","sources":["../src/lane-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* `init` should bootstrap tooling only. Lane artifacts are created/validated/
|
|
9
9
|
* finalized through dedicated lane lifecycle commands.
|
|
10
10
|
*/
|
|
11
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
12
12
|
import path from 'node:path';
|
|
13
13
|
import YAML from 'yaml';
|
|
14
14
|
import { CONFIG_FILES, FILE_SYSTEM, LUMENFLOW_PATHS } from '@lumenflow/core/wu-constants';
|
|
@@ -215,12 +215,102 @@ export function buildInitLaneLifecycleMessage(status) {
|
|
|
215
215
|
`Next step: ${recommendLaneLifecycleNextStep(status)}`,
|
|
216
216
|
].join(NEWLINE);
|
|
217
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* WU-1755: Detect workspace structure and generate project-specific lane definitions.
|
|
220
|
+
* Scans pnpm-workspace.yaml or package.json workspaces to build lanes from actual project layout.
|
|
221
|
+
* Falls back to DEFAULT_LANE_DEFINITIONS if no workspace config is found.
|
|
222
|
+
*/
|
|
223
|
+
function detectWorkspaceLanes(projectRoot) {
|
|
224
|
+
const lanes = [];
|
|
225
|
+
// Try pnpm-workspace.yaml first
|
|
226
|
+
const pnpmWorkspacePath = path.join(projectRoot, 'pnpm-workspace.yaml');
|
|
227
|
+
let workspacePatterns = [];
|
|
228
|
+
if (existsSync(pnpmWorkspacePath)) {
|
|
229
|
+
try {
|
|
230
|
+
const content = readFileSync(pnpmWorkspacePath, FILE_SYSTEM.ENCODING);
|
|
231
|
+
const parsed = YAML.parse(content);
|
|
232
|
+
workspacePatterns = parsed?.packages ?? [];
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Fall through to package.json check
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Fall back to package.json workspaces
|
|
239
|
+
if (workspacePatterns.length === 0) {
|
|
240
|
+
const pkgJsonPath = path.join(projectRoot, 'package.json');
|
|
241
|
+
if (existsSync(pkgJsonPath)) {
|
|
242
|
+
try {
|
|
243
|
+
const content = readFileSync(pkgJsonPath, FILE_SYSTEM.ENCODING);
|
|
244
|
+
const parsed = JSON.parse(content);
|
|
245
|
+
if (Array.isArray(parsed?.workspaces)) {
|
|
246
|
+
workspacePatterns = parsed.workspaces;
|
|
247
|
+
}
|
|
248
|
+
else if (parsed?.workspaces?.packages) {
|
|
249
|
+
workspacePatterns = parsed.workspaces.packages;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Fall through to defaults
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (workspacePatterns.length === 0) {
|
|
258
|
+
return deepCloneDefaultLaneDefinitions();
|
|
259
|
+
}
|
|
260
|
+
// Scan workspace patterns for actual directories
|
|
261
|
+
for (const pattern of workspacePatterns) {
|
|
262
|
+
const baseDir = pattern.replace(/\/?\*$/, '');
|
|
263
|
+
const fullPath = path.join(projectRoot, baseDir);
|
|
264
|
+
if (!existsSync(fullPath))
|
|
265
|
+
continue;
|
|
266
|
+
try {
|
|
267
|
+
const entries = readdirSync(fullPath, { withFileTypes: true });
|
|
268
|
+
for (const entry of entries) {
|
|
269
|
+
if (!entry.isDirectory())
|
|
270
|
+
continue;
|
|
271
|
+
const pkgPath = path.join(fullPath, entry.name, 'package.json');
|
|
272
|
+
if (!existsSync(pkgPath))
|
|
273
|
+
continue;
|
|
274
|
+
// Determine lane category from directory structure
|
|
275
|
+
const isApp = baseDir.includes('app');
|
|
276
|
+
const category = isApp ? 'Experience' : 'Framework';
|
|
277
|
+
const displayName = entry.name.replace(/^@[^/]+\//, '');
|
|
278
|
+
lanes.push({
|
|
279
|
+
name: `${category}: ${displayName.charAt(0).toUpperCase() + displayName.slice(1)}`,
|
|
280
|
+
wip_limit: 1,
|
|
281
|
+
code_paths: [`${baseDir}/${entry.name}/**`],
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// Skip unreadable directories
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Always include Content: Documentation if docs/ exists
|
|
290
|
+
if (existsSync(path.join(projectRoot, 'docs'))) {
|
|
291
|
+
lanes.push({
|
|
292
|
+
name: 'Content: Documentation',
|
|
293
|
+
wip_limit: 1,
|
|
294
|
+
code_paths: ['docs/**', '*.md'],
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// Always include Operations: CI/CD if .github/ exists
|
|
298
|
+
if (existsSync(path.join(projectRoot, '.github'))) {
|
|
299
|
+
lanes.push({
|
|
300
|
+
name: 'Operations: CI/CD',
|
|
301
|
+
wip_limit: 1,
|
|
302
|
+
code_paths: ['.github/workflows/**', '.github/actions/**'],
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return lanes.length > 0 ? lanes : deepCloneDefaultLaneDefinitions();
|
|
306
|
+
}
|
|
218
307
|
export function ensureDraftLaneArtifacts(projectRoot) {
|
|
219
308
|
const config = readConfigDoc(projectRoot);
|
|
220
309
|
const lanes = ensureLanesDoc(config);
|
|
221
310
|
let createdDefinitions = false;
|
|
222
311
|
if (!hasLaneDefinitions(config)) {
|
|
223
|
-
|
|
312
|
+
// WU-1755: Detect workspace structure for project-specific lanes
|
|
313
|
+
lanes[LANE_DEFINITIONS_KEY] = detectWorkspaceLanes(projectRoot);
|
|
224
314
|
createdDefinitions = true;
|
|
225
315
|
}
|
|
226
316
|
const laneInferencePath = getLaneInferencePath(projectRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-lifecycle-process.js","sourceRoot":"","sources":["../src/lane-lifecycle-process.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lane-lifecycle-process.js","sourceRoot":"","sources":["../src/lane-lifecycle-process.ts"],"names":[],"mappings":"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"}
|
package/dist/lane-setup.js
CHANGED
|
@@ -4,7 +4,7 @@ import { existsSync } from 'node:fs';
|
|
|
4
4
|
import { findProjectRoot } from '@lumenflow/core/config';
|
|
5
5
|
import { die } from '@lumenflow/core/error-handler';
|
|
6
6
|
import { CONFIG_FILES } from '@lumenflow/core/wu-constants';
|
|
7
|
-
import { ensureDraftLaneArtifacts, LANE_LIFECYCLE_STATUS, recommendLaneLifecycleNextStep, } from './lane-lifecycle-process.js';
|
|
7
|
+
import { ensureDraftLaneArtifacts, LANE_LIFECYCLE_STATUS, recommendLaneLifecycleNextStep, validateLaneArtifacts, setLaneLifecycleStatus, } from './lane-lifecycle-process.js';
|
|
8
8
|
import { runCLI } from './cli-entry-point.js';
|
|
9
9
|
const LOG_PREFIX = '[lane:setup]';
|
|
10
10
|
const LANE_VALIDATE_COMMAND = 'pnpm lane:validate';
|
|
@@ -18,8 +18,9 @@ function ensureLumenflowInit(projectRoot) {
|
|
|
18
18
|
async function main() {
|
|
19
19
|
const projectRoot = findProjectRoot();
|
|
20
20
|
ensureLumenflowInit(projectRoot);
|
|
21
|
+
// WU-1755: Parse --lock flag from argv
|
|
22
|
+
const lockFlag = process.argv.includes('--lock');
|
|
21
23
|
const result = ensureDraftLaneArtifacts(projectRoot);
|
|
22
|
-
const nextStep = recommendLaneLifecycleNextStep(LANE_LIFECYCLE_STATUS.DRAFT);
|
|
23
24
|
console.log(`${LOG_PREFIX} Lane lifecycle status: ${result.status}`);
|
|
24
25
|
if (result.createdDefinitions || result.createdInference) {
|
|
25
26
|
console.log(`${LOG_PREFIX} Draft artifacts prepared:`);
|
|
@@ -29,6 +30,22 @@ async function main() {
|
|
|
29
30
|
else {
|
|
30
31
|
console.log(`${LOG_PREFIX} Existing lane artifacts preserved. You can expand/edit lanes safely.`);
|
|
31
32
|
}
|
|
33
|
+
// WU-1755: --lock combines setup + validate + lock into a single command
|
|
34
|
+
if (lockFlag) {
|
|
35
|
+
const validation = validateLaneArtifacts(projectRoot);
|
|
36
|
+
if (validation.warnings.length > 0) {
|
|
37
|
+
for (const warning of validation.warnings) {
|
|
38
|
+
console.warn(`${LOG_PREFIX} ⚠️ ${warning}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (validation.missingDefinitions || validation.missingInference) {
|
|
42
|
+
die(`${LOG_PREFIX} Cannot lock: lane artifacts are incomplete. Fix warnings above.`);
|
|
43
|
+
}
|
|
44
|
+
setLaneLifecycleStatus(projectRoot, LANE_LIFECYCLE_STATUS.LOCKED);
|
|
45
|
+
console.log(`${LOG_PREFIX} ✅ Lane lifecycle locked. Ready for WU creation.`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const nextStep = recommendLaneLifecycleNextStep(LANE_LIFECYCLE_STATUS.DRAFT);
|
|
32
49
|
console.log(`${LOG_PREFIX} Validate draft: ${LANE_VALIDATE_COMMAND}`);
|
|
33
50
|
console.log(`${LOG_PREFIX} Lock lifecycle: ${nextStep}`);
|
|
34
51
|
}
|
package/dist/lane-setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-setup.js","sourceRoot":"","sources":["../src/lane-setup.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"lane-setup.js","sourceRoot":"","sources":["../src/lane-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/mem-checkpoint.js
CHANGED
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Memory Checkpoint CLI (WU-1467)
|
|
3
|
+
* Memory Checkpoint CLI (WU-1467, WU-1909)
|
|
4
4
|
*
|
|
5
5
|
* Create a checkpoint node for context snapshots.
|
|
6
6
|
* Used before /clear or session handoff to preserve progress state.
|
|
7
7
|
*
|
|
8
|
+
* WU-1909: State-store propagation (wu-events.jsonl) is now handled here
|
|
9
|
+
* in the CLI wrapper, guarded by resolveLocation() to only write when
|
|
10
|
+
* running from a worktree (prevents dirtying main checkout).
|
|
11
|
+
*
|
|
8
12
|
* Includes audit logging to .lumenflow/telemetry/tools.ndjson.
|
|
9
13
|
*
|
|
10
14
|
* Usage:
|
|
11
15
|
* pnpm mem:checkpoint 'note' [--session <id>] [--wu <id>] [--progress <text>] [--next-steps <text>] [--trigger <type>] [--quiet]
|
|
12
16
|
*
|
|
13
|
-
* @see {@link packages/@lumenflow/
|
|
17
|
+
* @see {@link packages/@lumenflow/memory/src/mem-checkpoint-core.ts} - Core logic (memory store only)
|
|
14
18
|
* @see {@link packages/@lumenflow/cli/src/__tests__/mem-checkpoint.test.ts} - Tests
|
|
15
19
|
*/
|
|
16
20
|
import fs from 'node:fs/promises';
|
|
17
21
|
import path from 'node:path';
|
|
18
22
|
import { createCheckpoint } from '@lumenflow/memory/checkpoint';
|
|
19
23
|
import { createWUParser, WU_OPTIONS } from '@lumenflow/core/arg-parser';
|
|
20
|
-
import { EXIT_CODES, LUMENFLOW_PATHS } from '@lumenflow/core/wu-constants';
|
|
24
|
+
import { EXIT_CODES, LUMENFLOW_PATHS, CONTEXT_VALIDATION } from '@lumenflow/core/wu-constants';
|
|
25
|
+
import { resolveLocation } from '@lumenflow/core/context/location-resolver';
|
|
26
|
+
import { WUStateStore } from '@lumenflow/core/wu-state-store';
|
|
21
27
|
import { runCLI } from './cli-entry-point.js';
|
|
22
28
|
/**
|
|
23
29
|
* Log prefix for mem:checkpoint output
|
|
24
30
|
*/
|
|
25
31
|
const LOG_PREFIX = '[mem:checkpoint]';
|
|
32
|
+
/**
|
|
33
|
+
* State directory path relative to baseDir
|
|
34
|
+
*/
|
|
35
|
+
const STATE_DIR = '.lumenflow/state';
|
|
26
36
|
/**
|
|
27
37
|
* Tool name for audit logging
|
|
28
38
|
*/
|
|
@@ -67,6 +77,55 @@ const CLI_OPTIONS = {
|
|
|
67
77
|
description: 'Suppress output except errors',
|
|
68
78
|
},
|
|
69
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Propagate checkpoint to wu-events.jsonl state store (WU-1909).
|
|
82
|
+
*
|
|
83
|
+
* Only writes when running from a worktree context, preventing dirty
|
|
84
|
+
* state on main checkout. Uses CONTEXT_VALIDATION.LOCATION_TYPES.WORKTREE
|
|
85
|
+
* constant (no magic strings).
|
|
86
|
+
*
|
|
87
|
+
* @param baseDir - Base directory for state store
|
|
88
|
+
* @param options - Propagation options
|
|
89
|
+
* @returns Result indicating whether propagation occurred
|
|
90
|
+
*/
|
|
91
|
+
export async function propagateCheckpointToStateStore(baseDir, options) {
|
|
92
|
+
const { wuId, note, sessionId, progress, nextSteps } = options;
|
|
93
|
+
// Guard: no WU ID means nothing to propagate
|
|
94
|
+
if (!wuId) {
|
|
95
|
+
return { propagated: false, reason: 'no_wu_id' };
|
|
96
|
+
}
|
|
97
|
+
// Guard: resolve location to determine if we're in a worktree
|
|
98
|
+
let locationType;
|
|
99
|
+
try {
|
|
100
|
+
const location = await resolveLocation(baseDir);
|
|
101
|
+
locationType = location.type;
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
105
|
+
console.warn(`${LOG_PREFIX} Warning: Could not resolve location: ${message}`);
|
|
106
|
+
return { propagated: false, reason: 'location_resolve_failed' };
|
|
107
|
+
}
|
|
108
|
+
// Guard: only write to state store from worktree context
|
|
109
|
+
if (locationType !== CONTEXT_VALIDATION.LOCATION_TYPES.WORKTREE) {
|
|
110
|
+
return { propagated: false, reason: 'not_in_worktree' };
|
|
111
|
+
}
|
|
112
|
+
// Propagate to wu-events.jsonl
|
|
113
|
+
try {
|
|
114
|
+
const stateDir = path.join(baseDir, STATE_DIR);
|
|
115
|
+
const store = new WUStateStore(stateDir);
|
|
116
|
+
await store.checkpoint(wuId, note, {
|
|
117
|
+
sessionId,
|
|
118
|
+
progress,
|
|
119
|
+
nextSteps,
|
|
120
|
+
});
|
|
121
|
+
return { propagated: true };
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
125
|
+
console.warn(`${LOG_PREFIX} Warning: State store write failed: ${message}`);
|
|
126
|
+
return { propagated: false, reason: 'write_failed' };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
70
129
|
/**
|
|
71
130
|
* Write audit log entry for tool execution
|
|
72
131
|
*
|
|
@@ -187,6 +246,14 @@ async function main() {
|
|
|
187
246
|
nextSteps: args.nextSteps,
|
|
188
247
|
trigger: args.trigger,
|
|
189
248
|
});
|
|
249
|
+
// WU-1909: Propagate to wu-events.jsonl only from worktree context
|
|
250
|
+
await propagateCheckpointToStateStore(baseDir, {
|
|
251
|
+
wuId: args.wu,
|
|
252
|
+
note,
|
|
253
|
+
sessionId: args.session,
|
|
254
|
+
progress: args.progress,
|
|
255
|
+
nextSteps: args.nextSteps,
|
|
256
|
+
});
|
|
190
257
|
}
|
|
191
258
|
catch (err) {
|
|
192
259
|
error = err instanceof Error ? err.message : String(err);
|