@neurcode-ai/cli 0.1.1 → 0.1.2
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 +33 -0
- package/dist/api-client.d.ts +169 -2
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +271 -15
- package/dist/api-client.js.map +1 -1
- package/dist/commands/apply.d.ts +9 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +186 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +87 -4
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts +16 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +134 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/plan.d.ts +6 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +204 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/refactor.d.ts +3 -0
- package/dist/commands/refactor.d.ts.map +1 -0
- package/dist/commands/refactor.js +166 -0
- package/dist/commands/refactor.js.map +1 -0
- package/dist/commands/revert.d.ts +23 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +234 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/security.d.ts +3 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +167 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/config.d.ts +17 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +88 -21
- package/dist/config.js.map +1 -1
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planCommand = planCommand;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
const api_client_1 = require("../api-client");
|
|
8
|
+
// Import chalk with fallback for plain strings if not available
|
|
9
|
+
let chalk;
|
|
10
|
+
try {
|
|
11
|
+
chalk = require('chalk');
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Fallback: create a mock chalk object that returns strings as-is
|
|
15
|
+
chalk = {
|
|
16
|
+
green: (str) => str,
|
|
17
|
+
yellow: (str) => str,
|
|
18
|
+
red: (str) => str,
|
|
19
|
+
bold: (str) => str,
|
|
20
|
+
dim: (str) => str,
|
|
21
|
+
cyan: (str) => str,
|
|
22
|
+
white: (str) => str,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Recursively scan directory for files, ignoring common build/dependency directories
|
|
27
|
+
*/
|
|
28
|
+
function scanFiles(dir, baseDir, maxFiles = 100) {
|
|
29
|
+
const files = [];
|
|
30
|
+
const ignoreDirs = new Set(['node_modules', '.git', '.next', 'dist', 'build', '.turbo', '.cache']);
|
|
31
|
+
const ignorePatterns = [/^\./, /\.map$/, /\.log$/];
|
|
32
|
+
function scan(currentDir) {
|
|
33
|
+
if (files.length >= maxFiles)
|
|
34
|
+
return;
|
|
35
|
+
try {
|
|
36
|
+
const entries = (0, fs_1.readdirSync)(currentDir);
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
if (files.length >= maxFiles)
|
|
39
|
+
break;
|
|
40
|
+
const fullPath = (0, path_1.join)(currentDir, entry);
|
|
41
|
+
const relativePath = (0, path_1.relative)(baseDir, fullPath);
|
|
42
|
+
// Skip hidden files and directories
|
|
43
|
+
if (entry.startsWith('.')) {
|
|
44
|
+
// Allow .env, .gitignore, etc. but skip .git, .next, etc.
|
|
45
|
+
if (ignoreDirs.has(entry))
|
|
46
|
+
continue;
|
|
47
|
+
// Skip other hidden files that match ignore patterns
|
|
48
|
+
if (ignorePatterns.some(pattern => pattern.test(entry)))
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Skip ignored directories
|
|
52
|
+
if (ignoreDirs.has(entry))
|
|
53
|
+
continue;
|
|
54
|
+
try {
|
|
55
|
+
const stat = (0, fs_1.statSync)(fullPath);
|
|
56
|
+
if (stat.isDirectory()) {
|
|
57
|
+
scan(fullPath);
|
|
58
|
+
}
|
|
59
|
+
else if (stat.isFile()) {
|
|
60
|
+
// Skip binary-like files and common build artifacts
|
|
61
|
+
const ext = entry.split('.').pop()?.toLowerCase();
|
|
62
|
+
const skipExts = ['map', 'log', 'lock', 'png', 'jpg', 'jpeg', 'gif', 'ico', 'svg', 'woff', 'woff2', 'ttf', 'eot'];
|
|
63
|
+
if (ext && skipExts.includes(ext))
|
|
64
|
+
continue;
|
|
65
|
+
files.push(relativePath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Skip files we can't access
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Skip directories we can't access
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
scan(dir);
|
|
80
|
+
return files.slice(0, maxFiles);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Display the plan in a beautiful format
|
|
84
|
+
*/
|
|
85
|
+
function displayPlan(plan) {
|
|
86
|
+
console.log('\n' + chalk.bold.cyan('📋 Neurcode Architect Plan\n'));
|
|
87
|
+
// Display summary and complexity
|
|
88
|
+
console.log(chalk.bold.white('Summary:'));
|
|
89
|
+
console.log(chalk.dim(plan.summary));
|
|
90
|
+
console.log('');
|
|
91
|
+
const complexityEmoji = {
|
|
92
|
+
low: '🟢',
|
|
93
|
+
medium: '🟡',
|
|
94
|
+
high: '🔴',
|
|
95
|
+
};
|
|
96
|
+
const complexity = plan.estimatedComplexity || 'medium';
|
|
97
|
+
console.log(chalk.bold.white('Estimated Complexity:'), complexityEmoji[complexity], chalk.bold(complexity.toUpperCase()));
|
|
98
|
+
console.log('');
|
|
99
|
+
// Group files by action
|
|
100
|
+
const createFiles = plan.files.filter(f => f.action === 'CREATE');
|
|
101
|
+
const modifyFiles = plan.files.filter(f => f.action === 'MODIFY');
|
|
102
|
+
const blockFiles = plan.files.filter(f => f.action === 'BLOCK');
|
|
103
|
+
// Display CREATE files (GREEN)
|
|
104
|
+
if (createFiles.length > 0) {
|
|
105
|
+
console.log(chalk.bold.green(`\n✨ CREATE (${createFiles.length} files):`));
|
|
106
|
+
for (const file of createFiles) {
|
|
107
|
+
console.log(chalk.green(` + ${file.path}`));
|
|
108
|
+
if (file.reason) {
|
|
109
|
+
console.log(chalk.dim(` └─ ${file.reason}`));
|
|
110
|
+
}
|
|
111
|
+
if (file.suggestion) {
|
|
112
|
+
console.log(chalk.cyan(` 💡 ${file.suggestion}`));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Display MODIFY files (YELLOW)
|
|
117
|
+
if (modifyFiles.length > 0) {
|
|
118
|
+
console.log(chalk.bold.yellow(`\n🔧 MODIFY (${modifyFiles.length} files):`));
|
|
119
|
+
for (const file of modifyFiles) {
|
|
120
|
+
console.log(chalk.yellow(` ~ ${file.path}`));
|
|
121
|
+
if (file.reason) {
|
|
122
|
+
console.log(chalk.dim(` └─ ${file.reason}`));
|
|
123
|
+
}
|
|
124
|
+
if (file.suggestion) {
|
|
125
|
+
console.log(chalk.cyan(` 💡 ${file.suggestion}`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Display BLOCK files (RED)
|
|
130
|
+
if (blockFiles.length > 0) {
|
|
131
|
+
console.log(chalk.bold.red(`\n🚫 BLOCK (${blockFiles.length} files):`));
|
|
132
|
+
for (const file of blockFiles) {
|
|
133
|
+
console.log(chalk.red(` ✗ ${file.path}`));
|
|
134
|
+
if (file.reason) {
|
|
135
|
+
console.log(chalk.dim(` └─ ${file.reason}`));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Display recommendations
|
|
140
|
+
if (plan.recommendations && plan.recommendations.length > 0) {
|
|
141
|
+
console.log(chalk.bold.white('\n💡 Recommendations:'));
|
|
142
|
+
for (const rec of plan.recommendations) {
|
|
143
|
+
console.log(chalk.cyan(` • ${rec}`));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
console.log('');
|
|
147
|
+
}
|
|
148
|
+
async function planCommand(intent, options) {
|
|
149
|
+
try {
|
|
150
|
+
if (!intent || !intent.trim()) {
|
|
151
|
+
console.error(chalk.red('❌ Error: Intent description is required'));
|
|
152
|
+
console.log(chalk.dim('Usage: neurcode plan "<your intent description>"'));
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
// Load configuration
|
|
156
|
+
const config = (0, config_1.loadConfig)();
|
|
157
|
+
// API URL is automatically set to production - no need to check
|
|
158
|
+
// Require API key (shows helpful error message if missing)
|
|
159
|
+
// This will exit with helpful message if key is not found
|
|
160
|
+
if (!config.apiKey) {
|
|
161
|
+
config.apiKey = (0, config_1.requireApiKey)();
|
|
162
|
+
}
|
|
163
|
+
// Scan files in current directory
|
|
164
|
+
const cwd = process.cwd();
|
|
165
|
+
console.log(chalk.dim(`📂 Scanning files in ${cwd}...`));
|
|
166
|
+
const files = scanFiles(cwd, cwd, 100);
|
|
167
|
+
if (files.length === 0) {
|
|
168
|
+
console.warn(chalk.yellow('⚠️ No files found in current directory'));
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
console.log(chalk.dim(`Found ${files.length} files`));
|
|
172
|
+
console.log(chalk.dim('🤖 Generating plan...\n'));
|
|
173
|
+
// Initialize API client
|
|
174
|
+
const client = new api_client_1.ApiClient(config);
|
|
175
|
+
const projectId = options.projectId || config.projectId;
|
|
176
|
+
// Generate plan
|
|
177
|
+
const response = await client.generatePlan(intent.trim(), files, projectId);
|
|
178
|
+
// Display the plan
|
|
179
|
+
displayPlan(response.plan);
|
|
180
|
+
console.log(chalk.dim(`\nGenerated at: ${new Date(response.timestamp).toLocaleString()}`));
|
|
181
|
+
// Display plan ID if available
|
|
182
|
+
if (response.planId && response.planId !== 'unknown') {
|
|
183
|
+
console.log(chalk.bold.cyan(`\n📌 Plan ID: ${response.planId} (Saved)`));
|
|
184
|
+
console.log(chalk.dim(' Run \'neurcode apply <id>\' to execute this plan. (Coming soon)'));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error(chalk.red('\n❌ Error generating plan:'));
|
|
189
|
+
if (error instanceof Error) {
|
|
190
|
+
console.error(chalk.red(error.message));
|
|
191
|
+
if (error.message.includes('API request failed')) {
|
|
192
|
+
console.log(chalk.dim('\n💡 Make sure:'));
|
|
193
|
+
console.log(chalk.dim(' • Your API key is valid'));
|
|
194
|
+
console.log(chalk.dim(' • The API URL is correct'));
|
|
195
|
+
console.log(chalk.dim(' • You have network connectivity'));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.error(error);
|
|
200
|
+
}
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../../src/commands/refactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmJtD"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.refactorCommand = refactorCommand;
|
|
37
|
+
const api_client_1 = require("../api-client");
|
|
38
|
+
const config_1 = require("../config");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
function refactorCommand(program) {
|
|
42
|
+
program
|
|
43
|
+
.command('refactor')
|
|
44
|
+
.description('Get AI-powered refactoring suggestions for redundant code')
|
|
45
|
+
.argument('<file>', 'Path to the file to refactor')
|
|
46
|
+
.option('--redundant-blocks <json>', 'JSON array of redundant blocks with lines, reason, and suggestion')
|
|
47
|
+
.option('--redundant-blocks-file <file>', 'Path to JSON file containing redundant blocks')
|
|
48
|
+
.option('--project-type <type>', 'Project type (e.g., "web", "api", "mobile")')
|
|
49
|
+
.option('--framework <framework>', 'Framework used (e.g., "react", "express", "nextjs")')
|
|
50
|
+
.option('--patterns <patterns>', 'Comma-separated list of patterns used in the project')
|
|
51
|
+
.option('--output <file>', 'Save optimized code to file (default: prints to stdout)')
|
|
52
|
+
.option('--apply', 'Apply the refactoring suggestions to the file (creates backup)')
|
|
53
|
+
.action(async (file, options) => {
|
|
54
|
+
try {
|
|
55
|
+
// Read file content
|
|
56
|
+
const filePath = path.resolve(file);
|
|
57
|
+
if (!fs.existsSync(filePath)) {
|
|
58
|
+
console.error(`❌ Error: File not found: ${filePath}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
62
|
+
// Parse redundant blocks
|
|
63
|
+
let redundantBlocks = [];
|
|
64
|
+
if (options.redundantBlocksFile) {
|
|
65
|
+
const blocksFile = path.resolve(options.redundantBlocksFile);
|
|
66
|
+
if (!fs.existsSync(blocksFile)) {
|
|
67
|
+
console.error(`❌ Error: Redundant blocks file not found: ${blocksFile}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
const blocksContent = fs.readFileSync(blocksFile, 'utf-8');
|
|
71
|
+
redundantBlocks = JSON.parse(blocksContent);
|
|
72
|
+
}
|
|
73
|
+
else if (options.redundantBlocks) {
|
|
74
|
+
redundantBlocks = JSON.parse(options.redundantBlocks);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.error('❌ Error: Must provide --redundant-blocks or --redundant-blocks-file');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
if (!Array.isArray(redundantBlocks) || redundantBlocks.length === 0) {
|
|
81
|
+
console.error('❌ Error: Redundant blocks must be a non-empty array');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
// Initialize API client
|
|
85
|
+
const config = (0, config_1.loadConfig)();
|
|
86
|
+
const client = new api_client_1.ApiClient(config);
|
|
87
|
+
console.log(`\n🔄 Requesting AI refactoring suggestions for ${file}...`);
|
|
88
|
+
console.log(` Redundant blocks: ${redundantBlocks.length}`);
|
|
89
|
+
// Call refactor API
|
|
90
|
+
const response = await client.refactor(fileContent, redundantBlocks, {
|
|
91
|
+
projectType: options.projectType,
|
|
92
|
+
framework: options.framework,
|
|
93
|
+
patterns: options.patterns?.split(',').map(p => p.trim()),
|
|
94
|
+
});
|
|
95
|
+
const { suggestion } = response;
|
|
96
|
+
// Display results
|
|
97
|
+
console.log('\n📊 Refactoring Suggestions:');
|
|
98
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
99
|
+
console.log(`\n📈 Improvements:`);
|
|
100
|
+
suggestion.improvements.forEach((imp, i) => {
|
|
101
|
+
const impactEmoji = {
|
|
102
|
+
high: '🔥',
|
|
103
|
+
medium: '⚡',
|
|
104
|
+
low: '✨',
|
|
105
|
+
};
|
|
106
|
+
console.log(` ${i + 1}. ${impactEmoji[imp.impact] || '✨'} ${imp.category}: ${imp.description}`);
|
|
107
|
+
});
|
|
108
|
+
console.log(`\n💾 Changes:`);
|
|
109
|
+
suggestion.changes.forEach((change, i) => {
|
|
110
|
+
const typeEmoji = {
|
|
111
|
+
removed: '➖',
|
|
112
|
+
modified: '🔄',
|
|
113
|
+
added: '➕',
|
|
114
|
+
};
|
|
115
|
+
console.log(` ${i + 1}. ${typeEmoji[change.type] || '•'} Lines ${change.lines[0]}-${change.lines[1]}: ${change.reason}`);
|
|
116
|
+
});
|
|
117
|
+
console.log(`\n💰 Savings:`);
|
|
118
|
+
console.log(` Token Savings: ${suggestion.tokenSavings.toLocaleString()}`);
|
|
119
|
+
const costDisplay = suggestion.costSavings < 0.01
|
|
120
|
+
? `$${suggestion.costSavings.toFixed(6)}`
|
|
121
|
+
: `$${suggestion.costSavings.toFixed(2)}`;
|
|
122
|
+
console.log(` Cost Savings: ${costDisplay}`);
|
|
123
|
+
console.log(`\n⚠️ Risk Assessment:`);
|
|
124
|
+
const riskEmoji = {
|
|
125
|
+
low: '✅',
|
|
126
|
+
medium: '⚠️',
|
|
127
|
+
high: '🚨',
|
|
128
|
+
};
|
|
129
|
+
console.log(` Risk Level: ${riskEmoji[suggestion.riskAssessment.riskLevel] || '⚠️'} ${suggestion.riskAssessment.riskLevel.toUpperCase()}`);
|
|
130
|
+
console.log(` Breaking Changes: ${suggestion.riskAssessment.breakingChanges ? '⚠️ Yes' : '✅ No'}`);
|
|
131
|
+
if (suggestion.riskAssessment.warnings.length > 0) {
|
|
132
|
+
console.log(` Warnings:`);
|
|
133
|
+
suggestion.riskAssessment.warnings.forEach((w) => console.log(` - ${w}`));
|
|
134
|
+
}
|
|
135
|
+
// Save or apply
|
|
136
|
+
if (options.apply) {
|
|
137
|
+
// Create backup
|
|
138
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
139
|
+
const backupPath = `${filePath}.backup.${timestamp}`;
|
|
140
|
+
fs.writeFileSync(backupPath, fileContent, 'utf-8');
|
|
141
|
+
console.log(`\n💾 Backup created: ${backupPath}`);
|
|
142
|
+
// Apply refactoring
|
|
143
|
+
fs.writeFileSync(filePath, suggestion.optimizedCode, 'utf-8');
|
|
144
|
+
console.log(`✅ Refactoring applied to ${filePath}`);
|
|
145
|
+
}
|
|
146
|
+
else if (options.output) {
|
|
147
|
+
// Save to output file
|
|
148
|
+
fs.writeFileSync(options.output, suggestion.optimizedCode, 'utf-8');
|
|
149
|
+
console.log(`\n✅ Optimized code saved to ${options.output}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Print to stdout
|
|
153
|
+
console.log(`\n📝 Optimized Code:`);
|
|
154
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
155
|
+
console.log(suggestion.optimizedCode);
|
|
156
|
+
console.log('\n💡 Tip: Use --output <file> to save or --apply to apply directly');
|
|
157
|
+
}
|
|
158
|
+
process.exit(0);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
console.error('\n❌ Error:', error instanceof Error ? error.message : error);
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=refactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor.js","sourceRoot":"","sources":["../../src/commands/refactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Revert Command
|
|
3
|
+
*
|
|
4
|
+
* Reverts a file to a specific version from Neurcode's version history.
|
|
5
|
+
*/
|
|
6
|
+
interface RevertOptions {
|
|
7
|
+
toVersion: number;
|
|
8
|
+
projectId?: string;
|
|
9
|
+
reason?: string;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
backup?: boolean;
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function revertCommand(filePath: string, options: RevertOptions): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* List available versions for a file
|
|
17
|
+
*/
|
|
18
|
+
export declare function listVersionsCommand(filePath: string, options: {
|
|
19
|
+
projectId?: string;
|
|
20
|
+
limit?: number;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=revert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revert.d.ts","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBAiM3E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBA6C1G"}
|