vigthoria-cli 1.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 (75) hide show
  1. package/README.md +413 -0
  2. package/dist/commands/auth.d.ts +24 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +194 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/chat.d.ts +64 -0
  7. package/dist/commands/chat.d.ts.map +1 -0
  8. package/dist/commands/chat.js +596 -0
  9. package/dist/commands/chat.js.map +1 -0
  10. package/dist/commands/config.d.ts +25 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +291 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/edit.d.ts +28 -0
  15. package/dist/commands/edit.d.ts.map +1 -0
  16. package/dist/commands/edit.js +257 -0
  17. package/dist/commands/edit.js.map +1 -0
  18. package/dist/commands/explain.d.ts +21 -0
  19. package/dist/commands/explain.d.ts.map +1 -0
  20. package/dist/commands/explain.js +98 -0
  21. package/dist/commands/explain.js.map +1 -0
  22. package/dist/commands/generate.d.ts +25 -0
  23. package/dist/commands/generate.d.ts.map +1 -0
  24. package/dist/commands/generate.js +155 -0
  25. package/dist/commands/generate.js.map +1 -0
  26. package/dist/commands/review.d.ts +24 -0
  27. package/dist/commands/review.d.ts.map +1 -0
  28. package/dist/commands/review.js +153 -0
  29. package/dist/commands/review.js.map +1 -0
  30. package/dist/index.d.ts +16 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +205 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/utils/api.d.ts +88 -0
  35. package/dist/utils/api.d.ts.map +1 -0
  36. package/dist/utils/api.js +431 -0
  37. package/dist/utils/api.js.map +1 -0
  38. package/dist/utils/config.d.ts +57 -0
  39. package/dist/utils/config.d.ts.map +1 -0
  40. package/dist/utils/config.js +167 -0
  41. package/dist/utils/config.js.map +1 -0
  42. package/dist/utils/files.d.ts +31 -0
  43. package/dist/utils/files.d.ts.map +1 -0
  44. package/dist/utils/files.js +217 -0
  45. package/dist/utils/files.js.map +1 -0
  46. package/dist/utils/logger.d.ts +23 -0
  47. package/dist/utils/logger.d.ts.map +1 -0
  48. package/dist/utils/logger.js +104 -0
  49. package/dist/utils/logger.js.map +1 -0
  50. package/dist/utils/session.d.ts +61 -0
  51. package/dist/utils/session.d.ts.map +1 -0
  52. package/dist/utils/session.js +172 -0
  53. package/dist/utils/session.js.map +1 -0
  54. package/dist/utils/tools.d.ts +145 -0
  55. package/dist/utils/tools.d.ts.map +1 -0
  56. package/dist/utils/tools.js +781 -0
  57. package/dist/utils/tools.js.map +1 -0
  58. package/install.sh +248 -0
  59. package/package.json +52 -0
  60. package/src/commands/auth.ts +225 -0
  61. package/src/commands/chat.ts +690 -0
  62. package/src/commands/config.ts +297 -0
  63. package/src/commands/edit.ts +310 -0
  64. package/src/commands/explain.ts +115 -0
  65. package/src/commands/generate.ts +177 -0
  66. package/src/commands/review.ts +186 -0
  67. package/src/index.ts +221 -0
  68. package/src/types/marked-terminal.d.ts +31 -0
  69. package/src/utils/api.ts +531 -0
  70. package/src/utils/config.ts +224 -0
  71. package/src/utils/files.ts +212 -0
  72. package/src/utils/logger.ts +125 -0
  73. package/src/utils/session.ts +167 -0
  74. package/src/utils/tools.ts +933 -0
  75. package/tsconfig.json +20 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Edit Command - File editing with AI assistance
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EditCommand = void 0;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const inquirer_1 = __importDefault(require("inquirer"));
13
+ const api_js_1 = require("../utils/api.js");
14
+ const files_js_1 = require("../utils/files.js");
15
+ class EditCommand {
16
+ config;
17
+ logger;
18
+ api;
19
+ fileUtils;
20
+ constructor(config, logger) {
21
+ this.config = config;
22
+ this.logger = logger;
23
+ this.api = new api_js_1.APIClient(config, logger);
24
+ this.fileUtils = new files_js_1.FileUtils(process.cwd(), config.get('project').ignorePatterns);
25
+ }
26
+ async run(filePath, options) {
27
+ // Check auth
28
+ if (!this.config.isAuthenticated()) {
29
+ this.logger.error('Not authenticated. Run: vigthoria login');
30
+ return;
31
+ }
32
+ // Read file
33
+ const file = this.fileUtils.readFile(filePath);
34
+ if (!file) {
35
+ this.logger.error(`File not found: ${filePath}`);
36
+ return;
37
+ }
38
+ this.logger.section(`Editing: ${file.relativePath}`);
39
+ console.log(chalk_1.default.gray(`Language: ${file.language} | Lines: ${file.lines}`));
40
+ console.log();
41
+ // Get instruction
42
+ let instruction = options.instruction;
43
+ if (!instruction) {
44
+ const answer = await inquirer_1.default.prompt([
45
+ {
46
+ type: 'input',
47
+ name: 'instruction',
48
+ message: 'What changes would you like to make?',
49
+ validate: (input) => input.length > 0 || 'Please provide an instruction',
50
+ },
51
+ ]);
52
+ instruction = answer.instruction;
53
+ }
54
+ // Generate edit
55
+ const spinner = (0, ora_1.default)({
56
+ text: 'Generating changes...',
57
+ spinner: 'dots',
58
+ }).start();
59
+ try {
60
+ const response = await this.api.chat([
61
+ {
62
+ role: 'system',
63
+ content: `You are a code editor. Edit the provided code according to the user's instruction.
64
+ Return ONLY the complete modified code without any explanation or markdown formatting.
65
+ Preserve the original formatting and style unless the instruction specifically asks to change it.`,
66
+ },
67
+ {
68
+ role: 'user',
69
+ content: `File: ${file.relativePath}
70
+ Language: ${file.language}
71
+
72
+ Original code:
73
+ \`\`\`${file.language}
74
+ ${file.content}
75
+ \`\`\`
76
+
77
+ Instruction: ${instruction}
78
+
79
+ Return the complete modified code:`,
80
+ },
81
+ ], options.model);
82
+ spinner.stop();
83
+ // Extract code from response
84
+ const modifiedCode = this.extractCode(response.message, file.language);
85
+ if (!modifiedCode) {
86
+ this.logger.error('Failed to generate valid code changes');
87
+ return;
88
+ }
89
+ // Show diff
90
+ await this.showDiffAndConfirm(file.path, file.content, modifiedCode);
91
+ }
92
+ catch (error) {
93
+ spinner.stop();
94
+ this.logger.error('Edit failed:', error.message);
95
+ }
96
+ }
97
+ async fix(filePath, options) {
98
+ // Check auth
99
+ if (!this.config.isAuthenticated()) {
100
+ this.logger.error('Not authenticated. Run: vigthoria login');
101
+ return;
102
+ }
103
+ // Read file
104
+ const file = this.fileUtils.readFile(filePath);
105
+ if (!file) {
106
+ this.logger.error(`File not found: ${filePath}`);
107
+ return;
108
+ }
109
+ this.logger.section(`Fixing: ${file.relativePath}`);
110
+ console.log(chalk_1.default.gray(`Fix type: ${options.type} | Language: ${file.language}`));
111
+ console.log();
112
+ const spinner = (0, ora_1.default)({
113
+ text: `Analyzing for ${options.type} issues...`,
114
+ spinner: 'dots',
115
+ }).start();
116
+ try {
117
+ const result = await this.api.fixCode(file.content, file.language, options.type);
118
+ spinner.stop();
119
+ if (result.changes.length === 0) {
120
+ this.logger.success('No issues found!');
121
+ return;
122
+ }
123
+ // Show fixes
124
+ this.logger.section(`Found ${result.changes.length} issue(s)`);
125
+ result.changes.forEach((change, i) => {
126
+ console.log(chalk_1.default.yellow(`${i + 1}. Line ${change.line}:`));
127
+ console.log(chalk_1.default.red(` - ${change.before}`));
128
+ console.log(chalk_1.default.green(` + ${change.after}`));
129
+ console.log(chalk_1.default.gray(` Reason: ${change.reason}`));
130
+ console.log();
131
+ });
132
+ // Apply or confirm
133
+ if (options.apply) {
134
+ await this.applyFix(file.path, file.content, result.fixed);
135
+ }
136
+ else {
137
+ await this.showDiffAndConfirm(file.path, file.content, result.fixed);
138
+ }
139
+ }
140
+ catch (error) {
141
+ spinner.stop();
142
+ this.logger.error('Fix failed:', error.message);
143
+ }
144
+ }
145
+ extractCode(response, language) {
146
+ // Try to extract code block
147
+ const codeBlockRegex = new RegExp(`\`\`\`(?:${language})?\\n([\\s\\S]*?)\`\`\``, 'i');
148
+ const match = response.match(codeBlockRegex);
149
+ if (match) {
150
+ return match[1].trim();
151
+ }
152
+ // If no code block, check if response looks like code
153
+ const trimmed = response.trim();
154
+ if (!trimmed.startsWith('```') && !trimmed.includes('Here') && !trimmed.includes('I ')) {
155
+ return trimmed;
156
+ }
157
+ return null;
158
+ }
159
+ async showDiffAndConfirm(filePath, original, modified) {
160
+ const diff = this.fileUtils.createDiff(original, modified);
161
+ if (diff.added.length === 0 && diff.removed.length === 0) {
162
+ this.logger.info('No changes detected');
163
+ return;
164
+ }
165
+ // Show diff
166
+ this.logger.section('Changes');
167
+ diff.removed.forEach(line => {
168
+ console.log(chalk_1.default.red(line));
169
+ });
170
+ diff.added.forEach(line => {
171
+ console.log(chalk_1.default.green(line));
172
+ });
173
+ console.log();
174
+ // Confirm
175
+ const showDiffs = this.config.get('preferences').showDiffs;
176
+ const autoApply = this.config.get('preferences').autoApplyFixes;
177
+ if (autoApply) {
178
+ await this.applyFix(filePath, original, modified);
179
+ return;
180
+ }
181
+ const { action } = await inquirer_1.default.prompt([
182
+ {
183
+ type: 'list',
184
+ name: 'action',
185
+ message: 'What would you like to do?',
186
+ choices: [
187
+ { name: 'Apply changes', value: 'apply' },
188
+ { name: 'View full diff', value: 'view' },
189
+ { name: 'Discard changes', value: 'discard' },
190
+ ],
191
+ },
192
+ ]);
193
+ switch (action) {
194
+ case 'apply':
195
+ await this.applyFix(filePath, original, modified);
196
+ break;
197
+ case 'view':
198
+ this.showFullDiff(original, modified);
199
+ const { confirm } = await inquirer_1.default.prompt([
200
+ {
201
+ type: 'confirm',
202
+ name: 'confirm',
203
+ message: 'Apply these changes?',
204
+ default: true,
205
+ },
206
+ ]);
207
+ if (confirm) {
208
+ await this.applyFix(filePath, original, modified);
209
+ }
210
+ break;
211
+ case 'discard':
212
+ this.logger.info('Changes discarded');
213
+ break;
214
+ }
215
+ }
216
+ showFullDiff(original, modified) {
217
+ const originalLines = original.split('\n');
218
+ const modifiedLines = modified.split('\n');
219
+ console.log();
220
+ console.log(chalk_1.default.gray('─'.repeat(60)));
221
+ const maxLen = Math.max(originalLines.length, modifiedLines.length);
222
+ for (let i = 0; i < maxLen; i++) {
223
+ const orig = originalLines[i];
224
+ const mod = modifiedLines[i];
225
+ const lineNum = String(i + 1).padStart(4, ' ');
226
+ if (orig === mod) {
227
+ console.log(chalk_1.default.gray(`${lineNum} │ ${orig || ''}`));
228
+ }
229
+ else {
230
+ if (orig !== undefined) {
231
+ console.log(chalk_1.default.red(`${lineNum} - ${orig}`));
232
+ }
233
+ if (mod !== undefined) {
234
+ console.log(chalk_1.default.green(`${lineNum} + ${mod}`));
235
+ }
236
+ }
237
+ }
238
+ console.log(chalk_1.default.gray('─'.repeat(60)));
239
+ console.log();
240
+ }
241
+ async applyFix(filePath, original, modified) {
242
+ // Create backup
243
+ const backup = this.fileUtils.backupFile(filePath);
244
+ if (backup) {
245
+ this.logger.info(`Backup: ${chalk_1.default.gray(backup)}`);
246
+ }
247
+ // Apply changes
248
+ if (this.fileUtils.writeFile(filePath, modified)) {
249
+ this.logger.success(`Changes applied to ${filePath}`);
250
+ }
251
+ else {
252
+ this.logger.error('Failed to write changes');
253
+ }
254
+ }
255
+ }
256
+ exports.EditCommand = EditCommand;
257
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Explain Command - Explain code in files
3
+ */
4
+ import { Config } from '../utils/config.js';
5
+ import { Logger } from '../utils/logger.js';
6
+ interface ExplainOptions {
7
+ lines?: string;
8
+ detail: 'brief' | 'normal' | 'detailed';
9
+ }
10
+ export declare class ExplainCommand {
11
+ private config;
12
+ private logger;
13
+ private api;
14
+ private fileUtils;
15
+ private marked;
16
+ constructor(config: Config, logger: Logger);
17
+ run(filePath: string, options: ExplainOptions): Promise<void>;
18
+ private formatExplanation;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;CACzC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAUpC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DnE,OAAO,CAAC,iBAAiB;CAiB1B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Explain Command - Explain code in files
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ExplainCommand = void 0;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const marked_1 = require("marked");
13
+ const marked_terminal_1 = require("marked-terminal");
14
+ const api_js_1 = require("../utils/api.js");
15
+ const files_js_1 = require("../utils/files.js");
16
+ class ExplainCommand {
17
+ config;
18
+ logger;
19
+ api;
20
+ fileUtils;
21
+ marked;
22
+ constructor(config, logger) {
23
+ this.config = config;
24
+ this.logger = logger;
25
+ this.api = new api_js_1.APIClient(config, logger);
26
+ this.fileUtils = new files_js_1.FileUtils(process.cwd(), config.get('project').ignorePatterns);
27
+ this.marked = new marked_1.Marked();
28
+ this.marked.use((0, marked_terminal_1.markedTerminal)());
29
+ }
30
+ async run(filePath, options) {
31
+ // Check auth
32
+ if (!this.config.isAuthenticated()) {
33
+ this.logger.error('Not authenticated. Run: vigthoria login');
34
+ return;
35
+ }
36
+ // Read file
37
+ const file = this.fileUtils.readFile(filePath);
38
+ if (!file) {
39
+ this.logger.error(`File not found: ${filePath}`);
40
+ return;
41
+ }
42
+ // Get code to explain
43
+ let codeToExplain = file.content;
44
+ let lineInfo = '';
45
+ if (options.lines) {
46
+ const [start, end] = options.lines.split('-').map(Number);
47
+ const lines = this.fileUtils.readLines(filePath, start, end || start);
48
+ if (lines) {
49
+ codeToExplain = lines;
50
+ lineInfo = ` (lines ${start}-${end || start})`;
51
+ }
52
+ }
53
+ this.logger.section(`Explaining: ${file.relativePath}${lineInfo}`);
54
+ console.log(chalk_1.default.gray(`Language: ${file.language} | Detail: ${options.detail}`));
55
+ console.log();
56
+ // Show the code being explained
57
+ console.log(chalk_1.default.gray('─'.repeat(60)));
58
+ codeToExplain.split('\n').forEach((line, i) => {
59
+ const lineNum = chalk_1.default.gray(String(i + 1).padStart(4, ' ') + ' │ ');
60
+ console.log(lineNum + line);
61
+ });
62
+ console.log(chalk_1.default.gray('─'.repeat(60)));
63
+ console.log();
64
+ const spinner = (0, ora_1.default)({
65
+ text: 'Analyzing code...',
66
+ spinner: 'dots',
67
+ }).start();
68
+ try {
69
+ const explanation = await this.api.explainCode(codeToExplain, file.language);
70
+ spinner.stop();
71
+ // Format based on detail level
72
+ const formattedExplanation = this.formatExplanation(explanation, options.detail);
73
+ this.logger.section('Explanation');
74
+ console.log(this.marked.parse(formattedExplanation));
75
+ }
76
+ catch (error) {
77
+ spinner.stop();
78
+ this.logger.error('Explanation failed:', error.message);
79
+ }
80
+ }
81
+ formatExplanation(explanation, detail) {
82
+ switch (detail) {
83
+ case 'brief':
84
+ // Extract just the summary
85
+ const lines = explanation.split('\n');
86
+ const summaryLines = lines.slice(0, Math.min(lines.length, 5));
87
+ return summaryLines.join('\n');
88
+ case 'detailed':
89
+ // Add extra formatting
90
+ return explanation + '\n\n---\n*Detailed analysis by Vigthoria*';
91
+ case 'normal':
92
+ default:
93
+ return explanation;
94
+ }
95
+ }
96
+ }
97
+ exports.ExplainCommand = ExplainCommand;
98
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Generate Command - Generate code from description
3
+ */
4
+ import { Config } from '../utils/config.js';
5
+ import { Logger } from '../utils/logger.js';
6
+ interface GenerateOptions {
7
+ language: string;
8
+ output?: string;
9
+ model: string;
10
+ }
11
+ export declare class GenerateCommand {
12
+ private config;
13
+ private logger;
14
+ private api;
15
+ private fileUtils;
16
+ constructor(config: Config, logger: Logger);
17
+ run(description: string, options: GenerateOptions): Promise<void>;
18
+ private highlightCode;
19
+ private highlightLine;
20
+ private saveToFile;
21
+ private promptForAction;
22
+ private suggestFilename;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,SAAS,CAAY;gBAEjB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOpC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CvE,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;YA+BP,UAAU;YAQV,eAAe;IAwC7B,OAAO,CAAC,eAAe;CAaxB"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * Generate Command - Generate code from description
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.GenerateCommand = void 0;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const inquirer_1 = __importDefault(require("inquirer"));
13
+ const api_js_1 = require("../utils/api.js");
14
+ const files_js_1 = require("../utils/files.js");
15
+ class GenerateCommand {
16
+ config;
17
+ logger;
18
+ api;
19
+ fileUtils;
20
+ constructor(config, logger) {
21
+ this.config = config;
22
+ this.logger = logger;
23
+ this.api = new api_js_1.APIClient(config, logger);
24
+ this.fileUtils = new files_js_1.FileUtils(process.cwd(), config.get('project').ignorePatterns);
25
+ }
26
+ async run(description, options) {
27
+ // Check auth
28
+ if (!this.config.isAuthenticated()) {
29
+ this.logger.error('Not authenticated. Run: vigthoria login');
30
+ return;
31
+ }
32
+ this.logger.section('Code Generation');
33
+ console.log(chalk_1.default.gray(`Language: ${options.language}`));
34
+ console.log(chalk_1.default.gray(`Description: ${description}`));
35
+ console.log();
36
+ const spinner = (0, ora_1.default)({
37
+ text: 'Generating code...',
38
+ spinner: 'dots',
39
+ }).start();
40
+ try {
41
+ const code = await this.api.generateCode(description, options.language, options.model);
42
+ spinner.stop();
43
+ // Display generated code
44
+ this.logger.section('Generated Code');
45
+ console.log(chalk_1.default.gray('─'.repeat(60)));
46
+ console.log(this.highlightCode(code, options.language));
47
+ console.log(chalk_1.default.gray('─'.repeat(60)));
48
+ console.log();
49
+ // Save options
50
+ if (options.output) {
51
+ await this.saveToFile(options.output, code);
52
+ }
53
+ else {
54
+ await this.promptForAction(code, options.language);
55
+ }
56
+ }
57
+ catch (error) {
58
+ spinner.stop();
59
+ this.logger.error('Generation failed:', error.message);
60
+ }
61
+ }
62
+ highlightCode(code, language) {
63
+ // Basic syntax highlighting
64
+ // In production, use a proper library like highlight.js
65
+ const lines = code.split('\n');
66
+ return lines.map((line, i) => {
67
+ const lineNum = chalk_1.default.gray(String(i + 1).padStart(4, ' ') + ' │ ');
68
+ return lineNum + this.highlightLine(line, language);
69
+ }).join('\n');
70
+ }
71
+ highlightLine(line, language) {
72
+ // Simple keyword highlighting
73
+ const keywords = {
74
+ typescript: ['const', 'let', 'var', 'function', 'class', 'interface', 'type', 'export', 'import', 'from', 'async', 'await', 'return', 'if', 'else', 'for', 'while', 'try', 'catch', 'throw', 'new'],
75
+ javascript: ['const', 'let', 'var', 'function', 'class', 'export', 'import', 'from', 'async', 'await', 'return', 'if', 'else', 'for', 'while', 'try', 'catch', 'throw', 'new'],
76
+ python: ['def', 'class', 'import', 'from', 'return', 'if', 'elif', 'else', 'for', 'while', 'try', 'except', 'raise', 'with', 'as', 'async', 'await', 'yield', 'lambda'],
77
+ rust: ['fn', 'let', 'mut', 'const', 'struct', 'enum', 'impl', 'trait', 'pub', 'use', 'mod', 'return', 'if', 'else', 'match', 'for', 'while', 'loop', 'async', 'await'],
78
+ go: ['func', 'var', 'const', 'type', 'struct', 'interface', 'package', 'import', 'return', 'if', 'else', 'for', 'range', 'switch', 'case', 'go', 'defer', 'chan'],
79
+ };
80
+ const langKeywords = keywords[language] || keywords['typescript'];
81
+ let highlighted = line;
82
+ // Highlight keywords
83
+ langKeywords.forEach(kw => {
84
+ const regex = new RegExp(`\\b${kw}\\b`, 'g');
85
+ highlighted = highlighted.replace(regex, chalk_1.default.magenta(kw));
86
+ });
87
+ // Highlight strings
88
+ highlighted = highlighted.replace(/(["'`])(?:(?!\1)[^\\]|\\.)*\1/g, (match) => chalk_1.default.green(match));
89
+ // Highlight comments
90
+ highlighted = highlighted.replace(/(\/\/.*$|#.*$)/g, (match) => chalk_1.default.gray(match));
91
+ // Highlight numbers
92
+ highlighted = highlighted.replace(/\b(\d+)\b/g, (match) => chalk_1.default.yellow(match));
93
+ return highlighted;
94
+ }
95
+ async saveToFile(filePath, code) {
96
+ if (this.fileUtils.writeFile(filePath, code)) {
97
+ this.logger.success(`Code saved to ${filePath}`);
98
+ }
99
+ else {
100
+ this.logger.error('Failed to save file');
101
+ }
102
+ }
103
+ async promptForAction(code, language) {
104
+ const { action } = await inquirer_1.default.prompt([
105
+ {
106
+ type: 'list',
107
+ name: 'action',
108
+ message: 'What would you like to do with this code?',
109
+ choices: [
110
+ { name: 'Copy to clipboard', value: 'copy' },
111
+ { name: 'Save to file', value: 'save' },
112
+ { name: 'Regenerate', value: 'regenerate' },
113
+ { name: 'Done', value: 'done' },
114
+ ],
115
+ },
116
+ ]);
117
+ switch (action) {
118
+ case 'copy':
119
+ // Note: Clipboard access requires additional setup
120
+ this.logger.info('Code copied to clipboard');
121
+ console.log(chalk_1.default.gray('(Note: Clipboard access may require additional permissions)'));
122
+ break;
123
+ case 'save':
124
+ const { filename } = await inquirer_1.default.prompt([
125
+ {
126
+ type: 'input',
127
+ name: 'filename',
128
+ message: 'Enter filename:',
129
+ default: this.suggestFilename(language),
130
+ },
131
+ ]);
132
+ await this.saveToFile(filename, code);
133
+ break;
134
+ case 'regenerate':
135
+ this.logger.info('Use the generate command again with different parameters');
136
+ break;
137
+ case 'done':
138
+ break;
139
+ }
140
+ }
141
+ suggestFilename(language) {
142
+ const extensions = {
143
+ typescript: 'generated.ts',
144
+ javascript: 'generated.js',
145
+ python: 'generated.py',
146
+ rust: 'generated.rs',
147
+ go: 'generated.go',
148
+ java: 'Generated.java',
149
+ csharp: 'Generated.cs',
150
+ };
151
+ return extensions[language] || 'generated.txt';
152
+ }
153
+ }
154
+ exports.GenerateCommand = GenerateCommand;
155
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Review Command - Code review with AI
3
+ */
4
+ import { Config } from '../utils/config.js';
5
+ import { Logger } from '../utils/logger.js';
6
+ interface ReviewOptions {
7
+ format: 'text' | 'json' | 'markdown';
8
+ }
9
+ export declare class ReviewCommand {
10
+ private config;
11
+ private logger;
12
+ private api;
13
+ private fileUtils;
14
+ private marked;
15
+ constructor(config: Config, logger: Logger);
16
+ run(filePath: string, options: ReviewOptions): Promise<void>;
17
+ private printTextReview;
18
+ private printMarkdownReview;
19
+ private renderScoreBar;
20
+ private getSeverityIcon;
21
+ private getSeverityColor;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CACtC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAUpC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDlE,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;CAYzB"}