@lumenflow/cli 2.18.2 → 2.19.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 +42 -41
- package/dist/delegation-list.js +140 -0
- package/dist/delegation-list.js.map +1 -0
- package/dist/doctor.js +35 -99
- package/dist/doctor.js.map +1 -1
- package/dist/gates-plan-resolvers.js +150 -0
- package/dist/gates-plan-resolvers.js.map +1 -0
- package/dist/gates-runners.js +533 -0
- package/dist/gates-runners.js.map +1 -0
- package/dist/gates-types.js +3 -0
- package/dist/gates-types.js.map +1 -1
- package/dist/gates-utils.js +316 -0
- package/dist/gates-utils.js.map +1 -0
- package/dist/gates.js +44 -1016
- package/dist/gates.js.map +1 -1
- package/dist/hooks/enforcement-generator.js +16 -880
- package/dist/hooks/enforcement-generator.js.map +1 -1
- package/dist/hooks/enforcement-sync.js +1 -4
- package/dist/hooks/enforcement-sync.js.map +1 -1
- package/dist/hooks/generators/auto-checkpoint.js +123 -0
- package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
- package/dist/hooks/generators/enforce-worktree.js +188 -0
- package/dist/hooks/generators/enforce-worktree.js.map +1 -0
- package/dist/hooks/generators/index.js +16 -0
- package/dist/hooks/generators/index.js.map +1 -0
- package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
- package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
- package/dist/hooks/generators/require-wu.js +115 -0
- package/dist/hooks/generators/require-wu.js.map +1 -0
- package/dist/hooks/generators/session-start-recovery.js +101 -0
- package/dist/hooks/generators/session-start-recovery.js.map +1 -0
- package/dist/hooks/generators/signal-utils.js +52 -0
- package/dist/hooks/generators/signal-utils.js.map +1 -0
- package/dist/hooks/generators/warn-incomplete.js +65 -0
- package/dist/hooks/generators/warn-incomplete.js.map +1 -0
- package/dist/init-detection.js +228 -0
- package/dist/init-detection.js.map +1 -0
- package/dist/init-scaffolding.js +146 -0
- package/dist/init-scaffolding.js.map +1 -0
- package/dist/init-templates.js +1928 -0
- package/dist/init-templates.js.map +1 -0
- package/dist/init.js +136 -2425
- package/dist/init.js.map +1 -1
- package/dist/initiative-edit.js +42 -11
- package/dist/initiative-edit.js.map +1 -1
- package/dist/initiative-remove-wu.js +0 -0
- package/dist/initiative-status.js +29 -2
- package/dist/initiative-status.js.map +1 -1
- package/dist/mem-context.js +22 -9
- package/dist/mem-context.js.map +1 -1
- package/dist/orchestrate-init-status.js +32 -1
- package/dist/orchestrate-init-status.js.map +1 -1
- package/dist/orchestrate-monitor.js +38 -38
- package/dist/orchestrate-monitor.js.map +1 -1
- package/dist/public-manifest.js +12 -5
- package/dist/public-manifest.js.map +1 -1
- package/dist/shared-validators.js +1 -0
- package/dist/shared-validators.js.map +1 -1
- package/dist/spawn-list.js +0 -0
- package/dist/wu-claim-branch.js +121 -0
- package/dist/wu-claim-branch.js.map +1 -0
- package/dist/wu-claim-output.js +83 -0
- package/dist/wu-claim-output.js.map +1 -0
- package/dist/wu-claim-resume-handler.js +85 -0
- package/dist/wu-claim-resume-handler.js.map +1 -0
- package/dist/wu-claim-state.js +572 -0
- package/dist/wu-claim-state.js.map +1 -0
- package/dist/wu-claim-validation.js +439 -0
- package/dist/wu-claim-validation.js.map +1 -0
- package/dist/wu-claim-worktree.js +221 -0
- package/dist/wu-claim-worktree.js.map +1 -0
- package/dist/wu-claim.js +54 -1402
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-create-content.js +254 -0
- package/dist/wu-create-content.js.map +1 -0
- package/dist/wu-create-readiness.js +57 -0
- package/dist/wu-create-readiness.js.map +1 -0
- package/dist/wu-create-validation.js +149 -0
- package/dist/wu-create-validation.js.map +1 -0
- package/dist/wu-create.js +39 -441
- package/dist/wu-create.js.map +1 -1
- package/dist/wu-done.js +144 -249
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-edit-operations.js +432 -0
- package/dist/wu-edit-operations.js.map +1 -0
- package/dist/wu-edit-validators.js +280 -0
- package/dist/wu-edit-validators.js.map +1 -0
- package/dist/wu-edit.js +27 -713
- package/dist/wu-edit.js.map +1 -1
- package/dist/wu-prep.js +32 -2
- package/dist/wu-prep.js.map +1 -1
- package/dist/wu-repair.js +1 -1
- package/dist/wu-repair.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +1123 -0
- package/dist/wu-spawn-prompt-builders.js.map +1 -0
- package/dist/wu-spawn-strategy-resolver.js +314 -0
- package/dist/wu-spawn-strategy-resolver.js.map +1 -0
- package/dist/wu-spawn.js +9 -1398
- package/dist/wu-spawn.js.map +1 -1
- package/package.json +10 -7
- package/templates/core/LUMENFLOW.md.template +29 -99
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
- package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +8 -8
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gates Plan Resolvers
|
|
3
|
+
*
|
|
4
|
+
* WU-1647: Extracted pure plan-resolution functions that decide
|
|
5
|
+
* what mode (full/incremental/skip) each gate should use.
|
|
6
|
+
*
|
|
7
|
+
* These functions are side-effect-free and only depend on their inputs.
|
|
8
|
+
*
|
|
9
|
+
* @module gates-plan-resolvers
|
|
10
|
+
*/
|
|
11
|
+
import { isLintableFile } from '@lumenflow/core/incremental-lint';
|
|
12
|
+
import { getBasename, normalizePath, extractPackagesFromCodePaths } from './gates-utils.js';
|
|
13
|
+
// ── Config file detection ──────────────────────────────────────────────
|
|
14
|
+
const PRETTIER_CONFIG_FILES = new Set([
|
|
15
|
+
'.prettierrc',
|
|
16
|
+
'.prettierrc.json',
|
|
17
|
+
'.prettierrc.yaml',
|
|
18
|
+
'.prettierrc.yml',
|
|
19
|
+
'.prettierrc.js',
|
|
20
|
+
'.prettierrc.cjs',
|
|
21
|
+
'.prettierrc.ts',
|
|
22
|
+
'prettier.config.js',
|
|
23
|
+
'prettier.config.cjs',
|
|
24
|
+
'prettier.config.ts',
|
|
25
|
+
'prettier.config.mjs',
|
|
26
|
+
'.prettierignore',
|
|
27
|
+
]);
|
|
28
|
+
// WU-1356: Extended to support multiple build tools and test runners
|
|
29
|
+
const TEST_CONFIG_BASENAMES = new Set([
|
|
30
|
+
'turbo.json', // Turborepo
|
|
31
|
+
'nx.json', // Nx
|
|
32
|
+
'lerna.json', // Lerna
|
|
33
|
+
'pnpm-lock.yaml',
|
|
34
|
+
'package-lock.json',
|
|
35
|
+
'yarn.lock',
|
|
36
|
+
'bun.lockb',
|
|
37
|
+
'package.json',
|
|
38
|
+
]);
|
|
39
|
+
// WU-1356: Extended to support vitest, jest, and mocha config patterns
|
|
40
|
+
const TEST_CONFIG_PATTERNS = [
|
|
41
|
+
/^vitest\.config\.(ts|mts|js|mjs|cjs)$/i,
|
|
42
|
+
/^jest\.config\.(ts|js|mjs|cjs|json)$/i,
|
|
43
|
+
/^\.mocharc\.(js|json|yaml|yml)$/i,
|
|
44
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- static tsconfig pattern; no backtracking risk
|
|
45
|
+
/^tsconfig(\..+)?\.json$/i,
|
|
46
|
+
];
|
|
47
|
+
export function isPrettierConfigFile(filePath) {
|
|
48
|
+
if (!filePath)
|
|
49
|
+
return false;
|
|
50
|
+
const basename = getBasename(filePath);
|
|
51
|
+
return PRETTIER_CONFIG_FILES.has(basename);
|
|
52
|
+
}
|
|
53
|
+
export function isTestConfigFile(filePath) {
|
|
54
|
+
if (!filePath)
|
|
55
|
+
return false;
|
|
56
|
+
const basename = getBasename(filePath);
|
|
57
|
+
if (TEST_CONFIG_BASENAMES.has(basename)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return TEST_CONFIG_PATTERNS.some((pattern) => pattern.test(basename));
|
|
61
|
+
}
|
|
62
|
+
// ── Plan resolvers ─────────────────────────────────────────────────────
|
|
63
|
+
/* eslint-disable sonarjs/no-duplicate-string -- Pre-existing: format check reasons are intentionally distinct string literals */
|
|
64
|
+
export function resolveFormatCheckPlan({ changedFiles, fileListError = false, }) {
|
|
65
|
+
if (fileListError) {
|
|
66
|
+
return { mode: 'full', files: [], reason: 'file-list-error' };
|
|
67
|
+
}
|
|
68
|
+
if (changedFiles.some(isPrettierConfigFile)) {
|
|
69
|
+
return { mode: 'full', files: [], reason: 'prettier-config' };
|
|
70
|
+
}
|
|
71
|
+
if (changedFiles.length === 0) {
|
|
72
|
+
return { mode: 'skip', files: [] };
|
|
73
|
+
}
|
|
74
|
+
return { mode: 'incremental', files: changedFiles };
|
|
75
|
+
}
|
|
76
|
+
export function resolveLintPlan({ isMainBranch, changedFiles, }) {
|
|
77
|
+
if (isMainBranch) {
|
|
78
|
+
return { mode: 'full', files: [] };
|
|
79
|
+
}
|
|
80
|
+
const lintTargets = changedFiles.filter((filePath) => {
|
|
81
|
+
const normalized = normalizePath(filePath);
|
|
82
|
+
return ((normalized.startsWith('apps/') || normalized.startsWith('packages/')) &&
|
|
83
|
+
isLintableFile(normalized));
|
|
84
|
+
});
|
|
85
|
+
if (lintTargets.length === 0) {
|
|
86
|
+
return { mode: 'skip', files: [] };
|
|
87
|
+
}
|
|
88
|
+
return { mode: 'incremental', files: lintTargets };
|
|
89
|
+
}
|
|
90
|
+
/* eslint-enable sonarjs/no-duplicate-string */
|
|
91
|
+
export function resolveTestPlan({ isMainBranch, hasUntrackedCode, hasConfigChange, fileListError, }) {
|
|
92
|
+
if (fileListError) {
|
|
93
|
+
return { mode: 'full', reason: 'file-list-error' };
|
|
94
|
+
}
|
|
95
|
+
if (hasUntrackedCode) {
|
|
96
|
+
return { mode: 'full', reason: 'untracked-code' };
|
|
97
|
+
}
|
|
98
|
+
if (hasConfigChange) {
|
|
99
|
+
return { mode: 'full', reason: 'test-config' };
|
|
100
|
+
}
|
|
101
|
+
if (isMainBranch) {
|
|
102
|
+
return { mode: 'full' };
|
|
103
|
+
}
|
|
104
|
+
return { mode: 'incremental' };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* WU-1299: Resolve test plan for docs-only mode
|
|
108
|
+
*/
|
|
109
|
+
export function resolveDocsOnlyTestPlan({ codePaths }) {
|
|
110
|
+
const packages = extractPackagesFromCodePaths(codePaths);
|
|
111
|
+
if (packages.length === 0) {
|
|
112
|
+
return {
|
|
113
|
+
mode: 'skip',
|
|
114
|
+
packages: [],
|
|
115
|
+
reason: 'no-code-packages',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
mode: 'filtered',
|
|
120
|
+
packages,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* WU-1299: Format message for docs-only test skipping/filtering
|
|
125
|
+
*/
|
|
126
|
+
export function formatDocsOnlySkipMessage(plan) {
|
|
127
|
+
if (plan.mode === 'skip') {
|
|
128
|
+
return '\uD83D\uDCDD docs-only mode: skipping all tests (no code packages in code_paths)';
|
|
129
|
+
}
|
|
130
|
+
const packageList = plan.packages.join(', ');
|
|
131
|
+
return `\uD83D\uDCDD docs-only mode: running tests only for packages in code_paths: ${packageList}`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Resolve spec-linter execution strategy.
|
|
135
|
+
* If current WU is known, run scoped validation only.
|
|
136
|
+
* If unknown, fall back to global validation.
|
|
137
|
+
*/
|
|
138
|
+
export function resolveSpecLinterPlan(wuId) {
|
|
139
|
+
if (wuId) {
|
|
140
|
+
return {
|
|
141
|
+
scopedWuId: wuId,
|
|
142
|
+
runGlobal: false,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
scopedWuId: null,
|
|
147
|
+
runGlobal: true,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=gates-plan-resolvers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates-plan-resolvers.js","sourceRoot":"","sources":["../src/gates-plan-resolvers.ts"],"names":[],"mappings":"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"}
|