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.
Files changed (165) hide show
  1. package/README.md +18 -4
  2. package/bin/clavix.js +12 -5
  3. package/dist/cli/commands/archive.d.ts +5 -4
  4. package/dist/cli/commands/archive.js +135 -161
  5. package/dist/cli/commands/config.d.ts +4 -4
  6. package/dist/cli/commands/config.js +66 -105
  7. package/dist/cli/commands/deep.d.ts +3 -3
  8. package/dist/cli/commands/deep.js +97 -103
  9. package/dist/cli/commands/execute.d.ts +4 -4
  10. package/dist/cli/commands/execute.js +57 -63
  11. package/dist/cli/commands/fast.d.ts +3 -3
  12. package/dist/cli/commands/fast.js +122 -128
  13. package/dist/cli/commands/implement.d.ts +4 -4
  14. package/dist/cli/commands/implement.js +84 -148
  15. package/dist/cli/commands/init.js +87 -126
  16. package/dist/cli/commands/list.d.ts +5 -5
  17. package/dist/cli/commands/list.js +72 -111
  18. package/dist/cli/commands/plan.d.ts +7 -7
  19. package/dist/cli/commands/plan.js +92 -131
  20. package/dist/cli/commands/prd.d.ts +4 -4
  21. package/dist/cli/commands/prd.js +76 -111
  22. package/dist/cli/commands/prompts/clear.d.ts +6 -6
  23. package/dist/cli/commands/prompts/clear.js +70 -76
  24. package/dist/cli/commands/prompts/list.js +37 -43
  25. package/dist/cli/commands/show.d.ts +4 -4
  26. package/dist/cli/commands/show.js +72 -111
  27. package/dist/cli/commands/start.d.ts +3 -3
  28. package/dist/cli/commands/start.js +63 -101
  29. package/dist/cli/commands/summarize.d.ts +4 -4
  30. package/dist/cli/commands/summarize.js +81 -120
  31. package/dist/cli/commands/task-complete.d.ts +4 -4
  32. package/dist/cli/commands/task-complete.js +86 -123
  33. package/dist/cli/commands/update.d.ts +3 -3
  34. package/dist/cli/commands/update.js +97 -130
  35. package/dist/cli/commands/version.js +13 -48
  36. package/dist/core/adapters/agents-md-generator.js +17 -50
  37. package/dist/core/adapters/amp-adapter.d.ts +1 -1
  38. package/dist/core/adapters/amp-adapter.js +13 -21
  39. package/dist/core/adapters/augment-adapter.d.ts +2 -2
  40. package/dist/core/adapters/augment-adapter.js +16 -56
  41. package/dist/core/adapters/base-adapter.d.ts +1 -1
  42. package/dist/core/adapters/base-adapter.js +11 -47
  43. package/dist/core/adapters/claude-code-adapter.d.ts +2 -2
  44. package/dist/core/adapters/claude-code-adapter.js +19 -60
  45. package/dist/core/adapters/cline-adapter.d.ts +1 -1
  46. package/dist/core/adapters/cline-adapter.js +13 -21
  47. package/dist/core/adapters/codebuddy-adapter.d.ts +2 -2
  48. package/dist/core/adapters/codebuddy-adapter.js +17 -57
  49. package/dist/core/adapters/codex-adapter.d.ts +2 -2
  50. package/dist/core/adapters/codex-adapter.js +16 -56
  51. package/dist/core/adapters/copilot-instructions-generator.js +18 -51
  52. package/dist/core/adapters/crush-adapter.d.ts +2 -2
  53. package/dist/core/adapters/crush-adapter.js +13 -20
  54. package/dist/core/adapters/cursor-adapter.d.ts +1 -1
  55. package/dist/core/adapters/cursor-adapter.js +12 -20
  56. package/dist/core/adapters/droid-adapter.d.ts +2 -2
  57. package/dist/core/adapters/droid-adapter.js +14 -21
  58. package/dist/core/adapters/gemini-adapter.d.ts +2 -2
  59. package/dist/core/adapters/gemini-adapter.js +16 -52
  60. package/dist/core/adapters/kilocode-adapter.d.ts +1 -1
  61. package/dist/core/adapters/kilocode-adapter.js +12 -20
  62. package/dist/core/adapters/octo-md-generator.js +17 -50
  63. package/dist/core/adapters/opencode-adapter.d.ts +2 -2
  64. package/dist/core/adapters/opencode-adapter.js +14 -21
  65. package/dist/core/adapters/qwen-adapter.d.ts +2 -2
  66. package/dist/core/adapters/qwen-adapter.js +16 -52
  67. package/dist/core/adapters/roocode-adapter.d.ts +2 -2
  68. package/dist/core/adapters/roocode-adapter.js +12 -19
  69. package/dist/core/adapters/warp-md-generator.js +17 -50
  70. package/dist/core/adapters/windsurf-adapter.d.ts +1 -1
  71. package/dist/core/adapters/windsurf-adapter.js +12 -20
  72. package/dist/core/agent-manager.d.ts +1 -1
  73. package/dist/core/agent-manager.js +34 -38
  74. package/dist/core/archive-manager.js +10 -46
  75. package/dist/core/config-manager.d.ts +2 -2
  76. package/dist/core/config-manager.js +3 -40
  77. package/dist/core/conversation-analyzer.d.ts +1 -1
  78. package/dist/core/conversation-analyzer.js +1 -5
  79. package/dist/core/doc-injector.js +23 -60
  80. package/dist/core/git-manager.js +11 -48
  81. package/dist/core/prd-generator.js +16 -51
  82. package/dist/core/prompt-manager.js +6 -42
  83. package/dist/core/prompt-optimizer.js +1 -5
  84. package/dist/core/question-engine.js +6 -45
  85. package/dist/core/session-manager.d.ts +1 -1
  86. package/dist/core/session-manager.js +11 -49
  87. package/dist/core/task-manager.d.ts +26 -0
  88. package/dist/core/task-manager.js +243 -101
  89. package/dist/index.d.ts +2 -1
  90. package/dist/index.js +8 -12
  91. package/dist/templates/agents/agents.md +31 -2
  92. package/dist/templates/agents/copilot-instructions.md +1 -1
  93. package/dist/templates/agents/octo.md +20 -1
  94. package/dist/templates/agents/warp.md +1 -1
  95. package/dist/templates/slash-commands/_canonical/implement.md +33 -11
  96. package/dist/types/agent.js +1 -2
  97. package/dist/types/config.js +3 -8
  98. package/dist/types/errors.js +7 -13
  99. package/dist/types/session.js +1 -2
  100. package/dist/utils/agent-error-messages.js +1 -5
  101. package/dist/utils/error-utils.js +5 -12
  102. package/dist/utils/file-system.js +20 -57
  103. package/dist/utils/legacy-command-cleanup.d.ts +1 -1
  104. package/dist/utils/legacy-command-cleanup.js +9 -45
  105. package/dist/utils/template-loader.d.ts +1 -1
  106. package/dist/utils/template-loader.js +9 -41
  107. package/dist/utils/toml-templates.js +1 -4
  108. package/package.json +9 -4
  109. package/dist/core/adapters 2/agents-md-generator.d.ts +0 -26
  110. package/dist/core/adapters 2/agents-md-generator.js +0 -102
  111. package/dist/core/adapters 2/amp-adapter.d.ts +0 -27
  112. package/dist/core/adapters 2/amp-adapter.js +0 -42
  113. package/dist/core/adapters 2/augment-adapter.d.ts +0 -22
  114. package/dist/core/adapters 2/augment-adapter.js +0 -77
  115. package/dist/core/adapters 2/base-adapter.d.ts +0 -45
  116. package/dist/core/adapters 2/base-adapter.js +0 -142
  117. package/dist/core/adapters 2/claude-code-adapter.d.ts +0 -32
  118. package/dist/core/adapters 2/claude-code-adapter.js +0 -116
  119. package/dist/core/adapters 2/cline-adapter.d.ts +0 -34
  120. package/dist/core/adapters 2/cline-adapter.js +0 -52
  121. package/dist/core/adapters 2/codebuddy-adapter.d.ts +0 -24
  122. package/dist/core/adapters 2/codebuddy-adapter.js +0 -82
  123. package/dist/core/adapters 2/codex-adapter.d.ts +0 -24
  124. package/dist/core/adapters 2/codex-adapter.js +0 -79
  125. package/dist/core/adapters 2/copilot-instructions-generator.d.ts +0 -26
  126. package/dist/core/adapters 2/copilot-instructions-generator.js +0 -104
  127. package/dist/core/adapters 2/crush-adapter.d.ts +0 -35
  128. package/dist/core/adapters 2/crush-adapter.js +0 -49
  129. package/dist/core/adapters 2/cursor-adapter.d.ts +0 -25
  130. package/dist/core/adapters 2/cursor-adapter.js +0 -40
  131. package/dist/core/adapters 2/droid-adapter.d.ts +0 -33
  132. package/dist/core/adapters 2/droid-adapter.js +0 -57
  133. package/dist/core/adapters 2/gemini-adapter.d.ts +0 -27
  134. package/dist/core/adapters 2/gemini-adapter.js +0 -90
  135. package/dist/core/adapters 2/kilocode-adapter.d.ts +0 -34
  136. package/dist/core/adapters 2/kilocode-adapter.js +0 -49
  137. package/dist/core/adapters 2/octo-md-generator.d.ts +0 -26
  138. package/dist/core/adapters 2/octo-md-generator.js +0 -102
  139. package/dist/core/adapters 2/opencode-adapter.d.ts +0 -33
  140. package/dist/core/adapters 2/opencode-adapter.js +0 -56
  141. package/dist/core/adapters 2/qwen-adapter.d.ts +0 -27
  142. package/dist/core/adapters 2/qwen-adapter.js +0 -90
  143. package/dist/core/adapters 2/roocode-adapter.d.ts +0 -40
  144. package/dist/core/adapters 2/roocode-adapter.js +0 -68
  145. package/dist/core/adapters 2/warp-md-generator.d.ts +0 -17
  146. package/dist/core/adapters 2/warp-md-generator.js +0 -88
  147. package/dist/core/adapters 2/windsurf-adapter.d.ts +0 -34
  148. package/dist/core/adapters 2/windsurf-adapter.js +0 -49
  149. package/dist/core/agent-manager 2.js +0 -126
  150. package/dist/core/agent-manager.d 2.ts +0 -51
  151. package/dist/core/archive-manager 2.js +0 -338
  152. package/dist/core/archive-manager.d 2.ts +0 -100
  153. package/dist/core/conversation-analyzer.d 2.ts +0 -86
  154. package/dist/core/doc-injector 2.js +0 -236
  155. package/dist/core/doc-injector.d 2.ts +0 -51
  156. package/dist/core/git-manager 2.js +0 -214
  157. package/dist/core/git-manager.d 2.ts +0 -100
  158. package/dist/core/prompt-optimizer 2.js +0 -963
  159. package/dist/core/prompt-optimizer.d 2.ts +0 -268
  160. package/dist/core/question-engine 2.js +0 -395
  161. package/dist/core/question-engine.d 2.ts +0 -167
  162. package/dist/core/session-manager 2.js +0 -403
  163. package/dist/core/session-manager.d 2.ts +0 -139
  164. package/dist/core/task-manager 2.js +0 -689
  165. package/dist/core/task-manager.d 2.ts +0 -155
