@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,83 @@
1
+ /**
2
+ * @file wu-claim-output.ts
3
+ * @description Output formatting and display helpers for wu:claim.
4
+ *
5
+ * WU-1649: Extracted from wu-claim.ts to reduce orchestration complexity.
6
+ * All functions are mechanical extractions preserving original behavior.
7
+ */
8
+ import { getErrorMessage } from '@lumenflow/core/error-handler';
9
+ import { LOG_PREFIX } from '@lumenflow/core/wu-constants';
10
+ // WU-1473: Surface unread signals on claim for agent awareness
11
+ import { surfaceUnreadSignals } from './hooks/enforcement-generator.js';
12
+ const PREFIX = LOG_PREFIX.CLAIM;
13
+ /**
14
+ * WU-1473: Surface unread coordination signals and display them.
15
+ * Fail-open: any error is logged as a warning, never blocks claim.
16
+ *
17
+ * @param baseDir - Project base directory for memory layer
18
+ */
19
+ export async function surfaceUnreadSignalsForDisplay(baseDir) {
20
+ try {
21
+ const result = await surfaceUnreadSignals(baseDir);
22
+ if (result.count > 0) {
23
+ const MAX_DISPLAY = 5;
24
+ console.log(`\n${PREFIX} Unread coordination signals (${result.count}):`);
25
+ for (const signal of result.signals.slice(0, MAX_DISPLAY)) {
26
+ const timestamp = new Date(signal.created_at).toLocaleTimeString();
27
+ const scope = signal.wu_id ? ` [${signal.wu_id}]` : '';
28
+ console.log(` - [${timestamp}]${scope} ${signal.message}`);
29
+ }
30
+ if (result.count > MAX_DISPLAY) {
31
+ console.log(` ... and ${result.count - MAX_DISPLAY} more`);
32
+ }
33
+ console.log(` Run 'pnpm mem:inbox' for full list`);
34
+ }
35
+ }
36
+ catch (err) {
37
+ // WU-1473 AC4: Fail-open - never block claim on memory errors
38
+ console.warn(`${PREFIX} Warning: Could not surface unread signals: ${getErrorMessage(err)}`);
39
+ }
40
+ }
41
+ /**
42
+ * WU-1047: Format Project Defaults section (agent-only).
43
+ *
44
+ * @param {object} methodology - Methodology defaults config
45
+ * @returns {string} Formatted output or empty string if disabled
46
+ */
47
+ export function formatProjectDefaults(methodology) {
48
+ if (!methodology || methodology.enabled === false)
49
+ return '';
50
+ const enforcement = methodology.enforcement || 'required';
51
+ const principles = Array.isArray(methodology.principles) ? methodology.principles : [];
52
+ const lines = [
53
+ `${PREFIX} 🧭 Project Defaults (agent-only)`,
54
+ ` Enforcement: ${enforcement}`,
55
+ ` Principles: ${principles.length > 0 ? principles.join(', ') : 'None'}`,
56
+ ];
57
+ if (methodology.notes) {
58
+ lines.push(` Notes: ${methodology.notes}`);
59
+ }
60
+ return `\n${lines.join('\n')}`;
61
+ }
62
+ /**
63
+ * WU-1047: Print Project Defaults section (agent-only).
64
+ *
65
+ * @param {object} methodology - Methodology defaults config
66
+ */
67
+ export function printProjectDefaults(methodology) {
68
+ const output = formatProjectDefaults(methodology);
69
+ if (output) {
70
+ console.log(output);
71
+ }
72
+ }
73
+ /**
74
+ * WU-1763: Print a single concise tips line to improve tool adoption.
75
+ * Non-blocking, single-line output to avoid flooding the console.
76
+ *
77
+ * @param {string} _id - WU ID being claimed (unused, kept for future use)
78
+ */
79
+ export function printLifecycleNudge(_id) {
80
+ // Single line, concise, actionable
81
+ console.log(`\n${PREFIX} 💡 Tip: pnpm session:recommend for context tier, mem:ready for pending work, pnpm file:*/git:* for audited wrappers`);
82
+ }
83
+ //# sourceMappingURL=wu-claim-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wu-claim-output.js","sourceRoot":"","sources":["../src/wu-claim-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @file wu-claim-resume-handler.ts
3
+ * @description Resume/handoff mode handler for wu:claim --resume.
4
+ *
5
+ * WU-1649: Extracted from wu-claim.ts to reduce orchestration complexity.
6
+ * All functions are mechanical extractions preserving original behavior.
7
+ */
8
+ import path from 'node:path';
9
+ import { createGitForPath } from '@lumenflow/core/git-adapter';
10
+ import { die } from '@lumenflow/core/error-handler';
11
+ import { toKebab, LOG_PREFIX, EMOJI } from '@lumenflow/core/wu-constants';
12
+ import { emitWUFlowEvent } from '@lumenflow/core/telemetry';
13
+ import { resumeClaimForHandoff, getWorktreeUncommittedChanges, formatUncommittedChanges, createHandoffCheckpoint, } from '@lumenflow/core/wu-claim-resume';
14
+ const PREFIX = LOG_PREFIX.CLAIM;
15
+ /**
16
+ * WU-2411: Handle --resume flag for agent handoff
17
+ *
18
+ * When an agent crashes or is killed, the --resume flag allows a new agent
19
+ * to take over by:
20
+ * 1. Verifying the old PID is dead (safety check)
21
+ * 2. Updating the lock file with the new PID
22
+ * 3. Preserving the existing worktree
23
+ * 4. Printing uncommitted changes summary
24
+ * 5. Creating a checkpoint in the memory layer
25
+ *
26
+ * @param {Object} args - CLI arguments
27
+ * @param {string} id - WU ID
28
+ */
29
+ export async function handleResumeMode(args, id) {
30
+ const laneK = toKebab(args.lane);
31
+ const idK = id.toLowerCase();
32
+ const worktree = args.worktree || `worktrees/${laneK}-${idK}`;
33
+ const worktreePath = path.resolve(worktree);
34
+ console.log(`${PREFIX} Attempting to resume ${id} in lane "${args.lane}"...`);
35
+ // Attempt the resume/handoff
36
+ const result = await resumeClaimForHandoff({
37
+ wuId: id,
38
+ lane: args.lane,
39
+ worktreePath,
40
+ agentSession: null, // Will be populated by session system
41
+ });
42
+ if (!result.success) {
43
+ die(`Cannot resume ${id}: ${result.error}\n\n` +
44
+ `If you need to start a fresh claim, use: pnpm wu:claim --id ${id} --lane "${args.lane}"`);
45
+ }
46
+ console.log(`${PREFIX} ${EMOJI.SUCCESS} Handoff successful`);
47
+ console.log(`${PREFIX} Previous PID: ${result.previousPid}`);
48
+ console.log(`${PREFIX} New PID: ${process.pid}`);
49
+ // Get and display uncommitted changes in the worktree
50
+ const wtGit = createGitForPath(worktreePath);
51
+ const uncommittedStatus = await getWorktreeUncommittedChanges(wtGit);
52
+ if (uncommittedStatus) {
53
+ const formatted = formatUncommittedChanges(uncommittedStatus);
54
+ console.log(`\n${PREFIX} ${formatted}`);
55
+ }
56
+ else {
57
+ console.log(`\n${PREFIX} No uncommitted changes in worktree.`);
58
+ }
59
+ // Create handoff checkpoint in memory layer
60
+ const checkpointResult = await createHandoffCheckpoint({
61
+ wuId: id,
62
+ previousPid: result.previousPid,
63
+ newPid: process.pid,
64
+ previousSession: result.previousSession,
65
+ uncommittedSummary: uncommittedStatus,
66
+ });
67
+ if (checkpointResult.success && checkpointResult.checkpointId) {
68
+ console.log(`${PREFIX} ${EMOJI.SUCCESS} Handoff checkpoint created: ${checkpointResult.checkpointId}`);
69
+ }
70
+ // Emit telemetry event for handoff
71
+ emitWUFlowEvent({
72
+ script: 'wu-claim',
73
+ wu_id: id,
74
+ lane: args.lane,
75
+ step: 'resume_handoff',
76
+ previousPid: result.previousPid,
77
+ newPid: process.pid,
78
+ uncommittedChanges: uncommittedStatus ? 'present' : 'none',
79
+ });
80
+ // Print summary
81
+ console.log(`\n${PREFIX} Resume complete. Worktree preserved at: ${worktree}`);
82
+ console.log(`${PREFIX} Next: cd ${worktree} and continue work.`);
83
+ console.log(`\n${PREFIX} Tip: Run 'pnpm mem:ready --wu ${id}' to check for pending context from previous session.`);
84
+ }
85
+ //# sourceMappingURL=wu-claim-resume-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wu-claim-resume-handler.js","sourceRoot":"","sources":["../src/wu-claim-resume-handler.ts"],"names":[],"mappings":"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"}