clavix 2.7.0 → 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 +22 -8
  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 +12 -7
  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,56 +1,41 @@
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);
26
- };
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;
1
+ import { Command, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { TaskManager } from '../../core/task-manager.js';
5
+ import { GitManager } from '../../core/git-manager.js';
6
+ import { AgentErrorMessages } from '../../utils/agent-error-messages.js';
7
+ import * as path from 'path';
8
+ import fs from 'fs-extra';
9
+ export default class Implement extends Command {
10
+ static description = 'Start implementing tasks from the task plan';
11
+ static examples = [
12
+ '<%= config.bin %> <%= command.id %>',
13
+ '<%= config.bin %> <%= command.id %> --project my-app',
14
+ '<%= config.bin %> <%= command.id %> --no-git',
15
+ ];
16
+ static flags = {
17
+ project: Flags.string({
18
+ char: 'p',
19
+ description: 'PRD project name (defaults to most recent)',
20
+ }),
21
+ 'tasks-path': Flags.string({
22
+ description: 'Direct path to tasks.md file',
23
+ }),
24
+ 'no-git': Flags.boolean({
25
+ description: 'Skip git auto-commit setup',
26
+ default: false,
27
+ }),
28
+ 'commit-strategy': Flags.string({
29
+ description: 'Auto-commit strategy: per-task, per-5-tasks, per-phase, none (default: none)',
30
+ options: ['per-task', 'per-5-tasks', 'per-phase', 'none'],
31
+ }),
33
32
  };
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 inquirer_1 = __importDefault(require("inquirer"));
42
- const task_manager_1 = require("../../core/task-manager");
43
- const git_manager_1 = require("../../core/git-manager");
44
- const agent_error_messages_1 = require("../../utils/agent-error-messages");
45
- const path = __importStar(require("path"));
46
- const fs = __importStar(require("fs-extra"));
47
- class Implement extends core_1.Command {
48
33
  async run() {
49
34
  const { flags } = await this.parse(Implement);
50
- console.log(chalk_1.default.bold.cyan('\nTask Implementation\n'));
35
+ console.log(chalk.bold.cyan('\nTask Implementation\n'));
51
36
  try {
52
- const manager = new task_manager_1.TaskManager();
53
- const gitManager = new git_manager_1.GitManager();
37
+ const manager = new TaskManager();
38
+ const gitManager = new GitManager();
54
39
  // Interactive PRD selection (if no project specified)
55
40
  if (!flags['tasks-path'] && !flags.project) {
56
41
  const selectedProject = await this.selectPrdProject(manager);
@@ -64,103 +49,78 @@ class Implement extends core_1.Command {
64
49
  tasksPath = flags['tasks-path'];
65
50
  }
66
51
  else {
67
- console.log(chalk_1.default.dim('Looking for task plan...'));
52
+ console.log(chalk.dim('Looking for task plan...'));
68
53
  const prdPath = await manager.findPrdDirectory(flags.project);
69
54
  tasksPath = path.join(prdPath, 'tasks.md');
70
55
  if (!(await fs.pathExists(tasksPath))) {
71
56
  const projectName = flags.project || path.basename(path.dirname(tasksPath));
72
- this.error(agent_error_messages_1.AgentErrorMessages.noTasksFound(projectName));
57
+ this.error(AgentErrorMessages.noTasksFound(projectName));
73
58
  }
74
- console.log(chalk_1.default.dim(`Found: ${tasksPath}\n`));
59
+ console.log(chalk.dim(`Found: ${tasksPath}\n`));
75
60
  }
76
61
  // Read tasks
77
62
  const phases = await manager.readTasksFile(tasksPath);
78
63
  const stats = manager.getTaskStats(phases);
79
64
  // Display progress
80
- console.log(chalk_1.default.bold('Progress:'));
81
- console.log(chalk_1.default.cyan(` Completed: ${stats.completed}/${stats.total} tasks (${stats.percentage.toFixed(0)}%)`));
82
- console.log(chalk_1.default.cyan(` Remaining: ${stats.remaining} tasks`));
65
+ console.log(chalk.bold('Progress:'));
66
+ console.log(chalk.cyan(` Completed: ${stats.completed}/${stats.total} tasks (${stats.percentage.toFixed(0)}%)`));
67
+ console.log(chalk.cyan(` Remaining: ${stats.remaining} tasks`));
83
68
  console.log();
84
69
  // Check if all tasks are done
85
70
  if (stats.remaining === 0) {
86
- console.log(chalk_1.default.bold.green('All tasks completed!\n'));
87
- console.log(chalk_1.default.gray('Great work! All implementation tasks are done.\n'));
71
+ console.log(chalk.bold.green('All tasks completed!\n'));
72
+ console.log(chalk.gray('Great work! All implementation tasks are done.\n'));
88
73
  return;
89
74
  }
90
75
  // Find next task
91
76
  const nextTask = manager.findFirstIncompleteTask(phases);
92
77
  if (!nextTask) {
93
- console.log(chalk_1.default.yellow('Warning: No incomplete tasks found\n'));
78
+ console.log(chalk.yellow('Warning: No incomplete tasks found\n'));
94
79
  return;
95
80
  }
96
81
  // Display next task
97
- console.log(chalk_1.default.bold('Next Task:'));
98
- console.log(chalk_1.default.bold.white(` ${nextTask.description}`));
82
+ console.log(chalk.bold('Next Task:'));
83
+ console.log(chalk.bold.white(` ${nextTask.description}`));
99
84
  if (nextTask.prdReference) {
100
- console.log(chalk_1.default.dim(` Reference: ${nextTask.prdReference}`));
85
+ console.log(chalk.dim(` Reference: ${nextTask.prdReference}`));
101
86
  }
102
- console.log(chalk_1.default.dim(` Phase: ${nextTask.phase}`));
87
+ console.log(chalk.dim(` Phase: ${nextTask.phase}`));
103
88
  console.log();
104
89
  // Git auto-commit setup (if not skipped)
105
90
  let commitStrategy = 'none';
106
91
  if (!flags['no-git']) {
107
92
  const gitStatus = await gitManager.validateGitSetup();
108
93
  if (gitStatus.isRepo) {
109
- console.log(chalk_1.default.dim(`Git repository detected (branch: ${gitStatus.currentBranch})`));
94
+ console.log(chalk.dim(`Git repository detected (branch: ${gitStatus.currentBranch})`));
110
95
  console.log();
111
- // Prompt for commit strategy (unless provided via flag)
96
+ // Use commit strategy from flag, or default to 'none' (agent-friendly)
112
97
  if (flags['commit-strategy']) {
113
98
  commitStrategy = flags['commit-strategy'];
114
99
  }
115
100
  else {
116
- const response = await inquirer_1.default.prompt([
117
- {
118
- type: 'list',
119
- name: 'strategy',
120
- message: 'Do you want the AI agent to create local git commits automatically?',
121
- choices: [
122
- {
123
- name: 'After each phase/section completes',
124
- value: 'per-phase',
125
- },
126
- {
127
- name: 'After every 5 tasks',
128
- value: 'per-5-tasks',
129
- },
130
- {
131
- name: 'After each task',
132
- value: 'per-task',
133
- },
134
- {
135
- name: "No, don't create commits for me",
136
- value: 'none',
137
- },
138
- ],
139
- default: 'per-phase',
140
- },
141
- ]);
142
- commitStrategy = response.strategy;
101
+ commitStrategy = 'none';
102
+ console.log(chalk.dim('ℹ No git strategy specified. Use --commit-strategy flag to enable auto-commits.'));
143
103
  }
144
104
  if (commitStrategy !== 'none') {
145
- console.log(chalk_1.default.green(`Auto-commit enabled: ${commitStrategy}\n`));
105
+ console.log(chalk.green(`✓ Auto-commit enabled: ${commitStrategy}\n`));
146
106
  }
147
107
  else {
148
- console.log(chalk_1.default.dim('Auto-commit disabled\n'));
108
+ console.log(chalk.dim(' Auto-commits disabled (manual git workflow)\n'));
149
109
  }
150
110
  }
151
111
  else {
152
- console.log(chalk_1.default.yellow('Warning: Not a git repository - auto-commits disabled\n'));
112
+ console.log(chalk.yellow('Warning: Not a git repository - auto-commits disabled\n'));
153
113
  }
154
114
  }
155
115
  // Display implementation instructions
156
- console.log(chalk_1.default.bold.cyan('Implementation Instructions:\n'));
157
- console.log(chalk_1.default.gray('The AI agent will now:'));
158
- console.log(chalk_1.default.gray(` 1. Implement: ${nextTask.description}`));
159
- console.log(chalk_1.default.gray(' 2. Mark the task as completed in tasks.md'));
116
+ console.log(chalk.bold.cyan('Implementation Instructions:\n'));
117
+ console.log(chalk.gray('The AI agent will now:'));
118
+ console.log(chalk.gray(` 1. Implement: ${nextTask.description}`));
119
+ console.log(chalk.gray(' 2. Mark the task as completed in tasks.md'));
160
120
  if (commitStrategy !== 'none') {
161
- console.log(chalk_1.default.gray(` 3. Create git commits (strategy: ${commitStrategy})`));
121
+ console.log(chalk.gray(` 3. Create git commits (strategy: ${commitStrategy})`));
162
122
  }
163
- console.log(chalk_1.default.gray(' 4. Proceed to the next task'));
123
+ console.log(chalk.gray(' 4. Proceed to the next task'));
164
124
  console.log();
165
125
  // Save commit strategy to a config file for the AI agent to read
166
126
  const configPath = path.join(path.dirname(tasksPath), '.clavix-implement-config.json');
@@ -171,19 +131,19 @@ class Implement extends core_1.Command {
171
131
  stats,
172
132
  timestamp: new Date().toISOString(),
173
133
  }, { spaces: 2 });
174
- console.log(chalk_1.default.bold.green('Ready to implement!\n'));
175
- console.log(chalk_1.default.dim('Configuration saved to:'));
176
- console.log(chalk_1.default.dim(` ${configPath}\n`));
177
- console.log(chalk_1.default.yellow('Important Notes for AI Agent:\n'));
178
- console.log(chalk_1.default.gray(' • Follow the tasks in order from tasks.md'));
179
- console.log(chalk_1.default.gray(' • Mark each completed task: change [ ] to [x]'));
180
- console.log(chalk_1.default.gray(` • Current task: ${nextTask.description}`));
134
+ console.log(chalk.bold.green('Ready to implement!\n'));
135
+ console.log(chalk.dim('Configuration saved to:'));
136
+ console.log(chalk.dim(` ${configPath}\n`));
137
+ console.log(chalk.yellow('Important Notes for AI Agent:\n'));
138
+ console.log(chalk.gray(' • Follow the tasks in order from tasks.md'));
139
+ console.log(chalk.gray(' • Mark each completed task: change [ ] to [x]'));
140
+ console.log(chalk.gray(` • Current task: ${nextTask.description}`));
181
141
  if (commitStrategy !== 'none') {
182
- console.log(chalk_1.default.gray(` • Create git commits per strategy: ${commitStrategy}`));
142
+ console.log(chalk.gray(` • Create git commits per strategy: ${commitStrategy}`));
183
143
  }
184
- console.log(chalk_1.default.gray(' • Use PRD as reference for implementation details'));
144
+ console.log(chalk.gray(' • Use PRD as reference for implementation details'));
185
145
  console.log();
186
- console.log(chalk_1.default.dim('Tip: The AI agent can run "clavix implement" again to resume progress\n'));
146
+ console.log(chalk.dim('Tip: The AI agent can run "clavix implement" again to resume progress\n'));
187
147
  }
188
148
  catch (error) {
189
149
  const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
@@ -234,12 +194,12 @@ class Implement extends core_1.Command {
234
194
  }
235
195
  // No PRD projects found
236
196
  if (prdProjects.length === 0) {
237
- this.error(agent_error_messages_1.AgentErrorMessages.noPrdFound());
197
+ this.error(AgentErrorMessages.noPrdFound());
238
198
  }
239
199
  // Only one PRD - auto-select
240
200
  if (prdProjects.length === 1) {
241
201
  const project = prdProjects[0];
242
- console.log(chalk_1.default.dim(`Auto-selected project: ${project.name}\n`));
202
+ console.log(chalk.dim(`Auto-selected project: ${project.name}\n`));
243
203
  // Check if it has tasks
244
204
  if (!project.hasTasks) {
245
205
  await this.handleNoTasks(project.name);
@@ -248,15 +208,15 @@ class Implement extends core_1.Command {
248
208
  return project.name;
249
209
  }
250
210
  // Multiple PRDs - show selection menu
251
- console.log(chalk_1.default.bold('Select a PRD project to implement:\n'));
211
+ console.log(chalk.bold('Select a PRD project to implement:\n'));
252
212
  const choices = prdProjects.map((project, index) => {
253
213
  let label = `${index + 1}. ${project.name}`;
254
214
  if (project.hasTasks && project.stats) {
255
215
  const percentage = project.stats.percentage.toFixed(0);
256
- label += chalk_1.default.dim(` - ${project.stats.completed}/${project.stats.total} tasks (${percentage}%)`);
216
+ label += chalk.dim(` - ${project.stats.completed}/${project.stats.total} tasks (${percentage}%)`);
257
217
  }
258
218
  else {
259
- label += chalk_1.default.dim(' - No tasks generated');
219
+ label += chalk.dim(' - No tasks generated');
260
220
  }
261
221
  return {
262
222
  name: label,
@@ -264,7 +224,7 @@ class Implement extends core_1.Command {
264
224
  hasTasks: project.hasTasks,
265
225
  };
266
226
  });
267
- const response = await inquirer_1.default.prompt([
227
+ const response = await inquirer.prompt([
268
228
  {
269
229
  type: 'list',
270
230
  name: 'project',
@@ -287,8 +247,8 @@ class Implement extends core_1.Command {
287
247
  * @param projectName Name of the PRD project
288
248
  */
289
249
  async handleNoTasks(projectName) {
290
- console.log(chalk_1.default.yellow(`\nWarning: Project "${projectName}" has no tasks generated yet.\n`));
291
- const response = await inquirer_1.default.prompt([
250
+ console.log(chalk.yellow(`\nWarning: Project "${projectName}" has no tasks generated yet.\n`));
251
+ const response = await inquirer.prompt([
292
252
  {
293
253
  type: 'confirm',
294
254
  name: 'runPlan',
@@ -297,10 +257,10 @@ class Implement extends core_1.Command {
297
257
  },
298
258
  ]);
299
259
  if (response.runPlan) {
300
- console.log(chalk_1.default.cyan(`\nRunning: clavix plan --project ${projectName}\n`));
260
+ console.log(chalk.cyan(`\nRunning: clavix plan --project ${projectName}\n`));
301
261
  // Execute clavix plan command
302
- const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
303
- const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
262
+ const { exec } = await import('child_process');
263
+ const { promisify } = await import('util');
304
264
  const execAsync = promisify(exec);
305
265
  try {
306
266
  const { stdout, stderr } = await execAsync(`clavix plan --project ${projectName}`, {
@@ -310,10 +270,10 @@ class Implement extends core_1.Command {
310
270
  console.log(stdout);
311
271
  }
312
272
  if (stderr) {
313
- console.error(chalk_1.default.yellow(stderr));
273
+ console.error(chalk.yellow(stderr));
314
274
  }
315
275
  // After plan completes, continue with implementation
316
- console.log(chalk_1.default.green('\nTasks generated! Continuing with implementation...\n'));
276
+ console.log(chalk.green('\nTasks generated! Continuing with implementation...\n'));
317
277
  }
318
278
  catch (error) {
319
279
  const errorMessage = error instanceof Error ? error.message : 'Unknown error';
@@ -321,33 +281,9 @@ class Implement extends core_1.Command {
321
281
  }
322
282
  }
323
283
  else {
324
- console.log(chalk_1.default.dim('\nExiting. Run "clavix plan" when ready to generate tasks.\n'));
284
+ console.log(chalk.dim('\nExiting. Run "clavix plan" when ready to generate tasks.\n'));
325
285
  this.exit(0);
326
286
  }
327
287
  }
328
288
  }
329
- Implement.description = 'Start implementing tasks from the task plan';
330
- Implement.examples = [
331
- '<%= config.bin %> <%= command.id %>',
332
- '<%= config.bin %> <%= command.id %> --project my-app',
333
- '<%= config.bin %> <%= command.id %> --no-git',
334
- ];
335
- Implement.flags = {
336
- project: core_1.Flags.string({
337
- char: 'p',
338
- description: 'PRD project name (defaults to most recent)',
339
- }),
340
- 'tasks-path': core_1.Flags.string({
341
- description: 'Direct path to tasks.md file',
342
- }),
343
- 'no-git': core_1.Flags.boolean({
344
- description: 'Skip git auto-commit setup',
345
- default: false,
346
- }),
347
- 'commit-strategy': core_1.Flags.string({
348
- description: 'Auto-commit strategy (per-task, per-5-tasks, per-phase, none)',
349
- options: ['per-task', 'per-5-tasks', 'per-phase', 'none'],
350
- }),
351
- };
352
- exports.default = Implement;
353
289
  //# sourceMappingURL=implement.js.map