clavix 4.11.2 → 5.0.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 (162) hide show
  1. package/README.md +72 -60
  2. package/dist/cli/commands/update.js +9 -10
  3. package/dist/templates/agents/agents.md +14 -8
  4. package/dist/templates/agents/copilot-instructions.md +1 -1
  5. package/dist/templates/instructions/core/verification.md +2 -2
  6. package/dist/templates/slash-commands/_canonical/archive.md +83 -121
  7. package/dist/templates/slash-commands/_canonical/execute.md +32 -42
  8. package/dist/templates/slash-commands/_canonical/implement.md +32 -44
  9. package/dist/templates/slash-commands/_canonical/improve.md +14 -53
  10. package/dist/templates/slash-commands/_canonical/start.md +1 -1
  11. package/dist/templates/slash-commands/_canonical/summarize.md +8 -8
  12. package/dist/templates/slash-commands/_components/agent-protocols/cli-reference.md +84 -180
  13. package/dist/templates/slash-commands/_components/agent-protocols/error-handling.md +2 -2
  14. package/dist/templates/slash-commands/_components/agent-protocols/file-formats.md +41 -59
  15. package/dist/templates/slash-commands/_components/agent-protocols/state-assertion.md +1 -1
  16. package/dist/templates/slash-commands/_components/references/intent-types.md +1 -1
  17. package/dist/templates/slash-commands/_components/sections/file-saving-protocol.md +20 -27
  18. package/dist/templates/slash-commands/_components/sections/pattern-visibility.md +29 -46
  19. package/dist/templates/slash-commands/_components/troubleshooting/file-not-saved.md +4 -5
  20. package/dist/types/config.d.ts +57 -0
  21. package/dist/utils/legacy-command-cleanup.js +31 -4
  22. package/package.json +5 -4
  23. package/dist/cli/commands/analyze.d.ts +0 -17
  24. package/dist/cli/commands/analyze.js +0 -133
  25. package/dist/cli/commands/archive.d.ts +0 -36
  26. package/dist/cli/commands/archive.js +0 -266
  27. package/dist/cli/commands/deep.d.ts +0 -17
  28. package/dist/cli/commands/deep.js +0 -170
  29. package/dist/cli/commands/execute.d.ts +0 -15
  30. package/dist/cli/commands/execute.js +0 -168
  31. package/dist/cli/commands/fast.d.ts +0 -18
  32. package/dist/cli/commands/fast.js +0 -219
  33. package/dist/cli/commands/implement.d.ts +0 -24
  34. package/dist/cli/commands/implement.js +0 -289
  35. package/dist/cli/commands/improve.d.ts +0 -32
  36. package/dist/cli/commands/improve.js +0 -250
  37. package/dist/cli/commands/list.d.ts +0 -17
  38. package/dist/cli/commands/list.js +0 -217
  39. package/dist/cli/commands/plan.d.ts +0 -21
  40. package/dist/cli/commands/plan.js +0 -297
  41. package/dist/cli/commands/prd.d.ts +0 -24
  42. package/dist/cli/commands/prd.js +0 -321
  43. package/dist/cli/commands/prompts/clear.d.ts +0 -16
  44. package/dist/cli/commands/prompts/clear.js +0 -222
  45. package/dist/cli/commands/prompts/list.d.ts +0 -8
  46. package/dist/cli/commands/prompts/list.js +0 -88
  47. package/dist/cli/commands/show.d.ts +0 -21
  48. package/dist/cli/commands/show.js +0 -191
  49. package/dist/cli/commands/start.d.ts +0 -40
  50. package/dist/cli/commands/start.js +0 -210
  51. package/dist/cli/commands/summarize.d.ts +0 -17
  52. package/dist/cli/commands/summarize.js +0 -196
  53. package/dist/cli/commands/task-complete.d.ts +0 -27
  54. package/dist/cli/commands/task-complete.js +0 -269
  55. package/dist/cli/commands/verify.d.ts +0 -28
  56. package/dist/cli/commands/verify.js +0 -349
  57. package/dist/core/archive-manager.d.ts +0 -100
  58. package/dist/core/archive-manager.js +0 -302
  59. package/dist/core/basic-checklist-generator.d.ts +0 -35
  60. package/dist/core/basic-checklist-generator.js +0 -344
  61. package/dist/core/checklist-parser.d.ts +0 -48
  62. package/dist/core/checklist-parser.js +0 -238
  63. package/dist/core/config-manager.d.ts +0 -149
  64. package/dist/core/config-manager.js +0 -230
  65. package/dist/core/conversation-analyzer.d.ts +0 -86
  66. package/dist/core/conversation-analyzer.js +0 -387
  67. package/dist/core/conversation-quality-tracker.d.ts +0 -81
  68. package/dist/core/conversation-quality-tracker.js +0 -195
  69. package/dist/core/git-manager.d.ts +0 -126
  70. package/dist/core/git-manager.js +0 -282
  71. package/dist/core/intelligence/confidence-calculator.d.ts +0 -93
  72. package/dist/core/intelligence/confidence-calculator.js +0 -124
  73. package/dist/core/intelligence/index.d.ts +0 -11
  74. package/dist/core/intelligence/index.js +0 -15
  75. package/dist/core/intelligence/intent-detector.d.ts +0 -54
  76. package/dist/core/intelligence/intent-detector.js +0 -723
  77. package/dist/core/intelligence/pattern-library.d.ts +0 -104
  78. package/dist/core/intelligence/pattern-library.js +0 -339
  79. package/dist/core/intelligence/patterns/actionability-enhancer.d.ts +0 -27
  80. package/dist/core/intelligence/patterns/actionability-enhancer.js +0 -192
  81. package/dist/core/intelligence/patterns/alternative-phrasing-generator.d.ts +0 -29
  82. package/dist/core/intelligence/patterns/alternative-phrasing-generator.js +0 -239
  83. package/dist/core/intelligence/patterns/ambiguity-detector.d.ts +0 -22
  84. package/dist/core/intelligence/patterns/ambiguity-detector.js +0 -196
  85. package/dist/core/intelligence/patterns/assumption-explicitizer.d.ts +0 -30
  86. package/dist/core/intelligence/patterns/assumption-explicitizer.js +0 -296
  87. package/dist/core/intelligence/patterns/base-pattern.d.ts +0 -192
  88. package/dist/core/intelligence/patterns/base-pattern.js +0 -103
  89. package/dist/core/intelligence/patterns/completeness-validator.d.ts +0 -27
  90. package/dist/core/intelligence/patterns/completeness-validator.js +0 -221
  91. package/dist/core/intelligence/patterns/conciseness-filter.d.ts +0 -20
  92. package/dist/core/intelligence/patterns/conciseness-filter.js +0 -92
  93. package/dist/core/intelligence/patterns/context-precision.d.ts +0 -32
  94. package/dist/core/intelligence/patterns/context-precision.js +0 -389
  95. package/dist/core/intelligence/patterns/conversation-summarizer.d.ts +0 -30
  96. package/dist/core/intelligence/patterns/conversation-summarizer.js +0 -277
  97. package/dist/core/intelligence/patterns/dependency-identifier.d.ts +0 -23
  98. package/dist/core/intelligence/patterns/dependency-identifier.js +0 -166
  99. package/dist/core/intelligence/patterns/domain-context-enricher.d.ts +0 -21
  100. package/dist/core/intelligence/patterns/domain-context-enricher.js +0 -198
  101. package/dist/core/intelligence/patterns/edge-case-identifier.d.ts +0 -30
  102. package/dist/core/intelligence/patterns/edge-case-identifier.js +0 -269
  103. package/dist/core/intelligence/patterns/error-tolerance-enhancer.d.ts +0 -22
  104. package/dist/core/intelligence/patterns/error-tolerance-enhancer.js +0 -179
  105. package/dist/core/intelligence/patterns/implicit-requirement-extractor.d.ts +0 -24
  106. package/dist/core/intelligence/patterns/implicit-requirement-extractor.js +0 -259
  107. package/dist/core/intelligence/patterns/objective-clarifier.d.ts +0 -22
  108. package/dist/core/intelligence/patterns/objective-clarifier.js +0 -126
  109. package/dist/core/intelligence/patterns/output-format-enforcer.d.ts +0 -22
  110. package/dist/core/intelligence/patterns/output-format-enforcer.js +0 -151
  111. package/dist/core/intelligence/patterns/prd-structure-enforcer.d.ts +0 -23
  112. package/dist/core/intelligence/patterns/prd-structure-enforcer.js +0 -183
  113. package/dist/core/intelligence/patterns/prerequisite-identifier.d.ts +0 -23
  114. package/dist/core/intelligence/patterns/prerequisite-identifier.js +0 -221
  115. package/dist/core/intelligence/patterns/requirement-prioritizer.d.ts +0 -24
  116. package/dist/core/intelligence/patterns/requirement-prioritizer.js +0 -134
  117. package/dist/core/intelligence/patterns/scope-definer.d.ts +0 -26
  118. package/dist/core/intelligence/patterns/scope-definer.js +0 -236
  119. package/dist/core/intelligence/patterns/step-decomposer.d.ts +0 -31
  120. package/dist/core/intelligence/patterns/step-decomposer.js +0 -242
  121. package/dist/core/intelligence/patterns/structure-organizer.d.ts +0 -31
  122. package/dist/core/intelligence/patterns/structure-organizer.js +0 -218
  123. package/dist/core/intelligence/patterns/success-criteria-enforcer.d.ts +0 -22
  124. package/dist/core/intelligence/patterns/success-criteria-enforcer.js +0 -165
  125. package/dist/core/intelligence/patterns/success-metrics-enforcer.d.ts +0 -24
  126. package/dist/core/intelligence/patterns/success-metrics-enforcer.js +0 -165
  127. package/dist/core/intelligence/patterns/technical-context-enricher.d.ts +0 -25
  128. package/dist/core/intelligence/patterns/technical-context-enricher.js +0 -165
  129. package/dist/core/intelligence/patterns/topic-coherence-analyzer.d.ts +0 -26
  130. package/dist/core/intelligence/patterns/topic-coherence-analyzer.js +0 -300
  131. package/dist/core/intelligence/patterns/user-persona-enricher.d.ts +0 -24
  132. package/dist/core/intelligence/patterns/user-persona-enricher.js +0 -141
  133. package/dist/core/intelligence/patterns/validation-checklist-creator.d.ts +0 -31
  134. package/dist/core/intelligence/patterns/validation-checklist-creator.js +0 -242
  135. package/dist/core/intelligence/quality-assessor.d.ts +0 -51
  136. package/dist/core/intelligence/quality-assessor.js +0 -505
  137. package/dist/core/intelligence/types.d.ts +0 -111
  138. package/dist/core/intelligence/types.js +0 -3
  139. package/dist/core/intelligence/universal-optimizer.d.ts +0 -84
  140. package/dist/core/intelligence/universal-optimizer.js +0 -371
  141. package/dist/core/prd-generator.d.ts +0 -76
  142. package/dist/core/prd-generator.js +0 -173
  143. package/dist/core/prompt-manager.d.ts +0 -110
  144. package/dist/core/prompt-manager.js +0 -274
  145. package/dist/core/prompt-optimizer.d.ts +0 -268
  146. package/dist/core/prompt-optimizer.js +0 -959
  147. package/dist/core/question-engine.d.ts +0 -167
  148. package/dist/core/question-engine.js +0 -356
  149. package/dist/core/session-manager.d.ts +0 -139
  150. package/dist/core/session-manager.js +0 -365
  151. package/dist/core/task-manager.d.ts +0 -211
  152. package/dist/core/task-manager.js +0 -981
  153. package/dist/core/verification-hooks.d.ts +0 -67
  154. package/dist/core/verification-hooks.js +0 -309
  155. package/dist/core/verification-manager.d.ts +0 -107
  156. package/dist/core/verification-manager.js +0 -415
  157. package/dist/index 2.js +0 -13
  158. package/dist/index.d 2.ts +0 -4
  159. package/dist/types/session.d.ts +0 -78
  160. package/dist/types/session.js +0 -8
  161. package/dist/types/verification.d.ts +0 -205
  162. package/dist/types/verification.js +0 -9
