clavix 4.11.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +72 -60
  2. package/dist/cli/commands/update.js +9 -10
  3. package/dist/templates/agents/agents.md +14 -8
  4. package/dist/templates/agents/copilot-instructions.md +1 -1
  5. package/dist/templates/instructions/core/verification.md +2 -2
  6. package/dist/templates/slash-commands/_canonical/archive.md +83 -121
  7. package/dist/templates/slash-commands/_canonical/execute.md +32 -42
  8. package/dist/templates/slash-commands/_canonical/implement.md +32 -44
  9. package/dist/templates/slash-commands/_canonical/improve.md +14 -53
  10. package/dist/templates/slash-commands/_canonical/start.md +1 -1
  11. package/dist/templates/slash-commands/_canonical/summarize.md +8 -8
  12. package/dist/templates/slash-commands/_components/agent-protocols/cli-reference.md +84 -180
  13. package/dist/templates/slash-commands/_components/agent-protocols/error-handling.md +2 -2
  14. package/dist/templates/slash-commands/_components/agent-protocols/file-formats.md +41 -59
  15. package/dist/templates/slash-commands/_components/agent-protocols/state-assertion.md +1 -1
  16. package/dist/templates/slash-commands/_components/references/intent-types.md +1 -1
  17. package/dist/templates/slash-commands/_components/sections/file-saving-protocol.md +20 -27
  18. package/dist/templates/slash-commands/_components/sections/pattern-visibility.md +29 -46
  19. package/dist/templates/slash-commands/_components/troubleshooting/file-not-saved.md +4 -5
  20. package/dist/types/config.d.ts +57 -0
  21. package/dist/utils/legacy-command-cleanup.js +31 -4
  22. package/package.json +5 -4
  23. package/dist/cli/commands/analyze.d.ts +0 -17
  24. package/dist/cli/commands/analyze.js +0 -133
  25. package/dist/cli/commands/archive.d.ts +0 -36
  26. package/dist/cli/commands/archive.js +0 -266
  27. package/dist/cli/commands/deep.d.ts +0 -17
  28. package/dist/cli/commands/deep.js +0 -170
  29. package/dist/cli/commands/execute.d.ts +0 -15
  30. package/dist/cli/commands/execute.js +0 -168
  31. package/dist/cli/commands/fast.d.ts +0 -18
  32. package/dist/cli/commands/fast.js +0 -219
  33. package/dist/cli/commands/implement.d.ts +0 -24
  34. package/dist/cli/commands/implement.js +0 -289
  35. package/dist/cli/commands/improve.d.ts +0 -32
  36. package/dist/cli/commands/improve.js +0 -250
  37. package/dist/cli/commands/list.d.ts +0 -17
  38. package/dist/cli/commands/list.js +0 -217
  39. package/dist/cli/commands/plan.d.ts +0 -21
  40. package/dist/cli/commands/plan.js +0 -297
  41. package/dist/cli/commands/prd.d.ts +0 -24
  42. package/dist/cli/commands/prd.js +0 -321
  43. package/dist/cli/commands/prompts/clear.d.ts +0 -16
  44. package/dist/cli/commands/prompts/clear.js +0 -222
  45. package/dist/cli/commands/prompts/list.d.ts +0 -8
  46. package/dist/cli/commands/prompts/list.js +0 -88
  47. package/dist/cli/commands/show.d.ts +0 -21
  48. package/dist/cli/commands/show.js +0 -191
  49. package/dist/cli/commands/start.d.ts +0 -40
  50. package/dist/cli/commands/start.js +0 -210
  51. package/dist/cli/commands/summarize.d.ts +0 -17
  52. package/dist/cli/commands/summarize.js +0 -196
  53. package/dist/cli/commands/task-complete.d.ts +0 -27
  54. package/dist/cli/commands/task-complete.js +0 -269
  55. package/dist/cli/commands/verify.d.ts +0 -28
  56. package/dist/cli/commands/verify.js +0 -349
  57. package/dist/core/archive-manager.d.ts +0 -100
  58. package/dist/core/archive-manager.js +0 -302
  59. package/dist/core/basic-checklist-generator.d.ts +0 -35
  60. package/dist/core/basic-checklist-generator.js +0 -344
  61. package/dist/core/checklist-parser.d.ts +0 -48
  62. package/dist/core/checklist-parser.js +0 -238
  63. package/dist/core/config-manager.d.ts +0 -149
  64. package/dist/core/config-manager.js +0 -230
  65. package/dist/core/conversation-analyzer.d.ts +0 -86
  66. package/dist/core/conversation-analyzer.js +0 -387
  67. package/dist/core/conversation-quality-tracker.d.ts +0 -81
  68. package/dist/core/conversation-quality-tracker.js +0 -195
  69. package/dist/core/git-manager.d.ts +0 -126
  70. package/dist/core/git-manager.js +0 -282
  71. package/dist/core/intelligence/confidence-calculator.d.ts +0 -93
  72. package/dist/core/intelligence/confidence-calculator.js +0 -124
  73. package/dist/core/intelligence/index.d.ts +0 -11
  74. package/dist/core/intelligence/index.js +0 -15
  75. package/dist/core/intelligence/intent-detector.d.ts +0 -54
  76. package/dist/core/intelligence/intent-detector.js +0 -723
  77. package/dist/core/intelligence/pattern-library.d.ts +0 -104
  78. package/dist/core/intelligence/pattern-library.js +0 -339
  79. package/dist/core/intelligence/patterns/actionability-enhancer.d.ts +0 -27
  80. package/dist/core/intelligence/patterns/actionability-enhancer.js +0 -192
  81. package/dist/core/intelligence/patterns/alternative-phrasing-generator.d.ts +0 -29
  82. package/dist/core/intelligence/patterns/alternative-phrasing-generator.js +0 -239
  83. package/dist/core/intelligence/patterns/ambiguity-detector.d.ts +0 -22
  84. package/dist/core/intelligence/patterns/ambiguity-detector.js +0 -196
  85. package/dist/core/intelligence/patterns/assumption-explicitizer.d.ts +0 -30
  86. package/dist/core/intelligence/patterns/assumption-explicitizer.js +0 -296
  87. package/dist/core/intelligence/patterns/base-pattern.d.ts +0 -192
  88. package/dist/core/intelligence/patterns/base-pattern.js +0 -103
  89. package/dist/core/intelligence/patterns/completeness-validator.d.ts +0 -27
  90. package/dist/core/intelligence/patterns/completeness-validator.js +0 -221
  91. package/dist/core/intelligence/patterns/conciseness-filter.d.ts +0 -20
  92. package/dist/core/intelligence/patterns/conciseness-filter.js +0 -92
  93. package/dist/core/intelligence/patterns/context-precision.d.ts +0 -32
  94. package/dist/core/intelligence/patterns/context-precision.js +0 -389
  95. package/dist/core/intelligence/patterns/conversation-summarizer.d.ts +0 -30
  96. package/dist/core/intelligence/patterns/conversation-summarizer.js +0 -277
  97. package/dist/core/intelligence/patterns/dependency-identifier.d.ts +0 -23
  98. package/dist/core/intelligence/patterns/dependency-identifier.js +0 -166
  99. package/dist/core/intelligence/patterns/domain-context-enricher.d.ts +0 -21
  100. package/dist/core/intelligence/patterns/domain-context-enricher.js +0 -198
  101. package/dist/core/intelligence/patterns/edge-case-identifier.d.ts +0 -30
  102. package/dist/core/intelligence/patterns/edge-case-identifier.js +0 -269
  103. package/dist/core/intelligence/patterns/error-tolerance-enhancer.d.ts +0 -22
  104. package/dist/core/intelligence/patterns/error-tolerance-enhancer.js +0 -179
  105. package/dist/core/intelligence/patterns/implicit-requirement-extractor.d.ts +0 -24
  106. package/dist/core/intelligence/patterns/implicit-requirement-extractor.js +0 -259
  107. package/dist/core/intelligence/patterns/objective-clarifier.d.ts +0 -22
  108. package/dist/core/intelligence/patterns/objective-clarifier.js +0 -126
  109. package/dist/core/intelligence/patterns/output-format-enforcer.d.ts +0 -22
  110. package/dist/core/intelligence/patterns/output-format-enforcer.js +0 -151
  111. package/dist/core/intelligence/patterns/prd-structure-enforcer.d.ts +0 -23
  112. package/dist/core/intelligence/patterns/prd-structure-enforcer.js +0 -183
  113. package/dist/core/intelligence/patterns/prerequisite-identifier.d.ts +0 -23
  114. package/dist/core/intelligence/patterns/prerequisite-identifier.js +0 -221
  115. package/dist/core/intelligence/patterns/requirement-prioritizer.d.ts +0 -24
  116. package/dist/core/intelligence/patterns/requirement-prioritizer.js +0 -134
  117. package/dist/core/intelligence/patterns/scope-definer.d.ts +0 -26
  118. package/dist/core/intelligence/patterns/scope-definer.js +0 -236
  119. package/dist/core/intelligence/patterns/step-decomposer.d.ts +0 -31
  120. package/dist/core/intelligence/patterns/step-decomposer.js +0 -242
  121. package/dist/core/intelligence/patterns/structure-organizer.d.ts +0 -31
  122. package/dist/core/intelligence/patterns/structure-organizer.js +0 -218
  123. package/dist/core/intelligence/patterns/success-criteria-enforcer.d.ts +0 -22
  124. package/dist/core/intelligence/patterns/success-criteria-enforcer.js +0 -165
  125. package/dist/core/intelligence/patterns/success-metrics-enforcer.d.ts +0 -24
  126. package/dist/core/intelligence/patterns/success-metrics-enforcer.js +0 -165
  127. package/dist/core/intelligence/patterns/technical-context-enricher.d.ts +0 -25
  128. package/dist/core/intelligence/patterns/technical-context-enricher.js +0 -165
  129. package/dist/core/intelligence/patterns/topic-coherence-analyzer.d.ts +0 -26
  130. package/dist/core/intelligence/patterns/topic-coherence-analyzer.js +0 -300
  131. package/dist/core/intelligence/patterns/user-persona-enricher.d.ts +0 -24
  132. package/dist/core/intelligence/patterns/user-persona-enricher.js +0 -141
  133. package/dist/core/intelligence/patterns/validation-checklist-creator.d.ts +0 -31
  134. package/dist/core/intelligence/patterns/validation-checklist-creator.js +0 -242
  135. package/dist/core/intelligence/quality-assessor.d.ts +0 -51
  136. package/dist/core/intelligence/quality-assessor.js +0 -505
  137. package/dist/core/intelligence/types.d.ts +0 -111
  138. package/dist/core/intelligence/types.js +0 -3
  139. package/dist/core/intelligence/universal-optimizer.d.ts +0 -84
  140. package/dist/core/intelligence/universal-optimizer.js +0 -371
  141. package/dist/core/prd-generator.d.ts +0 -76
  142. package/dist/core/prd-generator.js +0 -173
  143. package/dist/core/prompt-manager.d.ts +0 -110
  144. package/dist/core/prompt-manager.js +0 -274
  145. package/dist/core/prompt-optimizer.d.ts +0 -268
  146. package/dist/core/prompt-optimizer.js +0 -959
  147. package/dist/core/question-engine.d.ts +0 -167
  148. package/dist/core/question-engine.js +0 -356
  149. package/dist/core/session-manager.d.ts +0 -139
  150. package/dist/core/session-manager.js +0 -365
  151. package/dist/core/task-manager.d.ts +0 -211
  152. package/dist/core/task-manager.js +0 -981
  153. package/dist/core/verification-hooks.d.ts +0 -67
  154. package/dist/core/verification-hooks.js +0 -309
  155. package/dist/core/verification-manager.d.ts +0 -107
  156. package/dist/core/verification-manager.js +0 -415
  157. package/dist/index 2.js +0 -13
  158. package/dist/index.d 2.ts +0 -4
  159. package/dist/types/session.d.ts +0 -78
  160. package/dist/types/session.js +0 -8
  161. package/dist/types/verification.d.ts +0 -205
  162. package/dist/types/verification.js +0 -9
@@ -1,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