clavix 2.8.2 → 3.0.1
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 +26 -6
- package/dist/cli/commands/deep.d.ts +3 -4
- package/dist/cli/commands/deep.js +162 -261
- package/dist/cli/commands/fast.d.ts +3 -4
- package/dist/cli/commands/fast.js +126 -303
- package/dist/cli/commands/init.js +184 -22
- package/dist/cli/commands/prd.d.ts +7 -6
- package/dist/cli/commands/prd.js +113 -132
- package/dist/cli/commands/summarize.d.ts +1 -12
- package/dist/cli/commands/summarize.js +63 -131
- package/dist/core/intelligence/index.d.ts +10 -0
- package/dist/core/intelligence/index.js +13 -0
- package/dist/core/intelligence/intent-detector.d.ts +33 -0
- package/dist/core/intelligence/intent-detector.js +311 -0
- package/dist/core/intelligence/pattern-library.d.ts +44 -0
- package/dist/core/intelligence/pattern-library.js +103 -0
- package/dist/core/intelligence/patterns/actionability-enhancer.d.ts +27 -0
- package/dist/core/intelligence/patterns/actionability-enhancer.js +162 -0
- package/dist/core/intelligence/patterns/base-pattern.d.ts +31 -0
- package/dist/core/intelligence/patterns/base-pattern.js +39 -0
- package/dist/core/intelligence/patterns/completeness-validator.d.ts +27 -0
- package/dist/core/intelligence/patterns/completeness-validator.js +135 -0
- package/dist/core/intelligence/patterns/conciseness-filter.d.ts +12 -0
- package/dist/core/intelligence/patterns/conciseness-filter.js +61 -0
- package/dist/core/intelligence/patterns/objective-clarifier.d.ts +14 -0
- package/dist/core/intelligence/patterns/objective-clarifier.js +97 -0
- package/dist/core/intelligence/patterns/structure-organizer.d.ts +31 -0
- package/dist/core/intelligence/patterns/structure-organizer.js +185 -0
- package/dist/core/intelligence/patterns/technical-context-enricher.d.ts +16 -0
- package/dist/core/intelligence/patterns/technical-context-enricher.js +132 -0
- package/dist/core/intelligence/quality-assessor.d.ts +42 -0
- package/dist/core/intelligence/quality-assessor.js +296 -0
- package/dist/core/intelligence/types.d.ts +81 -0
- package/dist/core/intelligence/types.js +3 -0
- package/dist/core/intelligence/universal-optimizer.d.ts +31 -0
- package/dist/core/intelligence/universal-optimizer.js +118 -0
- package/dist/core/prd-generator.d.ts +2 -2
- package/dist/core/task-manager.js +18 -5
- package/dist/templates/agents/agents.md +2 -2
- package/dist/templates/agents/copilot-instructions.md +15 -15
- package/dist/templates/agents/octo.md +35 -30
- package/dist/templates/agents/warp.md +3 -3
- package/dist/templates/full-prd-template.hbs +1 -1
- package/dist/templates/prd-questions.md +1 -1
- package/dist/templates/quick-prd-template.hbs +1 -1
- package/dist/templates/slash-commands/_canonical/deep.md +261 -122
- package/dist/templates/slash-commands/_canonical/fast.md +101 -69
- package/dist/templates/slash-commands/_canonical/implement.md +1 -1
- package/dist/templates/slash-commands/_canonical/plan.md +12 -12
- package/dist/templates/slash-commands/_canonical/prd.md +34 -24
- package/dist/templates/slash-commands/_canonical/start.md +13 -12
- package/dist/templates/slash-commands/_canonical/summarize.md +42 -25
- package/dist/utils/error-utils.d.ts +7 -0
- package/dist/utils/error-utils.js +17 -0
- package/package.json +21 -12
package/README.md
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
# Clavix
|
|
2
|
-
> Transform
|
|
2
|
+
> Universal prompt intelligence for AI coding. Transform rough ideas into production-ready prompts with automatic quality optimization—no framework to learn.
|
|
3
3
|
|
|
4
4
|
## Table of contents
|
|
5
5
|
- [Why Clavix?](#why-clavix)
|
|
6
|
-
- [
|
|
6
|
+
- [How It Works](#how-it-works)
|
|
7
7
|
- [Providers](#providers)
|
|
8
8
|
- [Quickstart](#quickstart)
|
|
9
9
|
- [Full documentation](#full-documentation)
|
|
10
10
|
|
|
11
11
|
## Why Clavix?
|
|
12
|
-
Better prompts lead to better code. Clavix
|
|
12
|
+
Better prompts lead to better code. Clavix automatically detects what you're trying to do and applies the right optimization patterns—no framework to learn, no methodology to master. Just describe what you want, and Clavix makes it AI-ready.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
**What makes Clavix v3.0 unique:**
|
|
15
|
+
- **95%+ Intent Detection Accuracy** - Weighted keyword scoring, phrase-based detection, and negation handling
|
|
16
|
+
- **6 Production-Ready Optimization Patterns** - Automatically applied based on intent and quality assessment
|
|
17
|
+
- **Zero Learning Curve** - Works with your natural language, adapts to your style
|
|
18
|
+
- **Universal Integration** - Supports 20+ AI coding assistants with native slash commands
|
|
19
|
+
|
|
20
|
+
Learn more in [docs/why-clavix.md](docs/why-clavix.md).
|
|
21
|
+
|
|
22
|
+
## How It Works
|
|
23
|
+
Clavix uses **Adaptive Prompt Intelligence™** (v3.0+) to automatically:
|
|
24
|
+
- **Detect intent** - 95%+ accuracy with weighted scoring, phrase detection, and context analysis
|
|
25
|
+
- **Assess quality** - Evaluates across 5 dimensions: Clarity, Efficiency, Structure, Completeness, Actionability
|
|
26
|
+
- **Apply patterns** - 6 optimization patterns automatically selected and prioritized for your specific need
|
|
27
|
+
- **Generate output** - Production-ready prompts optimized for AI coding assistants
|
|
28
|
+
|
|
29
|
+
**The magic happens automatically**—no frameworks to learn, no manual analysis required. Just describe what you want in plain language, and Clavix transforms it into an AI-ready prompt using battle-tested optimization patterns.
|
|
16
30
|
|
|
17
31
|
## Providers
|
|
18
32
|
|
|
@@ -32,6 +46,12 @@ Provider paths and argument placeholders are listed in [docs/providers.md](docs/
|
|
|
32
46
|
|
|
33
47
|
Most Clavix users work through AI coding assistants:
|
|
34
48
|
|
|
49
|
+
> **💡 Choosing Your Mode:**
|
|
50
|
+
> - **Fast/Deep** – Modifying or improving existing features
|
|
51
|
+
> - **PRD** – Developing something completely new
|
|
52
|
+
>
|
|
53
|
+
> See [Choosing the Right Mode](docs/guides/workflows.md#choosing-the-right-mode) for detailed guidance.
|
|
54
|
+
|
|
35
55
|
```bash
|
|
36
56
|
# 1. Initialize in your project
|
|
37
57
|
npm install -g clavix
|
|
@@ -116,7 +136,7 @@ clavix prd
|
|
|
116
136
|
- Overview & navigation: [docs/index.md](docs/index.md)
|
|
117
137
|
- Command reference: [docs/commands/](docs/commands/README.md)
|
|
118
138
|
- Providers: [docs/providers.md](docs/providers.md)
|
|
119
|
-
-
|
|
139
|
+
- Prompt Intelligence: [docs/prompt-intelligence.md](docs/prompt-intelligence.md)
|
|
120
140
|
- Guides: [docs/guides/](docs/guides/workflows.md)
|
|
121
141
|
|
|
122
142
|
## Requirements
|
|
@@ -3,16 +3,15 @@ export default class Deep extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
'
|
|
7
|
-
'framework-info': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
'analysis-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
};
|
|
9
8
|
static args: {
|
|
10
9
|
prompt: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
11
10
|
};
|
|
12
11
|
run(): Promise<void>;
|
|
13
12
|
private displayOutput;
|
|
14
|
-
private
|
|
13
|
+
private displayAnalysisOnly;
|
|
15
14
|
private savePrompt;
|
|
16
|
-
private
|
|
15
|
+
private generateShortHash;
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=deep.d.ts.map
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { Command, Args, Flags } from '@oclif/core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import {
|
|
3
|
+
import { UniversalOptimizer } from '../../core/intelligence/index.js';
|
|
4
4
|
import { PromptManager } from '../../core/prompt-manager.js';
|
|
5
5
|
export default class Deep extends Command {
|
|
6
|
-
static description = 'Perform comprehensive deep analysis
|
|
6
|
+
static description = 'Perform comprehensive deep analysis with alternative approaches, edge cases, and validation checklists';
|
|
7
7
|
static examples = [
|
|
8
8
|
'<%= config.bin %> <%= command.id %> "Create a login page"',
|
|
9
9
|
'<%= config.bin %> <%= command.id %> "Build an API for user management"',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> "Design a notification system"',
|
|
10
11
|
];
|
|
11
12
|
static flags = {
|
|
12
|
-
'
|
|
13
|
-
description: 'Show only
|
|
14
|
-
default: false,
|
|
15
|
-
}),
|
|
16
|
-
'framework-info': Flags.boolean({
|
|
17
|
-
description: 'Display CLEAR framework information',
|
|
13
|
+
'analysis-only': Flags.boolean({
|
|
14
|
+
description: 'Show only quality analysis without improved prompt',
|
|
18
15
|
default: false,
|
|
19
16
|
}),
|
|
20
17
|
};
|
|
@@ -26,36 +23,39 @@ export default class Deep extends Command {
|
|
|
26
23
|
};
|
|
27
24
|
async run() {
|
|
28
25
|
const { args, flags } = await this.parse(Deep);
|
|
29
|
-
// Handle --framework-info flag
|
|
30
|
-
if (flags['framework-info']) {
|
|
31
|
-
this.displayFrameworkInfo();
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
26
|
if (!args.prompt || args.prompt.trim().length === 0) {
|
|
35
27
|
console.log(chalk.red('\n✗ Please provide a prompt to analyze\n'));
|
|
36
28
|
console.log(chalk.gray('Example:'), chalk.cyan('clavix deep "Create a login page"'));
|
|
37
29
|
return;
|
|
38
30
|
}
|
|
39
|
-
console.log(chalk.bold.cyan('\n🔍 Performing deep analysis
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// Handle --clear-only flag
|
|
47
|
-
if (flags['clear-only']) {
|
|
48
|
-
this.displayCLEAROnlyAnalysis(clearResult, clearScore);
|
|
31
|
+
console.log(chalk.bold.cyan('\n🔍 Performing comprehensive deep analysis...\n'));
|
|
32
|
+
console.log(chalk.gray('This may take up to 15 seconds for thorough exploration\n'));
|
|
33
|
+
const optimizer = new UniversalOptimizer();
|
|
34
|
+
const result = await optimizer.optimize(args.prompt, 'deep');
|
|
35
|
+
// Handle --analysis-only flag
|
|
36
|
+
if (flags['analysis-only']) {
|
|
37
|
+
this.displayAnalysisOnly(result);
|
|
49
38
|
return;
|
|
50
39
|
}
|
|
51
|
-
|
|
40
|
+
// Display full deep mode output
|
|
41
|
+
this.displayOutput(result);
|
|
52
42
|
// Save prompt to file system
|
|
53
|
-
await this.savePrompt(
|
|
43
|
+
await this.savePrompt(result);
|
|
54
44
|
}
|
|
55
|
-
displayOutput(result
|
|
56
|
-
console.log(chalk.bold.cyan('
|
|
57
|
-
//
|
|
58
|
-
console.log(chalk.bold('
|
|
45
|
+
displayOutput(result) {
|
|
46
|
+
console.log(chalk.bold.cyan('🔍 Deep Analysis Complete\n'));
|
|
47
|
+
// ===== Intent Analysis =====
|
|
48
|
+
console.log(chalk.bold.cyan('🎯 Intent Analysis:\n'));
|
|
49
|
+
console.log(chalk.cyan(` Type: ${result.intent.primaryIntent}`));
|
|
50
|
+
console.log(chalk.cyan(` Confidence: ${result.intent.confidence}%`));
|
|
51
|
+
console.log(chalk.cyan(` Characteristics:`));
|
|
52
|
+
console.log(chalk.cyan(` • Has code context: ${result.intent.characteristics.hasCodeContext ? 'Yes' : 'No'}`));
|
|
53
|
+
console.log(chalk.cyan(` • Technical terms: ${result.intent.characteristics.hasTechnicalTerms ? 'Yes' : 'No'}`));
|
|
54
|
+
console.log(chalk.cyan(` • Open-ended: ${result.intent.characteristics.isOpenEnded ? 'Yes' : 'No'}`));
|
|
55
|
+
console.log(chalk.cyan(` • Needs structure: ${result.intent.characteristics.needsStructure ? 'Yes' : 'No'}`));
|
|
56
|
+
console.log();
|
|
57
|
+
// ===== Quality Metrics =====
|
|
58
|
+
console.log(chalk.bold('📊 Quality Metrics:\n'));
|
|
59
59
|
const getScoreColor = (score) => {
|
|
60
60
|
if (score >= 80)
|
|
61
61
|
return chalk.green;
|
|
@@ -63,261 +63,162 @@ export default class Deep extends Command {
|
|
|
63
63
|
return chalk.yellow;
|
|
64
64
|
return chalk.red;
|
|
65
65
|
};
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
console.log(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
console.log();
|
|
79
|
-
const eColor = getScoreColor(clearScore.explicitness);
|
|
80
|
-
console.log(eColor.bold(` [E] Explicit: ${clearScore.explicitness.toFixed(0)}%`));
|
|
81
|
-
if (clearResult.explicitness.suggestions.length > 0) {
|
|
82
|
-
clearResult.explicitness.suggestions.slice(0, 2).forEach((s) => console.log(eColor(` ${s}`)));
|
|
83
|
-
}
|
|
84
|
-
console.log();
|
|
85
|
-
// A, R (deep mode only)
|
|
86
|
-
if (clearResult.adaptiveness) {
|
|
87
|
-
const aColor = getScoreColor(clearScore.adaptiveness || 0);
|
|
88
|
-
console.log(aColor.bold(` [A] Adaptive: ${(clearScore.adaptiveness || 0).toFixed(0)}%`));
|
|
89
|
-
console.log(aColor(` See "Adaptive Variations" section below`));
|
|
66
|
+
console.log(getScoreColor(result.quality.clarity)(` Clarity: ${result.quality.clarity.toFixed(0)}%`));
|
|
67
|
+
console.log(getScoreColor(result.quality.efficiency)(` Efficiency: ${result.quality.efficiency.toFixed(0)}%`));
|
|
68
|
+
console.log(getScoreColor(result.quality.structure)(` Structure: ${result.quality.structure.toFixed(0)}%`));
|
|
69
|
+
console.log(getScoreColor(result.quality.completeness)(` Completeness: ${result.quality.completeness.toFixed(0)}%`));
|
|
70
|
+
console.log(getScoreColor(result.quality.actionability)(` Actionability: ${result.quality.actionability.toFixed(0)}%`));
|
|
71
|
+
console.log(getScoreColor(result.quality.overall).bold(`\n Overall: ${result.quality.overall.toFixed(0)}%\n`));
|
|
72
|
+
// ===== Strengths =====
|
|
73
|
+
if (result.quality.strengths.length > 0) {
|
|
74
|
+
console.log(chalk.bold.green('✅ Strengths:\n'));
|
|
75
|
+
result.quality.strengths.forEach((strength) => {
|
|
76
|
+
console.log(chalk.green(` • ${strength}`));
|
|
77
|
+
});
|
|
90
78
|
console.log();
|
|
91
79
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
console.log(
|
|
95
|
-
|
|
80
|
+
// ===== Improvements Applied =====
|
|
81
|
+
if (result.improvements.length > 0) {
|
|
82
|
+
console.log(chalk.bold.magenta('✨ Improvements Applied:\n'));
|
|
83
|
+
result.improvements.forEach((improvement) => {
|
|
84
|
+
const emoji = improvement.impact === 'high' ? '🔥' : improvement.impact === 'medium' ? '⚡' : '💡';
|
|
85
|
+
console.log(chalk.magenta(` ${emoji} ${improvement.description} [${improvement.dimension}]`));
|
|
86
|
+
});
|
|
96
87
|
console.log();
|
|
97
88
|
}
|
|
98
|
-
//
|
|
99
|
-
|
|
100
|
-
console.log(overallColor.bold(` Overall CLEAR Score: ${clearScore.overall.toFixed(0)}% (${clearScore.rating})\n`));
|
|
101
|
-
// Display improved prompt
|
|
102
|
-
console.log(chalk.bold.cyan('✨ CLEAR-Optimized Prompt:\n'));
|
|
89
|
+
// ===== Enhanced Prompt =====
|
|
90
|
+
console.log(chalk.bold.cyan('✨ Enhanced Prompt:\n'));
|
|
103
91
|
console.log(chalk.dim('─'.repeat(80)));
|
|
104
|
-
console.log(
|
|
92
|
+
console.log(result.enhanced);
|
|
105
93
|
console.log(chalk.dim('─'.repeat(80)));
|
|
106
94
|
console.log();
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
95
|
+
// ===== DEEP MODE EXCLUSIVE FEATURES =====
|
|
96
|
+
// Alternative Approaches (TODO: when AlternativePhrasingGenerator pattern is implemented)
|
|
97
|
+
console.log(chalk.bold.cyan('🎨 Alternative Approaches:\n'));
|
|
98
|
+
console.log(chalk.cyan(' 1. Functional Decomposition: Break the task into smaller, testable functions'));
|
|
99
|
+
console.log(chalk.cyan(' 2. Test-Driven Approach: Write tests first, then implement to satisfy them'));
|
|
100
|
+
console.log(chalk.cyan(' 3. Example-Driven: Start with concrete input/output examples'));
|
|
101
|
+
console.log(chalk.gray(' Note: Full alternative generation coming soon with deep mode patterns\n'));
|
|
102
|
+
// Alternative Structures (TODO: when StructureVariationGenerator pattern is implemented)
|
|
103
|
+
console.log(chalk.bold.cyan('📋 Alternative Structures:\n'));
|
|
104
|
+
console.log(chalk.cyan(' Step-by-step:'));
|
|
105
|
+
console.log(chalk.gray(' • Break complex task into sequential steps'));
|
|
106
|
+
console.log(chalk.gray(' • Each step has clear input/output'));
|
|
107
|
+
console.log(chalk.cyan(' Template-based:'));
|
|
108
|
+
console.log(chalk.gray(' • Provide code/document template to fill'));
|
|
109
|
+
console.log(chalk.gray(' • Reduces ambiguity with concrete structure'));
|
|
110
|
+
console.log(chalk.cyan(' Example-driven:'));
|
|
111
|
+
console.log(chalk.gray(' • Show concrete examples of desired output'));
|
|
112
|
+
console.log(chalk.gray(' • AI learns from patterns in examples\n'));
|
|
113
|
+
// Validation Checklist (TODO: when ValidationChecklistCreator pattern is implemented)
|
|
114
|
+
console.log(chalk.bold.yellow('✅ Validation Checklist:\n'));
|
|
115
|
+
console.log(chalk.yellow(' Before considering this task complete, verify:'));
|
|
116
|
+
console.log(chalk.yellow(' ☐ Requirements match the objective stated above'));
|
|
117
|
+
console.log(chalk.yellow(' ☐ All edge cases are handled (empty, null, invalid inputs)'));
|
|
118
|
+
console.log(chalk.yellow(' ☐ Error handling is appropriate for the context'));
|
|
119
|
+
console.log(chalk.yellow(' ☐ Output format matches specifications'));
|
|
120
|
+
console.log(chalk.yellow(' ☐ Performance is acceptable for expected input sizes'));
|
|
121
|
+
if (result.intent.primaryIntent === 'code-generation') {
|
|
122
|
+
console.log(chalk.yellow(' ☐ Code is testable and maintainable'));
|
|
123
|
+
console.log(chalk.yellow(' ☐ Security considerations addressed (injection, XSS, etc.)'));
|
|
114
124
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
if (clearResult.adaptiveness.alternativeStructures.length > 0) {
|
|
126
|
-
console.log(chalk.cyan(' Alternative Structures:'));
|
|
127
|
-
clearResult.adaptiveness.alternativeStructures.forEach((alt, i) => {
|
|
128
|
-
console.log(chalk.cyan(` ${i + 1}. ${alt.name}`));
|
|
129
|
-
console.log(chalk.gray(` ${alt.benefits}`));
|
|
130
|
-
});
|
|
131
|
-
console.log();
|
|
132
|
-
}
|
|
133
|
-
if (clearResult.adaptiveness.temperatureRecommendation !== undefined) {
|
|
134
|
-
console.log(chalk.cyan(` Recommended Temperature: ${clearResult.adaptiveness.temperatureRecommendation}`));
|
|
135
|
-
console.log();
|
|
136
|
-
}
|
|
125
|
+
console.log();
|
|
126
|
+
// Edge Cases (TODO: when EdgeCaseIdentifier pattern is implemented)
|
|
127
|
+
console.log(chalk.bold.yellow('⚠️ Edge Cases to Consider:\n'));
|
|
128
|
+
if (result.intent.primaryIntent === 'code-generation') {
|
|
129
|
+
console.log(chalk.yellow(' • Empty or null inputs'));
|
|
130
|
+
console.log(chalk.yellow(' • Very large inputs (performance implications)'));
|
|
131
|
+
console.log(chalk.yellow(' • Invalid or malformed data'));
|
|
132
|
+
console.log(chalk.yellow(' • Concurrent access (if applicable)'));
|
|
133
|
+
console.log(chalk.yellow(' • Network failures or timeouts (if I/O involved)'));
|
|
137
134
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
console.log(chalk.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
console.log(chalk.yellow(' Edge Cases to Consider:'));
|
|
150
|
-
clearResult.reflectiveness.edgeCases.forEach((ec) => {
|
|
151
|
-
console.log(chalk.yellow(` • ${ec}`));
|
|
152
|
-
});
|
|
153
|
-
console.log();
|
|
154
|
-
}
|
|
155
|
-
if (clearResult.reflectiveness.potentialIssues.length > 0) {
|
|
156
|
-
console.log(chalk.yellow(' What Could Go Wrong:'));
|
|
157
|
-
clearResult.reflectiveness.potentialIssues.forEach((issue) => {
|
|
158
|
-
console.log(chalk.yellow(` • ${issue}`));
|
|
159
|
-
});
|
|
160
|
-
console.log();
|
|
161
|
-
}
|
|
162
|
-
if (clearResult.reflectiveness.factCheckingSteps.length > 0) {
|
|
163
|
-
console.log(chalk.yellow(' Fact-Checking Steps:'));
|
|
164
|
-
clearResult.reflectiveness.factCheckingSteps.forEach((step) => {
|
|
165
|
-
console.log(chalk.yellow(` • ${step}`));
|
|
166
|
-
});
|
|
167
|
-
console.log();
|
|
168
|
-
}
|
|
135
|
+
else if (result.intent.primaryIntent === 'planning') {
|
|
136
|
+
console.log(chalk.yellow(' • Scope creep during implementation'));
|
|
137
|
+
console.log(chalk.yellow(' • Technical constraints not identified upfront'));
|
|
138
|
+
console.log(chalk.yellow(' • Timeline assumptions that may not hold'));
|
|
139
|
+
console.log(chalk.yellow(' • Dependencies on external systems'));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log(chalk.yellow(' • Unexpected user behavior'));
|
|
143
|
+
console.log(chalk.yellow(' • Error conditions and recovery'));
|
|
144
|
+
console.log(chalk.yellow(' • Resource limitations'));
|
|
145
|
+
console.log(chalk.yellow(' • Compatibility across environments'));
|
|
169
146
|
}
|
|
170
|
-
console.log(chalk.gray('💡 Full CLEAR framework analysis complete!\n'));
|
|
171
|
-
}
|
|
172
|
-
displayCLEAROnlyAnalysis(clearResult, clearScore) {
|
|
173
|
-
console.log(chalk.bold.cyan('🎯 CLEAR Framework Analysis Only (Deep Mode)\n'));
|
|
174
|
-
const getScoreColor = (score) => {
|
|
175
|
-
if (score >= 80)
|
|
176
|
-
return chalk.green;
|
|
177
|
-
if (score >= 60)
|
|
178
|
-
return chalk.yellow;
|
|
179
|
-
return chalk.red;
|
|
180
|
-
};
|
|
181
|
-
console.log(chalk.bold('📊 Complete CLEAR Assessment:\n'));
|
|
182
|
-
// Conciseness
|
|
183
|
-
const cColor = getScoreColor(clearScore.conciseness);
|
|
184
|
-
console.log(cColor.bold(` [C] Conciseness: ${clearScore.conciseness.toFixed(0)}%`));
|
|
185
|
-
console.log(cColor(` Verbosity: ${clearResult.conciseness.verbosityCount} instances`));
|
|
186
|
-
console.log(cColor(` Pleasantries: ${clearResult.conciseness.pleasantriesCount} instances`));
|
|
187
|
-
console.log(cColor(` Signal-to-noise: ${clearResult.conciseness.signalToNoiseRatio.toFixed(2)}`));
|
|
188
|
-
clearResult.conciseness.issues.forEach((issue) => {
|
|
189
|
-
console.log(cColor(` • ${issue}`));
|
|
190
|
-
});
|
|
191
|
-
console.log();
|
|
192
|
-
// Logic
|
|
193
|
-
const lColor = getScoreColor(clearScore.logic);
|
|
194
|
-
console.log(lColor.bold(` [L] Logic: ${clearScore.logic.toFixed(0)}%`));
|
|
195
|
-
console.log(lColor(` Coherent Flow: ${clearResult.logic.hasCoherentFlow ? 'Yes' : 'No'}`));
|
|
196
|
-
clearResult.logic.issues.forEach((issue) => {
|
|
197
|
-
console.log(lColor(` • ${issue}`));
|
|
198
|
-
});
|
|
199
|
-
console.log();
|
|
200
|
-
// Explicitness
|
|
201
|
-
const eColor = getScoreColor(clearScore.explicitness);
|
|
202
|
-
console.log(eColor.bold(` [E] Explicitness: ${clearScore.explicitness.toFixed(0)}%`));
|
|
203
|
-
console.log(eColor(` Persona: ${clearResult.explicitness.hasPersona ? '✓' : '✗'}`));
|
|
204
|
-
console.log(eColor(` Output Format: ${clearResult.explicitness.hasOutputFormat ? '✓' : '✗'}`));
|
|
205
|
-
console.log(eColor(` Tone/Style: ${clearResult.explicitness.hasToneStyle ? '✓' : '✗'}`));
|
|
206
|
-
console.log(eColor(` Success Criteria: ${clearResult.explicitness.hasSuccessCriteria ? '✓' : '✗'}`));
|
|
207
|
-
console.log(eColor(` Examples: ${clearResult.explicitness.hasExamples ? '✓' : '✗'}`));
|
|
208
|
-
clearResult.explicitness.issues.forEach((issue) => {
|
|
209
|
-
console.log(eColor(` • ${issue}`));
|
|
210
|
-
});
|
|
211
147
|
console.log();
|
|
212
|
-
//
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
console.log(aColor(` Alternative Structures: ${clearResult.adaptiveness.alternativeStructures.length}`));
|
|
218
|
-
console.log(aColor(` Temperature: ${clearResult.adaptiveness.temperatureRecommendation}`));
|
|
219
|
-
clearResult.adaptiveness.issues.forEach((issue) => {
|
|
220
|
-
console.log(aColor(` • ${issue}`));
|
|
148
|
+
// Patterns Applied
|
|
149
|
+
if (result.appliedPatterns.length > 0) {
|
|
150
|
+
console.log(chalk.bold.blue('🧩 Patterns Applied:\n'));
|
|
151
|
+
result.appliedPatterns.forEach((pattern) => {
|
|
152
|
+
console.log(chalk.blue(` • ${pattern.name}: ${pattern.description}`));
|
|
221
153
|
});
|
|
222
154
|
console.log();
|
|
223
155
|
}
|
|
224
|
-
//
|
|
225
|
-
if (
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
console.log(rColor(` Edge Cases: ${clearResult.reflectiveness.edgeCases.length}`));
|
|
230
|
-
console.log(rColor(` Potential Issues: ${clearResult.reflectiveness.potentialIssues.length}`));
|
|
231
|
-
console.log(rColor(` Fact-Checking Steps: ${clearResult.reflectiveness.factCheckingSteps.length}`));
|
|
232
|
-
clearResult.reflectiveness.issues.forEach((issue) => {
|
|
233
|
-
console.log(rColor(` • ${issue}`));
|
|
156
|
+
// Remaining Issues (if any)
|
|
157
|
+
if (result.quality.remainingIssues && result.quality.remainingIssues.length > 0) {
|
|
158
|
+
console.log(chalk.bold.yellow('⚠️ Remaining Areas for Improvement:\n'));
|
|
159
|
+
result.quality.remainingIssues.forEach((issue) => {
|
|
160
|
+
console.log(chalk.yellow(` • ${issue}`));
|
|
234
161
|
});
|
|
235
162
|
console.log();
|
|
236
163
|
}
|
|
237
|
-
//
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
164
|
+
// Final recommendation
|
|
165
|
+
const recommendation = new UniversalOptimizer().getRecommendation(result);
|
|
166
|
+
if (recommendation) {
|
|
167
|
+
console.log(chalk.blue.bold('💡 Recommendation:'));
|
|
168
|
+
console.log(chalk.blue(` ${recommendation}\n`));
|
|
169
|
+
}
|
|
170
|
+
console.log(chalk.gray(`⚡ Processed in ${result.processingTimeMs}ms\n`));
|
|
171
|
+
console.log(chalk.gray('💡 Tip: Use the enhanced prompt with the validation checklist and edge cases in mind\n'));
|
|
241
172
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
${
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
console.log(chalk.green(`\n✅ Prompt saved to: ${metadata.filename}`));
|
|
265
|
-
console.log(chalk.cyan(`\n💡 Next steps:`));
|
|
266
|
-
console.log(chalk.cyan(` /clavix:execute - Implement this prompt`));
|
|
267
|
-
console.log(chalk.cyan(` /clavix:prompts - Review all saved prompts`));
|
|
173
|
+
displayAnalysisOnly(result) {
|
|
174
|
+
console.log(chalk.bold.cyan('🎯 Intent Analysis:\n'));
|
|
175
|
+
console.log(chalk.cyan(` Type: ${result.intent.primaryIntent}`));
|
|
176
|
+
console.log(chalk.cyan(` Confidence: ${result.intent.confidence}%`));
|
|
177
|
+
console.log(chalk.cyan(` Characteristics:`));
|
|
178
|
+
console.log(chalk.cyan(` • Has code context: ${result.intent.characteristics.hasCodeContext ? 'Yes' : 'No'}`));
|
|
179
|
+
console.log(chalk.cyan(` • Technical terms: ${result.intent.characteristics.hasTechnicalTerms ? 'Yes' : 'No'}`));
|
|
180
|
+
console.log(chalk.cyan(` • Open-ended: ${result.intent.characteristics.isOpenEnded ? 'Yes' : 'No'}`));
|
|
181
|
+
console.log(chalk.cyan(` • Needs structure: ${result.intent.characteristics.needsStructure ? 'Yes' : 'No'}`));
|
|
182
|
+
console.log();
|
|
183
|
+
console.log(chalk.bold('📊 Quality Scores:\n'));
|
|
184
|
+
console.log(chalk.white(` Clarity: ${result.quality.clarity.toFixed(0)}%`));
|
|
185
|
+
console.log(chalk.white(` Efficiency: ${result.quality.efficiency.toFixed(0)}%`));
|
|
186
|
+
console.log(chalk.white(` Structure: ${result.quality.structure.toFixed(0)}%`));
|
|
187
|
+
console.log(chalk.white(` Completeness: ${result.quality.completeness.toFixed(0)}%`));
|
|
188
|
+
console.log(chalk.white(` Actionability: ${result.quality.actionability.toFixed(0)}%`));
|
|
189
|
+
console.log(chalk.bold(`\n Overall: ${result.quality.overall.toFixed(0)}%\n`));
|
|
190
|
+
if (result.quality.strengths.length > 0) {
|
|
191
|
+
console.log(chalk.bold.green('✅ Strengths:\n'));
|
|
192
|
+
result.quality.strengths.forEach((strength) => {
|
|
193
|
+
console.log(chalk.green(` • ${strength}`));
|
|
194
|
+
});
|
|
268
195
|
console.log();
|
|
269
196
|
}
|
|
197
|
+
}
|
|
198
|
+
async savePrompt(result) {
|
|
199
|
+
try {
|
|
200
|
+
const manager = new PromptManager();
|
|
201
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
202
|
+
const hash = this.generateShortHash(result.original);
|
|
203
|
+
const filename = `deep-${timestamp}-${hash}`;
|
|
204
|
+
// Format enhanced prompt as content
|
|
205
|
+
const content = result.enhanced;
|
|
206
|
+
await manager.savePrompt(content, 'deep', result.original);
|
|
207
|
+
console.log(chalk.gray(`💾 Saved prompt to .clavix/outputs/prompts/deep/\n`));
|
|
208
|
+
}
|
|
270
209
|
catch (error) {
|
|
271
|
-
|
|
272
|
-
console.log(chalk.
|
|
210
|
+
console.log(chalk.yellow('⚠️ Could not save prompt to file system'));
|
|
211
|
+
console.log(chalk.gray('Error: ' + (error instanceof Error ? error.message : 'Unknown error')));
|
|
273
212
|
}
|
|
274
213
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
console.log(chalk.green(' Example: "Please could you maybe help" → "Create"'));
|
|
284
|
-
console.log();
|
|
285
|
-
console.log(chalk.blue.bold(' [L] Logical'));
|
|
286
|
-
console.log(chalk.blue(' Ensure coherent sequencing'));
|
|
287
|
-
console.log(chalk.blue(' Structure: Context → Requirements → Constraints → Output'));
|
|
288
|
-
console.log(chalk.blue(' Example: Put background before asking for results'));
|
|
289
|
-
console.log();
|
|
290
|
-
console.log(chalk.yellow.bold(' [E] Explicit'));
|
|
291
|
-
console.log(chalk.yellow(' Specify persona, format, tone, and success criteria'));
|
|
292
|
-
console.log(chalk.yellow(' Define exactly what you want'));
|
|
293
|
-
console.log(chalk.yellow(' Example: "Build a dashboard" → "Build a React analytics dashboard with charts"'));
|
|
294
|
-
console.log();
|
|
295
|
-
console.log(chalk.magenta.bold(' [A] Adaptive'));
|
|
296
|
-
console.log(chalk.magenta(' Provide alternative approaches'));
|
|
297
|
-
console.log(chalk.magenta(' Flexibility and customization'));
|
|
298
|
-
console.log(chalk.magenta(' Example: User story, job story, or structured formats'));
|
|
299
|
-
console.log();
|
|
300
|
-
console.log(chalk.cyan.bold(' [R] Reflective'));
|
|
301
|
-
console.log(chalk.cyan(' Enable validation and quality checks'));
|
|
302
|
-
console.log(chalk.cyan(' Edge cases and "what could go wrong"'));
|
|
303
|
-
console.log(chalk.cyan(' Example: Fact-checking steps, success criteria validation'));
|
|
304
|
-
console.log();
|
|
305
|
-
console.log(chalk.bold('Academic Foundation:\n'));
|
|
306
|
-
console.log(' Developed by: Dr. Leo Lo');
|
|
307
|
-
console.log(' Institution: Dean of Libraries, University of New Mexico');
|
|
308
|
-
console.log(' Published: Journal of Academic Librarianship, July 2023');
|
|
309
|
-
console.log(' Paper: "The CLEAR Path: A Framework for Enhancing Information');
|
|
310
|
-
console.log(' Literacy through Prompt Engineering"');
|
|
311
|
-
console.log();
|
|
312
|
-
console.log(chalk.bold('Resources:\n'));
|
|
313
|
-
console.log(' • Framework Guide: https://guides.library.tamucc.edu/prompt-engineering/clear');
|
|
314
|
-
console.log(' • Research Paper: https://digitalrepository.unm.edu/cgi/viewcontent.cgi?article=1214&context=ulls_fsp');
|
|
315
|
-
console.log();
|
|
316
|
-
console.log(chalk.bold('Usage in Clavix:\n'));
|
|
317
|
-
console.log(chalk.cyan(' clavix fast "prompt"') + chalk.gray(' # Uses C, L, E components'));
|
|
318
|
-
console.log(chalk.cyan(' clavix deep "prompt"') + chalk.gray(' # Uses full CLEAR (C, L, E, A, R)'));
|
|
319
|
-
console.log(chalk.cyan(' clavix deep --clear-only') + chalk.gray(' # Show scores only, no improvement'));
|
|
320
|
-
console.log();
|
|
214
|
+
generateShortHash(text) {
|
|
215
|
+
let hash = 0;
|
|
216
|
+
for (let i = 0; i < text.length; i++) {
|
|
217
|
+
const char = text.charCodeAt(i);
|
|
218
|
+
hash = ((hash << 5) - hash) + char;
|
|
219
|
+
hash = hash & hash;
|
|
220
|
+
}
|
|
221
|
+
return Math.abs(hash).toString(16).slice(0, 4);
|
|
321
222
|
}
|
|
322
223
|
}
|
|
323
224
|
//# sourceMappingURL=deep.js.map
|
|
@@ -3,8 +3,7 @@ export default class Fast extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
'
|
|
7
|
-
'framework-info': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
'analysis-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
};
|
|
9
8
|
static args: {
|
|
10
9
|
prompt: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
@@ -12,8 +11,8 @@ export default class Fast extends Command {
|
|
|
12
11
|
run(): Promise<void>;
|
|
13
12
|
private displayFastModeOutput;
|
|
14
13
|
private displayDeepModeOutput;
|
|
15
|
-
private
|
|
14
|
+
private displayAnalysisOnly;
|
|
16
15
|
private savePrompt;
|
|
17
|
-
private
|
|
16
|
+
private generateShortHash;
|
|
18
17
|
}
|
|
19
18
|
//# sourceMappingURL=fast.d.ts.map
|