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,210 +0,0 @@
|
|
|
1
|
-
import { Command, Flags } from '@oclif/core';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import inquirer from 'inquirer';
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import { SessionManager } from '../../core/session-manager.js';
|
|
6
|
-
export default class Start extends Command {
|
|
7
|
-
static description = 'Start an interactive conversation session for iterative prompt development';
|
|
8
|
-
static examples = [
|
|
9
|
-
'<%= config.bin %> <%= command.id %>',
|
|
10
|
-
'<%= config.bin %> <%= command.id %> --project my-app',
|
|
11
|
-
'<%= config.bin %> <%= command.id %> --description "Planning new feature"',
|
|
12
|
-
];
|
|
13
|
-
static flags = {
|
|
14
|
-
project: Flags.string({
|
|
15
|
-
char: 'p',
|
|
16
|
-
description: 'Project name for this session',
|
|
17
|
-
}),
|
|
18
|
-
description: Flags.string({
|
|
19
|
-
char: 'd',
|
|
20
|
-
description: 'Session description',
|
|
21
|
-
}),
|
|
22
|
-
tags: Flags.string({
|
|
23
|
-
char: 't',
|
|
24
|
-
description: 'Comma-separated tags for this session',
|
|
25
|
-
multiple: false,
|
|
26
|
-
}),
|
|
27
|
-
};
|
|
28
|
-
sessionManager;
|
|
29
|
-
sessionId = null;
|
|
30
|
-
isExiting = false;
|
|
31
|
-
constructor(argv, config) {
|
|
32
|
-
super(argv, config);
|
|
33
|
-
this.sessionManager = new SessionManager();
|
|
34
|
-
}
|
|
35
|
-
async run() {
|
|
36
|
-
const { flags } = await this.parse(Start);
|
|
37
|
-
try {
|
|
38
|
-
// Initialize new session
|
|
39
|
-
const tags = flags.tags ? flags.tags.split(',').map((t) => t.trim()) : undefined;
|
|
40
|
-
const session = await this.sessionManager.createSession({
|
|
41
|
-
projectName: flags.project,
|
|
42
|
-
description: flags.description,
|
|
43
|
-
tags,
|
|
44
|
-
});
|
|
45
|
-
this.sessionId = session.id;
|
|
46
|
-
// Display introductory prompt
|
|
47
|
-
this.displayIntroduction(session.projectName, session.id);
|
|
48
|
-
// Set up graceful exit handler
|
|
49
|
-
this.setupExitHandler();
|
|
50
|
-
// Enter conversation loop
|
|
51
|
-
await this.conversationLoop();
|
|
52
|
-
// Display session info on exit
|
|
53
|
-
if (!this.isExiting) {
|
|
54
|
-
await this.displayExitInfo();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
|
|
59
|
-
this.error(errorMessage);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Display introduction and instructions
|
|
64
|
-
*/
|
|
65
|
-
displayIntroduction(projectName, sessionId) {
|
|
66
|
-
console.log(chalk.bold.cyan('\n💬 Conversational Session Started\n'));
|
|
67
|
-
console.log(chalk.gray('━'.repeat(60)));
|
|
68
|
-
console.log();
|
|
69
|
-
console.log(chalk.bold('Project:'), chalk.cyan(projectName));
|
|
70
|
-
console.log(chalk.bold('Session ID:'), chalk.dim(sessionId));
|
|
71
|
-
console.log();
|
|
72
|
-
console.log(chalk.gray('━'.repeat(60)));
|
|
73
|
-
console.log();
|
|
74
|
-
console.log(chalk.bold('How it works:'));
|
|
75
|
-
console.log(chalk.gray(' • Share your ideas and requirements naturally'));
|
|
76
|
-
console.log(chalk.gray(' • The conversation is tracked and saved'));
|
|
77
|
-
console.log(chalk.gray(' • Use ') + chalk.cyan('/clavix:summarize') + chalk.gray(' later to extract structured requirements'));
|
|
78
|
-
console.log();
|
|
79
|
-
console.log(chalk.bold('Commands:'));
|
|
80
|
-
console.log(chalk.gray(' • Type ') + chalk.yellow('exit') + chalk.gray(' or ') + chalk.yellow('quit') + chalk.gray(' to end the session'));
|
|
81
|
-
console.log(chalk.gray(' • Press ') + chalk.yellow('Ctrl+C') + chalk.gray(' to exit'));
|
|
82
|
-
console.log();
|
|
83
|
-
console.log(chalk.gray('━'.repeat(60)));
|
|
84
|
-
console.log();
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Main conversation loop
|
|
88
|
-
*/
|
|
89
|
-
async conversationLoop() {
|
|
90
|
-
let messageCount = 0;
|
|
91
|
-
while (!this.isExiting) {
|
|
92
|
-
try {
|
|
93
|
-
// Get user input
|
|
94
|
-
const response = await inquirer.prompt([
|
|
95
|
-
{
|
|
96
|
-
type: 'input',
|
|
97
|
-
name: 'message',
|
|
98
|
-
message: chalk.bold.cyan('You:'),
|
|
99
|
-
prefix: '',
|
|
100
|
-
},
|
|
101
|
-
]);
|
|
102
|
-
const userMessage = response.message.trim();
|
|
103
|
-
// Check for exit commands
|
|
104
|
-
if (this.isExitCommand(userMessage)) {
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
// Skip empty messages
|
|
108
|
-
if (!userMessage) {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
// Log user message to session
|
|
112
|
-
if (this.sessionId) {
|
|
113
|
-
await this.sessionManager.addMessage(this.sessionId, 'user', userMessage);
|
|
114
|
-
messageCount++;
|
|
115
|
-
}
|
|
116
|
-
// Display acknowledgment
|
|
117
|
-
this.displayAcknowledgment(messageCount);
|
|
118
|
-
console.log(); // Add spacing
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
// Handle Ctrl+C or other interrupts
|
|
122
|
-
if (error.isTtyError || error.message?.includes('User force closed')) {
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
throw error;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Display acknowledgment after user input
|
|
131
|
-
*/
|
|
132
|
-
displayAcknowledgment(messageCount) {
|
|
133
|
-
const acknowledgments = [
|
|
134
|
-
'Got it! Continue sharing your thoughts.',
|
|
135
|
-
'Thanks! What else should I know?',
|
|
136
|
-
'Understood. Tell me more.',
|
|
137
|
-
'Noted. What\'s next?',
|
|
138
|
-
'Captured. Anything else?',
|
|
139
|
-
'Recorded. Keep going!',
|
|
140
|
-
];
|
|
141
|
-
const index = (messageCount - 1) % acknowledgments.length;
|
|
142
|
-
const message = acknowledgments[index];
|
|
143
|
-
console.log(chalk.dim('Assistant:'), chalk.gray(message));
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Check if message is an exit command
|
|
147
|
-
*/
|
|
148
|
-
isExitCommand(message) {
|
|
149
|
-
const exitCommands = ['exit', 'quit', 'bye', 'done'];
|
|
150
|
-
const lower = message.toLowerCase();
|
|
151
|
-
return exitCommands.includes(lower);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Set up handler for Ctrl+C and other exit signals
|
|
155
|
-
*/
|
|
156
|
-
setupExitHandler() {
|
|
157
|
-
const handler = async () => {
|
|
158
|
-
if (!this.isExiting) {
|
|
159
|
-
this.isExiting = true;
|
|
160
|
-
console.log(); // New line after ^C
|
|
161
|
-
await this.displayExitInfo();
|
|
162
|
-
process.exit(0);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
process.on('SIGINT', handler);
|
|
166
|
-
process.on('SIGTERM', handler);
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Display session information on exit
|
|
170
|
-
*/
|
|
171
|
-
async displayExitInfo() {
|
|
172
|
-
if (!this.sessionId) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
console.log();
|
|
176
|
-
console.log(chalk.gray('━'.repeat(60)));
|
|
177
|
-
console.log();
|
|
178
|
-
const session = await this.sessionManager.getSession(this.sessionId);
|
|
179
|
-
if (session) {
|
|
180
|
-
console.log(chalk.bold.green('Session saved successfully!\n'));
|
|
181
|
-
console.log(chalk.bold('Session Details:'));
|
|
182
|
-
console.log(chalk.gray(' Session ID:'), chalk.cyan(session.id));
|
|
183
|
-
console.log(chalk.gray(' Project:'), chalk.cyan(session.projectName));
|
|
184
|
-
console.log(chalk.gray(' Messages:'), chalk.cyan(session.messages.length.toString()));
|
|
185
|
-
console.log(chalk.gray(' Created:'), chalk.dim(session.created.toLocaleString()));
|
|
186
|
-
if (session.tags && session.tags.length > 0) {
|
|
187
|
-
console.log(chalk.gray(' Tags:'), chalk.cyan(session.tags.join(', ')));
|
|
188
|
-
}
|
|
189
|
-
if (session.description) {
|
|
190
|
-
console.log(chalk.gray(' Description:'), chalk.dim(session.description));
|
|
191
|
-
}
|
|
192
|
-
const sessionPath = path.join('.clavix/sessions', `${session.id}.json`);
|
|
193
|
-
console.log();
|
|
194
|
-
console.log(chalk.bold('Session file:'));
|
|
195
|
-
console.log(chalk.dim(` ${sessionPath}`));
|
|
196
|
-
console.log();
|
|
197
|
-
console.log(chalk.bold('Next steps:'));
|
|
198
|
-
console.log(chalk.gray(' • Resume: ') + chalk.cyan(`clavix start --resume ${session.id}`));
|
|
199
|
-
console.log(chalk.gray(' • Summarize: ') + chalk.cyan(`clavix summarize ${session.id}`));
|
|
200
|
-
console.log(chalk.gray(' • View: ') + chalk.cyan(`clavix show ${session.id}`));
|
|
201
|
-
console.log();
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
console.log(chalk.yellow('Warning: Could not retrieve session information\n'));
|
|
205
|
-
}
|
|
206
|
-
console.log(chalk.gray('━'.repeat(60)));
|
|
207
|
-
console.log();
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
//# sourceMappingURL=start.js.map
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class Summarize extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static args: {
|
|
6
|
-
sessionId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
-
};
|
|
8
|
-
static flags: {
|
|
9
|
-
active: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
};
|
|
12
|
-
run(): Promise<void>;
|
|
13
|
-
private displayAnalysisSummary;
|
|
14
|
-
private applyOptimization;
|
|
15
|
-
private sanitizeProjectName;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=summarize.d.ts.map
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { SessionManager } from '../../core/session-manager.js';
|
|
5
|
-
import { ConversationAnalyzer } from '../../core/conversation-analyzer.js';
|
|
6
|
-
import { FileSystem } from '../../utils/file-system.js';
|
|
7
|
-
import { UniversalOptimizer } from '../../core/intelligence/index.js';
|
|
8
|
-
export default class Summarize extends Command {
|
|
9
|
-
static description = 'Analyze a conversation session and extract structured requirements with automatic optimization';
|
|
10
|
-
static examples = [
|
|
11
|
-
'<%= config.bin %> <%= command.id %>',
|
|
12
|
-
'<%= config.bin %> <%= command.id %> <session-id>',
|
|
13
|
-
'<%= config.bin %> <%= command.id %> --active',
|
|
14
|
-
];
|
|
15
|
-
static args = {
|
|
16
|
-
sessionId: Args.string({
|
|
17
|
-
description: 'Session ID to summarize',
|
|
18
|
-
required: false,
|
|
19
|
-
}),
|
|
20
|
-
};
|
|
21
|
-
static flags = {
|
|
22
|
-
active: Flags.boolean({
|
|
23
|
-
char: 'a',
|
|
24
|
-
description: 'Summarize the most recent active session',
|
|
25
|
-
default: false,
|
|
26
|
-
}),
|
|
27
|
-
output: Flags.string({
|
|
28
|
-
char: 'o',
|
|
29
|
-
description: 'Output directory (defaults to .clavix/outputs/[session-name])',
|
|
30
|
-
}),
|
|
31
|
-
};
|
|
32
|
-
async run() {
|
|
33
|
-
const { args, flags } = await this.parse(Summarize);
|
|
34
|
-
console.log(chalk.bold.cyan('\n📊 Conversation Summarizer\n'));
|
|
35
|
-
try {
|
|
36
|
-
const manager = new SessionManager();
|
|
37
|
-
const analyzer = new ConversationAnalyzer();
|
|
38
|
-
// Load session
|
|
39
|
-
let session;
|
|
40
|
-
if (args.sessionId) {
|
|
41
|
-
console.log(chalk.dim(`Loading session ${args.sessionId}...\n`));
|
|
42
|
-
session = await manager.getSession(args.sessionId);
|
|
43
|
-
if (!session) {
|
|
44
|
-
this.error(`Session not found: ${args.sessionId}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (flags.active) {
|
|
48
|
-
console.log(chalk.dim('Loading most recent active session...\n'));
|
|
49
|
-
session = await manager.getActiveSession();
|
|
50
|
-
if (!session) {
|
|
51
|
-
this.error('No active session found\n\nHint: Use "clavix list" to see all sessions');
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
// Try to get active session by default
|
|
56
|
-
session = await manager.getActiveSession();
|
|
57
|
-
if (!session) {
|
|
58
|
-
this.error('No active session found\n\n' +
|
|
59
|
-
'Usage:\n' +
|
|
60
|
-
' • clavix summarize <session-id> - Summarize specific session\n' +
|
|
61
|
-
' • clavix summarize --active - Summarize most recent active session\n' +
|
|
62
|
-
' • clavix list - View all sessions');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Display session info
|
|
66
|
-
console.log(chalk.bold('Session Information:'));
|
|
67
|
-
console.log(chalk.gray(' ID:'), chalk.cyan(session.id));
|
|
68
|
-
console.log(chalk.gray(' Project:'), chalk.cyan(session.projectName));
|
|
69
|
-
console.log(chalk.gray(' Messages:'), chalk.cyan(session.messages.length.toString()));
|
|
70
|
-
console.log(chalk.gray(' Created:'), chalk.dim(session.created.toLocaleString()));
|
|
71
|
-
console.log();
|
|
72
|
-
// Check if session has messages
|
|
73
|
-
if (session.messages.length === 0) {
|
|
74
|
-
this.error('Session has no messages to analyze');
|
|
75
|
-
}
|
|
76
|
-
// Analyze conversation
|
|
77
|
-
console.log(chalk.dim('Analyzing conversation...\n'));
|
|
78
|
-
const analysis = analyzer.analyze(session);
|
|
79
|
-
// Display analysis summary
|
|
80
|
-
this.displayAnalysisSummary(analysis);
|
|
81
|
-
// Generate outputs
|
|
82
|
-
console.log(chalk.dim('\nGenerating output files...\n'));
|
|
83
|
-
const outputDir = flags.output || path.join('.clavix/outputs', this.sanitizeProjectName(session.projectName));
|
|
84
|
-
await FileSystem.ensureDir(outputDir);
|
|
85
|
-
// Generate mini-PRD
|
|
86
|
-
const miniPrdContent = analyzer.generateMiniPrd(session, analysis);
|
|
87
|
-
const miniPrdPath = path.join(outputDir, 'mini-prd.md');
|
|
88
|
-
await FileSystem.writeFileAtomic(miniPrdPath, miniPrdContent);
|
|
89
|
-
// Generate optimized prompt (initial extraction)
|
|
90
|
-
const rawPromptContent = analyzer.generateOptimizedPrompt(session, analysis);
|
|
91
|
-
// Save original extracted version
|
|
92
|
-
const originalPromptPath = path.join(outputDir, 'original-prompt.md');
|
|
93
|
-
await FileSystem.writeFileAtomic(originalPromptPath, rawPromptContent);
|
|
94
|
-
// Always apply optimization with Universal Optimizer
|
|
95
|
-
await this.applyOptimization(rawPromptContent, outputDir);
|
|
96
|
-
// Display success
|
|
97
|
-
console.log(chalk.bold.green('\n✓ Analysis complete!\n'));
|
|
98
|
-
console.log(chalk.bold('Generated files:'));
|
|
99
|
-
console.log(chalk.gray(' • ') +
|
|
100
|
-
chalk.cyan('mini-prd.md') +
|
|
101
|
-
chalk.dim(' - Structured requirements document'));
|
|
102
|
-
console.log(chalk.gray(' • ') + chalk.cyan('original-prompt.md') + chalk.dim(' - Raw extracted prompt'));
|
|
103
|
-
console.log(chalk.gray(' • ') +
|
|
104
|
-
chalk.cyan('optimized-prompt.md') +
|
|
105
|
-
chalk.dim(' - Enhanced AI-ready prompt'));
|
|
106
|
-
console.log();
|
|
107
|
-
console.log(chalk.bold('Output location:'));
|
|
108
|
-
console.log(chalk.dim(` ${outputDir}`));
|
|
109
|
-
console.log();
|
|
110
|
-
console.log(chalk.bold('💡 Next steps:'));
|
|
111
|
-
console.log(chalk.gray(' • Use ') +
|
|
112
|
-
chalk.cyan('optimized-prompt.md') +
|
|
113
|
-
chalk.gray(' for best AI results'));
|
|
114
|
-
console.log(chalk.gray(' • Share ') +
|
|
115
|
-
chalk.cyan('mini-prd.md') +
|
|
116
|
-
chalk.gray(' with your team for alignment'));
|
|
117
|
-
console.log(chalk.gray(' • Run ') +
|
|
118
|
-
chalk.cyan('clavix implement') +
|
|
119
|
-
chalk.gray(' to start development'));
|
|
120
|
-
console.log();
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
|
|
124
|
-
this.error(errorMessage);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
displayAnalysisSummary(analysis) {
|
|
128
|
-
console.log(chalk.bold.cyan('Analysis Summary:\n'));
|
|
129
|
-
if (analysis.keyRequirements.length > 0) {
|
|
130
|
-
console.log(chalk.bold('Key Requirements:'));
|
|
131
|
-
analysis.keyRequirements.slice(0, 5).forEach((req, i) => {
|
|
132
|
-
console.log(chalk.gray(` ${i + 1}. ${req}`));
|
|
133
|
-
});
|
|
134
|
-
if (analysis.keyRequirements.length > 5) {
|
|
135
|
-
console.log(chalk.dim(` ... and ${analysis.keyRequirements.length - 5} more`));
|
|
136
|
-
}
|
|
137
|
-
console.log();
|
|
138
|
-
}
|
|
139
|
-
if (analysis.technicalConstraints.length > 0) {
|
|
140
|
-
console.log(chalk.bold('Technical Constraints:'));
|
|
141
|
-
analysis.technicalConstraints.slice(0, 3).forEach((constraint) => {
|
|
142
|
-
console.log(chalk.gray(` • ${constraint}`));
|
|
143
|
-
});
|
|
144
|
-
if (analysis.technicalConstraints.length > 3) {
|
|
145
|
-
console.log(chalk.dim(` ... and ${analysis.technicalConstraints.length - 3} more`));
|
|
146
|
-
}
|
|
147
|
-
console.log();
|
|
148
|
-
}
|
|
149
|
-
if (analysis.successCriteria.length > 0) {
|
|
150
|
-
console.log(chalk.bold('Success Criteria:'));
|
|
151
|
-
analysis.successCriteria.slice(0, 3).forEach((criterion) => {
|
|
152
|
-
console.log(chalk.gray(` ✓ ${criterion}`));
|
|
153
|
-
});
|
|
154
|
-
if (analysis.successCriteria.length > 3) {
|
|
155
|
-
console.log(chalk.dim(` ... and ${analysis.successCriteria.length - 3} more`));
|
|
156
|
-
}
|
|
157
|
-
console.log();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async applyOptimization(rawPrompt, outputDir) {
|
|
161
|
-
try {
|
|
162
|
-
console.log(chalk.dim('Optimizing extracted prompt...\n'));
|
|
163
|
-
// v4.11: Use improve mode
|
|
164
|
-
const optimizer = new UniversalOptimizer();
|
|
165
|
-
const result = await optimizer.optimize(rawPrompt, 'improve');
|
|
166
|
-
// Display optimization results
|
|
167
|
-
console.log(chalk.bold('✨ Optimization Results:\n'));
|
|
168
|
-
console.log(chalk.cyan(` Intent: ${result.intent.primaryIntent}`));
|
|
169
|
-
console.log(chalk.cyan(` Quality: ${result.quality.overall.toFixed(0)}%`));
|
|
170
|
-
if (result.improvements.length > 0) {
|
|
171
|
-
console.log(chalk.cyan(` Improvements: ${result.improvements.length} applied\n`));
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
console.log();
|
|
175
|
-
}
|
|
176
|
-
// Save optimized version
|
|
177
|
-
const optimizedPath = path.join(outputDir, 'optimized-prompt.md');
|
|
178
|
-
await FileSystem.writeFileAtomic(optimizedPath, result.enhanced);
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
console.log(chalk.yellow('⚠️ Could not optimize prompt'));
|
|
182
|
-
console.log(chalk.gray('Using original extracted version...\n'));
|
|
183
|
-
// Fallback: copy original to optimized
|
|
184
|
-
const optimizedPath = path.join(outputDir, 'optimized-prompt.md');
|
|
185
|
-
await FileSystem.writeFileAtomic(optimizedPath, rawPrompt);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
sanitizeProjectName(name) {
|
|
189
|
-
return (name
|
|
190
|
-
.toLowerCase()
|
|
191
|
-
.replace(/[^a-z0-9-]/g, '-')
|
|
192
|
-
.replace(/-+/g, '-')
|
|
193
|
-
.replace(/^-|-$/g, '') || 'unnamed-project');
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=summarize.js.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class TaskComplete extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static args: {
|
|
6
|
-
taskId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
-
};
|
|
8
|
-
static flags: {
|
|
9
|
-
'no-git': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
};
|
|
13
|
-
run(): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* Find config file (auto-discover or use provided path)
|
|
16
|
-
*/
|
|
17
|
-
private findConfigFile;
|
|
18
|
-
/**
|
|
19
|
-
* Handle git commit based on strategy
|
|
20
|
-
*/
|
|
21
|
-
private handleGitCommit;
|
|
22
|
-
/**
|
|
23
|
-
* Show next incomplete task
|
|
24
|
-
*/
|
|
25
|
-
private showNextTask;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=task-complete.d.ts.map
|