@@ -1,60 +1,49 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
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
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
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(chalk_1.default.bold.cyan(`\nTask Completion: ${taskId}\n`));
39
+ console.log(chalk.bold.cyan(`\nTask Completion: ${taskId}\n`));
51
40
  try {
52
- const taskManager = new task_manager_1.TaskManager();
53
- const configManager = new config_manager_1.ConfigManager();
54
- const gitManager = new git_manager_1.GitManager();
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(chalk_1.default.dim(`Config: ${configPath}\n`));
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(chalk_1.default.red(`✗ Task ID "${taskId}" not found\n`));
68
- console.log(chalk_1.default.yellow('Available task IDs:\n'));
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(chalk_1.default.bold(` ${phase.name}:`));
59
+ console.log(chalk.bold(` ${phase.name}:`));
71
60
  phase.tasks.forEach(t => {
72
- const status = t.completed ? chalk_1.default.green('[x]') : chalk_1.default.gray('[ ]');
73
- console.log(` ${status} ${chalk_1.default.cyan(t.id)} - ${t.description}`);
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(chalk_1.default.yellow(`⚠ Task "${taskId}" is already marked as completed\n`));
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(chalk_1.default.dim('Task is tracked in config as completed.\n'));
74
+ console.log(chalk.dim('Task is tracked in config as completed.\n'));
86
75
  }
87
- console.log(chalk_1.default.gray('Use --force to re-mark this task as completed.\n'));
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(chalk_1.default.dim('Marking task as completed...'));
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(chalk_1.default.red(`\n✗ Failed to mark task as completed\n`));
98
- console.log(chalk_1.default.yellow(`Error: ${result.error}\n`));
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(chalk_1.default.yellow('Warnings:'));
101
- result.warnings.forEach(warning => console.log(chalk_1.default.yellow(` • ${warning}`)));
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(chalk_1.default.bold('Recovery Options:\n'));
106
- console.log(chalk_1.default.gray(' 1. Check if tasks.md file is readable and writable'));
107
- console.log(chalk_1.default.gray(' 2. Verify task ID matches exactly (run "clavix implement" to see current task)'));
108
- console.log(chalk_1.default.gray(' 3. Try running with --force flag if task is already completed'));
109
- console.log(chalk_1.default.gray(' 4. Check tasks.md.backup file if one was created\n'));
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(chalk_1.default.yellow('\nWarnings:'));
115
- result.warnings.forEach(warning => console.log(chalk_1.default.yellow(` • ${warning}`)));
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(chalk_1.default.green(`✓ Task was already completed (tracking updated)\n`));
109
+ console.log(chalk.green(`✓ Task was already completed (tracking updated)\n`));
121
110
  }
122
111
  else {
123
- console.log(chalk_1.default.green(`✓ Task marked as completed\n`));
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(chalk_1.default.dim('Updating configuration...'));
117
+ console.log(chalk.dim('Updating configuration...'));
127
118
  await configManager.trackCompletion(configPath, taskId);
128
119
  // Update stats
129
- const updatedStats = taskManager.getTaskStats(phases);
120
+ const updatedStats = taskManager.getTaskStats(updatedPhases);
130
121
  await configManager.update(configPath, { stats: updatedStats });
131
- console.log(chalk_1.default.green('✓ Configuration updated\n'));
122
+ console.log(chalk.green('✓ Configuration updated\n'));
132
123
  // Show progress
133
- console.log(chalk_1.default.bold('Progress:'));
134
- console.log(chalk_1.default.cyan(` Completed: ${updatedStats.completed}/${updatedStats.total} tasks (${updatedStats.percentage.toFixed(0)}%)`));
135
- console.log(chalk_1.default.cyan(` Remaining: ${updatedStats.remaining} tasks\n`));
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, phases);
129
+ await this.handleGitCommit(gitManager, configManager, configPath, config.commitStrategy, task, updatedPhases);
139
130
  }
