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
@@ -3,10 +3,10 @@ export default class Prd extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
- quick: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
7
- project: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
- template: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
- 'skip-validation': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ quick: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ template: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'skip-validation': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
10
  };
11
11
  run(): Promise<void>;
12
12
  /**
@@ -1,65 +1,56 @@
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 * as path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname } from 'path';
7
+ import fs from 'fs-extra';
8
+ import { QuestionEngine } from '../../core/question-engine.js';
9
+ import { PrdGenerator } from '../../core/prd-generator.js';
10
+ import { PromptOptimizer } from '../../core/prompt-optimizer.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ export default class Prd extends Command {
14
+ static description = 'Generate a Product Requirements Document through Socratic questioning';
15
+ static examples = [
16
+ '<%= config.bin %> <%= command.id %>',
17
+ '<%= config.bin %> <%= command.id %> --quick',
18
+ '<%= config.bin %> <%= command.id %> --project my-app',
19
+ ];
20
+ static flags = {
21
+ quick: Flags.boolean({
22
+ char: 'q',
23
+ description: 'Use quick mode with fewer questions',
24
+ default: false,
25
+ }),
26
+ project: Flags.string({
27
+ char: 'p',
28
+ description: 'Project name for organizing outputs',
29
+ }),
30
+ template: Flags.string({
31
+ char: 't',
32
+ description: 'Path to custom question template',
33
+ }),
34
+ 'skip-validation': Flags.boolean({
35
+ description: 'Skip CLEAR framework validation of generated PRD',
36
+ default: false,
37
+ }),
33
38
  };
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 path = __importStar(require("path"));
43
- const fs = __importStar(require("fs-extra"));
44
- const question_engine_1 = require("../../core/question-engine");
45
- const prd_generator_1 = require("../../core/prd-generator");
46
- const prompt_optimizer_1 = require("../../core/prompt-optimizer");
47
- class Prd extends core_1.Command {
48
39
  async run() {
49
40
  const { flags } = await this.parse(Prd);
50
- console.log(chalk_1.default.bold.cyan('\nPRD Generator\n'));
51
- console.log(chalk_1.default.gray("Let's create a comprehensive Product Requirements Document through strategic questions.\n"));
41
+ console.log(chalk.bold.cyan('\nPRD Generator\n'));
42
+ console.log(chalk.gray("Let's create a comprehensive Product Requirements Document through strategic questions.\n"));
52
43
  try {
53
44
  // Initialize QuestionEngine
54
- const engine = new question_engine_1.QuestionEngine();
45
+ const engine = new QuestionEngine();
55
46
  // Determine template path
56
47
  const templatePath = flags.template ||
57
48
  path.join(__dirname, '../../templates/prd-questions.md');
58
49
  // Load question flow
59
- console.log(chalk_1.default.dim('Loading questions...\n'));
50
+ console.log(chalk.dim('Loading questions...\n'));
60
51
  const flow = await engine.loadFlow(templatePath);
61
- console.log(chalk_1.default.bold(`${flow.name}`));
62
- console.log(chalk_1.default.gray(flow.description));
52
+ console.log(chalk.bold(`${flow.name}`));
53
+ console.log(chalk.gray(flow.description));
63
54
  console.log();
64
55
  // Collect answers through Socratic questioning
65
56
  const answers = {};
@@ -68,10 +59,10 @@ class Prd extends core_1.Command {
68
59
  let stackDetectionDone = false;
69
60
  while (question) {
70
61
  const progress = engine.getProgress();
71
- console.log(chalk_1.default.dim(`[${progress.current + 1}/${progress.total}]`));
62
+ console.log(chalk.dim(`[${progress.current + 1}/${progress.total}]`));
72
63
  let answer;
73
64
  if (question.type === 'confirm') {
74
- const response = await inquirer_1.default.prompt([
65
+ const response = await inquirer.prompt([
75
66
  {
76
67
  type: 'confirm',
77
68
  name: 'answer',
@@ -82,7 +73,7 @@ class Prd extends core_1.Command {
82
73
  answer = response.answer;
83
74
  }
84
75
  else if (question.type === 'list' && question.choices) {
85
- const response = await inquirer_1.default.prompt([
76
+ const response = await inquirer.prompt([
86
77
  {
87
78
  type: 'list',
88
79
  name: 'answer',
@@ -102,10 +93,10 @@ class Prd extends core_1.Command {
102
93
  detectedStack = await this.detectProjectTechStack();
103
94
  stackDetectionDone = true;
104
95
  if (detectedStack) {
105
- messageText = `${currentQuestion.text}\n ${chalk_1.default.cyan('Detected:')} ${chalk_1.default.green(detectedStack)} ${chalk_1.default.dim('(press Enter to use, or type to override)')}`;
96
+ messageText = `${currentQuestion.text}\n ${chalk.cyan('Detected:')} ${chalk.green(detectedStack)} ${chalk.dim('(press Enter to use, or type to override)')}`;
106
97
  }
107
98
  }
108
- const response = await inquirer_1.default.prompt([
99
+ const response = await inquirer.prompt([
109
100
  {
110
101
  type: 'input',
111
102
  name: 'answer',
@@ -131,14 +122,14 @@ class Prd extends core_1.Command {
131
122
  // If Q3 and answer is empty but we have detected stack, use it
132
123
  if (currentQuestion.id === 'q3' && !answer.trim() && detectedStack) {
133
124
  answer = detectedStack;
134
- console.log(chalk_1.default.dim(` Using detected: ${detectedStack}`));
125
+ console.log(chalk.dim(` Using detected: ${detectedStack}`));
135
126
  }
136
127
  }
137
128
  // Submit answer (only if not empty or if it's a detected stack for Q3)
138
129
  if (answer && answer.toString().trim() && question) {
139
130
  const submitResult = engine.submitAnswer(question.id, answer);
140
131
  if (submitResult !== true) {
141
- console.log(chalk_1.default.red(`\n${submitResult}\n`));
132
+ console.log(chalk.red(`\n${submitResult}\n`));
142
133
  continue; // Ask again
143
134
  }
144
135
  answers[question.id] = answer;
@@ -147,29 +138,29 @@ class Prd extends core_1.Command {
147
138
  question = engine.getNextQuestion();
148
139
  }
149
140
  // All questions answered
150
- console.log(chalk_1.default.bold.green('\nAll questions answered!\n'));
141
+ console.log(chalk.bold.green('\nAll questions answered!\n'));
151
142
  // Generate PRDs
152
- console.log(chalk_1.default.dim('Generating PRD documents...\n'));
153
- const generator = new prd_generator_1.PrdGenerator();
143
+ console.log(chalk.dim('Generating PRD documents...\n'));
144
+ const generator = new PrdGenerator();
154
145
  const projectName = flags.project || generator.extractProjectName(answers);
155
146
  const outputPath = await generator.generate(answers, {
156
147
  projectName,
157
148
  outputDir: '.clavix/outputs',
158
149
  });
159
150
  // Display success message
160
- console.log(chalk_1.default.bold.green('PRD documents generated successfully!\n'));
161
- console.log(chalk_1.default.bold('Output location:'));
162
- console.log(chalk_1.default.cyan(` ${outputPath}`));
151
+ console.log(chalk.bold.green('PRD documents generated successfully!\n'));
152
+ console.log(chalk.bold('Output location:'));
153
+ console.log(chalk.cyan(` ${outputPath}`));
163
154
  console.log();
164
- console.log(chalk_1.default.bold('Generated files:'));
165
- console.log(chalk_1.default.gray(` • full-prd.md`) + chalk_1.default.dim(' - Comprehensive PRD for team alignment'));
166
- console.log(chalk_1.default.gray(` • quick-prd.md`) + chalk_1.default.dim(' - Condensed prompt for AI agents'));
155
+ console.log(chalk.bold('Generated files:'));
156
+ console.log(chalk.gray(` • full-prd.md`) + chalk.dim(' - Comprehensive PRD for team alignment'));
157
+ console.log(chalk.gray(` • quick-prd.md`) + chalk.dim(' - Condensed prompt for AI agents'));
167
158
  console.log();
168
159
  // CLEAR validation of quick-prd.md (unless skipped)
169
160
  if (!flags['skip-validation']) {
170
161
  await this.validatePrdWithClear(outputPath);
171
162
  }
172
- console.log(chalk_1.default.gray('Tip: Use quick-prd.md as input for your AI agent to start development\n'));
163
+ console.log(chalk.gray('Tip: Use quick-prd.md as input for your AI agent to start development\n'));
173
164
  }
174
165
  catch (error) {
175
166
  const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
@@ -265,21 +256,21 @@ class Prd extends core_1.Command {
265
256
  const quickPrdPath = path.join(outputPath, 'quick-prd.md');
266
257
  // Read the generated quick-prd.md
267
258
  const prdContent = await fs.readFile(quickPrdPath, 'utf-8');
268
- console.log(chalk_1.default.bold.cyan('📊 CLEAR Framework Validation\n'));
269
- console.log(chalk_1.default.gray('Analyzing quick-prd.md for AI consumption quality...\n'));
259
+ console.log(chalk.bold.cyan('📊 CLEAR Framework Validation\n'));
260
+ console.log(chalk.gray('Analyzing quick-prd.md for AI consumption quality...\n'));
270
261
  // Run CLEAR analysis (C, L, E only for PRDs)
271
- const optimizer = new prompt_optimizer_1.PromptOptimizer();
262
+ const optimizer = new PromptOptimizer();
272
263
  const clearResult = optimizer.applyCLEARFramework(prdContent, 'fast');
273
264
  const clearScore = optimizer.calculateCLEARScore(clearResult);
274
265
  const getScoreColor = (score) => {
275
266
  if (score >= 80)
276
- return chalk_1.default.green;
267
+ return chalk.green;
277
268
  if (score >= 60)
278
- return chalk_1.default.yellow;
279
- return chalk_1.default.red;
269
+ return chalk.yellow;
270
+ return chalk.red;
280
271
  };
281
272
  // Display CLEAR assessment for AI consumption
282
- console.log(chalk_1.default.bold('AI Consumption Quality Assessment:\n'));
273
+ console.log(chalk.bold('AI Consumption Quality Assessment:\n'));
283
274
  // Conciseness
284
275
  const cColor = getScoreColor(clearScore.conciseness);
285
276
  console.log(cColor.bold(` [C] Concise: ${clearScore.conciseness.toFixed(0)}%`));
@@ -312,63 +303,37 @@ class Prd extends core_1.Command {
312
303
  console.log(overallColor.bold(` Overall CLEAR Score: ${clearScore.overall.toFixed(0)}% (${clearScore.rating})\n`));
313
304
  // Recommendations
314
305
  if (clearScore.overall < 80) {
315
- console.log(chalk_1.default.yellow('💡 PRD Quality Tips:\n'));
306
+ console.log(chalk.yellow('💡 PRD Quality Tips:\n'));
316
307
  if (clearScore.conciseness < 80 && clearResult.conciseness.suggestions.length > 0) {
317
- console.log(chalk_1.default.yellow(' [C] Consider making the PRD more concise:'));
308
+ console.log(chalk.yellow(' [C] Consider making the PRD more concise:'));
318
309
  clearResult.conciseness.suggestions.slice(0, 2).forEach((s) => {
319
- console.log(chalk_1.default.yellow(` • ${s}`));
310
+ console.log(chalk.yellow(` • ${s}`));
320
311
  });
321
312
  console.log();
322
313
  }
323
314
  if (clearScore.logic < 80 && clearResult.logic.suggestions.length > 0) {
324
- console.log(chalk_1.default.yellow(' [L] Improve logical structure:'));
315
+ console.log(chalk.yellow(' [L] Improve logical structure:'));
325
316
  clearResult.logic.suggestions.slice(0, 2).forEach((s) => {
326
- console.log(chalk_1.default.yellow(` • ${s}`));
317
+ console.log(chalk.yellow(` • ${s}`));
327
318
  });
328
319
  console.log();
329
320
  }
330
321
  if (clearScore.explicitness < 80 && clearResult.explicitness.suggestions.length > 0) {
331
- console.log(chalk_1.default.yellow(' [E] Add more explicit details:'));
322
+ console.log(chalk.yellow(' [E] Add more explicit details:'));
332
323
  clearResult.explicitness.suggestions.slice(0, 2).forEach((s) => {
333
- console.log(chalk_1.default.yellow(` • ${s}`));
324
+ console.log(chalk.yellow(` • ${s}`));
334
325
  });
335
326
  console.log();
336
327
  }
337
328
  }
338
329
  else {
339
- console.log(chalk_1.default.green('✨ Excellent! This PRD is well-optimized for AI consumption.\n'));
330
+ console.log(chalk.green('✨ Excellent! This PRD is well-optimized for AI consumption.\n'));
340
331
  }
341
332
  }
342
333
  catch {
343
334
  // Don't fail the whole command if validation fails
344
- console.log(chalk_1.default.yellow('⚠ Could not validate PRD with CLEAR framework\n'));
335
+ console.log(chalk.yellow('⚠ Could not validate PRD with CLEAR framework\n'));
345
336
  }
346
337
  }
347
338
  }
348
- Prd.description = 'Generate a Product Requirements Document through Socratic questioning';
349
- Prd.examples = [
350
- '<%= config.bin %> <%= command.id %>',
351
- '<%= config.bin %> <%= command.id %> --quick',
352
- '<%= config.bin %> <%= command.id %> --project my-app',
353
- ];
354
- Prd.flags = {
355
- quick: core_1.Flags.boolean({
356
- char: 'q',
357
- description: 'Use quick mode with fewer questions',
358
- default: false,
359
- }),
360
- project: core_1.Flags.string({
361
- char: 'p',
362
- description: 'Project name for organizing outputs',
363
- }),
364
- template: core_1.Flags.string({
365
- char: 't',
366
- description: 'Path to custom question template',
367
- }),
368
- 'skip-validation': core_1.Flags.boolean({
369
- description: 'Skip CLEAR framework validation of generated PRD',
370
- default: false,
371
- }),
372
- };
373
- exports.default = Prd;
374
339
  //# sourceMappingURL=prd.js.map
@@ -3,12 +3,12 @@ export default class PromptsClear extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
- fast: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
7
- deep: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
8
- executed: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
- stale: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
- all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
- force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ fast: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ deep: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ executed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ stale: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
12
  };
13
13
  run(): Promise<void>;
14
14
  private interactiveClear;
@@ -1,16 +1,46 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const core_1 = require("@oclif/core");
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const inquirer_1 = __importDefault(require("inquirer"));
9
- const prompt_manager_1 = require("../../../core/prompt-manager");
10
- class PromptsClear extends core_1.Command {
1
+ import { Command, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { PromptManager } from '../../../core/prompt-manager.js';
5
+ export default class PromptsClear extends Command {
6
+ static description = 'Clear saved prompts with safety checks';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %>',
9
+ '<%= config.bin %> <%= command.id %> --fast',
10
+ '<%= config.bin %> <%= command.id %> --deep',
11
+ '<%= config.bin %> <%= command.id %> --executed',
12
+ '<%= config.bin %> <%= command.id %> --stale',
13
+ '<%= config.bin %> <%= command.id %> --all',
14
+ ];
15
+ static flags = {
16
+ fast: Flags.boolean({
17
+ description: 'Clear all fast prompts',
18
+ default: false,
19
+ }),
20
+ deep: Flags.boolean({
21
+ description: 'Clear all deep prompts',
22
+ default: false,
23
+ }),
24
+ executed: Flags.boolean({
25
+ description: 'Clear executed prompts only (safe)',
26
+ default: false,
27
+ }),
28
+ stale: Flags.boolean({
29
+ description: 'Clear stale prompts (>30 days old)',
30
+ default: false,
31
+ }),
32
+ all: Flags.boolean({
33
+ description: 'Clear all prompts (with confirmation)',
34
+ default: false,
35
+ }),
36
+ force: Flags.boolean({
37
+ description: 'Skip confirmation prompts',
38
+ default: false,
39
+ }),
40
+ };
11
41
  async run() {
12
42
  const { flags } = await this.parse(PromptsClear);
13
- const promptManager = new prompt_manager_1.PromptManager();
43
+ const promptManager = new PromptManager();
14
44
  try {
15
45
  // Build filters
16
46
  const filters = {};
@@ -34,23 +64,23 @@ class PromptsClear extends core_1.Command {
34
64
  // Get prompts that will be deleted
35
65
  const toDelete = await promptManager.listPrompts(filters);
36
66
  if (toDelete.length === 0) {
37
- console.log(chalk_1.default.yellow('\n⚠️ No prompts match the specified criteria\n'));
67
+ console.log(chalk.yellow('\n⚠️ No prompts match the specified criteria\n'));
38
68
  return;
39
69
  }
40
70
  // Display what will be deleted
41
- console.log(chalk_1.default.bold.cyan(`\n📋 Prompts to Delete (${toDelete.length}):\n`));
71
+ console.log(chalk.bold.cyan(`\n📋 Prompts to Delete (${toDelete.length}):\n`));
42
72
  toDelete.forEach(p => {
43
- const status = p.executed ? chalk_1.default.green('✓') : chalk_1.default.gray('○');
73
+ const status = p.executed ? chalk.green('✓') : chalk.gray('○');
44
74
  const age = p.ageInDays === 0 ? 'today' : `${p.ageInDays}d ago`;
45
75
  console.log(` ${status} [${p.source}] ${p.id} (${age})`);
46
- console.log(` ${chalk_1.default.gray(p.originalPrompt.substring(0, 60))}...`);
76
+ console.log(` ${chalk.gray(p.originalPrompt.substring(0, 60))}...`);
47
77
  });
48
78
  console.log();
49
79
  // Safety check for unexecuted prompts
50
80
  const unexecuted = toDelete.filter(p => !p.executed);
51
81
  if (unexecuted.length > 0 && !flags.force) {
52
- console.log(chalk_1.default.yellow(`⚠️ Warning: ${unexecuted.length} unexecuted prompts will be deleted\n`));
53
- const { proceed } = await inquirer_1.default.prompt([
82
+ console.log(chalk.yellow(`⚠️ Warning: ${unexecuted.length} unexecuted prompts will be deleted\n`));
83
+ const { proceed } = await inquirer.prompt([
54
84
  {
55
85
  type: 'confirm',
56
86
  name: 'proceed',
@@ -59,57 +89,57 @@ class PromptsClear extends core_1.Command {
59
89
  },
60
90
  ]);
61
91
  if (!proceed) {
62
- console.log(chalk_1.default.gray('\nCancelled. No prompts were deleted.\n'));
92
+ console.log(chalk.gray('\nCancelled. No prompts were deleted.\n'));
63
93
  return;
64
94
  }
65
95
  }
66
96
  // Final confirmation for --all
67
97
  if (flags.all && !flags.force) {
68
- const { confirm } = await inquirer_1.default.prompt([
98
+ const { confirm } = await inquirer.prompt([
69
99
  {
70
100
  type: 'confirm',
71
101
  name: 'confirm',
72
- message: chalk_1.default.red('Delete ALL prompts? This cannot be undone.'),
102
+ message: chalk.red('Delete ALL prompts? This cannot be undone.'),
73
103
  default: false,
74
104
  },
75
105
  ]);
76
106
  if (!confirm) {
77
- console.log(chalk_1.default.gray('\nCancelled. No prompts were deleted.\n'));
107
+ console.log(chalk.gray('\nCancelled. No prompts were deleted.\n'));
78
108
  return;
79
109
  }
80
110
  }
81
111
  // Delete prompts
82
112
  const deleted = await promptManager.deletePrompts(filters);
83
- console.log(chalk_1.default.green(`\n✓ Deleted ${deleted} prompt(s)\n`));
113
+ console.log(chalk.green(`\n✓ Deleted ${deleted} prompt(s)\n`));
84
114
  // Show remaining stats
85
115
  const stats = await promptManager.getStorageStats();
86
116
  if (stats.totalPrompts > 0) {
87
- console.log(chalk_1.default.gray(`Remaining prompts: ${stats.totalPrompts}`));
88
- console.log(chalk_1.default.gray(` Fast: ${stats.fastPrompts} | Deep: ${stats.deepPrompts}`));
89
- console.log(chalk_1.default.gray(` Executed: ${stats.executedPrompts} | Pending: ${stats.pendingPrompts}\n`));
117
+ console.log(chalk.gray(`Remaining prompts: ${stats.totalPrompts}`));
118
+ console.log(chalk.gray(` Fast: ${stats.fastPrompts} | Deep: ${stats.deepPrompts}`));
119
+ console.log(chalk.gray(` Executed: ${stats.executedPrompts} | Pending: ${stats.pendingPrompts}\n`));
90
120
  }
91
121
  }
92
122
  catch (error) {
93
- console.log(chalk_1.default.red(`\n✗ Error: ${error}\n`));
123
+ console.log(chalk.red(`\n✗ Error: ${error}\n`));
94
124
  }
95
125
  }
96
126
  async interactiveClear(manager) {
97
127
  const allPrompts = await manager.listPrompts();
98
128
  if (allPrompts.length === 0) {
99
- console.log(chalk_1.default.yellow('\n⚠️ No prompts to clear\n'));
129
+ console.log(chalk.yellow('\n⚠️ No prompts to clear\n'));
100
130
  return;
101
131
  }
102
- console.log(chalk_1.default.bold.cyan(`\n📋 Clear Saved Prompts\n`));
132
+ console.log(chalk.bold.cyan(`\n📋 Clear Saved Prompts\n`));
103
133
  const choices = [
104
134
  { name: 'Executed prompts only (safe)', value: 'executed' },
105
135
  { name: 'Stale prompts (>30 days old)', value: 'stale' },
106
136
  { name: 'Old prompts (>7 days old)', value: 'old' },
107
137
  { name: 'Fast prompts only', value: 'fast' },
108
138
  { name: 'Deep prompts only', value: 'deep' },
109
- { name: chalk_1.default.red('All prompts (dangerous)'), value: 'all' },
139
+ { name: chalk.red('All prompts (dangerous)'), value: 'all' },
110
140
  { name: 'Cancel', value: 'cancel' },
111
141
  ];
112
- const { selection } = await inquirer_1.default.prompt([
142
+ const { selection } = await inquirer.prompt([
113
143
  {
114
144
  type: 'list',
115
145
  name: 'selection',
@@ -118,7 +148,7 @@ class PromptsClear extends core_1.Command {
118
148
  },
119
149
  ]);
120
150
  if (selection === 'cancel') {
121
- console.log(chalk_1.default.gray('\nCancelled.\n'));
151
+ console.log(chalk.gray('\nCancelled.\n'));
122
152
  return;
123
153
  }
124
154
  // Build filters based on selection
@@ -144,21 +174,21 @@ class PromptsClear extends core_1.Command {
144
174
  ? allPrompts
145
175
  : await manager.listPrompts(filters);
146
176
  if (toDelete.length === 0) {
147
- console.log(chalk_1.default.yellow('\n⚠️ No prompts match the selected criteria\n'));
177
+ console.log(chalk.yellow('\n⚠️ No prompts match the selected criteria\n'));
148
178
  return;
149
179
  }
150
180
  // Show preview
151
- console.log(chalk_1.default.cyan(`\nWill delete ${toDelete.length} prompt(s):\n`));
181
+ console.log(chalk.cyan(`\nWill delete ${toDelete.length} prompt(s):\n`));
152
182
  toDelete.slice(0, 5).forEach(p => {
153
- const status = p.executed ? chalk_1.default.green('✓') : chalk_1.default.gray('○');
183
+ const status = p.executed ? chalk.green('✓') : chalk.gray('○');
154
184
  console.log(` ${status} [${p.source}] ${p.id}`);
155
185
  });
156
186
  if (toDelete.length > 5) {
157
- console.log(chalk_1.default.gray(` ... and ${toDelete.length - 5} more`));
187
+ console.log(chalk.gray(` ... and ${toDelete.length - 5} more`));
158
188
  }
159
189
  console.log();
160
190
  // Confirm deletion
161
- const { confirm } = await inquirer_1.default.prompt([
191
+ const { confirm } = await inquirer.prompt([
162
192
  {
163
193
  type: 'confirm',
164
194
  name: 'confirm',
@@ -167,56 +197,20 @@ class PromptsClear extends core_1.Command {
167
197
  },
168
198
  ]);
169
199
  if (!confirm) {
170
- console.log(chalk_1.default.gray('\nCancelled. No prompts were deleted.\n'));
200
+ console.log(chalk.gray('\nCancelled. No prompts were deleted.\n'));
171
201
  return;
172
202
  }
173
203
  // Delete
174
204
  const deleted = await manager.deletePrompts(filters);
175
- console.log(chalk_1.default.green(`\n✓ Deleted ${deleted} prompt(s)\n`));
205
+ console.log(chalk.green(`\n✓ Deleted ${deleted} prompt(s)\n`));
176
206
  // Show remaining
177
207
  const stats = await manager.getStorageStats();
178
208
  if (stats.totalPrompts > 0) {
179
- console.log(chalk_1.default.gray(`Remaining: ${stats.totalPrompts} prompt(s)\n`));
209
+ console.log(chalk.gray(`Remaining: ${stats.totalPrompts} prompt(s)\n`));
180
210
  }
181
211
  else {
182
- console.log(chalk_1.default.gray('All prompts cleared.\n'));
212
+ console.log(chalk.gray('All prompts cleared.\n'));
183
213
  }
184
214
  }
185
215
  }
186
- PromptsClear.description = 'Clear saved prompts with safety checks';
187
- PromptsClear.examples = [
188
- '<%= config.bin %> <%= command.id %>',
189
- '<%= config.bin %> <%= command.id %> --fast',
190
- '<%= config.bin %> <%= command.id %> --deep',
191
- '<%= config.bin %> <%= command.id %> --executed',
192
- '<%= config.bin %> <%= command.id %> --stale',
193
- '<%= config.bin %> <%= command.id %> --all',
194
- ];
195
- PromptsClear.flags = {
196
- fast: core_1.Flags.boolean({
197
- description: 'Clear all fast prompts',
198
- default: false,
199
- }),
200
- deep: core_1.Flags.boolean({
201
- description: 'Clear all deep prompts',
202
- default: false,
203
- }),
204
- executed: core_1.Flags.boolean({
205
- description: 'Clear executed prompts only (safe)',
206
- default: false,
207
- }),
208
- stale: core_1.Flags.boolean({
209
- description: 'Clear stale prompts (>30 days old)',
210
- default: false,
211
- }),
212
- all: core_1.Flags.boolean({
213
- description: 'Clear all prompts (with confirmation)',
214
- default: false,
215
- }),
216
- force: core_1.Flags.boolean({
217
- description: 'Skip confirmation prompts',
218
- default: false,
219
- }),
220
- };
221
- exports.default = PromptsClear;
222
216
  //# sourceMappingURL=clear.js.map