@lumenflow/cli 2.18.3 → 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.
Files changed (104) hide show
  1. package/README.md +42 -41
  2. package/dist/delegation-list.js +140 -0
  3. package/dist/delegation-list.js.map +1 -0
  4. package/dist/doctor.js +35 -99
  5. package/dist/doctor.js.map +1 -1
  6. package/dist/gates-plan-resolvers.js +150 -0
  7. package/dist/gates-plan-resolvers.js.map +1 -0
  8. package/dist/gates-runners.js +533 -0
  9. package/dist/gates-runners.js.map +1 -0
  10. package/dist/gates-types.js +3 -0
  11. package/dist/gates-types.js.map +1 -1
  12. package/dist/gates-utils.js +316 -0
  13. package/dist/gates-utils.js.map +1 -0
  14. package/dist/gates.js +44 -1016
  15. package/dist/gates.js.map +1 -1
  16. package/dist/hooks/enforcement-generator.js +16 -880
  17. package/dist/hooks/enforcement-generator.js.map +1 -1
  18. package/dist/hooks/enforcement-sync.js +1 -4
  19. package/dist/hooks/enforcement-sync.js.map +1 -1
  20. package/dist/hooks/generators/auto-checkpoint.js +123 -0
  21. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  22. package/dist/hooks/generators/enforce-worktree.js +188 -0
  23. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  24. package/dist/hooks/generators/index.js +16 -0
  25. package/dist/hooks/generators/index.js.map +1 -0
  26. package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
  27. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  28. package/dist/hooks/generators/require-wu.js +115 -0
  29. package/dist/hooks/generators/require-wu.js.map +1 -0
  30. package/dist/hooks/generators/session-start-recovery.js +101 -0
  31. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  32. package/dist/hooks/generators/signal-utils.js +52 -0
  33. package/dist/hooks/generators/signal-utils.js.map +1 -0
  34. package/dist/hooks/generators/warn-incomplete.js +65 -0
  35. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  36. package/dist/init-detection.js +228 -0
  37. package/dist/init-detection.js.map +1 -0
  38. package/dist/init-scaffolding.js +146 -0
  39. package/dist/init-scaffolding.js.map +1 -0
  40. package/dist/init-templates.js +1928 -0
  41. package/dist/init-templates.js.map +1 -0
  42. package/dist/init.js +136 -2425
  43. package/dist/init.js.map +1 -1
  44. package/dist/initiative-edit.js +42 -11
  45. package/dist/initiative-edit.js.map +1 -1
  46. package/dist/initiative-remove-wu.js +0 -0
  47. package/dist/initiative-status.js +29 -2
  48. package/dist/initiative-status.js.map +1 -1
  49. package/dist/mem-context.js +22 -9
  50. package/dist/mem-context.js.map +1 -1
  51. package/dist/orchestrate-init-status.js +32 -1
  52. package/dist/orchestrate-init-status.js.map +1 -1
  53. package/dist/orchestrate-monitor.js +38 -38
  54. package/dist/orchestrate-monitor.js.map +1 -1
  55. package/dist/public-manifest.js +12 -5
  56. package/dist/public-manifest.js.map +1 -1
  57. package/dist/shared-validators.js +1 -0
  58. package/dist/shared-validators.js.map +1 -1
  59. package/dist/spawn-list.js +0 -0
  60. package/dist/wu-claim-branch.js +121 -0
  61. package/dist/wu-claim-branch.js.map +1 -0
  62. package/dist/wu-claim-output.js +83 -0
  63. package/dist/wu-claim-output.js.map +1 -0
  64. package/dist/wu-claim-resume-handler.js +85 -0
  65. package/dist/wu-claim-resume-handler.js.map +1 -0
  66. package/dist/wu-claim-state.js +572 -0
  67. package/dist/wu-claim-state.js.map +1 -0
  68. package/dist/wu-claim-validation.js +439 -0
  69. package/dist/wu-claim-validation.js.map +1 -0
  70. package/dist/wu-claim-worktree.js +221 -0
  71. package/dist/wu-claim-worktree.js.map +1 -0
  72. package/dist/wu-claim.js +54 -1402
  73. package/dist/wu-claim.js.map +1 -1
  74. package/dist/wu-create-content.js +254 -0
  75. package/dist/wu-create-content.js.map +1 -0
  76. package/dist/wu-create-readiness.js +57 -0
  77. package/dist/wu-create-readiness.js.map +1 -0
  78. package/dist/wu-create-validation.js +149 -0
  79. package/dist/wu-create-validation.js.map +1 -0
  80. package/dist/wu-create.js +39 -441
  81. package/dist/wu-create.js.map +1 -1
  82. package/dist/wu-done.js +144 -249
  83. package/dist/wu-done.js.map +1 -1
  84. package/dist/wu-edit-operations.js +432 -0
  85. package/dist/wu-edit-operations.js.map +1 -0
  86. package/dist/wu-edit-validators.js +280 -0
  87. package/dist/wu-edit-validators.js.map +1 -0
  88. package/dist/wu-edit.js +27 -713
  89. package/dist/wu-edit.js.map +1 -1
  90. package/dist/wu-prep.js +32 -2
  91. package/dist/wu-prep.js.map +1 -1
  92. package/dist/wu-repair.js +1 -1
  93. package/dist/wu-repair.js.map +1 -1
  94. package/dist/wu-spawn-prompt-builders.js +1123 -0
  95. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  96. package/dist/wu-spawn-strategy-resolver.js +314 -0
  97. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  98. package/dist/wu-spawn.js +9 -1398
  99. package/dist/wu-spawn.js.map +1 -1
  100. package/package.json +10 -7
  101. package/templates/core/LUMENFLOW.md.template +29 -99
  102. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  103. package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
  104. 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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AA8B5F,0EAA0E;AAE1E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;CAClB,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,YAAY,EAAE,YAAY;IAC1B,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,QAAQ;IACtB,gBAAgB;IAChB,mBAAmB;IACnB,WAAW;IACX,WAAW;IACX,cAAc;CACf,CAAC,CAAC;AACH,uEAAuE;AACvE,MAAM,oBAAoB,GAAG;IAC3B,wCAAwC;IACxC,uCAAuC;IACvC,kCAAkC;IAClC,yGAAyG;IACzG,0BAA0B;CAC3B,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,0EAA0E;AAE1E,iIAAiI;AACjI,MAAM,UAAU,sBAAsB,CAAC,EACrC,YAAY,EACZ,aAAa,GAAG,KAAK,GAItB;IACC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,YAAY,EACZ,YAAY,GAIb;IACC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,CACL,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtE,cAAc,CAAC,UAAU,CAAC,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACrD,CAAC;AACD,+CAA+C;AAE/C,MAAM,UAAU,eAAe,CAAC,EAC9B,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,GAMd;IACC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAE,SAAS,EAA2B;IAC5E,MAAM,QAAQ,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAEzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAsB;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,kFAAkF,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,+EAA+E,WAAW,EAAE,CAAC;AACtG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmB;IAIvD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}