140
131
  // Show next task
141
- await this.showNextTask(taskManager, phases);
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(chalk_1.default.red(`\n✗ Error: ${errorMessage}\n`));
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(chalk_1.default.dim(`Checking git commit strategy (${strategy})...`));
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(chalk_1.default.dim('No commit needed (strategy criteria not met)\n'));
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(chalk_1.default.yellow('⚠ Not a git repository - skipping commit\n'));
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(chalk_1.default.dim('No git changes to commit\n'));
231
+ console.log(chalk.dim('No git changes to commit\n'));
241
232
  return;
242
233
  }
243
234
  // Create commit
244
- console.log(chalk_1.default.dim('Creating git commit...'));
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(chalk_1.default.green('✓ Git commit created\n'));
243
+ console.log(chalk.green('✓ Git commit created\n'));
253
244
  }
254
245
  else {
255
- console.log(chalk_1.default.yellow('⚠ Git commit failed (non-critical)\n'));
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(chalk_1.default.bold.green('🎉 All tasks completed!\n'));
265
- console.log(chalk_1.default.gray('Great work! All implementation tasks are done.\n'));
266
- console.log(chalk_1.default.dim('Hint: Run "clavix archive" to archive this project\n'));
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(chalk_1.default.bold('Next Task:'));
270
- console.log(chalk_1.default.bold.white(` ID: ${chalk_1.default.cyan(nextTask.id)}`));
271
- console.log(chalk_1.default.bold.white(` ${nextTask.description}`));
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(chalk_1.default.dim(` Reference: ${nextTask.prdReference}`));
264
+ console.log(chalk.dim(` Reference: ${nextTask.prdReference}`));
274
265
  }
275
- console.log(chalk_1.default.dim(` Phase: ${nextTask.phase}\n`));
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/lib/interfaces").BooleanFlag<boolean>;
7
- 'commands-only': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
8
- force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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;