@@ -1,250 +0,0 @@
1
- import { Command, Args, Flags } from '@oclif/core';
2
- import chalk from 'chalk';
3
- import inquirer from 'inquirer';
4
- import { UniversalOptimizer } from '../../core/intelligence/index.js';
5
- import { PromptManager } from '../../core/prompt-manager.js';
6
- /**
7
- * v4.11: Unified improve command with smart depth auto-detection
8
- *
9
- * Replaces the old fast/deep commands with intelligent depth selection:
10
- * - Quality score >= 75: auto-comprehensive
11
- * - Quality score 60-74: ask user (borderline)
12
- * - Quality score < 60: auto-standard
13
- *
14
- * Users can override with --comprehensive or --standard flags.
15
- */
16
- export default class Improve extends Command {
17
- static description = 'Improve a prompt with smart quality-based depth selection (replaces fast/deep)';
18
- static examples = [
19
- '<%= config.bin %> <%= command.id %> "Create a login page"',
20
- '<%= config.bin %> <%= command.id %> "Build an API for user management" --comprehensive',
21
- '<%= config.bin %> <%= command.id %> "Fix the button styling" --standard',
22
- '<%= config.bin %> <%= command.id %> "Design a notification system" --analysis-only',
23
- ];
24
- static flags = {
25
- comprehensive: Flags.boolean({
26
- char: 'c',
27
- description: 'Force comprehensive depth (alternative approaches, edge cases, validation)',
28
- default: false,
29
- }),
30
- standard: Flags.boolean({
31
- char: 's',
32
- description: 'Force standard depth (quick improvements)',
33
- default: false,
34
- }),
35
- 'analysis-only': Flags.boolean({
36
- description: 'Show only quality analysis without improved prompt',
37
- default: false,
38
- }),
39
- };
40
- static args = {
41
- prompt: Args.string({
42
- description: 'The prompt to improve',
43
- required: true,
44
- }),
45
- };
46
- async run() {
47
- const { args, flags } = await this.parse(Improve);
48
- if (!args.prompt || args.prompt.trim().length === 0) {
49
- console.log(chalk.red('\n✗ Please provide a prompt to improve\n'));
50
- console.log(chalk.gray('Example:'), chalk.cyan('clavix improve "Create a login page"'));
51
- return;
52
- }
53
- // Determine depth level
54
- let depthLevel;
55
- if (flags.comprehensive && flags.standard) {
56
- console.log(chalk.yellow('\n⚠️ Cannot use both --comprehensive and --standard\n'));
57
- console.log(chalk.gray('Using smart auto-detection instead...\n'));
58
- depthLevel = await this.autoDetectDepth(args.prompt);
59
- }
60
- else if (flags.comprehensive) {
61
- depthLevel = 'comprehensive';
62
- console.log(chalk.bold.cyan('\n🔍 Performing comprehensive analysis...\n'));
63
- console.log(chalk.gray('This may take up to 15 seconds for thorough exploration\n'));
64
- }
65
- else if (flags.standard) {
66
- depthLevel = 'standard';
67
- console.log(chalk.bold.cyan('\n🔍 Performing standard analysis...\n'));
68
- }
69
- else {
70
- depthLevel = await this.autoDetectDepth(args.prompt);
71
- }
72
- // Run optimization
73
- const optimizer = new UniversalOptimizer();
74
- const result = await optimizer.optimize(args.prompt, 'improve', { depthLevel });
75
- // Handle --analysis-only flag
76
- if (flags['analysis-only']) {
77
- this.displayAnalysisOnly(result, depthLevel);
78
- return;
79
- }
80
- // Display full output
81
- this.displayOutput(result, depthLevel);
82
- // Save prompt to file system
83
- await this.savePrompt(result, depthLevel);
84
- }
85
- /**
86
- * v4.11: Smart depth auto-detection based on quality score
87
- */
88
- async autoDetectDepth(prompt) {
89
- console.log(chalk.bold.cyan('\n🔍 Analyzing prompt quality...\n'));
90
- // Quick analysis to determine depth
91
- const optimizer = new UniversalOptimizer();
92
- const quickResult = await optimizer.optimize(prompt, 'improve', { depthLevel: 'standard' });
93
- const qualityScore = quickResult.quality.overall;
94
- // v4.11 thresholds
95
- if (qualityScore >= 75) {
96
- // High quality - recommend comprehensive for extra polish
97
- console.log(chalk.cyan(`Quality score: ${qualityScore.toFixed(0)}% - Recommending comprehensive depth\n`));
98
- return 'comprehensive';
99
- }
100
- else if (qualityScore >= 60) {
101
- // Borderline - ask user
102
- console.log(chalk.yellow(`Quality score: ${qualityScore.toFixed(0)}% - Borderline quality\n`));
103
- const { choice } = await inquirer.prompt([
104
- {
105
- type: 'list',
106
- name: 'choice',
107
- message: 'Choose analysis depth:',
108
- choices: [
109
- {
110
- name: 'Comprehensive (alternative approaches, edge cases, validation)',
111
- value: 'comprehensive',
112
- },
113
- { name: 'Standard (quick improvements)', value: 'standard' },
114
- ],
115
- },
116
- ]);
117
- console.log();
118
- return choice;
119
- }
120
- else {
121
- // Low quality - standard is fine, comprehensive would add noise
122
- console.log(chalk.cyan(`Quality score: ${qualityScore.toFixed(0)}% - Using standard depth\n`));
123
- return 'standard';
124
- }
125
- }
126
- displayOutput(result, depthLevel) {
127
- const modeLabel = depthLevel === 'comprehensive' ? 'Comprehensive' : 'Standard';
128
- console.log(chalk.bold.cyan(`🔍 ${modeLabel} Analysis Complete\n`));
129
- // Intent Analysis
130
- console.log(chalk.bold.cyan('🎯 Intent Analysis:\n'));
131
- console.log(chalk.cyan(` Type: ${result.intent.primaryIntent}`));
132
- console.log(chalk.cyan(` Confidence: ${result.intent.confidence}%`));
133
- if (depthLevel === 'comprehensive') {
134
- console.log(chalk.cyan(` Characteristics:`));
135
- console.log(chalk.cyan(` • Has code context: ${result.intent.characteristics.hasCodeContext ? 'Yes' : 'No'}`));
136
- console.log(chalk.cyan(` • Technical terms: ${result.intent.characteristics.hasTechnicalTerms ? 'Yes' : 'No'}`));
137
- console.log(chalk.cyan(` • Open-ended: ${result.intent.characteristics.isOpenEnded ? 'Yes' : 'No'}`));
138
- console.log(chalk.cyan(` • Needs structure: ${result.intent.characteristics.needsStructure ? 'Yes' : 'No'}`));
139
- }
140
- console.log();
141
- // Quality Metrics
142
- console.log(chalk.bold('📊 Quality Metrics:\n'));
143
- const getScoreColor = (score) => {
144
- if (score >= 80)
145
- return chalk.green;
146
- if (score >= 60)
147
- return chalk.yellow;
148
- return chalk.red;
149
- };
150
- console.log(getScoreColor(result.quality.clarity)(` Clarity: ${result.quality.clarity.toFixed(0)}%`));
151
- console.log(getScoreColor(result.quality.efficiency)(` Efficiency: ${result.quality.efficiency.toFixed(0)}%`));
152
- console.log(getScoreColor(result.quality.structure)(` Structure: ${result.quality.structure.toFixed(0)}%`));
153
- console.log(getScoreColor(result.quality.completeness)(` Completeness: ${result.quality.completeness.toFixed(0)}%`));
154
- console.log(getScoreColor(result.quality.actionability)(` Actionability: ${result.quality.actionability.toFixed(0)}%`));
155
- console.log(getScoreColor(result.quality.overall).bold(`\n Overall: ${result.quality.overall.toFixed(0)}%\n`));
156
- // Strengths
157
- if (result.quality.strengths.length > 0) {
158
- console.log(chalk.bold.green('✅ Strengths:\n'));
159
- result.quality.strengths.forEach((strength) => {
160
- console.log(chalk.green(` • ${strength}`));
161
- });
162
- console.log();
163
- }
164
- // Improvements Applied
165
- if (result.improvements.length > 0) {
166
- console.log(chalk.bold.magenta('✨ Improvements Applied:\n'));
167
- result.improvements.forEach((improvement) => {
168
- const emoji = improvement.impact === 'high' ? '🔥' : improvement.impact === 'medium' ? '⚡' : '💡';
169
- console.log(chalk.magenta(` ${emoji} ${improvement.description} [${improvement.dimension}]`));
170
- });
171
- console.log();
172
- }
173
- // Enhanced Prompt
174
- console.log(chalk.bold.cyan('✨ Enhanced Prompt:\n'));
175
- console.log(chalk.dim('─'.repeat(80)));
176
- console.log(result.enhanced);
177
- console.log(chalk.dim('─'.repeat(80)));
178
- console.log();
179
- // Patterns Applied (comprehensive mode)
180
- if (depthLevel === 'comprehensive' && result.appliedPatterns.length > 0) {
181
- console.log(chalk.bold.blue('🧩 Patterns Applied:\n'));
182
- result.appliedPatterns.forEach((pattern) => {
183
- console.log(chalk.blue(` • ${pattern.name}: ${pattern.description}`));
184
- });
185
- console.log();
186
- }
187
- // Remaining Issues
188
- if (result.quality.remainingIssues && result.quality.remainingIssues.length > 0) {
189
- console.log(chalk.bold.yellow('⚠️ Remaining Areas for Improvement:\n'));
190
- result.quality.remainingIssues.forEach((issue) => {
191
- console.log(chalk.yellow(` • ${issue}`));
192
- });
193
- console.log();
194
- }
195
- // Recommendation
196
- const recommendation = new UniversalOptimizer().getRecommendation(result);
197
- if (recommendation) {
198
- console.log(chalk.blue.bold('💡 Recommendation:'));
199
- console.log(chalk.blue(` ${recommendation}\n`));
200
- }
201
- console.log(chalk.gray(`⚡ Processed in ${result.processingTimeMs}ms\n`));
202
- if (depthLevel === 'comprehensive') {
203
- console.log(chalk.gray('💡 Tip: The enhanced prompt includes alternative approaches, edge cases, and validation checklist\n'));
204
- }
205
- else {
206
- console.log(chalk.gray('💡 Tip: Copy the enhanced prompt above and use it with your AI agent\n'));
207
- }
208
- }
209
- displayAnalysisOnly(result, depthLevel) {
210
- console.log(chalk.bold.cyan('🎯 Intent Analysis:\n'));
211
- console.log(chalk.cyan(` Type: ${result.intent.primaryIntent}`));
212
- console.log(chalk.cyan(` Confidence: ${result.intent.confidence}%`));
213
- console.log(chalk.cyan(` Depth: ${depthLevel}`));
214
- if (depthLevel === 'comprehensive') {
215
- console.log(chalk.cyan(` Characteristics:`));
216
- console.log(chalk.cyan(` • Has code context: ${result.intent.characteristics.hasCodeContext ? 'Yes' : 'No'}`));
217
- console.log(chalk.cyan(` • Technical terms: ${result.intent.characteristics.hasTechnicalTerms ? 'Yes' : 'No'}`));
218
- console.log(chalk.cyan(` • Open-ended: ${result.intent.characteristics.isOpenEnded ? 'Yes' : 'No'}`));
219
- console.log(chalk.cyan(` • Needs structure: ${result.intent.characteristics.needsStructure ? 'Yes' : 'No'}`));
220
- }
221
- console.log();
222
- console.log(chalk.bold('📊 Quality Scores:\n'));
223
- console.log(chalk.white(` Clarity: ${result.quality.clarity.toFixed(0)}%`));
224
- console.log(chalk.white(` Efficiency: ${result.quality.efficiency.toFixed(0)}%`));
225
- console.log(chalk.white(` Structure: ${result.quality.structure.toFixed(0)}%`));
226
- console.log(chalk.white(` Completeness: ${result.quality.completeness.toFixed(0)}%`));
227
- console.log(chalk.white(` Actionability: ${result.quality.actionability.toFixed(0)}%`));
228
- console.log(chalk.bold(`\n Overall: ${result.quality.overall.toFixed(0)}%\n`));
229
- if (result.quality.strengths.length > 0) {
230
- console.log(chalk.bold.green('✅ Strengths:\n'));
231
- result.quality.strengths.forEach((strength) => {
232
- console.log(chalk.green(` • ${strength}`));
233
- });
234
- console.log();
235
- }
236
- }
237
- async savePrompt(result, depthLevel) {
238
- try {
239
- const manager = new PromptManager();
240
- const content = result.enhanced;
241
- await manager.savePrompt(content, depthLevel, result.original);
242
- console.log(chalk.gray(`💾 Saved prompt to .clavix/outputs/prompts/\n`));
243
- }
244
- catch (error) {
245
- console.log(chalk.yellow('⚠️ Could not save prompt to file system'));
246
- console.log(chalk.gray('Error: ' + (error instanceof Error ? error.message : 'Unknown error')));
247
- }
248
- }
249
- }
250
- //# sourceMappingURL=improve.js.map
@@ -1,17 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class List extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- sessions: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- outputs: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- archived: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
- };
12
- run(): Promise<void>;
13
- private listSessions;
14
- private listOutputs;
15
- private listArchivedOutputs;
16
- }
17
- //# sourceMappingURL=list.d.ts.map
@@ -1,217 +0,0 @@
1
- import { Command, Flags } from '@oclif/core';
2
- import chalk from 'chalk';
3
- import fs from 'fs-extra';
4
- import * as path from 'path';
5
- import { SessionManager } from '../../core/session-manager.js';
6
- export default class List extends Command {
7
- static description = 'List sessions and outputs';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %>',
10
- '<%= config.bin %> <%= command.id %> --sessions',
11
- '<%= config.bin %> <%= command.id %> --outputs',
12
- '<%= config.bin %> <%= command.id %> --project my-feature',
13
- ];
14
- static flags = {
15
- sessions: Flags.boolean({
16
- char: 's',
17
- description: 'List only sessions',
18
- default: false,
19
- }),
20
- outputs: Flags.boolean({
21
- char: 'o',
22
- description: 'List only outputs',
23
- default: false,
24
- }),
25
- archived: Flags.boolean({
26
- char: 'a',
27
- description: 'Include archived projects in outputs',
28
- default: false,
29
- }),
30
- project: Flags.string({
31
- char: 'p',
32
- description: 'Filter by project name',
33
- }),
34
- limit: Flags.integer({
35
- char: 'l',
36
- description: 'Limit number of results',
37
- default: 20,
38
- }),
39
- };
40
- async run() {
41
- const { flags } = await this.parse(List);
42
- const clavixDir = path.join(process.cwd(), '.clavix');
43
- if (!fs.existsSync(clavixDir)) {
44
- this.error(chalk.red('No .clavix directory found.') +
45
- '\n' +
46
- chalk.yellow('Run ') +
47
- chalk.cyan('clavix init') +
48
- chalk.yellow(' to initialize Clavix in this project.'));
49
- }
50
- // If no specific flag is set, show both
51
- const showSessions = flags.sessions || (!flags.outputs && !flags.sessions);
52
- const showOutputs = flags.outputs || (!flags.outputs && !flags.sessions);
53
- if (showSessions) {
54
- await this.listSessions(flags.project, flags.limit);
55
- }
56
- if (showOutputs) {
57
- if (showSessions) {
58
- this.log(''); // Add spacing
59
- }
60
- await this.listOutputs(flags.project, flags.limit, flags.archived);
61
- }
62
- }
63
- async listSessions(projectFilter, limit) {
64
- this.log(chalk.bold.cyan('📋 Sessions\n'));
65
- const sessionManager = new SessionManager();
66
- const sessions = await sessionManager.listSessions();
67
- if (sessions.length === 0) {
68
- this.log(chalk.gray(' No sessions found.'));
69
- this.log(chalk.gray(' Run ') + chalk.cyan('clavix start') + chalk.gray(' to create a new session.'));
70
- return;
71
- }
72
- // Filter by project if specified
73
- let filteredSessions = sessions;
74
- if (projectFilter) {
75
- filteredSessions = sessions.filter(s => s.projectName?.toLowerCase().includes(projectFilter.toLowerCase()));
76
- }
77
- // Sort by updated date (most recent first)
78
- filteredSessions.sort((a, b) => new Date(b.updated).getTime() - new Date(a.updated).getTime());
79
- // Apply limit
80
- if (limit) {
81
- filteredSessions = filteredSessions.slice(0, limit);
82
- }
83
- if (filteredSessions.length === 0) {
84
- this.log(chalk.gray(` No sessions found matching "${projectFilter}".`));
85
- return;
86
- }
87
- // Display sessions in a table-like format
88
- filteredSessions.forEach((session, index) => {
89
- const isActive = session.status === 'active';
90
- const statusIcon = isActive ? '🟢' : '⚪';
91
- const projectName = session.projectName || 'untitled';
92
- const created = new Date(session.created).toLocaleDateString();
93
- const updated = new Date(session.updated).toLocaleString();
94
- const messageCount = session.messageCount || 0;
95
- this.log(` ${statusIcon} ${chalk.bold(projectName)} ${chalk.gray(`(${session.id})`)}` +
96
- `\n ${chalk.gray('Created:')} ${created} ${chalk.gray('│')} ` +
97
- `${chalk.gray('Updated:')} ${updated}` +
98
- `\n ${chalk.gray('Messages:')} ${messageCount} ${chalk.gray('│')} ` +
99
- `${chalk.gray('Status:')} ${isActive ? chalk.green('active') : chalk.gray('completed')}` +
100
- (index < filteredSessions.length - 1 ? '\n' : ''));
101
- });
102
- this.log('');
103
- this.log(chalk.gray(` Showing ${filteredSessions.length} of ${sessions.length} sessions`));
104
- if (sessions.length > filteredSessions.length && !limit) {
105
- this.log(chalk.gray(` Use ${chalk.cyan('--limit N')} to show more results`));
106
- }
107
- }
108
- async listOutputs(projectFilter, limit, includeArchived = false) {
109
- this.log(chalk.bold.cyan('📁 Outputs\n'));
110
- const outputsDir = path.join(process.cwd(), '.clavix', 'outputs');
111
- if (!fs.existsSync(outputsDir)) {
112
- this.log(chalk.gray(' No outputs found.'));
113
- this.log(chalk.gray(' Run ') + chalk.cyan('clavix prd') + chalk.gray(' or ') + chalk.cyan('clavix summarize') + chalk.gray(' to generate outputs.'));
114
- return;
115
- }
116
- const projectDirs = fs.readdirSync(outputsDir).filter(name => {
117
- const fullPath = path.join(outputsDir, name);
118
- // Skip archive directory in main listing
119
- if (name === 'archive' && !includeArchived) {
120
- return false;
121
- }
122
- return fs.statSync(fullPath).isDirectory();
123
- });
124
- if (projectDirs.length === 0) {
125
- this.log(chalk.gray(' No outputs found.'));
126
- return;
127
- }
128
- // Filter by project if specified
129
- let filteredDirs = projectDirs;
130
- if (projectFilter) {
131
- filteredDirs = projectDirs.filter(dir => dir.toLowerCase().includes(projectFilter.toLowerCase()));
132
- }
133
- // Sort by modification time (most recent first)
134
- filteredDirs.sort((a, b) => {
135
- const aPath = path.join(outputsDir, a);
136
- const bPath = path.join(outputsDir, b);
137
- return fs.statSync(bPath).mtime.getTime() - fs.statSync(aPath).mtime.getTime();
138
- });
139
- // Apply limit
140
- if (limit) {
141
- filteredDirs = filteredDirs.slice(0, limit);
142
- }
143
- if (filteredDirs.length === 0) {
144
- this.log(chalk.gray(` No outputs found matching "${projectFilter}".`));
145
- return;
146
- }
147
- // Display outputs
148
- filteredDirs.forEach((projectDir, index) => {
149
- const projectPath = path.join(outputsDir, projectDir);
150
- const files = fs.readdirSync(projectPath).filter(f => f.endsWith('.md'));
151
- const modified = fs.statSync(projectPath).mtime.toLocaleDateString();
152
- this.log(` 📄 ${chalk.bold(projectDir)}` +
153
- `\n ${chalk.gray('Path:')} ${chalk.dim(path.relative(process.cwd(), projectPath))}` +
154
- `\n ${chalk.gray('Files:')} ${files.join(', ')}` +
155
- `\n ${chalk.gray('Modified:')} ${modified}` +
156
- (index < filteredDirs.length - 1 ? '\n' : ''));
157
- });
158
- this.log('');
159
- this.log(chalk.gray(` Showing ${filteredDirs.length} of ${projectDirs.length} output directories`));
160
- if (projectDirs.length > filteredDirs.length && !limit) {
161
- this.log(chalk.gray(` Use ${chalk.cyan('--limit N')} to show more results`));
162
- }
163
- // Show archived projects if flag is set
164
- if (includeArchived) {
165
- await this.listArchivedOutputs(projectFilter, limit);
166
- }
167
- }
168
- async listArchivedOutputs(projectFilter, limit) {
169
- const archiveDir = path.join(process.cwd(), '.clavix', 'outputs', 'archive');
170
- if (!fs.existsSync(archiveDir)) {
171
- return; // No archived projects
172
- }
173
- const archivedDirs = fs.readdirSync(archiveDir).filter(name => {
174
- const fullPath = path.join(archiveDir, name);
175
- return fs.statSync(fullPath).isDirectory();
176
- });
177
- if (archivedDirs.length === 0) {
178
- return; // No archived projects
179
- }
180
- // Filter by project if specified
181
- let filteredDirs = archivedDirs;
182
- if (projectFilter) {
183
- filteredDirs = archivedDirs.filter(dir => dir.toLowerCase().includes(projectFilter.toLowerCase()));
184
- }
185
- // Sort by modification time (most recent first)
186
- filteredDirs.sort((a, b) => {
187
- const aPath = path.join(archiveDir, a);
188
- const bPath = path.join(archiveDir, b);
189
- return fs.statSync(bPath).mtime.getTime() - fs.statSync(aPath).mtime.getTime();
190
- });
191
- // Apply limit
192
- if (limit) {
193
- filteredDirs = filteredDirs.slice(0, limit);
194
- }
195
- if (filteredDirs.length === 0) {
196
- return; // No matching archived projects
197
- }
198
- // Display archived section header
199
- this.log('');
200
- this.log(chalk.bold.cyan('📦 Archived Outputs\n'));
201
- // Display archived outputs
202
- filteredDirs.forEach((projectDir, index) => {
203
- const projectPath = path.join(archiveDir, projectDir);
204
- const files = fs.readdirSync(projectPath).filter(f => f.endsWith('.md'));
205
- const modified = fs.statSync(projectPath).mtime.toLocaleDateString();
206
- this.log(` 📦 ${chalk.bold(projectDir)} ${chalk.gray('(archived)')}` +
207
- `\n ${chalk.gray('Path:')} ${chalk.dim(path.relative(process.cwd(), projectPath))}` +
208
- `\n ${chalk.gray('Files:')} ${files.join(', ')}` +
209
- `\n ${chalk.gray('Modified:')} ${modified}` +
210
- (index < filteredDirs.length - 1 ? '\n' : ''));
211
- });
212
- this.log('');
213
- this.log(chalk.gray(` Showing ${filteredDirs.length} of ${archivedDirs.length} archived directories`));
214
- this.log(chalk.gray(` Use ${chalk.cyan('clavix archive --restore <project>')} to restore a project`));
215
- }
216
- }
217
- //# sourceMappingURL=list.js.map
@@ -1,21 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class Plan extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
- 'prd-path': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
- session: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
- 'active-session': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- source: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
- 'max-tasks': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- overwrite: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- };
14
- run(): Promise<void>;
15
- private validateSessionFlags;
16
- private prepareArtifactsFromSession;
17
- private resolveProjectDirectory;
18
- private sanitizeProjectName;
19
- private isInteractive;
20
- }
21
- //# sourceMappingURL=plan.d.ts.map