clavix 2.7.1 ā 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -4
- package/bin/clavix.js +12 -5
- package/dist/cli/commands/archive.d.ts +5 -4
- package/dist/cli/commands/archive.js +135 -161
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +66 -105
- package/dist/cli/commands/deep.d.ts +3 -3
- package/dist/cli/commands/deep.js +97 -103
- package/dist/cli/commands/execute.d.ts +4 -4
- package/dist/cli/commands/execute.js +57 -63
- package/dist/cli/commands/fast.d.ts +3 -3
- package/dist/cli/commands/fast.js +122 -128
- package/dist/cli/commands/implement.d.ts +4 -4
- package/dist/cli/commands/implement.js +84 -148
- package/dist/cli/commands/init.js +87 -126
- package/dist/cli/commands/list.d.ts +5 -5
- package/dist/cli/commands/list.js +72 -111
- package/dist/cli/commands/plan.d.ts +7 -7
- package/dist/cli/commands/plan.js +92 -131
- package/dist/cli/commands/prd.d.ts +4 -4
- package/dist/cli/commands/prd.js +76 -111
- package/dist/cli/commands/prompts/clear.d.ts +6 -6
- package/dist/cli/commands/prompts/clear.js +70 -76
- package/dist/cli/commands/prompts/list.js +37 -43
- package/dist/cli/commands/show.d.ts +4 -4
- package/dist/cli/commands/show.js +72 -111
- package/dist/cli/commands/start.d.ts +3 -3
- package/dist/cli/commands/start.js +63 -101
- package/dist/cli/commands/summarize.d.ts +4 -4
- package/dist/cli/commands/summarize.js +81 -120
- package/dist/cli/commands/task-complete.d.ts +4 -4
- package/dist/cli/commands/task-complete.js +86 -123
- package/dist/cli/commands/update.d.ts +3 -3
- package/dist/cli/commands/update.js +97 -130
- package/dist/cli/commands/version.js +13 -48
- package/dist/core/adapters/agents-md-generator.js +17 -50
- package/dist/core/adapters/amp-adapter.d.ts +1 -1
- package/dist/core/adapters/amp-adapter.js +13 -21
- package/dist/core/adapters/augment-adapter.d.ts +2 -2
- package/dist/core/adapters/augment-adapter.js +16 -56
- package/dist/core/adapters/base-adapter.d.ts +1 -1
- package/dist/core/adapters/base-adapter.js +11 -47
- package/dist/core/adapters/claude-code-adapter.d.ts +2 -2
- package/dist/core/adapters/claude-code-adapter.js +19 -60
- package/dist/core/adapters/cline-adapter.d.ts +1 -1
- package/dist/core/adapters/cline-adapter.js +13 -21
- package/dist/core/adapters/codebuddy-adapter.d.ts +2 -2
- package/dist/core/adapters/codebuddy-adapter.js +17 -57
- package/dist/core/adapters/codex-adapter.d.ts +2 -2
- package/dist/core/adapters/codex-adapter.js +16 -56
- package/dist/core/adapters/copilot-instructions-generator.js +18 -51
- package/dist/core/adapters/crush-adapter.d.ts +2 -2
- package/dist/core/adapters/crush-adapter.js +13 -20
- package/dist/core/adapters/cursor-adapter.d.ts +1 -1
- package/dist/core/adapters/cursor-adapter.js +12 -20
- package/dist/core/adapters/droid-adapter.d.ts +2 -2
- package/dist/core/adapters/droid-adapter.js +14 -21
- package/dist/core/adapters/gemini-adapter.d.ts +2 -2
- package/dist/core/adapters/gemini-adapter.js +16 -52
- package/dist/core/adapters/kilocode-adapter.d.ts +1 -1
- package/dist/core/adapters/kilocode-adapter.js +12 -20
- package/dist/core/adapters/octo-md-generator.js +17 -50
- package/dist/core/adapters/opencode-adapter.d.ts +2 -2
- package/dist/core/adapters/opencode-adapter.js +14 -21
- package/dist/core/adapters/qwen-adapter.d.ts +2 -2
- package/dist/core/adapters/qwen-adapter.js +16 -52
- package/dist/core/adapters/roocode-adapter.d.ts +2 -2
- package/dist/core/adapters/roocode-adapter.js +12 -19
- package/dist/core/adapters/warp-md-generator.js +17 -50
- package/dist/core/adapters/windsurf-adapter.d.ts +1 -1
- package/dist/core/adapters/windsurf-adapter.js +12 -20
- package/dist/core/agent-manager.d.ts +1 -1
- package/dist/core/agent-manager.js +34 -38
- package/dist/core/archive-manager.js +10 -46
- package/dist/core/config-manager.d.ts +2 -2
- package/dist/core/config-manager.js +3 -40
- package/dist/core/conversation-analyzer.d.ts +1 -1
- package/dist/core/conversation-analyzer.js +1 -5
- package/dist/core/doc-injector.js +23 -60
- package/dist/core/git-manager.js +11 -48
- package/dist/core/prd-generator.js +16 -51
- package/dist/core/prompt-manager.js +6 -42
- package/dist/core/prompt-optimizer.js +1 -5
- package/dist/core/question-engine.js +6 -45
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.js +11 -49
- package/dist/core/task-manager.d.ts +26 -0
- package/dist/core/task-manager.js +243 -101
- package/dist/index.d.ts +2 -1
- package/dist/index.js +8 -12
- package/dist/templates/agents/agents.md +31 -2
- package/dist/templates/agents/copilot-instructions.md +1 -1
- package/dist/templates/agents/octo.md +20 -1
- package/dist/templates/agents/warp.md +1 -1
- package/dist/templates/slash-commands/_canonical/implement.md +33 -11
- package/dist/types/agent.js +1 -2
- package/dist/types/config.js +3 -8
- package/dist/types/errors.js +7 -13
- package/dist/types/session.js +1 -2
- package/dist/utils/agent-error-messages.js +1 -5
- package/dist/utils/error-utils.js +5 -12
- package/dist/utils/file-system.js +20 -57
- package/dist/utils/legacy-command-cleanup.d.ts +1 -1
- package/dist/utils/legacy-command-cleanup.js +9 -45
- package/dist/utils/template-loader.d.ts +1 -1
- package/dist/utils/template-loader.js +9 -41
- package/dist/utils/toml-templates.js +1 -4
- package/package.json +9 -4
- package/dist/core/adapters 2/agents-md-generator.d.ts +0 -26
- package/dist/core/adapters 2/agents-md-generator.js +0 -102
- package/dist/core/adapters 2/amp-adapter.d.ts +0 -27
- package/dist/core/adapters 2/amp-adapter.js +0 -42
- package/dist/core/adapters 2/augment-adapter.d.ts +0 -22
- package/dist/core/adapters 2/augment-adapter.js +0 -77
- package/dist/core/adapters 2/base-adapter.d.ts +0 -45
- package/dist/core/adapters 2/base-adapter.js +0 -142
- package/dist/core/adapters 2/claude-code-adapter.d.ts +0 -32
- package/dist/core/adapters 2/claude-code-adapter.js +0 -116
- package/dist/core/adapters 2/cline-adapter.d.ts +0 -34
- package/dist/core/adapters 2/cline-adapter.js +0 -52
- package/dist/core/adapters 2/codebuddy-adapter.d.ts +0 -24
- package/dist/core/adapters 2/codebuddy-adapter.js +0 -82
- package/dist/core/adapters 2/codex-adapter.d.ts +0 -24
- package/dist/core/adapters 2/codex-adapter.js +0 -79
- package/dist/core/adapters 2/copilot-instructions-generator.d.ts +0 -26
- package/dist/core/adapters 2/copilot-instructions-generator.js +0 -104
- package/dist/core/adapters 2/crush-adapter.d.ts +0 -35
- package/dist/core/adapters 2/crush-adapter.js +0 -49
- package/dist/core/adapters 2/cursor-adapter.d.ts +0 -25
- package/dist/core/adapters 2/cursor-adapter.js +0 -40
- package/dist/core/adapters 2/droid-adapter.d.ts +0 -33
- package/dist/core/adapters 2/droid-adapter.js +0 -57
- package/dist/core/adapters 2/gemini-adapter.d.ts +0 -27
- package/dist/core/adapters 2/gemini-adapter.js +0 -90
- package/dist/core/adapters 2/kilocode-adapter.d.ts +0 -34
- package/dist/core/adapters 2/kilocode-adapter.js +0 -49
- package/dist/core/adapters 2/octo-md-generator.d.ts +0 -26
- package/dist/core/adapters 2/octo-md-generator.js +0 -102
- package/dist/core/adapters 2/opencode-adapter.d.ts +0 -33
- package/dist/core/adapters 2/opencode-adapter.js +0 -56
- package/dist/core/adapters 2/qwen-adapter.d.ts +0 -27
- package/dist/core/adapters 2/qwen-adapter.js +0 -90
- package/dist/core/adapters 2/roocode-adapter.d.ts +0 -40
- package/dist/core/adapters 2/roocode-adapter.js +0 -68
- package/dist/core/adapters 2/warp-md-generator.d.ts +0 -17
- package/dist/core/adapters 2/warp-md-generator.js +0 -88
- package/dist/core/adapters 2/windsurf-adapter.d.ts +0 -34
- package/dist/core/adapters 2/windsurf-adapter.js +0 -49
- package/dist/core/agent-manager 2.js +0 -126
- package/dist/core/agent-manager.d 2.ts +0 -51
- package/dist/core/archive-manager 2.js +0 -338
- package/dist/core/archive-manager.d 2.ts +0 -100
- package/dist/core/conversation-analyzer.d 2.ts +0 -86
- package/dist/core/doc-injector 2.js +0 -236
- package/dist/core/doc-injector.d 2.ts +0 -51
- package/dist/core/git-manager 2.js +0 -214
- package/dist/core/git-manager.d 2.ts +0 -100
- package/dist/core/prompt-optimizer 2.js +0 -963
- package/dist/core/prompt-optimizer.d 2.ts +0 -268
- package/dist/core/question-engine 2.js +0 -395
- package/dist/core/question-engine.d 2.ts +0 -167
- package/dist/core/session-manager 2.js +0 -403
- package/dist/core/session-manager.d 2.ts +0 -139
- package/dist/core/task-manager 2.js +0 -689
- package/dist/core/task-manager.d 2.ts +0 -155
|
@@ -1,48 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import { AgentManager } from '../../core/agent-manager.js';
|
|
7
|
+
export default class Config extends Command {
|
|
8
|
+
static description = 'Manage Clavix configuration';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %>',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> get agent',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> set agent cursor',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> edit',
|
|
14
|
+
];
|
|
15
|
+
static args = {
|
|
16
|
+
action: Args.string({
|
|
17
|
+
description: 'Action to perform (get, set, edit, reset)',
|
|
18
|
+
options: ['get', 'set', 'edit', 'reset'],
|
|
19
|
+
required: false,
|
|
20
|
+
}),
|
|
21
|
+
key: Args.string({
|
|
22
|
+
description: 'Configuration key',
|
|
23
|
+
required: false,
|
|
24
|
+
}),
|
|
25
|
+
value: Args.string({
|
|
26
|
+
description: 'Configuration value (for set action)',
|
|
27
|
+
required: false,
|
|
28
|
+
}),
|
|
26
29
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
static flags = {
|
|
31
|
+
global: Flags.boolean({
|
|
32
|
+
char: 'g',
|
|
33
|
+
description: 'Use global configuration (not implemented yet)',
|
|
34
|
+
default: false,
|
|
35
|
+
}),
|
|
33
36
|
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const core_1 = require("@oclif/core");
|
|
40
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
-
const fs = __importStar(require("fs-extra"));
|
|
42
|
-
const path = __importStar(require("path"));
|
|
43
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
44
|
-
const agent_manager_1 = require("../../core/agent-manager");
|
|
45
|
-
class Config extends core_1.Command {
|
|
46
37
|
async run() {
|
|
47
38
|
const { args, flags } = await this.parse(Config);
|
|
48
39
|
if (flags.global) {
|
|
@@ -51,11 +42,11 @@ class Config extends core_1.Command {
|
|
|
51
42
|
const clavixDir = path.join(process.cwd(), '.clavix');
|
|
52
43
|
const configPath = path.join(clavixDir, 'config.json');
|
|
53
44
|
if (!fs.existsSync(clavixDir) || !fs.existsSync(configPath)) {
|
|
54
|
-
this.error(
|
|
45
|
+
this.error(chalk.red('No .clavix directory found.') +
|
|
55
46
|
'\n' +
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
chalk.yellow('Run ') +
|
|
48
|
+
chalk.cyan('clavix init') +
|
|
49
|
+
chalk.yellow(' to initialize Clavix in this project.'));
|
|
59
50
|
}
|
|
60
51
|
// If no action specified, show interactive menu
|
|
61
52
|
if (!args.action) {
|
|
@@ -76,14 +67,14 @@ class Config extends core_1.Command {
|
|
|
76
67
|
await this.resetConfig(configPath);
|
|
77
68
|
break;
|
|
78
69
|
default:
|
|
79
|
-
this.error(
|
|
70
|
+
this.error(chalk.red(`Unknown action: ${args.action}`));
|
|
80
71
|
}
|
|
81
72
|
}
|
|
82
73
|
async showInteractiveMenu(configPath) {
|
|
83
74
|
const config = this.loadConfig(configPath);
|
|
84
|
-
this.log(
|
|
75
|
+
this.log(chalk.bold.cyan('āļø Clavix Configuration\n'));
|
|
85
76
|
this.displayConfig(config);
|
|
86
|
-
const { action } = await
|
|
77
|
+
const { action } = await inquirer.prompt([
|
|
87
78
|
{
|
|
88
79
|
type: 'list',
|
|
89
80
|
name: 'action',
|
|
@@ -117,15 +108,15 @@ class Config extends core_1.Command {
|
|
|
117
108
|
async getConfig(configPath, key) {
|
|
118
109
|
const config = this.loadConfig(configPath);
|
|
119
110
|
if (!key) {
|
|
120
|
-
this.log(
|
|
111
|
+
this.log(chalk.bold.cyan('āļø Current Configuration\n'));
|
|
121
112
|
this.displayConfig(config);
|
|
122
113
|
return;
|
|
123
114
|
}
|
|
124
115
|
const value = this.getNestedValue(config, key);
|
|
125
116
|
if (value === undefined) {
|
|
126
|
-
this.error(
|
|
117
|
+
this.error(chalk.red(`Configuration key "${key}" not found`));
|
|
127
118
|
}
|
|
128
|
-
this.log(
|
|
119
|
+
this.log(chalk.cyan(key) + chalk.gray(': ') + JSON.stringify(value, null, 2));
|
|
129
120
|
}
|
|
130
121
|
async setConfig(configPath, key, value) {
|
|
131
122
|
if (!key || value === undefined) {
|
|
@@ -142,14 +133,14 @@ class Config extends core_1.Command {
|
|
|
142
133
|
}
|
|
143
134
|
this.setNestedValue(config, key, parsedValue);
|
|
144
135
|
this.saveConfig(configPath, config);
|
|
145
|
-
this.log(
|
|
136
|
+
this.log(chalk.green(`ā
Set ${chalk.cyan(key)} to ${JSON.stringify(parsedValue)}`));
|
|
146
137
|
}
|
|
147
138
|
async editConfig(configPath) {
|
|
148
139
|
const config = this.loadConfig(configPath);
|
|
149
140
|
await this.editPreferences(configPath, config);
|
|
150
141
|
}
|
|
151
142
|
async resetConfig(configPath) {
|
|
152
|
-
const { confirm } = await
|
|
143
|
+
const { confirm } = await inquirer.prompt([
|
|
153
144
|
{
|
|
154
145
|
type: 'confirm',
|
|
155
146
|
name: 'confirm',
|
|
@@ -158,21 +149,21 @@ class Config extends core_1.Command {
|
|
|
158
149
|
},
|
|
159
150
|
]);
|
|
160
151
|
if (!confirm) {
|
|
161
|
-
this.log(
|
|
152
|
+
this.log(chalk.gray('Cancelled'));
|
|
162
153
|
return;
|
|
163
154
|
}
|
|
164
155
|
const config = this.loadConfig(configPath);
|
|
165
156
|
const defaultConfig = this.getDefaultConfig(config.agent);
|
|
166
157
|
this.saveConfig(configPath, defaultConfig);
|
|
167
|
-
this.log(
|
|
158
|
+
this.log(chalk.green('ā
Configuration reset to defaults'));
|
|
168
159
|
}
|
|
169
160
|
async changeAgent(configPath, config) {
|
|
170
|
-
const agentManager = new
|
|
161
|
+
const agentManager = new AgentManager();
|
|
171
162
|
const availableAgents = await agentManager.detectAgents();
|
|
172
163
|
if (availableAgents.length === 0) {
|
|
173
164
|
this.error('No supported agents detected in this project');
|
|
174
165
|
}
|
|
175
|
-
const { newAgent } = await
|
|
166
|
+
const { newAgent } = await inquirer.prompt([
|
|
176
167
|
{
|
|
177
168
|
type: 'list',
|
|
178
169
|
name: 'newAgent',
|
|
@@ -185,17 +176,17 @@ class Config extends core_1.Command {
|
|
|
185
176
|
},
|
|
186
177
|
]);
|
|
187
178
|
if (newAgent === config.agent) {
|
|
188
|
-
this.log(
|
|
179
|
+
this.log(chalk.gray('No changes made'));
|
|
189
180
|
return;
|
|
190
181
|
}
|
|
191
182
|
config.agent = newAgent;
|
|
192
183
|
this.saveConfig(configPath, config);
|
|
193
|
-
this.log(
|
|
194
|
-
this.log(
|
|
184
|
+
this.log(chalk.green(`ā
Agent changed to ${newAgent}`));
|
|
185
|
+
this.log(chalk.yellow('\nā ļø Run ') + chalk.cyan('clavix update') + chalk.yellow(' to update slash commands'));
|
|
195
186
|
}
|
|
196
187
|
async editPreferences(configPath, config) {
|
|
197
188
|
const preferences = config.preferences || {};
|
|
198
|
-
const answers = await
|
|
189
|
+
const answers = await inquirer.prompt([
|
|
199
190
|
{
|
|
200
191
|
type: 'confirm',
|
|
201
192
|
name: 'autoOpenOutputs',
|
|
@@ -217,14 +208,14 @@ class Config extends core_1.Command {
|
|
|
217
208
|
]);
|
|
218
209
|
config.preferences = answers;
|
|
219
210
|
this.saveConfig(configPath, config);
|
|
220
|
-
this.log(
|
|
211
|
+
this.log(chalk.green('\nā
Preferences updated'));
|
|
221
212
|
}
|
|
222
213
|
loadConfig(configPath) {
|
|
223
214
|
try {
|
|
224
215
|
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
225
216
|
}
|
|
226
217
|
catch (error) {
|
|
227
|
-
this.error(
|
|
218
|
+
this.error(chalk.red(`Failed to load configuration: ${error.message}`));
|
|
228
219
|
}
|
|
229
220
|
}
|
|
230
221
|
saveConfig(configPath, config) {
|
|
@@ -232,22 +223,22 @@ class Config extends core_1.Command {
|
|
|
232
223
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
233
224
|
}
|
|
234
225
|
catch (error) {
|
|
235
|
-
this.error(
|
|
226
|
+
this.error(chalk.red(`Failed to save configuration: ${error.message}`));
|
|
236
227
|
}
|
|
237
228
|
}
|
|
238
229
|
displayConfig(config) {
|
|
239
|
-
this.log(` ${
|
|
240
|
-
this.log(` ${
|
|
230
|
+
this.log(` ${chalk.gray('Version:')} ${config.version}`);
|
|
231
|
+
this.log(` ${chalk.gray('Agent:')} ${chalk.cyan(config.agent)}`);
|
|
241
232
|
if (config.preferences) {
|
|
242
|
-
this.log(`\n ${
|
|
243
|
-
this.log(` ${
|
|
244
|
-
this.log(` ${
|
|
245
|
-
this.log(` ${
|
|
233
|
+
this.log(`\n ${chalk.bold('Preferences:')}`);
|
|
234
|
+
this.log(` ${chalk.gray('Auto-open outputs:')} ${config.preferences.autoOpenOutputs ? chalk.green('yes') : chalk.gray('no')}`);
|
|
235
|
+
this.log(` ${chalk.gray('Verbose logging:')} ${config.preferences.verboseLogging ? chalk.green('yes') : chalk.gray('no')}`);
|
|
236
|
+
this.log(` ${chalk.gray('Preserve sessions:')} ${config.preferences.preserveSessions !== false ? chalk.green('yes') : chalk.gray('no')}`);
|
|
246
237
|
}
|
|
247
238
|
if (config.outputs) {
|
|
248
|
-
this.log(`\n ${
|
|
249
|
-
this.log(` ${
|
|
250
|
-
this.log(` ${
|
|
239
|
+
this.log(`\n ${chalk.bold('Outputs:')}`);
|
|
240
|
+
this.log(` ${chalk.gray('Path:')} ${config.outputs.path || '.clavix/outputs'}`);
|
|
241
|
+
this.log(` ${chalk.gray('Format:')} ${config.outputs.format || 'markdown'}`);
|
|
251
242
|
}
|
|
252
243
|
this.log('');
|
|
253
244
|
}
|
|
@@ -291,34 +282,4 @@ class Config extends core_1.Command {
|
|
|
291
282
|
};
|
|
292
283
|
}
|
|
293
284
|
}
|
|
294
|
-
Config.description = 'Manage Clavix configuration';
|
|
295
|
-
Config.examples = [
|
|
296
|
-
'<%= config.bin %> <%= command.id %>',
|
|
297
|
-
'<%= config.bin %> <%= command.id %> get agent',
|
|
298
|
-
'<%= config.bin %> <%= command.id %> set agent cursor',
|
|
299
|
-
'<%= config.bin %> <%= command.id %> edit',
|
|
300
|
-
];
|
|
301
|
-
Config.args = {
|
|
302
|
-
action: core_1.Args.string({
|
|
303
|
-
description: 'Action to perform (get, set, edit, reset)',
|
|
304
|
-
options: ['get', 'set', 'edit', 'reset'],
|
|
305
|
-
required: false,
|
|
306
|
-
}),
|
|
307
|
-
key: core_1.Args.string({
|
|
308
|
-
description: 'Configuration key',
|
|
309
|
-
required: false,
|
|
310
|
-
}),
|
|
311
|
-
value: core_1.Args.string({
|
|
312
|
-
description: 'Configuration value (for set action)',
|
|
313
|
-
required: false,
|
|
314
|
-
}),
|
|
315
|
-
};
|
|
316
|
-
Config.flags = {
|
|
317
|
-
global: core_1.Flags.boolean({
|
|
318
|
-
char: 'g',
|
|
319
|
-
description: 'Use global configuration (not implemented yet)',
|
|
320
|
-
default: false,
|
|
321
|
-
}),
|
|
322
|
-
};
|
|
323
|
-
exports.default = Config;
|
|
324
285
|
//# sourceMappingURL=config.js.map
|
|
@@ -3,11 +3,11 @@ export default class Deep extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
'clear-only': import("@oclif/core/
|
|
7
|
-
'framework-info': import("@oclif/core/
|
|
6
|
+
'clear-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
'framework-info': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
8
|
};
|
|
9
9
|
static args: {
|
|
10
|
-
prompt: import("@oclif/core/
|
|
10
|
+
prompt: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
11
11
|
};
|
|
12
12
|
run(): Promise<void>;
|
|
13
13
|
private displayOutput;
|
|
@@ -1,13 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { PromptOptimizer } from '../../core/prompt-optimizer.js';
|
|
4
|
+
import { PromptManager } from '../../core/prompt-manager.js';
|
|
5
|
+
export default class Deep extends Command {
|
|
6
|
+
static description = 'Perform comprehensive deep analysis using full CLEAR framework (Concise, Logical, Explicit, Adaptive, Reflective)';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %> "Create a login page"',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> "Build an API for user management"',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
'clear-only': Flags.boolean({
|
|
13
|
+
description: 'Show only CLEAR analysis without improved prompt',
|
|
14
|
+
default: false,
|
|
15
|
+
}),
|
|
16
|
+
'framework-info': Flags.boolean({
|
|
17
|
+
description: 'Display CLEAR framework information',
|
|
18
|
+
default: false,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
static args = {
|
|
22
|
+
prompt: Args.string({
|
|
23
|
+
description: 'The prompt to analyze deeply',
|
|
24
|
+
required: true,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
11
27
|
async run() {
|
|
12
28
|
const { args, flags } = await this.parse(Deep);
|
|
13
29
|
// Handle --framework-info flag
|
|
@@ -16,12 +32,12 @@ class Deep extends core_1.Command {
|
|
|
16
32
|
return;
|
|
17
33
|
}
|
|
18
34
|
if (!args.prompt || args.prompt.trim().length === 0) {
|
|
19
|
-
console.log(
|
|
20
|
-
console.log(
|
|
35
|
+
console.log(chalk.red('\nā Please provide a prompt to analyze\n'));
|
|
36
|
+
console.log(chalk.gray('Example:'), chalk.cyan('clavix deep "Create a login page"'));
|
|
21
37
|
return;
|
|
22
38
|
}
|
|
23
|
-
console.log(
|
|
24
|
-
const optimizer = new
|
|
39
|
+
console.log(chalk.bold.cyan('\nš Performing deep analysis using full CLEAR framework...\n'));
|
|
40
|
+
const optimizer = new PromptOptimizer();
|
|
25
41
|
// Get CLEAR analysis (deep mode - all 5 components)
|
|
26
42
|
const clearResult = optimizer.applyCLEARFramework(args.prompt, 'deep');
|
|
27
43
|
const clearScore = optimizer.calculateCLEARScore(clearResult);
|
|
@@ -37,15 +53,15 @@ class Deep extends core_1.Command {
|
|
|
37
53
|
await this.savePrompt(clearResult.improvedPrompt, args.prompt, clearScore);
|
|
38
54
|
}
|
|
39
55
|
displayOutput(result, clearResult, clearScore) {
|
|
40
|
-
console.log(
|
|
56
|
+
console.log(chalk.bold.cyan('šÆ CLEAR Framework Deep Analysis\n'));
|
|
41
57
|
// Display CLEAR Assessment (all 5 components for deep mode)
|
|
42
|
-
console.log(
|
|
58
|
+
console.log(chalk.bold('š Framework Assessment:\n'));
|
|
43
59
|
const getScoreColor = (score) => {
|
|
44
60
|
if (score >= 80)
|
|
45
|
-
return
|
|
61
|
+
return chalk.green;
|
|
46
62
|
if (score >= 60)
|
|
47
|
-
return
|
|
48
|
-
return
|
|
63
|
+
return chalk.yellow;
|
|
64
|
+
return chalk.red;
|
|
49
65
|
};
|
|
50
66
|
// C, L, E (same as fast mode)
|
|
51
67
|
const cColor = getScoreColor(clearScore.conciseness);
|
|
@@ -83,86 +99,86 @@ class Deep extends core_1.Command {
|
|
|
83
99
|
const overallColor = getScoreColor(clearScore.overall);
|
|
84
100
|
console.log(overallColor.bold(` Overall CLEAR Score: ${clearScore.overall.toFixed(0)}% (${clearScore.rating})\n`));
|
|
85
101
|
// Display improved prompt
|
|
86
|
-
console.log(
|
|
87
|
-
console.log(
|
|
102
|
+
console.log(chalk.bold.cyan('⨠CLEAR-Optimized Prompt:\n'));
|
|
103
|
+
console.log(chalk.dim('ā'.repeat(80)));
|
|
88
104
|
console.log(clearResult.improvedPrompt);
|
|
89
|
-
console.log(
|
|
105
|
+
console.log(chalk.dim('ā'.repeat(80)));
|
|
90
106
|
console.log();
|
|
91
107
|
// Changes made
|
|
92
108
|
if (clearResult.changesSummary.length > 0) {
|
|
93
|
-
console.log(
|
|
109
|
+
console.log(chalk.bold.magenta('š CLEAR Changes Made:\n'));
|
|
94
110
|
clearResult.changesSummary.forEach((change) => {
|
|
95
|
-
console.log(
|
|
111
|
+
console.log(chalk.magenta(` [${change.component}] ${change.change}`));
|
|
96
112
|
});
|
|
97
113
|
console.log();
|
|
98
114
|
}
|
|
99
115
|
// Adaptive Variations (A)
|
|
100
116
|
if (clearResult.adaptiveness) {
|
|
101
|
-
console.log(
|
|
117
|
+
console.log(chalk.bold.cyan('š Adaptive Variations:\n'));
|
|
102
118
|
if (clearResult.adaptiveness.alternativePhrasings.length > 0) {
|
|
103
|
-
console.log(
|
|
119
|
+
console.log(chalk.cyan(' Alternative Phrasings:'));
|
|
104
120
|
clearResult.adaptiveness.alternativePhrasings.forEach((p, i) => {
|
|
105
|
-
console.log(
|
|
121
|
+
console.log(chalk.cyan(` ${i + 1}. ${p}`));
|
|
106
122
|
});
|
|
107
123
|
console.log();
|
|
108
124
|
}
|
|
109
125
|
if (clearResult.adaptiveness.alternativeStructures.length > 0) {
|
|
110
|
-
console.log(
|
|
126
|
+
console.log(chalk.cyan(' Alternative Structures:'));
|
|
111
127
|
clearResult.adaptiveness.alternativeStructures.forEach((alt, i) => {
|
|
112
|
-
console.log(
|
|
113
|
-
console.log(
|
|
128
|
+
console.log(chalk.cyan(` ${i + 1}. ${alt.name}`));
|
|
129
|
+
console.log(chalk.gray(` ${alt.benefits}`));
|
|
114
130
|
});
|
|
115
131
|
console.log();
|
|
116
132
|
}
|
|
117
133
|
if (clearResult.adaptiveness.temperatureRecommendation !== undefined) {
|
|
118
|
-
console.log(
|
|
134
|
+
console.log(chalk.cyan(` Recommended Temperature: ${clearResult.adaptiveness.temperatureRecommendation}`));
|
|
119
135
|
console.log();
|
|
120
136
|
}
|
|
121
137
|
}
|
|
122
138
|
// Reflection Checklist (R)
|
|
123
139
|
if (clearResult.reflectiveness) {
|
|
124
|
-
console.log(
|
|
140
|
+
console.log(chalk.bold.yellow('š¤ Reflection Checklist:\n'));
|
|
125
141
|
if (clearResult.reflectiveness.validationChecklist.length > 0) {
|
|
126
|
-
console.log(
|
|
142
|
+
console.log(chalk.yellow(' Validation Steps:'));
|
|
127
143
|
clearResult.reflectiveness.validationChecklist.forEach((item) => {
|
|
128
|
-
console.log(
|
|
144
|
+
console.log(chalk.yellow(` ā ${item}`));
|
|
129
145
|
});
|
|
130
146
|
console.log();
|
|
131
147
|
}
|
|
132
148
|
if (clearResult.reflectiveness.edgeCases.length > 0) {
|
|
133
|
-
console.log(
|
|
149
|
+
console.log(chalk.yellow(' Edge Cases to Consider:'));
|
|
134
150
|
clearResult.reflectiveness.edgeCases.forEach((ec) => {
|
|
135
|
-
console.log(
|
|
151
|
+
console.log(chalk.yellow(` ⢠${ec}`));
|
|
136
152
|
});
|
|
137
153
|
console.log();
|
|
138
154
|
}
|
|
139
155
|
if (clearResult.reflectiveness.potentialIssues.length > 0) {
|
|
140
|
-
console.log(
|
|
156
|
+
console.log(chalk.yellow(' What Could Go Wrong:'));
|
|
141
157
|
clearResult.reflectiveness.potentialIssues.forEach((issue) => {
|
|
142
|
-
console.log(
|
|
158
|
+
console.log(chalk.yellow(` ⢠${issue}`));
|
|
143
159
|
});
|
|
144
160
|
console.log();
|
|
145
161
|
}
|
|
146
162
|
if (clearResult.reflectiveness.factCheckingSteps.length > 0) {
|
|
147
|
-
console.log(
|
|
163
|
+
console.log(chalk.yellow(' Fact-Checking Steps:'));
|
|
148
164
|
clearResult.reflectiveness.factCheckingSteps.forEach((step) => {
|
|
149
|
-
console.log(
|
|
165
|
+
console.log(chalk.yellow(` ⢠${step}`));
|
|
150
166
|
});
|
|
151
167
|
console.log();
|
|
152
168
|
}
|
|
153
169
|
}
|
|
154
|
-
console.log(
|
|
170
|
+
console.log(chalk.gray('š” Full CLEAR framework analysis complete!\n'));
|
|
155
171
|
}
|
|
156
172
|
displayCLEAROnlyAnalysis(clearResult, clearScore) {
|
|
157
|
-
console.log(
|
|
173
|
+
console.log(chalk.bold.cyan('šÆ CLEAR Framework Analysis Only (Deep Mode)\n'));
|
|
158
174
|
const getScoreColor = (score) => {
|
|
159
175
|
if (score >= 80)
|
|
160
|
-
return
|
|
176
|
+
return chalk.green;
|
|
161
177
|
if (score >= 60)
|
|
162
|
-
return
|
|
163
|
-
return
|
|
178
|
+
return chalk.yellow;
|
|
179
|
+
return chalk.red;
|
|
164
180
|
};
|
|
165
|
-
console.log(
|
|
181
|
+
console.log(chalk.bold('š Complete CLEAR Assessment:\n'));
|
|
166
182
|
// Conciseness
|
|
167
183
|
const cColor = getScoreColor(clearScore.conciseness);
|
|
168
184
|
console.log(cColor.bold(` [C] Conciseness: ${clearScore.conciseness.toFixed(0)}%`));
|
|
@@ -221,11 +237,11 @@ class Deep extends core_1.Command {
|
|
|
221
237
|
// Overall
|
|
222
238
|
const overallColor = getScoreColor(clearScore.overall);
|
|
223
239
|
console.log(overallColor.bold(` Overall Score: ${clearScore.overall.toFixed(0)}% (${clearScore.rating})\n`));
|
|
224
|
-
console.log(
|
|
240
|
+
console.log(chalk.gray('Use without --clear-only flag to see improved prompt and detailed sections.\n'));
|
|
225
241
|
}
|
|
226
242
|
async savePrompt(improvedPrompt, originalPrompt, clearScore) {
|
|
227
243
|
try {
|
|
228
|
-
const promptManager = new
|
|
244
|
+
const promptManager = new PromptManager();
|
|
229
245
|
// Build content with full CLEAR scores (including A and R)
|
|
230
246
|
const content = `# Improved Prompt
|
|
231
247
|
|
|
@@ -245,85 +261,63 @@ ${originalPrompt}
|
|
|
245
261
|
\`\`\`
|
|
246
262
|
`;
|
|
247
263
|
const metadata = await promptManager.savePrompt(content, 'deep', originalPrompt);
|
|
248
|
-
console.log(
|
|
249
|
-
console.log(
|
|
250
|
-
console.log(
|
|
251
|
-
console.log(
|
|
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`));
|
|
252
268
|
console.log();
|
|
253
269
|
}
|
|
254
270
|
catch (error) {
|
|
255
271
|
// Don't fail the command if saving fails
|
|
256
|
-
console.log(
|
|
272
|
+
console.log(chalk.yellow(`\nā ļø Could not save prompt: ${error}`));
|
|
257
273
|
}
|
|
258
274
|
}
|
|
259
275
|
displayFrameworkInfo() {
|
|
260
|
-
console.log(
|
|
261
|
-
console.log(
|
|
276
|
+
console.log(chalk.bold.cyan('\nšÆ CLEAR Framework for Prompt Engineering\n'));
|
|
277
|
+
console.log(chalk.bold('What is CLEAR?\n'));
|
|
262
278
|
console.log('CLEAR is an academically-validated framework for creating effective prompts:');
|
|
263
279
|
console.log();
|
|
264
|
-
console.log(
|
|
265
|
-
console.log(
|
|
266
|
-
console.log(
|
|
267
|
-
console.log(
|
|
280
|
+
console.log(chalk.green.bold(' [C] Concise'));
|
|
281
|
+
console.log(chalk.green(' Eliminate verbosity and pleasantries'));
|
|
282
|
+
console.log(chalk.green(' Focus on essential information'));
|
|
283
|
+
console.log(chalk.green(' Example: "Please could you maybe help" ā "Create"'));
|
|
268
284
|
console.log();
|
|
269
|
-
console.log(
|
|
270
|
-
console.log(
|
|
271
|
-
console.log(
|
|
272
|
-
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'));
|
|
273
289
|
console.log();
|
|
274
|
-
console.log(
|
|
275
|
-
console.log(
|
|
276
|
-
console.log(
|
|
277
|
-
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"'));
|
|
278
294
|
console.log();
|
|
279
|
-
console.log(
|
|
280
|
-
console.log(
|
|
281
|
-
console.log(
|
|
282
|
-
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'));
|
|
283
299
|
console.log();
|
|
284
|
-
console.log(
|
|
285
|
-
console.log(
|
|
286
|
-
console.log(
|
|
287
|
-
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'));
|
|
288
304
|
console.log();
|
|
289
|
-
console.log(
|
|
305
|
+
console.log(chalk.bold('Academic Foundation:\n'));
|
|
290
306
|
console.log(' Developed by: Dr. Leo Lo');
|
|
291
307
|
console.log(' Institution: Dean of Libraries, University of New Mexico');
|
|
292
308
|
console.log(' Published: Journal of Academic Librarianship, July 2023');
|
|
293
309
|
console.log(' Paper: "The CLEAR Path: A Framework for Enhancing Information');
|
|
294
310
|
console.log(' Literacy through Prompt Engineering"');
|
|
295
311
|
console.log();
|
|
296
|
-
console.log(
|
|
312
|
+
console.log(chalk.bold('Resources:\n'));
|
|
297
313
|
console.log(' ⢠Framework Guide: https://guides.library.tamucc.edu/prompt-engineering/clear');
|
|
298
314
|
console.log(' ⢠Research Paper: https://digitalrepository.unm.edu/cgi/viewcontent.cgi?article=1214&context=ulls_fsp');
|
|
299
315
|
console.log();
|
|
300
|
-
console.log(
|
|
301
|
-
console.log(
|
|
302
|
-
console.log(
|
|
303
|
-
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'));
|
|
304
320
|
console.log();
|
|
305
321
|
}
|
|
306
322
|
}
|
|
307
|
-
Deep.description = 'Perform comprehensive deep analysis using full CLEAR framework (Concise, Logical, Explicit, Adaptive, Reflective)';
|
|
308
|
-
Deep.examples = [
|
|
309
|
-
'<%= config.bin %> <%= command.id %> "Create a login page"',
|
|
310
|
-
'<%= config.bin %> <%= command.id %> "Build an API for user management"',
|
|
311
|
-
];
|
|
312
|
-
Deep.flags = {
|
|
313
|
-
'clear-only': core_1.Flags.boolean({
|
|
314
|
-
description: 'Show only CLEAR analysis without improved prompt',
|
|
315
|
-
default: false,
|
|
316
|
-
}),
|
|
317
|
-
'framework-info': core_1.Flags.boolean({
|
|
318
|
-
description: 'Display CLEAR framework information',
|
|
319
|
-
default: false,
|
|
320
|
-
}),
|
|
321
|
-
};
|
|
322
|
-
Deep.args = {
|
|
323
|
-
prompt: core_1.Args.string({
|
|
324
|
-
description: 'The prompt to analyze deeply',
|
|
325
|
-
required: true,
|
|
326
|
-
}),
|
|
327
|
-
};
|
|
328
|
-
exports.default = Deep;
|
|
329
323
|
//# sourceMappingURL=deep.js.map
|