@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,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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"}
|