clavix 2.7.1 → 2.8.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 +18 -4
- package/bin/clavix.js +12 -5
- package/dist/cli/commands/archive.d.ts +5 -4
- package/dist/cli/commands/archive.js +135 -161
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +66 -105
- package/dist/cli/commands/deep.d.ts +3 -3
- package/dist/cli/commands/deep.js +97 -103
- package/dist/cli/commands/execute.d.ts +4 -4
- package/dist/cli/commands/execute.js +57 -63
- package/dist/cli/commands/fast.d.ts +3 -3
- package/dist/cli/commands/fast.js +122 -128
- package/dist/cli/commands/implement.d.ts +4 -4
- package/dist/cli/commands/implement.js +84 -148
- package/dist/cli/commands/init.js +87 -126
- package/dist/cli/commands/list.d.ts +5 -5
- package/dist/cli/commands/list.js +72 -111
- package/dist/cli/commands/plan.d.ts +7 -7
- package/dist/cli/commands/plan.js +92 -131
- package/dist/cli/commands/prd.d.ts +4 -4
- package/dist/cli/commands/prd.js +76 -111
- package/dist/cli/commands/prompts/clear.d.ts +6 -6
- package/dist/cli/commands/prompts/clear.js +70 -76
- package/dist/cli/commands/prompts/list.js +37 -43
- package/dist/cli/commands/show.d.ts +4 -4
- package/dist/cli/commands/show.js +72 -111
- package/dist/cli/commands/start.d.ts +3 -3
- package/dist/cli/commands/start.js +63 -101
- package/dist/cli/commands/summarize.d.ts +4 -4
- package/dist/cli/commands/summarize.js +81 -120
- package/dist/cli/commands/task-complete.d.ts +4 -4
- package/dist/cli/commands/task-complete.js +86 -123
- package/dist/cli/commands/update.d.ts +3 -3
- package/dist/cli/commands/update.js +97 -130
- package/dist/cli/commands/version.js +13 -48
- package/dist/core/adapters/agents-md-generator.js +17 -50
- package/dist/core/adapters/amp-adapter.d.ts +1 -1
- package/dist/core/adapters/amp-adapter.js +13 -21
- package/dist/core/adapters/augment-adapter.d.ts +2 -2
- package/dist/core/adapters/augment-adapter.js +16 -56
- package/dist/core/adapters/base-adapter.d.ts +1 -1
- package/dist/core/adapters/base-adapter.js +11 -47
- package/dist/core/adapters/claude-code-adapter.d.ts +2 -2
- package/dist/core/adapters/claude-code-adapter.js +19 -60
- package/dist/core/adapters/cline-adapter.d.ts +1 -1
- package/dist/core/adapters/cline-adapter.js +13 -21
- package/dist/core/adapters/codebuddy-adapter.d.ts +2 -2
- package/dist/core/adapters/codebuddy-adapter.js +17 -57
- package/dist/core/adapters/codex-adapter.d.ts +2 -2
- package/dist/core/adapters/codex-adapter.js +16 -56
- package/dist/core/adapters/copilot-instructions-generator.js +18 -51
- package/dist/core/adapters/crush-adapter.d.ts +2 -2
- package/dist/core/adapters/crush-adapter.js +13 -20
- package/dist/core/adapters/cursor-adapter.d.ts +1 -1
- package/dist/core/adapters/cursor-adapter.js +12 -20
- package/dist/core/adapters/droid-adapter.d.ts +2 -2
- package/dist/core/adapters/droid-adapter.js +14 -21
- package/dist/core/adapters/gemini-adapter.d.ts +2 -2
- package/dist/core/adapters/gemini-adapter.js +16 -52
- package/dist/core/adapters/kilocode-adapter.d.ts +1 -1
- package/dist/core/adapters/kilocode-adapter.js +12 -20
- package/dist/core/adapters/octo-md-generator.js +17 -50
- package/dist/core/adapters/opencode-adapter.d.ts +2 -2
- package/dist/core/adapters/opencode-adapter.js +14 -21
- package/dist/core/adapters/qwen-adapter.d.ts +2 -2
- package/dist/core/adapters/qwen-adapter.js +16 -52
- package/dist/core/adapters/roocode-adapter.d.ts +2 -2
- package/dist/core/adapters/roocode-adapter.js +12 -19
- package/dist/core/adapters/warp-md-generator.js +17 -50
- package/dist/core/adapters/windsurf-adapter.d.ts +1 -1
- package/dist/core/adapters/windsurf-adapter.js +12 -20
- package/dist/core/agent-manager.d.ts +1 -1
- package/dist/core/agent-manager.js +34 -38
- package/dist/core/archive-manager.js +10 -46
- package/dist/core/config-manager.d.ts +2 -2
- package/dist/core/config-manager.js +3 -40
- package/dist/core/conversation-analyzer.d.ts +1 -1
- package/dist/core/conversation-analyzer.js +1 -5
- package/dist/core/doc-injector.js +23 -60
- package/dist/core/git-manager.js +11 -48
- package/dist/core/prd-generator.js +16 -51
- package/dist/core/prompt-manager.js +6 -42
- package/dist/core/prompt-optimizer.js +1 -5
- package/dist/core/question-engine.js +6 -45
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.js +11 -49
- package/dist/core/task-manager.d.ts +26 -0
- package/dist/core/task-manager.js +243 -101
- package/dist/index.d.ts +2 -1
- package/dist/index.js +8 -12
- package/dist/templates/agents/agents.md +31 -2
- package/dist/templates/agents/copilot-instructions.md +1 -1
- package/dist/templates/agents/octo.md +20 -1
- package/dist/templates/agents/warp.md +1 -1
- package/dist/templates/slash-commands/_canonical/implement.md +33 -11
- package/dist/types/agent.js +1 -2
- package/dist/types/config.js +3 -8
- package/dist/types/errors.js +7 -13
- package/dist/types/session.js +1 -2
- package/dist/utils/agent-error-messages.js +1 -5
- package/dist/utils/error-utils.js +5 -12
- package/dist/utils/file-system.js +20 -57
- package/dist/utils/legacy-command-cleanup.d.ts +1 -1
- package/dist/utils/legacy-command-cleanup.js +9 -45
- package/dist/utils/template-loader.d.ts +1 -1
- package/dist/utils/template-loader.js +9 -41
- package/dist/utils/toml-templates.js +1 -4
- package/package.json +9 -4
- package/dist/core/adapters 2/agents-md-generator.d.ts +0 -26
- package/dist/core/adapters 2/agents-md-generator.js +0 -102
- package/dist/core/adapters 2/amp-adapter.d.ts +0 -27
- package/dist/core/adapters 2/amp-adapter.js +0 -42
- package/dist/core/adapters 2/augment-adapter.d.ts +0 -22
- package/dist/core/adapters 2/augment-adapter.js +0 -77
- package/dist/core/adapters 2/base-adapter.d.ts +0 -45
- package/dist/core/adapters 2/base-adapter.js +0 -142
- package/dist/core/adapters 2/claude-code-adapter.d.ts +0 -32
- package/dist/core/adapters 2/claude-code-adapter.js +0 -116
- package/dist/core/adapters 2/cline-adapter.d.ts +0 -34
- package/dist/core/adapters 2/cline-adapter.js +0 -52
- package/dist/core/adapters 2/codebuddy-adapter.d.ts +0 -24
- package/dist/core/adapters 2/codebuddy-adapter.js +0 -82
- package/dist/core/adapters 2/codex-adapter.d.ts +0 -24
- package/dist/core/adapters 2/codex-adapter.js +0 -79
- package/dist/core/adapters 2/copilot-instructions-generator.d.ts +0 -26
- package/dist/core/adapters 2/copilot-instructions-generator.js +0 -104
- package/dist/core/adapters 2/crush-adapter.d.ts +0 -35
- package/dist/core/adapters 2/crush-adapter.js +0 -49
- package/dist/core/adapters 2/cursor-adapter.d.ts +0 -25
- package/dist/core/adapters 2/cursor-adapter.js +0 -40
- package/dist/core/adapters 2/droid-adapter.d.ts +0 -33
- package/dist/core/adapters 2/droid-adapter.js +0 -57
- package/dist/core/adapters 2/gemini-adapter.d.ts +0 -27
- package/dist/core/adapters 2/gemini-adapter.js +0 -90
- package/dist/core/adapters 2/kilocode-adapter.d.ts +0 -34
- package/dist/core/adapters 2/kilocode-adapter.js +0 -49
- package/dist/core/adapters 2/octo-md-generator.d.ts +0 -26
- package/dist/core/adapters 2/octo-md-generator.js +0 -102
- package/dist/core/adapters 2/opencode-adapter.d.ts +0 -33
- package/dist/core/adapters 2/opencode-adapter.js +0 -56
- package/dist/core/adapters 2/qwen-adapter.d.ts +0 -27
- package/dist/core/adapters 2/qwen-adapter.js +0 -90
- package/dist/core/adapters 2/roocode-adapter.d.ts +0 -40
- package/dist/core/adapters 2/roocode-adapter.js +0 -68
- package/dist/core/adapters 2/warp-md-generator.d.ts +0 -17
- package/dist/core/adapters 2/warp-md-generator.js +0 -88
- package/dist/core/adapters 2/windsurf-adapter.d.ts +0 -34
- package/dist/core/adapters 2/windsurf-adapter.js +0 -49
- package/dist/core/agent-manager 2.js +0 -126
- package/dist/core/agent-manager.d 2.ts +0 -51
- package/dist/core/archive-manager 2.js +0 -338
- package/dist/core/archive-manager.d 2.ts +0 -100
- package/dist/core/conversation-analyzer.d 2.ts +0 -86
- package/dist/core/doc-injector 2.js +0 -236
- package/dist/core/doc-injector.d 2.ts +0 -51
- package/dist/core/git-manager 2.js +0 -214
- package/dist/core/git-manager.d 2.ts +0 -100
- package/dist/core/prompt-optimizer 2.js +0 -963
- package/dist/core/prompt-optimizer.d 2.ts +0 -268
- package/dist/core/question-engine 2.js +0 -395
- package/dist/core/question-engine.d 2.ts +0 -167
- package/dist/core/session-manager 2.js +0 -403
- package/dist/core/session-manager.d 2.ts +0 -139
- package/dist/core/task-manager 2.js +0 -689
- package/dist/core/task-manager.d 2.ts +0 -155
|
@@ -1,60 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
1
|
+
import { Command, Flags, Args } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { TaskManager } from '../../core/task-manager.js';
|
|
4
|
+
import { ConfigManager } from '../../core/config-manager.js';
|
|
5
|
+
import { GitManager } from '../../core/git-manager.js';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
export default class TaskComplete extends Command {
|
|
9
|
+
static description = 'Mark a task as completed with validation and optional git commit';
|
|
10
|
+
static examples = [
|
|
11
|
+
'<%= config.bin %> <%= command.id %> phase-1-auth-1',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> phase-2-api-3 --no-git',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> setup-1 --force',
|
|
14
|
+
];
|
|
15
|
+
static args = {
|
|
16
|
+
taskId: Args.string({
|
|
17
|
+
description: 'Task ID to mark as completed',
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
26
20
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
static flags = {
|
|
22
|
+
'no-git': Flags.boolean({
|
|
23
|
+
description: 'Skip git commit even if strategy is enabled',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
force: Flags.boolean({
|
|
27
|
+
char: 'f',
|
|
28
|
+
description: 'Force completion even if already marked complete',
|
|
29
|
+
default: false,
|
|
30
|
+
}),
|
|
31
|
+
config: Flags.string({
|
|
32
|
+
char: 'c',
|
|
33
|
+
description: 'Path to config file (defaults to auto-discover)',
|
|
34
|
+
}),
|
|
33
35
|
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const core_1 = require("@oclif/core");
|
|
40
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
-
const task_manager_1 = require("../../core/task-manager");
|
|
42
|
-
const config_manager_1 = require("../../core/config-manager");
|
|
43
|
-
const git_manager_1 = require("../../core/git-manager");
|
|
44
|
-
const path = __importStar(require("path"));
|
|
45
|
-
const fs = __importStar(require("fs-extra"));
|
|
46
|
-
class TaskComplete extends core_1.Command {
|
|
47
36
|
async run() {
|
|
48
37
|
const { args, flags } = await this.parse(TaskComplete);
|
|
49
38
|
const taskId = args.taskId;
|
|
50
|
-
console.log(
|
|
39
|
+
console.log(chalk.bold.cyan(`\nTask Completion: ${taskId}\n`));
|
|
51
40
|
try {
|
|
52
|
-
const taskManager = new
|
|
53
|
-
const configManager = new
|
|
54
|
-
const gitManager = new
|
|
41
|
+
const taskManager = new TaskManager();
|
|
42
|
+
const configManager = new ConfigManager();
|
|
43
|
+
const gitManager = new GitManager();
|
|
55
44
|
// Find config file
|
|
56
45
|
const configPath = await this.findConfigFile(flags.config);
|
|
57
|
-
console.log(
|
|
46
|
+
console.log(chalk.dim(`Config: ${configPath}\n`));
|
|
58
47
|
// Read config
|
|
59
48
|
const config = await configManager.read(configPath);
|
|
60
49
|
const tasksPath = config.tasksPath;
|
|
@@ -64,13 +53,13 @@ class TaskComplete extends core_1.Command {
|
|
|
64
53
|
const task = taskManager.validateTaskExists(phases, taskId);
|
|
65
54
|
if (!task) {
|
|
66
55
|
// Smart recovery: List available tasks
|
|
67
|
-
console.log(
|
|
68
|
-
console.log(
|
|
56
|
+
console.log(chalk.red(`✗ Task ID "${taskId}" not found\n`));
|
|
57
|
+
console.log(chalk.yellow('Available task IDs:\n'));
|
|
69
58
|
phases.forEach(phase => {
|
|
70
|
-
console.log(
|
|
59
|
+
console.log(chalk.bold(` ${phase.name}:`));
|
|
71
60
|
phase.tasks.forEach(t => {
|
|
72
|
-
const status = t.completed ?
|
|
73
|
-
console.log(` ${status} ${
|
|
61
|
+
const status = t.completed ? chalk.green('[x]') : chalk.gray('[ ]');
|
|
62
|
+
console.log(` ${status} ${chalk.cyan(t.id)} - ${t.description}`);
|
|
74
63
|
});
|
|
75
64
|
console.log();
|
|
76
65
|
});
|
|
@@ -78,71 +67,73 @@ class TaskComplete extends core_1.Command {
|
|
|
78
67
|
}
|
|
79
68
|
// Check if already completed
|
|
80
69
|
if (task.completed && !flags.force) {
|
|
81
|
-
console.log(
|
|
70
|
+
console.log(chalk.yellow(`⚠ Task "${taskId}" is already marked as completed\n`));
|
|
82
71
|
// Check if it's in config too
|
|
83
72
|
const isInConfig = await configManager.isTaskCompleted(configPath, taskId);
|
|
84
73
|
if (isInConfig) {
|
|
85
|
-
console.log(
|
|
74
|
+
console.log(chalk.dim('Task is tracked in config as completed.\n'));
|
|
86
75
|
}
|
|
87
|
-
console.log(
|
|
76
|
+
console.log(chalk.gray('Use --force to re-mark this task as completed.\n'));
|
|
88
77
|
// Show next task
|
|
89
78
|
await this.showNextTask(taskManager, phases);
|
|
90
79
|
return;
|
|
91
80
|
}
|
|
92
81
|
// Mark task as completed with validation
|
|
93
|
-
console.log(
|
|
82
|
+
console.log(chalk.dim('Marking task as completed...'));
|
|
94
83
|
const result = await taskManager.markTaskCompletedWithValidation(tasksPath, taskId);
|
|
95
84
|
if (!result.success) {
|
|
96
85
|
// Smart recovery: Show error and suggestions
|
|
97
|
-
console.log(
|
|
98
|
-
console.log(
|
|
86
|
+
console.log(chalk.red(`\n✗ Failed to mark task as completed\n`));
|
|
87
|
+
console.log(chalk.yellow(`Error: ${result.error}\n`));
|
|
99
88
|
if (result.warnings && result.warnings.length > 0) {
|
|
100
|
-
console.log(
|
|
101
|
-
result.warnings.forEach(warning => console.log(
|
|
89
|
+
console.log(chalk.yellow('Warnings:'));
|
|
90
|
+
result.warnings.forEach(warning => console.log(chalk.yellow(` • ${warning}`)));
|
|
102
91
|
console.log();
|
|
103
92
|
}
|
|
104
93
|
// Provide recovery suggestions
|
|
105
|
-
console.log(
|
|
106
|
-
console.log(
|
|
107
|
-
console.log(
|
|
108
|
-
console.log(
|
|
109
|
-
console.log(
|
|
94
|
+
console.log(chalk.bold('Recovery Options:\n'));
|
|
95
|
+
console.log(chalk.gray(' 1. Check if tasks.md file is readable and writable'));
|
|
96
|
+
console.log(chalk.gray(' 2. Verify task ID matches exactly (run "clavix implement" to see current task)'));
|
|
97
|
+
console.log(chalk.gray(' 3. Try running with --force flag if task is already completed'));
|
|
98
|
+
console.log(chalk.gray(' 4. Check tasks.md.backup file if one was created\n'));
|
|
110
99
|
this.error('Task completion failed');
|
|
111
100
|
}
|
|
112
101
|
// Display warnings if any
|
|
113
102
|
if (result.warnings && result.warnings.length > 0) {
|
|
114
|
-
console.log(
|
|
115
|
-
result.warnings.forEach(warning => console.log(
|
|
103
|
+
console.log(chalk.yellow('\nWarnings:'));
|
|
104
|
+
result.warnings.forEach(warning => console.log(chalk.yellow(` • ${warning}`)));
|
|
116
105
|
console.log();
|
|
117
106
|
}
|
|
118
107
|
// Success!
|
|
119
108
|
if (result.alreadyCompleted) {
|
|
120
|
-
console.log(
|
|
109
|
+
console.log(chalk.green(`✓ Task was already completed (tracking updated)\n`));
|
|
121
110
|
}
|
|
122
111
|
else {
|
|
123
|
-
console.log(
|
|
112
|
+
console.log(chalk.green(`✓ Task marked as completed\n`));
|
|
124
113
|
}
|
|
114
|
+
// Re-read tasks file to get updated state (CRITICAL: phases object is stale)
|
|
115
|
+
const updatedPhases = await taskManager.readTasksFile(tasksPath);
|
|
125
116
|
// Track completion in config
|
|
126
|
-
console.log(
|
|
117
|
+
console.log(chalk.dim('Updating configuration...'));
|
|
127
118
|
await configManager.trackCompletion(configPath, taskId);
|
|
128
119
|
// Update stats
|
|
129
|
-
const updatedStats = taskManager.getTaskStats(
|
|
120
|
+
const updatedStats = taskManager.getTaskStats(updatedPhases);
|
|
130
121
|
await configManager.update(configPath, { stats: updatedStats });
|
|
131
|
-
console.log(
|
|
122
|
+
console.log(chalk.green('✓ Configuration updated\n'));
|
|
132
123
|
// Show progress
|
|
133
|
-
console.log(
|
|
134
|
-
console.log(
|
|
135
|
-
console.log(
|
|
124
|
+
console.log(chalk.bold('Progress:'));
|
|
125
|
+
console.log(chalk.cyan(` Completed: ${updatedStats.completed}/${updatedStats.total} tasks (${updatedStats.percentage.toFixed(0)}%)`));
|
|
126
|
+
console.log(chalk.cyan(` Remaining: ${updatedStats.remaining} tasks\n`));
|
|
136
127
|
// Create git commit if enabled
|
|
137
128
|
if (!flags['no-git'] && config.commitStrategy !== 'none') {
|
|
138
|
-
await this.handleGitCommit(gitManager, configManager, configPath, config.commitStrategy, task,
|
|
129
|
+
await this.handleGitCommit(gitManager, configManager, configPath, config.commitStrategy, task, updatedPhases);
|
|
139
130
|
}
|
|
140
131
|
// Show next task
|
|
141
|
-
await this.showNextTask(taskManager,
|
|
132
|
+
await this.showNextTask(taskManager, updatedPhases);
|
|
142
133
|
}
|
|
143
134
|
catch (error) {
|
|
144
135
|
const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
|
|
145
|
-
console.log(
|
|
136
|
+
console.log(chalk.red(`\n✗ Error: ${errorMessage}\n`));
|
|
146
137
|
this.error(errorMessage);
|
|
147
138
|
}
|
|
148
139
|
}
|
|
@@ -188,7 +179,7 @@ class TaskComplete extends core_1.Command {
|
|
|
188
179
|
* Handle git commit based on strategy
|
|
189
180
|
*/
|
|
190
181
|
async handleGitCommit(gitManager, configManager, configPath, strategy, completedTask, phases) {
|
|
191
|
-
console.log(
|
|
182
|
+
console.log(chalk.dim(`Checking git commit strategy (${strategy})...`));
|
|
192
183
|
const config = await configManager.read(configPath);
|
|
193
184
|
const completedCount = config.completedTaskIds?.length ?? 0;
|
|
194
185
|
let shouldCommit = false;
|
|
@@ -227,21 +218,21 @@ class TaskComplete extends core_1.Command {
|
|
|
227
218
|
break;
|
|
228
219
|
}
|
|
229
220
|
if (!shouldCommit) {
|
|
230
|
-
console.log(
|
|
221
|
+
console.log(chalk.dim('No commit needed (strategy criteria not met)\n'));
|
|
231
222
|
return;
|
|
232
223
|
}
|
|
233
224
|
// Check git status
|
|
234
225
|
const gitStatus = await gitManager.validateGitSetup();
|
|
235
226
|
if (!gitStatus.isRepo) {
|
|
236
|
-
console.log(
|
|
227
|
+
console.log(chalk.yellow('⚠ Not a git repository - skipping commit\n'));
|
|
237
228
|
return;
|
|
238
229
|
}
|
|
239
230
|
if (!gitStatus.hasChanges) {
|
|
240
|
-
console.log(
|
|
231
|
+
console.log(chalk.dim('No git changes to commit\n'));
|
|
241
232
|
return;
|
|
242
233
|
}
|
|
243
234
|
// Create commit
|
|
244
|
-
console.log(
|
|
235
|
+
console.log(chalk.dim('Creating git commit...'));
|
|
245
236
|
const fullMessage = `${commitMessage}\n\nGenerated by Clavix task-complete`;
|
|
246
237
|
const success = await gitManager.createCommit({
|
|
247
238
|
message: fullMessage,
|
|
@@ -249,10 +240,10 @@ class TaskComplete extends core_1.Command {
|
|
|
249
240
|
projectName: path.basename(path.dirname(configPath)),
|
|
250
241
|
});
|
|
251
242
|
if (success) {
|
|
252
|
-
console.log(
|
|
243
|
+
console.log(chalk.green('✓ Git commit created\n'));
|
|
253
244
|
}
|
|
254
245
|
else {
|
|
255
|
-
console.log(
|
|
246
|
+
console.log(chalk.yellow('⚠ Git commit failed (non-critical)\n'));
|
|
256
247
|
}
|
|
257
248
|
}
|
|
258
249
|
/**
|
|
@@ -261,46 +252,18 @@ class TaskComplete extends core_1.Command {
|
|
|
261
252
|
async showNextTask(taskManager, phases) {
|
|
262
253
|
const nextTask = taskManager.findFirstIncompleteTask(phases);
|
|
263
254
|
if (!nextTask) {
|
|
264
|
-
console.log(
|
|
265
|
-
console.log(
|
|
266
|
-
console.log(
|
|
255
|
+
console.log(chalk.bold.green('🎉 All tasks completed!\n'));
|
|
256
|
+
console.log(chalk.gray('Great work! All implementation tasks are done.\n'));
|
|
257
|
+
console.log(chalk.dim('Hint: Run "clavix archive" to archive this project\n'));
|
|
267
258
|
return;
|
|
268
259
|
}
|
|
269
|
-
console.log(
|
|
270
|
-
console.log(
|
|
271
|
-
console.log(
|
|
260
|
+
console.log(chalk.bold('Next Task:'));
|
|
261
|
+
console.log(chalk.bold.white(` ID: ${chalk.cyan(nextTask.id)}`));
|
|
262
|
+
console.log(chalk.bold.white(` ${nextTask.description}`));
|
|
272
263
|
if (nextTask.prdReference) {
|
|
273
|
-
console.log(
|
|
264
|
+
console.log(chalk.dim(` Reference: ${nextTask.prdReference}`));
|
|
274
265
|
}
|
|
275
|
-
console.log(
|
|
266
|
+
console.log(chalk.dim(` Phase: ${nextTask.phase}\n`));
|
|
276
267
|
}
|
|
277
268
|
}
|
|
278
|
-
TaskComplete.description = 'Mark a task as completed with validation and optional git commit';
|
|
279
|
-
TaskComplete.examples = [
|
|
280
|
-
'<%= config.bin %> <%= command.id %> phase-1-auth-1',
|
|
281
|
-
'<%= config.bin %> <%= command.id %> phase-2-api-3 --no-git',
|
|
282
|
-
'<%= config.bin %> <%= command.id %> setup-1 --force',
|
|
283
|
-
];
|
|
284
|
-
TaskComplete.args = {
|
|
285
|
-
taskId: core_1.Args.string({
|
|
286
|
-
description: 'Task ID to mark as completed',
|
|
287
|
-
required: true,
|
|
288
|
-
}),
|
|
289
|
-
};
|
|
290
|
-
TaskComplete.flags = {
|
|
291
|
-
'no-git': core_1.Flags.boolean({
|
|
292
|
-
description: 'Skip git commit even if strategy is enabled',
|
|
293
|
-
default: false,
|
|
294
|
-
}),
|
|
295
|
-
force: core_1.Flags.boolean({
|
|
296
|
-
char: 'f',
|
|
297
|
-
description: 'Force completion even if already marked complete',
|
|
298
|
-
default: false,
|
|
299
|
-
}),
|
|
300
|
-
config: core_1.Flags.string({
|
|
301
|
-
char: 'c',
|
|
302
|
-
description: 'Path to config file (defaults to auto-discover)',
|
|
303
|
-
}),
|
|
304
|
-
};
|
|
305
|
-
exports.default = TaskComplete;
|
|
306
269
|
//# sourceMappingURL=task-complete.js.map
|
|
@@ -3,9 +3,9 @@ export default class Update extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
'docs-only': import("@oclif/core/
|
|
7
|
-
'commands-only': import("@oclif/core/
|
|
8
|
-
force: import("@oclif/core/
|
|
6
|
+
'docs-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
'commands-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
9
|
};
|
|
10
10
|
run(): Promise<void>;
|
|
11
11
|
private updateDocumentation;
|