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.
- package/README.md +72 -60
- package/dist/cli/commands/update.js +9 -10
- package/dist/templates/agents/agents.md +14 -8
- package/dist/templates/agents/copilot-instructions.md +1 -1
- package/dist/templates/instructions/core/verification.md +2 -2
- package/dist/templates/slash-commands/_canonical/archive.md +83 -121
- package/dist/templates/slash-commands/_canonical/execute.md +32 -42
- package/dist/templates/slash-commands/_canonical/implement.md +32 -44
- package/dist/templates/slash-commands/_canonical/improve.md +14 -53
- package/dist/templates/slash-commands/_canonical/start.md +1 -1
- package/dist/templates/slash-commands/_canonical/summarize.md +8 -8
- package/dist/templates/slash-commands/_components/agent-protocols/cli-reference.md +84 -180
- package/dist/templates/slash-commands/_components/agent-protocols/error-handling.md +2 -2
- package/dist/templates/slash-commands/_components/agent-protocols/file-formats.md +41 -59
- package/dist/templates/slash-commands/_components/agent-protocols/state-assertion.md +1 -1
- package/dist/templates/slash-commands/_components/references/intent-types.md +1 -1
- package/dist/templates/slash-commands/_components/sections/file-saving-protocol.md +20 -27
- package/dist/templates/slash-commands/_components/sections/pattern-visibility.md +29 -46
- package/dist/templates/slash-commands/_components/troubleshooting/file-not-saved.md +4 -5
- package/dist/types/config.d.ts +57 -0
- package/dist/utils/legacy-command-cleanup.js +31 -4
- package/package.json +5 -4
- package/dist/cli/commands/analyze.d.ts +0 -17
- package/dist/cli/commands/analyze.js +0 -133
- package/dist/cli/commands/archive.d.ts +0 -36
- package/dist/cli/commands/archive.js +0 -266
- package/dist/cli/commands/deep.d.ts +0 -17
- package/dist/cli/commands/deep.js +0 -170
- package/dist/cli/commands/execute.d.ts +0 -15
- package/dist/cli/commands/execute.js +0 -168
- package/dist/cli/commands/fast.d.ts +0 -18
- package/dist/cli/commands/fast.js +0 -219
- package/dist/cli/commands/implement.d.ts +0 -24
- package/dist/cli/commands/implement.js +0 -289
- package/dist/cli/commands/improve.d.ts +0 -32
- package/dist/cli/commands/improve.js +0 -250
- package/dist/cli/commands/list.d.ts +0 -17
- package/dist/cli/commands/list.js +0 -217
- package/dist/cli/commands/plan.d.ts +0 -21
- package/dist/cli/commands/plan.js +0 -297
- package/dist/cli/commands/prd.d.ts +0 -24
- package/dist/cli/commands/prd.js +0 -321
- package/dist/cli/commands/prompts/clear.d.ts +0 -16
- package/dist/cli/commands/prompts/clear.js +0 -222
- package/dist/cli/commands/prompts/list.d.ts +0 -8
- package/dist/cli/commands/prompts/list.js +0 -88
- package/dist/cli/commands/show.d.ts +0 -21
- package/dist/cli/commands/show.js +0 -191
- package/dist/cli/commands/start.d.ts +0 -40
- package/dist/cli/commands/start.js +0 -210
- package/dist/cli/commands/summarize.d.ts +0 -17
- package/dist/cli/commands/summarize.js +0 -196
- package/dist/cli/commands/task-complete.d.ts +0 -27
- package/dist/cli/commands/task-complete.js +0 -269
- package/dist/cli/commands/verify.d.ts +0 -28
- package/dist/cli/commands/verify.js +0 -349
- package/dist/core/archive-manager.d.ts +0 -100
- package/dist/core/archive-manager.js +0 -302
- package/dist/core/basic-checklist-generator.d.ts +0 -35
- package/dist/core/basic-checklist-generator.js +0 -344
- package/dist/core/checklist-parser.d.ts +0 -48
- package/dist/core/checklist-parser.js +0 -238
- package/dist/core/config-manager.d.ts +0 -149
- package/dist/core/config-manager.js +0 -230
- package/dist/core/conversation-analyzer.d.ts +0 -86
- package/dist/core/conversation-analyzer.js +0 -387
- package/dist/core/conversation-quality-tracker.d.ts +0 -81
- package/dist/core/conversation-quality-tracker.js +0 -195
- package/dist/core/git-manager.d.ts +0 -126
- package/dist/core/git-manager.js +0 -282
- package/dist/core/intelligence/confidence-calculator.d.ts +0 -93
- package/dist/core/intelligence/confidence-calculator.js +0 -124
- package/dist/core/intelligence/index.d.ts +0 -11
- package/dist/core/intelligence/index.js +0 -15
- package/dist/core/intelligence/intent-detector.d.ts +0 -54
- package/dist/core/intelligence/intent-detector.js +0 -723
- package/dist/core/intelligence/pattern-library.d.ts +0 -104
- package/dist/core/intelligence/pattern-library.js +0 -339
- package/dist/core/intelligence/patterns/actionability-enhancer.d.ts +0 -27
- package/dist/core/intelligence/patterns/actionability-enhancer.js +0 -192
- package/dist/core/intelligence/patterns/alternative-phrasing-generator.d.ts +0 -29
- package/dist/core/intelligence/patterns/alternative-phrasing-generator.js +0 -239
- package/dist/core/intelligence/patterns/ambiguity-detector.d.ts +0 -22
- package/dist/core/intelligence/patterns/ambiguity-detector.js +0 -196
- package/dist/core/intelligence/patterns/assumption-explicitizer.d.ts +0 -30
- package/dist/core/intelligence/patterns/assumption-explicitizer.js +0 -296
- package/dist/core/intelligence/patterns/base-pattern.d.ts +0 -192
- package/dist/core/intelligence/patterns/base-pattern.js +0 -103
- package/dist/core/intelligence/patterns/completeness-validator.d.ts +0 -27
- package/dist/core/intelligence/patterns/completeness-validator.js +0 -221
- package/dist/core/intelligence/patterns/conciseness-filter.d.ts +0 -20
- package/dist/core/intelligence/patterns/conciseness-filter.js +0 -92
- package/dist/core/intelligence/patterns/context-precision.d.ts +0 -32
- package/dist/core/intelligence/patterns/context-precision.js +0 -389
- package/dist/core/intelligence/patterns/conversation-summarizer.d.ts +0 -30
- package/dist/core/intelligence/patterns/conversation-summarizer.js +0 -277
- package/dist/core/intelligence/patterns/dependency-identifier.d.ts +0 -23
- package/dist/core/intelligence/patterns/dependency-identifier.js +0 -166
- package/dist/core/intelligence/patterns/domain-context-enricher.d.ts +0 -21
- package/dist/core/intelligence/patterns/domain-context-enricher.js +0 -198
- package/dist/core/intelligence/patterns/edge-case-identifier.d.ts +0 -30
- package/dist/core/intelligence/patterns/edge-case-identifier.js +0 -269
- package/dist/core/intelligence/patterns/error-tolerance-enhancer.d.ts +0 -22
- package/dist/core/intelligence/patterns/error-tolerance-enhancer.js +0 -179
- package/dist/core/intelligence/patterns/implicit-requirement-extractor.d.ts +0 -24
- package/dist/core/intelligence/patterns/implicit-requirement-extractor.js +0 -259
- package/dist/core/intelligence/patterns/objective-clarifier.d.ts +0 -22
- package/dist/core/intelligence/patterns/objective-clarifier.js +0 -126
- package/dist/core/intelligence/patterns/output-format-enforcer.d.ts +0 -22
- package/dist/core/intelligence/patterns/output-format-enforcer.js +0 -151
- package/dist/core/intelligence/patterns/prd-structure-enforcer.d.ts +0 -23
- package/dist/core/intelligence/patterns/prd-structure-enforcer.js +0 -183
- package/dist/core/intelligence/patterns/prerequisite-identifier.d.ts +0 -23
- package/dist/core/intelligence/patterns/prerequisite-identifier.js +0 -221
- package/dist/core/intelligence/patterns/requirement-prioritizer.d.ts +0 -24
- package/dist/core/intelligence/patterns/requirement-prioritizer.js +0 -134
- package/dist/core/intelligence/patterns/scope-definer.d.ts +0 -26
- package/dist/core/intelligence/patterns/scope-definer.js +0 -236
- package/dist/core/intelligence/patterns/step-decomposer.d.ts +0 -31
- package/dist/core/intelligence/patterns/step-decomposer.js +0 -242
- package/dist/core/intelligence/patterns/structure-organizer.d.ts +0 -31
- package/dist/core/intelligence/patterns/structure-organizer.js +0 -218
- package/dist/core/intelligence/patterns/success-criteria-enforcer.d.ts +0 -22
- package/dist/core/intelligence/patterns/success-criteria-enforcer.js +0 -165
- package/dist/core/intelligence/patterns/success-metrics-enforcer.d.ts +0 -24
- package/dist/core/intelligence/patterns/success-metrics-enforcer.js +0 -165
- package/dist/core/intelligence/patterns/technical-context-enricher.d.ts +0 -25
- package/dist/core/intelligence/patterns/technical-context-enricher.js +0 -165
- package/dist/core/intelligence/patterns/topic-coherence-analyzer.d.ts +0 -26
- package/dist/core/intelligence/patterns/topic-coherence-analyzer.js +0 -300
- package/dist/core/intelligence/patterns/user-persona-enricher.d.ts +0 -24
- package/dist/core/intelligence/patterns/user-persona-enricher.js +0 -141
- package/dist/core/intelligence/patterns/validation-checklist-creator.d.ts +0 -31
- package/dist/core/intelligence/patterns/validation-checklist-creator.js +0 -242
- package/dist/core/intelligence/quality-assessor.d.ts +0 -51
- package/dist/core/intelligence/quality-assessor.js +0 -505
- package/dist/core/intelligence/types.d.ts +0 -111
- package/dist/core/intelligence/types.js +0 -3
- package/dist/core/intelligence/universal-optimizer.d.ts +0 -84
- package/dist/core/intelligence/universal-optimizer.js +0 -371
- package/dist/core/prd-generator.d.ts +0 -76
- package/dist/core/prd-generator.js +0 -173
- package/dist/core/prompt-manager.d.ts +0 -110
- package/dist/core/prompt-manager.js +0 -274
- package/dist/core/prompt-optimizer.d.ts +0 -268
- package/dist/core/prompt-optimizer.js +0 -959
- package/dist/core/question-engine.d.ts +0 -167
- package/dist/core/question-engine.js +0 -356
- package/dist/core/session-manager.d.ts +0 -139
- package/dist/core/session-manager.js +0 -365
- package/dist/core/task-manager.d.ts +0 -211
- package/dist/core/task-manager.js +0 -981
- package/dist/core/verification-hooks.d.ts +0 -67
- package/dist/core/verification-hooks.js +0 -309
- package/dist/core/verification-manager.d.ts +0 -107
- package/dist/core/verification-manager.js +0 -415
- package/dist/index 2.js +0 -13
- package/dist/index.d 2.ts +0 -4
- package/dist/types/session.d.ts +0 -78
- package/dist/types/session.js +0 -8
- package/dist/types/verification.d.ts +0 -205
- 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
|