@neurcode-ai/cli 0.1.0 → 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.
Files changed (39) hide show
  1. package/README.md +33 -0
  2. package/dist/api-client.d.ts +169 -2
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +271 -15
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/commands/apply.d.ts +9 -0
  7. package/dist/commands/apply.d.ts.map +1 -0
  8. package/dist/commands/apply.js +186 -0
  9. package/dist/commands/apply.js.map +1 -0
  10. package/dist/commands/check.d.ts.map +1 -1
  11. package/dist/commands/check.js +87 -4
  12. package/dist/commands/check.js.map +1 -1
  13. package/dist/commands/config.d.ts +16 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +134 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/plan.d.ts +6 -0
  18. package/dist/commands/plan.d.ts.map +1 -0
  19. package/dist/commands/plan.js +204 -0
  20. package/dist/commands/plan.js.map +1 -0
  21. package/dist/commands/refactor.d.ts +3 -0
  22. package/dist/commands/refactor.d.ts.map +1 -0
  23. package/dist/commands/refactor.js +166 -0
  24. package/dist/commands/refactor.js.map +1 -0
  25. package/dist/commands/revert.d.ts +23 -0
  26. package/dist/commands/revert.d.ts.map +1 -0
  27. package/dist/commands/revert.js +234 -0
  28. package/dist/commands/revert.js.map +1 -0
  29. package/dist/commands/security.d.ts +3 -0
  30. package/dist/commands/security.d.ts.map +1 -0
  31. package/dist/commands/security.js +167 -0
  32. package/dist/commands/security.js.map +1 -0
  33. package/dist/config.d.ts +17 -1
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +88 -21
  36. package/dist/config.js.map +1 -1
  37. package/dist/index.js +83 -0
  38. package/dist/index.js.map +1 -1
  39. package/package.json +6 -5
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function refactorCommand(program: Command): void;
3
+ //# sourceMappingURL=refactor.d.ts.map
@@ -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"}