mycontext-cli 0.2.2 → 0.2.3
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/dist/agents/implementations/CodeGenSubAgent.d.ts +0 -7
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +0 -7
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/DocsSubAgent.d.ts +8 -6
- package/dist/agents/implementations/DocsSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/DocsSubAgent.js +74 -25
- package/dist/agents/implementations/DocsSubAgent.js.map +1 -1
- package/dist/agents/implementations/EnhancementAgent.d.ts +2 -0
- package/dist/agents/implementations/EnhancementAgent.d.ts.map +1 -1
- package/dist/agents/implementations/EnhancementAgent.js +13 -4
- package/dist/agents/implementations/EnhancementAgent.js.map +1 -1
- package/dist/agents/implementations/QASubAgent.d.ts +9 -0
- package/dist/agents/implementations/QASubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/QASubAgent.js +103 -22
- package/dist/agents/implementations/QASubAgent.js.map +1 -1
- package/dist/cli.js +11 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +3 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/enhance.d.ts +40 -0
- package/dist/commands/enhance.d.ts.map +1 -1
- package/dist/commands/enhance.js +192 -1
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/generate-components.d.ts +1 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +61 -22
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/list.js +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/refine.d.ts +94 -0
- package/dist/commands/refine.d.ts.map +1 -0
- package/dist/commands/refine.js +492 -0
- package/dist/commands/refine.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +45 -16
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/ai-providers.json +56 -0
- package/dist/config/dependencies.json +6 -3
- package/dist/utils/huggingFaceClient.d.ts +44 -0
- package/dist/utils/huggingFaceClient.d.ts.map +1 -0
- package/dist/utils/huggingFaceClient.js +169 -0
- package/dist/utils/huggingFaceClient.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts +74 -0
- package/dist/utils/hybridAIClient.d.ts.map +1 -0
- package/dist/utils/hybridAIClient.js +257 -0
- package/dist/utils/hybridAIClient.js.map +1 -0
- package/dist/utils/ollamaClient.d.ts +5 -12
- package/dist/utils/ollamaClient.d.ts.map +1 -1
- package/dist/utils/ollamaClient.js +118 -107
- package/dist/utils/ollamaClient.js.map +1 -1
- package/package.json +3 -1
- package/dist/cli/src/config/dependencies.json +0 -180
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.refine = exports.RefineCommand = void 0;
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const spinner_1 = require("../utils/spinner");
|
|
13
|
+
const EnhancementAgent_1 = require("../agents/implementations/EnhancementAgent");
|
|
14
|
+
class RefineCommand {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.enhancementAgent = new EnhancementAgent_1.EnhancementAgent();
|
|
17
|
+
}
|
|
18
|
+
async execute(componentPath, options) {
|
|
19
|
+
const spinner = new spinner_1.EnhancedSpinner("Initializing refinement...");
|
|
20
|
+
try {
|
|
21
|
+
spinner.start();
|
|
22
|
+
// Validate component path
|
|
23
|
+
if (!componentPath) {
|
|
24
|
+
throw new Error("Component path is required");
|
|
25
|
+
}
|
|
26
|
+
// Check if component file exists
|
|
27
|
+
const fullPath = path_1.default.resolve(componentPath);
|
|
28
|
+
if (!(await fs_extra_1.default.pathExists(fullPath))) {
|
|
29
|
+
throw new Error(`Component file not found: ${componentPath}`);
|
|
30
|
+
}
|
|
31
|
+
// Check if it's a React component
|
|
32
|
+
if (!fullPath.endsWith(".tsx") && !fullPath.endsWith(".jsx")) {
|
|
33
|
+
throw new Error("Target must be a React component file (.tsx/.jsx)");
|
|
34
|
+
}
|
|
35
|
+
spinner.updateText("Reading component file...");
|
|
36
|
+
const componentCode = await fs_extra_1.default.readFile(fullPath, "utf-8");
|
|
37
|
+
const componentName = path_1.default.basename(fullPath, path_1.default.extname(fullPath));
|
|
38
|
+
// Get refinement prompt
|
|
39
|
+
const prompt = await this.getRefinementPrompt(options);
|
|
40
|
+
spinner.updateText("Refining component...");
|
|
41
|
+
// Run refinement with fallback
|
|
42
|
+
let result;
|
|
43
|
+
try {
|
|
44
|
+
result = await this.enhancementAgent.run({
|
|
45
|
+
currentComponent: componentCode,
|
|
46
|
+
userPrompt: prompt,
|
|
47
|
+
designContext: this.extractDesignContext(componentCode),
|
|
48
|
+
constraints: {
|
|
49
|
+
maxDependencies: 5,
|
|
50
|
+
targetFramework: "react",
|
|
51
|
+
uiLibrary: "shadcn",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error.message.includes("timed out")) {
|
|
57
|
+
console.log(chalk_1.default.yellow("⚠️ AI generation timed out, using fallback enhancement..."));
|
|
58
|
+
// Fallback: Simple component improvements without AI
|
|
59
|
+
result = {
|
|
60
|
+
enhancedComponent: this.generateFallbackEnhancement(componentCode, prompt),
|
|
61
|
+
originalComponent: componentCode,
|
|
62
|
+
designTokens: { colors: {}, spacing: {}, typography: {} },
|
|
63
|
+
changes: { added: [], modified: [], removed: [] },
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Handle rollback if requested
|
|
71
|
+
if (options.rollback) {
|
|
72
|
+
return await this.handleRollback(fullPath, componentName, spinner);
|
|
73
|
+
}
|
|
74
|
+
// Preserve history if requested
|
|
75
|
+
if (options.preserveHistory) {
|
|
76
|
+
await this.preserveComponentHistory(fullPath, componentCode);
|
|
77
|
+
}
|
|
78
|
+
// Generate output based on format
|
|
79
|
+
const output = this.generateRefinementOutput(result, componentName, options);
|
|
80
|
+
// Apply changes if requested
|
|
81
|
+
if (options.outputFormat === "apply") {
|
|
82
|
+
await this.applyRefinement(fullPath, result.enhancedComponent, spinner);
|
|
83
|
+
}
|
|
84
|
+
spinner.succeed("Refinement completed successfully!");
|
|
85
|
+
// Return structured output for VS Code extension
|
|
86
|
+
if (options.interactive || options.outputFormat !== "structured") {
|
|
87
|
+
return output;
|
|
88
|
+
}
|
|
89
|
+
// Display results for CLI
|
|
90
|
+
this.displayRefinementResults(output, componentName);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
spinner.fail("Refinement failed");
|
|
94
|
+
console.error(chalk_1.default.red("❌ Error:"), error);
|
|
95
|
+
if (options.interactive) {
|
|
96
|
+
return {
|
|
97
|
+
success: false,
|
|
98
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
99
|
+
componentName: path_1.default.basename(componentPath, path_1.default.extname(componentPath)),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get refinement prompt from options or user input
|
|
107
|
+
*/
|
|
108
|
+
async getRefinementPrompt(options) {
|
|
109
|
+
if (options.prompt) {
|
|
110
|
+
return options.prompt;
|
|
111
|
+
}
|
|
112
|
+
// Interactive prompt
|
|
113
|
+
const readline = require("readline");
|
|
114
|
+
const rl = readline.createInterface({
|
|
115
|
+
input: process.stdin,
|
|
116
|
+
output: process.stdout,
|
|
117
|
+
});
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
rl.question(chalk_1.default.blue("Enter refinement prompt: "), (answer) => {
|
|
120
|
+
rl.close();
|
|
121
|
+
resolve(answer.trim() || "Refine this component with modern design patterns");
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate fallback enhancement when AI times out
|
|
127
|
+
*/
|
|
128
|
+
generateFallbackEnhancement(componentCode, prompt) {
|
|
129
|
+
// Simple fallback improvements without AI
|
|
130
|
+
let enhanced = componentCode;
|
|
131
|
+
// Add basic accessibility improvements
|
|
132
|
+
if (enhanced.includes("<button") && !enhanced.includes("aria-label")) {
|
|
133
|
+
enhanced = enhanced.replace(/<button([^>]*)>/g, '<button$1 aria-label="Button">');
|
|
134
|
+
}
|
|
135
|
+
// Add hover effects if not present
|
|
136
|
+
if (enhanced.includes("className=") && !enhanced.includes("hover:")) {
|
|
137
|
+
enhanced = enhanced.replace(/className="([^"]*)"/g, 'className="$1 hover:opacity-80 transition-opacity"');
|
|
138
|
+
}
|
|
139
|
+
// Add focus styles
|
|
140
|
+
if (enhanced.includes("className=") && !enhanced.includes("focus:")) {
|
|
141
|
+
enhanced = enhanced.replace(/className="([^"]*)"/g, 'className="$1 focus:outline-none focus:ring-2 focus:ring-blue-500"');
|
|
142
|
+
}
|
|
143
|
+
return enhanced;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Extract design context from component code
|
|
147
|
+
*/
|
|
148
|
+
extractDesignContext(componentCode) {
|
|
149
|
+
// Simple extraction of design context from component
|
|
150
|
+
const colors = componentCode.match(/(?:bg-|text-|border-)([a-z]+-\d+|primary|secondary|accent)/g) || [];
|
|
151
|
+
const spacing = componentCode.match(/(?:p-|m-|gap-)(\d+|xs|sm|md|lg|xl)/g) || [];
|
|
152
|
+
const typography = componentCode.match(/(?:text-)(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)/g) || [];
|
|
153
|
+
return {
|
|
154
|
+
colors: [...new Set(colors)],
|
|
155
|
+
spacing: [...new Set(spacing)],
|
|
156
|
+
typography: [...new Set(typography)],
|
|
157
|
+
interactions: this.extractInteractions(componentCode),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Extract interaction patterns from component
|
|
162
|
+
*/
|
|
163
|
+
extractInteractions(componentCode) {
|
|
164
|
+
const interactions = [];
|
|
165
|
+
if (componentCode.includes("onClick"))
|
|
166
|
+
interactions.push("click");
|
|
167
|
+
if (componentCode.includes("onChange"))
|
|
168
|
+
interactions.push("change");
|
|
169
|
+
if (componentCode.includes("onSubmit"))
|
|
170
|
+
interactions.push("submit");
|
|
171
|
+
if (componentCode.includes("onFocus"))
|
|
172
|
+
interactions.push("focus");
|
|
173
|
+
if (componentCode.includes("onBlur"))
|
|
174
|
+
interactions.push("blur");
|
|
175
|
+
if (componentCode.includes("useState"))
|
|
176
|
+
interactions.push("state");
|
|
177
|
+
if (componentCode.includes("useEffect"))
|
|
178
|
+
interactions.push("effects");
|
|
179
|
+
return interactions;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate refinement output based on format
|
|
183
|
+
*/
|
|
184
|
+
generateRefinementOutput(result, componentName, options) {
|
|
185
|
+
const baseOutput = {
|
|
186
|
+
success: true,
|
|
187
|
+
componentName,
|
|
188
|
+
enhancedCode: result.enhancedComponent,
|
|
189
|
+
originalCode: result.originalComponent || "",
|
|
190
|
+
changes: {
|
|
191
|
+
totalChanges: result.changes.totalChanges,
|
|
192
|
+
addedLines: result.changes.addedLines,
|
|
193
|
+
removedLines: result.changes.removedLines,
|
|
194
|
+
modifiedLines: result.changes.modifiedLines,
|
|
195
|
+
},
|
|
196
|
+
validation: {
|
|
197
|
+
score: result.validation.score,
|
|
198
|
+
isValid: result.validation.isValid,
|
|
199
|
+
errors: result.validation.errors,
|
|
200
|
+
warnings: result.validation.warnings,
|
|
201
|
+
},
|
|
202
|
+
suggestions: result.suggestions,
|
|
203
|
+
metadata: {
|
|
204
|
+
executionTime: Date.now(),
|
|
205
|
+
model: "mycontext-refinement",
|
|
206
|
+
temperature: options.temperature,
|
|
207
|
+
maxTokens: options.maxTokens,
|
|
208
|
+
prompt: options.prompt,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
// Output based on format
|
|
212
|
+
switch (options.outputFormat) {
|
|
213
|
+
case "diff":
|
|
214
|
+
return this.generateDiffOutput(baseOutput);
|
|
215
|
+
case "preview":
|
|
216
|
+
return this.generatePreviewOutput(baseOutput);
|
|
217
|
+
case "apply":
|
|
218
|
+
return this.generateApplyOutput(baseOutput);
|
|
219
|
+
case "structured":
|
|
220
|
+
default:
|
|
221
|
+
return baseOutput;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Generate diff output for side-by-side comparison
|
|
226
|
+
*/
|
|
227
|
+
generateDiffOutput(baseOutput) {
|
|
228
|
+
return {
|
|
229
|
+
...baseOutput,
|
|
230
|
+
diff: {
|
|
231
|
+
unified: this.generateUnifiedDiff(baseOutput.originalCode, baseOutput.enhancedCode),
|
|
232
|
+
sideBySide: this.generateSideBySideDiff(baseOutput.originalCode, baseOutput.enhancedCode),
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Generate preview output for component rendering
|
|
238
|
+
*/
|
|
239
|
+
generatePreviewOutput(baseOutput) {
|
|
240
|
+
return {
|
|
241
|
+
...baseOutput,
|
|
242
|
+
preview: {
|
|
243
|
+
canRender: this.canRenderComponent(baseOutput.enhancedCode),
|
|
244
|
+
dependencies: this.extractDependencies(baseOutput.enhancedCode),
|
|
245
|
+
props: this.extractComponentProps(baseOutput.enhancedCode),
|
|
246
|
+
warnings: this.extractRenderWarnings(baseOutput.enhancedCode),
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Generate apply output for immediate application
|
|
252
|
+
*/
|
|
253
|
+
generateApplyOutput(baseOutput) {
|
|
254
|
+
return {
|
|
255
|
+
...baseOutput,
|
|
256
|
+
apply: {
|
|
257
|
+
ready: true,
|
|
258
|
+
filePath: baseOutput.metadata?.filePath,
|
|
259
|
+
backupPath: baseOutput.metadata?.backupPath,
|
|
260
|
+
changes: baseOutput.changes,
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate unified diff format
|
|
266
|
+
*/
|
|
267
|
+
generateUnifiedDiff(original, enhanced) {
|
|
268
|
+
const originalLines = original.split("\n");
|
|
269
|
+
const enhancedLines = enhanced.split("\n");
|
|
270
|
+
let diff = "";
|
|
271
|
+
let i = 0, j = 0;
|
|
272
|
+
while (i < originalLines.length || j < enhancedLines.length) {
|
|
273
|
+
if (i < originalLines.length &&
|
|
274
|
+
j < enhancedLines.length &&
|
|
275
|
+
originalLines[i] === enhancedLines[j]) {
|
|
276
|
+
diff += ` ${originalLines[i]}\n`;
|
|
277
|
+
i++;
|
|
278
|
+
j++;
|
|
279
|
+
}
|
|
280
|
+
else if (i < originalLines.length) {
|
|
281
|
+
diff += `-${originalLines[i]}\n`;
|
|
282
|
+
i++;
|
|
283
|
+
}
|
|
284
|
+
else if (j < enhancedLines.length) {
|
|
285
|
+
diff += `+${enhancedLines[j]}\n`;
|
|
286
|
+
j++;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return diff;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Generate side-by-side diff format
|
|
293
|
+
*/
|
|
294
|
+
generateSideBySideDiff(original, enhanced) {
|
|
295
|
+
const originalLines = original.split("\n");
|
|
296
|
+
const enhancedLines = enhanced.split("\n");
|
|
297
|
+
const maxLines = Math.max(originalLines.length, enhancedLines.length);
|
|
298
|
+
const sideBySide = [];
|
|
299
|
+
for (let i = 0; i < maxLines; i++) {
|
|
300
|
+
const originalLine = originalLines[i] || "";
|
|
301
|
+
const enhancedLine = enhancedLines[i] || "";
|
|
302
|
+
const isModified = originalLine !== enhancedLine;
|
|
303
|
+
sideBySide.push({
|
|
304
|
+
lineNumber: i + 1,
|
|
305
|
+
original: originalLine,
|
|
306
|
+
enhanced: enhancedLine,
|
|
307
|
+
modified: isModified,
|
|
308
|
+
type: isModified ? "modified" : "unchanged",
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
return sideBySide;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Check if component can be rendered
|
|
315
|
+
*/
|
|
316
|
+
canRenderComponent(code) {
|
|
317
|
+
const hasExport = /export\s+(default\s+)?function|export\s+(default\s+)?const|export\s+class/.test(code);
|
|
318
|
+
const hasReturn = /return\s*\(/.test(code);
|
|
319
|
+
const hasJSX = /<[A-Z][a-zA-Z]*/.test(code);
|
|
320
|
+
return hasExport && hasReturn && hasJSX;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Extract component dependencies
|
|
324
|
+
*/
|
|
325
|
+
extractDependencies(code) {
|
|
326
|
+
const imports = code.match(/import\s+.*?\s+from\s+['"]([^'"]+)['"]/g) || [];
|
|
327
|
+
return imports
|
|
328
|
+
.map((imp) => {
|
|
329
|
+
const match = imp.match(/from\s+['"]([^'"]+)['"]/);
|
|
330
|
+
return match ? match[1] : "";
|
|
331
|
+
})
|
|
332
|
+
.filter(Boolean);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Extract component props interface
|
|
336
|
+
*/
|
|
337
|
+
extractComponentProps(code) {
|
|
338
|
+
const propsMatch = code.match(/interface\s+(\w+)Props\s*\{([^}]+)\}/);
|
|
339
|
+
if (!propsMatch)
|
|
340
|
+
return null;
|
|
341
|
+
const propsText = propsMatch[2];
|
|
342
|
+
const props = propsText
|
|
343
|
+
.split("\n")
|
|
344
|
+
.map((line) => line.trim())
|
|
345
|
+
.filter((line) => line && !line.startsWith("/") && !line.startsWith("*"))
|
|
346
|
+
.map((line) => {
|
|
347
|
+
const propMatch = line.match(/(\w+)\??:\s*(.+?)(?:;|$)/);
|
|
348
|
+
if (propMatch) {
|
|
349
|
+
return {
|
|
350
|
+
name: propMatch[1],
|
|
351
|
+
type: propMatch[2].trim(),
|
|
352
|
+
required: !line.includes("?"),
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
})
|
|
357
|
+
.filter(Boolean);
|
|
358
|
+
return props;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Extract render warnings
|
|
362
|
+
*/
|
|
363
|
+
extractRenderWarnings(code) {
|
|
364
|
+
const warnings = [];
|
|
365
|
+
if (!code.includes("useState") && code.includes("setState")) {
|
|
366
|
+
warnings.push("Component uses setState but no useState hook found");
|
|
367
|
+
}
|
|
368
|
+
if (code.includes("useEffect") && !code.includes("dependencies")) {
|
|
369
|
+
warnings.push("useEffect missing dependency array");
|
|
370
|
+
}
|
|
371
|
+
if (code.includes("onClick") && !code.includes("aria-label")) {
|
|
372
|
+
warnings.push("Interactive element missing accessibility label");
|
|
373
|
+
}
|
|
374
|
+
return warnings;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Preserve component history for rollback
|
|
378
|
+
*/
|
|
379
|
+
async preserveComponentHistory(filePath, originalCode) {
|
|
380
|
+
const historyDir = path_1.default.join(path_1.default.dirname(filePath), ".mycontext-history");
|
|
381
|
+
await fs_extra_1.default.ensureDir(historyDir);
|
|
382
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
383
|
+
const historyFile = path_1.default.join(historyDir, `${path_1.default.basename(filePath)}.${timestamp}.backup`);
|
|
384
|
+
await fs_extra_1.default.writeFile(historyFile, originalCode);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Handle rollback to previous version
|
|
388
|
+
*/
|
|
389
|
+
async handleRollback(filePath, componentName, spinner) {
|
|
390
|
+
spinner.updateText("Rolling back to previous version...");
|
|
391
|
+
const historyDir = path_1.default.join(path_1.default.dirname(filePath), ".mycontext-history");
|
|
392
|
+
if (!(await fs_extra_1.default.pathExists(historyDir))) {
|
|
393
|
+
throw new Error("No history found for rollback");
|
|
394
|
+
}
|
|
395
|
+
const historyFiles = await fs_extra_1.default.readdir(historyDir);
|
|
396
|
+
const backupFiles = historyFiles
|
|
397
|
+
.filter((file) => file.startsWith(`${path_1.default.basename(filePath)}.`) &&
|
|
398
|
+
file.endsWith(".backup"))
|
|
399
|
+
.sort()
|
|
400
|
+
.reverse();
|
|
401
|
+
if (backupFiles.length === 0) {
|
|
402
|
+
throw new Error("No backup files found for rollback");
|
|
403
|
+
}
|
|
404
|
+
const latestBackup = backupFiles[0];
|
|
405
|
+
const backupPath = path_1.default.join(historyDir, latestBackup);
|
|
406
|
+
const backupCode = await fs_extra_1.default.readFile(backupPath, "utf-8");
|
|
407
|
+
// Restore the backup
|
|
408
|
+
await fs_extra_1.default.writeFile(filePath, backupCode);
|
|
409
|
+
spinner.succeed("Rollback completed successfully!");
|
|
410
|
+
return {
|
|
411
|
+
success: true,
|
|
412
|
+
componentName,
|
|
413
|
+
action: "rollback",
|
|
414
|
+
restoredFrom: latestBackup,
|
|
415
|
+
restoredCode: backupCode,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Apply refinement changes to file
|
|
420
|
+
*/
|
|
421
|
+
async applyRefinement(filePath, enhancedCode, spinner) {
|
|
422
|
+
spinner.updateText("Applying refinement changes...");
|
|
423
|
+
// Create backup before applying
|
|
424
|
+
const backupPath = `${filePath}.backup.${Date.now()}`;
|
|
425
|
+
const originalCode = await fs_extra_1.default.readFile(filePath, "utf-8");
|
|
426
|
+
await fs_extra_1.default.writeFile(backupPath, originalCode);
|
|
427
|
+
// Apply the enhanced code
|
|
428
|
+
await fs_extra_1.default.writeFile(filePath, enhancedCode);
|
|
429
|
+
spinner.updateText("Refinement applied successfully!");
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Display refinement results for CLI
|
|
433
|
+
*/
|
|
434
|
+
displayRefinementResults(output, componentName) {
|
|
435
|
+
console.log(chalk_1.default.green(`\n✅ Refined ${componentName}`));
|
|
436
|
+
console.log(chalk_1.default.gray(`Quality Score: ${output.validation.score}/100`));
|
|
437
|
+
if (output.changes.totalChanges > 0) {
|
|
438
|
+
console.log(chalk_1.default.gray(`Changes: ${output.changes.totalChanges} lines modified`));
|
|
439
|
+
}
|
|
440
|
+
if (output.suggestions?.accessibility?.length > 0) {
|
|
441
|
+
console.log(chalk_1.default.yellow("\n🔍 Accessibility Suggestions:"));
|
|
442
|
+
output.suggestions.accessibility.forEach((suggestion) => {
|
|
443
|
+
console.log(chalk_1.default.gray(` • ${suggestion}`));
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (output.suggestions?.performance?.length > 0) {
|
|
447
|
+
console.log(chalk_1.default.blue("\n⚡ Performance Suggestions:"));
|
|
448
|
+
output.suggestions.performance.forEach((suggestion) => {
|
|
449
|
+
console.log(chalk_1.default.gray(` • ${suggestion}`));
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
exports.RefineCommand = RefineCommand;
|
|
455
|
+
// CLI command setup
|
|
456
|
+
const refineCommand = new RefineCommand();
|
|
457
|
+
exports.refine = new commander_1.Command("refine")
|
|
458
|
+
.description("Refine React components with AI-powered improvements")
|
|
459
|
+
.argument("<component>", "Component file (.tsx/.jsx) to refine")
|
|
460
|
+
.option("-p, --prompt <text>", "Refinement prompt")
|
|
461
|
+
.option("--temperature <number>", "Generation temperature (0-1)", "0.7")
|
|
462
|
+
.option("--max-tokens <number>", "Maximum tokens", "4000")
|
|
463
|
+
.option("--yes", "Skip prompts (non-interactive mode)")
|
|
464
|
+
// Refinement-specific options
|
|
465
|
+
.option("--interactive", "VS Code extension mode with structured output")
|
|
466
|
+
.option("--output-format <format>", "Output format: structured, diff, preview, apply", "structured")
|
|
467
|
+
.option("--show-changes", "Show detailed changes in output")
|
|
468
|
+
.option("--preserve-history", "Keep refinement history for rollback")
|
|
469
|
+
.option("--rollback", "Rollback to previous version")
|
|
470
|
+
.action(async (component, options) => {
|
|
471
|
+
try {
|
|
472
|
+
const result = await refineCommand.execute(component, {
|
|
473
|
+
...options,
|
|
474
|
+
temperature: parseFloat(options.temperature),
|
|
475
|
+
maxTokens: parseInt(options.maxTokens),
|
|
476
|
+
outputFormat: options.outputFormat || "structured",
|
|
477
|
+
interactive: options.interactive || false,
|
|
478
|
+
showChanges: options.showChanges || false,
|
|
479
|
+
preserveHistory: options.preserveHistory || false,
|
|
480
|
+
rollback: options.rollback || false,
|
|
481
|
+
});
|
|
482
|
+
// For interactive mode, output JSON
|
|
483
|
+
if (options.interactive || options.outputFormat !== "default") {
|
|
484
|
+
console.log(JSON.stringify(result, null, 2));
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
catch (error) {
|
|
488
|
+
console.error(chalk_1.default.red("❌ Refinement failed:"), error);
|
|
489
|
+
process.exit(1);
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
//# sourceMappingURL=refine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine.js","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS1C,UAAU,YAAa,SAAQ,cAAc;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,eAAe,CAAS;;IAOhC,OAAO,CAAC,sBAAsB;IAKxB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YA+CrC,eAAe;YA4Bf,aAAa;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS1C,UAAU,YAAa,SAAQ,cAAc;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,eAAe,CAAS;;IAOhC,OAAO,CAAC,sBAAsB;IAKxB,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YA+CrC,eAAe;YA4Bf,aAAa;YA0Eb,WAAW;YAuCX,uBAAuB;YASvB,aAAa;YAmCb,kBAAkB;YA+BlB,UAAU;YAyBV,aAAa;YAqBb,sBAAsB;YAyDtB,cAAc;YAyBd,iBAAiB;YAcjB,cAAc;YASd,iBAAiB;IAiC/B,OAAO,CAAC,kBAAkB;YAcZ,eAAe;YAgBf,gBAAgB;YAUhB,uBAAuB;CAStC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY3D"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -117,7 +117,30 @@ class SetupCommand {
|
|
|
117
117
|
console.log(chalk_1.default.green(` ✅ ${step.name}`));
|
|
118
118
|
}
|
|
119
119
|
catch (error) {
|
|
120
|
-
|
|
120
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
121
|
+
// Handle conditional steps based on error type
|
|
122
|
+
if (step.conditional === "ollama_not_found" &&
|
|
123
|
+
errorMessage.includes("Ollama not found")) {
|
|
124
|
+
console.log(chalk_1.default.yellow(` ⚠️ ${step.name}: Skipping (Ollama already installed)`));
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (step.conditional === "model_check" &&
|
|
128
|
+
(errorMessage.includes("Need to download base model") ||
|
|
129
|
+
errorMessage.includes("Need to create specialized model"))) {
|
|
130
|
+
console.log(chalk_1.default.yellow(` ⚠️ ${step.name}: Will handle missing models`));
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (step.conditional === "specialized_model_not_found" &&
|
|
134
|
+
errorMessage.includes("Need to create specialized model")) {
|
|
135
|
+
console.log(chalk_1.default.yellow(` ⚠️ ${step.name}: Will create specialized model`));
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (step.conditional === "test_optional" &&
|
|
139
|
+
errorMessage.includes("Generation test failed")) {
|
|
140
|
+
console.log(chalk_1.default.yellow(` ⚠️ ${step.name}: Test failed, but setup can continue`));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
console.log(chalk_1.default.red(` ❌ ${step.name}: ${errorMessage}`));
|
|
121
144
|
// Handle conditional steps
|
|
122
145
|
if (step.conditional) {
|
|
123
146
|
continue;
|
|
@@ -167,20 +190,27 @@ class SetupCommand {
|
|
|
167
190
|
}
|
|
168
191
|
async installOllama() {
|
|
169
192
|
const platform = os.platform();
|
|
170
|
-
const installation = this.dependenciesConfig.dependencies.ollama.installation[platform];
|
|
171
|
-
if (!installation) {
|
|
172
|
-
throw new Error(`Ollama installation not supported on ${platform}`);
|
|
173
|
-
}
|
|
174
193
|
console.log(chalk_1.default.yellow(" Installing Ollama..."));
|
|
175
194
|
try {
|
|
176
|
-
if (
|
|
177
|
-
|
|
195
|
+
if (platform === "darwin") {
|
|
196
|
+
// On macOS, use Homebrew
|
|
197
|
+
console.log(chalk_1.default.gray(" Using Homebrew to install Ollama..."));
|
|
198
|
+
(0, child_process_1.execSync)("brew install ollama", { stdio: "inherit" });
|
|
199
|
+
}
|
|
200
|
+
else if (platform === "linux") {
|
|
201
|
+
// On Linux, use the install script
|
|
202
|
+
(0, child_process_1.execSync)("curl -fsSL https://ollama.ai/install.sh | sh", {
|
|
203
|
+
stdio: "inherit",
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
else if (platform === "win32") {
|
|
207
|
+
throw new Error("Manual installation required. Please visit: https://ollama.ai/download/windows");
|
|
178
208
|
}
|
|
179
209
|
else {
|
|
180
|
-
throw new Error(`
|
|
210
|
+
throw new Error(`Ollama installation not supported on ${platform}`);
|
|
181
211
|
}
|
|
182
212
|
// Verify installation
|
|
183
|
-
(0, child_process_1.execSync)(
|
|
213
|
+
(0, child_process_1.execSync)("ollama --version", { encoding: "utf8" });
|
|
184
214
|
console.log(chalk_1.default.green(" Ollama installed successfully"));
|
|
185
215
|
}
|
|
186
216
|
catch (error) {
|
|
@@ -221,20 +251,19 @@ class SetupCommand {
|
|
|
221
251
|
console.log(chalk_1.default.gray(" Found base model: deepseek-coder:6.7b"));
|
|
222
252
|
}
|
|
223
253
|
else {
|
|
224
|
-
|
|
254
|
+
console.log(chalk_1.default.yellow(" Base model not found, will download..."));
|
|
255
|
+
throw new Error("Need to download base model");
|
|
225
256
|
}
|
|
226
257
|
if (result.includes("mycontext-react")) {
|
|
227
258
|
console.log(chalk_1.default.gray(" Found specialized model: mycontext-react"));
|
|
228
259
|
}
|
|
229
260
|
else {
|
|
230
|
-
|
|
261
|
+
console.log(chalk_1.default.yellow(" Specialized model not found, will create..."));
|
|
262
|
+
throw new Error("Need to create specialized model");
|
|
231
263
|
}
|
|
232
264
|
}
|
|
233
265
|
catch (error) {
|
|
234
|
-
|
|
235
|
-
error.message.includes("Base model not found")) {
|
|
236
|
-
throw new Error("Need to download base model");
|
|
237
|
-
}
|
|
266
|
+
// Re-throw the error to be handled by the conditional logic
|
|
238
267
|
throw error;
|
|
239
268
|
}
|
|
240
269
|
}
|
|
@@ -303,7 +332,7 @@ RULES:
|
|
|
303
332
|
const testPrompt = "Create a simple button component";
|
|
304
333
|
const result = (0, child_process_1.execSync)(`ollama run mycontext-react "${testPrompt}"`, {
|
|
305
334
|
encoding: "utf8",
|
|
306
|
-
timeout:
|
|
335
|
+
timeout: 120000, // Increase timeout to 2 minutes for first run
|
|
307
336
|
});
|
|
308
337
|
// Basic validation
|
|
309
338
|
if (result.includes("import React") && result.includes("export")) {
|