@yeepay/coderocket-mcp 1.0.1

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.
@@ -0,0 +1,528 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { writeFile, readFile, mkdir, access } from 'fs/promises';
4
+ import fs from 'fs';
5
+ import { join, dirname, resolve } from 'path';
6
+ import { tmpdir } from 'os';
7
+ import { logger, errorHandler } from './logger.js';
8
+ const execAsync = promisify(exec);
9
+ /**
10
+ * CodeRocket服务类
11
+ *
12
+ * 负责与coderocket-cli集成,提供代码审查和AI服务管理功能
13
+ */
14
+ export class CodeRocketService {
15
+ coderocketCliPath = '';
16
+ constructor() {
17
+ // 初始化将在第一次使用时进行
18
+ }
19
+ async ensureInitialized() {
20
+ if (!this.coderocketCliPath) {
21
+ this.coderocketCliPath = await this.findCoderocketCliPath();
22
+ logger.info('CodeRocket服务初始化', {
23
+ coderocketCliPath: this.coderocketCliPath,
24
+ });
25
+ }
26
+ }
27
+ /**
28
+ * 查找coderocket-cli的安装路径
29
+ */
30
+ async findCoderocketCliPath() {
31
+ // 优先级:
32
+ // 1. 相对路径(开发环境)
33
+ // 2. 全局安装路径
34
+ // 3. 用户主目录安装
35
+ const possiblePaths = [
36
+ resolve(process.cwd(), '../coderocket-cli'),
37
+ resolve(process.cwd(), '../../coderocket-cli'),
38
+ resolve(process.env.HOME || '~', '.coderocket'),
39
+ resolve(process.env.HOME || '~', '.codereview-cli'), // 向后兼容
40
+ '/usr/local/share/coderocket-cli',
41
+ ];
42
+ for (const path of possiblePaths) {
43
+ try {
44
+ // 检查关键文件是否存在
45
+ const libPath = join(path, 'lib', 'ai-service-manager.sh');
46
+ await access(libPath, fs.constants.F_OK);
47
+ return path;
48
+ }
49
+ catch {
50
+ continue;
51
+ }
52
+ }
53
+ // 如果都找不到,使用默认路径(可能需要用户手动配置)
54
+ return resolve(process.cwd(), '../coderocket-cli');
55
+ }
56
+ /**
57
+ * 执行shell命令并返回结果
58
+ */
59
+ async executeShellCommand(command, cwd) {
60
+ logger.debug('执行Shell命令', {
61
+ command,
62
+ cwd: cwd || this.coderocketCliPath,
63
+ });
64
+ try {
65
+ const { stdout, stderr } = await execAsync(command, {
66
+ cwd: cwd || this.coderocketCliPath,
67
+ env: {
68
+ ...process.env,
69
+ PATH: `${this.coderocketCliPath}/bin:${process.env.PATH}`,
70
+ },
71
+ timeout: 300000, // 5分钟超时
72
+ });
73
+ logger.debug('Shell命令执行成功', {
74
+ command,
75
+ stdoutLength: stdout.length,
76
+ stderrLength: stderr.length,
77
+ });
78
+ return { stdout, stderr };
79
+ }
80
+ catch (error) {
81
+ logger.error('Shell命令执行失败', error, { command, cwd });
82
+ throw errorHandler.handleError(error, 'executeShellCommand');
83
+ }
84
+ }
85
+ /**
86
+ * 调用AI服务管理器脚本
87
+ */
88
+ async callAIServiceManager(action, ...args) {
89
+ const scriptPath = join(this.coderocketCliPath, 'lib', 'ai-service-manager.sh');
90
+ const command = `bash "${scriptPath}" ${action} ${args.join(' ')}`;
91
+ const { stdout, stderr } = await this.executeShellCommand(command);
92
+ if (stderr && !stdout) {
93
+ throw new Error(stderr);
94
+ }
95
+ return stdout.trim();
96
+ }
97
+ /**
98
+ * 创建临时提示词文件
99
+ */
100
+ async createTempPromptFile(customPrompt) {
101
+ const tempDir = tmpdir();
102
+ const tempFile = join(tempDir, `coderocket-prompt-${Date.now()}.md`);
103
+ let promptContent = '';
104
+ if (customPrompt) {
105
+ promptContent = customPrompt;
106
+ }
107
+ else {
108
+ // 使用默认提示词
109
+ const defaultPromptPath = join(this.coderocketCliPath, 'prompts', 'git-commit-review-prompt.md');
110
+ try {
111
+ promptContent = await readFile(defaultPromptPath, 'utf-8');
112
+ }
113
+ catch {
114
+ // 如果找不到默认提示词,使用内置的基础提示词
115
+ promptContent = this.getDefaultPrompt();
116
+ }
117
+ }
118
+ await writeFile(tempFile, promptContent, 'utf-8');
119
+ return tempFile;
120
+ }
121
+ /**
122
+ * 获取内置的默认提示词
123
+ */
124
+ getDefaultPrompt() {
125
+ return `# 代码审查提示词
126
+
127
+ 你是一个专业的代码审查专家。请对提供的代码进行全面审查,包括:
128
+
129
+ ## 审查维度
130
+ 1. **功能完整性**:代码是否正确实现了预期功能
131
+ 2. **代码质量**:代码结构、可读性、维护性
132
+ 3. **性能优化**:是否存在性能问题或优化空间
133
+ 4. **安全性**:是否存在安全漏洞或风险
134
+ 5. **最佳实践**:是否遵循编程最佳实践和规范
135
+
136
+ ## 输出格式
137
+ 请按以下格式输出审查结果:
138
+
139
+ ### 审查状态
140
+ - ✅ 通过:功能完全实现,代码质量良好
141
+ - ⚠️ 警告:功能基本实现,但存在质量问题
142
+ - ❌ 失败:功能未实现或存在严重问题
143
+ - 🔍 调查:需要进一步调查
144
+
145
+ ### 审查摘要
146
+ 简要描述代码的整体质量和主要发现。
147
+
148
+ ### 详细分析
149
+ 提供具体的问题分析和改进建议。
150
+
151
+ 请开始审查。`;
152
+ }
153
+ /**
154
+ * 解析审查结果
155
+ */
156
+ parseReviewResult(output, aiService) {
157
+ const lines = output.split('\n');
158
+ let status = '🔍';
159
+ let summary = '';
160
+ let details = output;
161
+ // 尝试从输出中提取状态
162
+ for (const line of lines) {
163
+ if (line.includes('✅') || line.includes('通过')) {
164
+ status = '✅';
165
+ break;
166
+ }
167
+ else if (line.includes('⚠️') || line.includes('警告')) {
168
+ status = '⚠️';
169
+ break;
170
+ }
171
+ else if (line.includes('❌') || line.includes('失败')) {
172
+ status = '❌';
173
+ break;
174
+ }
175
+ else if (line.includes('🔍') || line.includes('调查')) {
176
+ status = '🔍';
177
+ break;
178
+ }
179
+ }
180
+ // 提取摘要(通常是第一段非空内容)
181
+ const nonEmptyLines = lines.filter(line => line.trim());
182
+ if (nonEmptyLines.length > 0) {
183
+ summary =
184
+ nonEmptyLines[0].substring(0, 200) +
185
+ (nonEmptyLines[0].length > 200 ? '...' : '');
186
+ }
187
+ return {
188
+ status,
189
+ summary: summary || '代码审查完成',
190
+ details,
191
+ ai_service_used: aiService,
192
+ timestamp: new Date().toISOString(),
193
+ };
194
+ }
195
+ /**
196
+ * 审查代码片段
197
+ */
198
+ async reviewCode(request) {
199
+ await this.ensureInitialized();
200
+ logger.info('开始代码审查', {
201
+ language: request.language,
202
+ codeLength: request.code.length,
203
+ aiService: request.ai_service,
204
+ });
205
+ try {
206
+ // 创建临时文件存储代码
207
+ const tempDir = tmpdir();
208
+ const tempCodeFile = join(tempDir, `code-${Date.now()}.${this.getFileExtension(request.language)}`);
209
+ await writeFile(tempCodeFile, request.code, 'utf-8');
210
+ // 创建提示词文件
211
+ const promptFile = await this.createTempPromptFile(request.custom_prompt);
212
+ // 构建审查提示词
213
+ const reviewPrompt = `请审查以下代码:
214
+
215
+ 文件路径: ${tempCodeFile}
216
+ 编程语言: ${request.language || '未指定'}
217
+ 上下文信息: ${request.context || '无'}
218
+
219
+ 代码内容:
220
+ \`\`\`${request.language || ''}
221
+ ${request.code}
222
+ \`\`\`
223
+
224
+ 请根据提示词文件中的指导进行全面审查。`;
225
+ // 调用AI服务进行审查
226
+ const aiService = request.ai_service || 'gemini';
227
+ const scriptPath = join(this.coderocketCliPath, 'lib', 'ai-service-manager.sh');
228
+ // 使用intelligent_ai_review函数
229
+ const command = `source "${scriptPath}" && intelligent_ai_review "${aiService}" "${promptFile}" "${reviewPrompt}"`;
230
+ const { stdout } = await this.executeShellCommand(command);
231
+ const result = this.parseReviewResult(stdout, aiService);
232
+ logger.info('代码审查完成', {
233
+ status: result.status,
234
+ aiService: result.ai_service_used,
235
+ });
236
+ return result;
237
+ }
238
+ catch (error) {
239
+ logger.error('代码审查失败', error instanceof Error ? error : new Error(String(error)));
240
+ throw errorHandler.handleError(error, 'reviewCode');
241
+ }
242
+ }
243
+ /**
244
+ * 根据语言获取文件扩展名
245
+ */
246
+ getFileExtension(language) {
247
+ const extensions = {
248
+ javascript: 'js',
249
+ typescript: 'ts',
250
+ python: 'py',
251
+ java: 'java',
252
+ cpp: 'cpp',
253
+ c: 'c',
254
+ go: 'go',
255
+ rust: 'rs',
256
+ php: 'php',
257
+ ruby: 'rb',
258
+ swift: 'swift',
259
+ kotlin: 'kt',
260
+ scala: 'scala',
261
+ shell: 'sh',
262
+ bash: 'sh',
263
+ };
264
+ return extensions[language?.toLowerCase() || ''] || 'txt';
265
+ }
266
+ /**
267
+ * 审查Git提交
268
+ */
269
+ async reviewCommit(request) {
270
+ await this.ensureInitialized();
271
+ try {
272
+ const repoPath = request.repository_path || process.cwd();
273
+ const promptFile = await this.createTempPromptFile(request.custom_prompt);
274
+ // 构建审查提示词
275
+ const commitInfo = request.commit_hash
276
+ ? `特定提交: ${request.commit_hash}`
277
+ : '最新提交';
278
+ const reviewPrompt = `请对Git仓库中的${commitInfo}进行代码审查:
279
+
280
+ 仓库路径: ${repoPath}
281
+ ${request.commit_hash ? `提交哈希: ${request.commit_hash}` : ''}
282
+
283
+ 请使用 git show ${request.commit_hash || 'HEAD'} 命令获取提交详情,然后根据提示词文件中的指导进行全面审查。`;
284
+ // 调用AI服务进行审查
285
+ const aiService = request.ai_service || 'gemini';
286
+ const scriptPath = join(this.coderocketCliPath, 'lib', 'ai-service-manager.sh');
287
+ const command = `cd "${repoPath}" && source "${scriptPath}" && intelligent_ai_review "${aiService}" "${promptFile}" "${reviewPrompt}"`;
288
+ const { stdout } = await this.executeShellCommand(command, repoPath);
289
+ return this.parseReviewResult(stdout, aiService);
290
+ }
291
+ catch (error) {
292
+ throw new Error(`Git提交审查失败: ${error instanceof Error ? error.message : String(error)}`);
293
+ }
294
+ }
295
+ /**
296
+ * 审查文件列表
297
+ */
298
+ async reviewFiles(request) {
299
+ await this.ensureInitialized();
300
+ try {
301
+ const repoPath = request.repository_path || process.cwd();
302
+ const promptFile = await this.createTempPromptFile(request.custom_prompt);
303
+ // 读取文件内容
304
+ const fileContents = [];
305
+ for (const filePath of request.files) {
306
+ try {
307
+ const fullPath = resolve(repoPath, filePath);
308
+ const content = await readFile(fullPath, 'utf-8');
309
+ fileContents.push(`文件: ${filePath}\n\`\`\`\n${content}\n\`\`\``);
310
+ }
311
+ catch (error) {
312
+ fileContents.push(`文件: ${filePath}\n错误: 无法读取文件 - ${error}`);
313
+ }
314
+ }
315
+ // 构建审查提示词
316
+ const reviewPrompt = `请审查以下文件:
317
+
318
+ 仓库路径: ${repoPath}
319
+ 文件列表: ${request.files.join(', ')}
320
+
321
+ 文件内容:
322
+ ${fileContents.join('\n\n')}
323
+
324
+ 请根据提示词文件中的指导进行全面审查。`;
325
+ // 调用AI服务进行审查
326
+ const aiService = request.ai_service || 'gemini';
327
+ const scriptPath = join(this.coderocketCliPath, 'lib', 'ai-service-manager.sh');
328
+ const command = `source "${scriptPath}" && intelligent_ai_review "${aiService}" "${promptFile}" "${reviewPrompt}"`;
329
+ const { stdout } = await this.executeShellCommand(command, repoPath);
330
+ return this.parseReviewResult(stdout, aiService);
331
+ }
332
+ catch (error) {
333
+ throw new Error(`文件审查失败: ${error instanceof Error ? error.message : String(error)}`);
334
+ }
335
+ }
336
+ /**
337
+ * 配置AI服务
338
+ */
339
+ async configureAIService(request) {
340
+ await this.ensureInitialized();
341
+ try {
342
+ // 设置AI服务
343
+ await this.callAIServiceManager('set', request.service, request.scope);
344
+ // 如果提供了API密钥,设置环境变量
345
+ if (request.api_key) {
346
+ const envVarName = this.getAPIKeyEnvVar(request.service);
347
+ process.env[envVarName] = request.api_key;
348
+ // 保存到配置文件
349
+ await this.saveAPIKeyToConfig(request.service, request.api_key, request.scope);
350
+ }
351
+ // 设置其他配置项
352
+ if (request.timeout) {
353
+ process.env.AI_TIMEOUT = request.timeout.toString();
354
+ }
355
+ if (request.max_retries) {
356
+ process.env.AI_MAX_RETRIES = request.max_retries.toString();
357
+ }
358
+ return {
359
+ success: true,
360
+ message: `AI服务 ${request.service} 配置成功`,
361
+ data: {
362
+ service: request.service,
363
+ scope: request.scope,
364
+ configured_options: {
365
+ api_key: !!request.api_key,
366
+ timeout: request.timeout,
367
+ max_retries: request.max_retries,
368
+ },
369
+ },
370
+ };
371
+ }
372
+ catch (error) {
373
+ throw new Error(`AI服务配置失败: ${error instanceof Error ? error.message : String(error)}`);
374
+ }
375
+ }
376
+ /**
377
+ * 获取API密钥环境变量名
378
+ */
379
+ getAPIKeyEnvVar(service) {
380
+ const envVars = {
381
+ gemini: 'GEMINI_API_KEY',
382
+ opencode: 'OPENCODE_API_KEY',
383
+ claudecode: 'CLAUDECODE_API_KEY',
384
+ };
385
+ return envVars[service];
386
+ }
387
+ /**
388
+ * 保存API密钥到配置文件
389
+ */
390
+ async saveAPIKeyToConfig(service, apiKey, scope) {
391
+ const configDir = scope === 'global'
392
+ ? join(process.env.HOME || '~', '.coderocket')
393
+ : process.cwd();
394
+ const configFile = scope === 'global' ? join(configDir, 'env') : join(configDir, '.env');
395
+ // 确保配置目录存在
396
+ await mkdir(dirname(configFile), { recursive: true });
397
+ const envVarName = this.getAPIKeyEnvVar(service);
398
+ const configLine = `${envVarName}=${apiKey}\n`;
399
+ try {
400
+ // 读取现有配置
401
+ let existingConfig = '';
402
+ try {
403
+ existingConfig = await readFile(configFile, 'utf-8');
404
+ }
405
+ catch {
406
+ // 文件不存在,创建新的
407
+ }
408
+ // 更新或添加配置行
409
+ const lines = existingConfig.split('\n');
410
+ const existingLineIndex = lines.findIndex(line => line.startsWith(`${envVarName}=`));
411
+ if (existingLineIndex >= 0) {
412
+ lines[existingLineIndex] = `${envVarName}=${apiKey}`;
413
+ }
414
+ else {
415
+ lines.push(`${envVarName}=${apiKey}`);
416
+ }
417
+ // 写回文件
418
+ await writeFile(configFile, lines.join('\n'), 'utf-8');
419
+ }
420
+ catch (error) {
421
+ throw new Error(`保存配置失败: ${error}`);
422
+ }
423
+ }
424
+ /**
425
+ * 获取AI服务状态
426
+ */
427
+ async getAIServiceStatus() {
428
+ await this.ensureInitialized();
429
+ try {
430
+ // 获取当前AI服务
431
+ const currentService = await this.callAIServiceManager('status');
432
+ // 解析当前服务(从输出中提取)
433
+ const currentServiceMatch = currentService.match(/当前AI服务:\s*(\w+)/);
434
+ const current = (currentServiceMatch?.[1] || 'gemini');
435
+ // 检查所有服务的状态
436
+ const services = await Promise.all([
437
+ this.checkServiceStatus('gemini'),
438
+ this.checkServiceStatus('opencode'),
439
+ this.checkServiceStatus('claudecode'),
440
+ ]);
441
+ return {
442
+ current_service: current,
443
+ services,
444
+ auto_switch_enabled: process.env.AI_AUTO_SWITCH !== 'false',
445
+ global_config_path: join(process.env.HOME || '~', '.coderocket', 'env'),
446
+ project_config_path: join(process.cwd(), '.env'),
447
+ };
448
+ }
449
+ catch (error) {
450
+ throw new Error(`获取AI服务状态失败: ${error instanceof Error ? error.message : String(error)}`);
451
+ }
452
+ }
453
+ /**
454
+ * 检查单个服务状态
455
+ */
456
+ async checkServiceStatus(service) {
457
+ try {
458
+ // 检查服务是否可用
459
+ const available = await this.isServiceAvailable(service);
460
+ const configured = await this.isServiceConfigured(service);
461
+ return {
462
+ service,
463
+ available,
464
+ configured,
465
+ install_command: this.getInstallCommand(service),
466
+ config_command: this.getConfigCommand(service),
467
+ error_message: available ? undefined : `${service} 服务未安装或不可用`,
468
+ };
469
+ }
470
+ catch (error) {
471
+ return {
472
+ service,
473
+ available: false,
474
+ configured: false,
475
+ install_command: this.getInstallCommand(service),
476
+ config_command: this.getConfigCommand(service),
477
+ error_message: `检查 ${service} 状态时出错: ${error}`,
478
+ };
479
+ }
480
+ }
481
+ /**
482
+ * 检查服务是否可用
483
+ */
484
+ async isServiceAvailable(service) {
485
+ try {
486
+ const commands = {
487
+ gemini: 'gemini --version',
488
+ opencode: 'opencode --version',
489
+ claudecode: 'claudecode --version',
490
+ };
491
+ await this.executeShellCommand(commands[service]);
492
+ return true;
493
+ }
494
+ catch {
495
+ return false;
496
+ }
497
+ }
498
+ /**
499
+ * 检查服务是否已配置
500
+ */
501
+ async isServiceConfigured(service) {
502
+ const envVarName = this.getAPIKeyEnvVar(service);
503
+ return !!process.env[envVarName];
504
+ }
505
+ /**
506
+ * 获取安装命令
507
+ */
508
+ getInstallCommand(service) {
509
+ const commands = {
510
+ gemini: 'npm install -g @google/gemini-cli',
511
+ opencode: 'npm install -g @opencode/cli',
512
+ claudecode: 'npm install -g @anthropic-ai/claude-code',
513
+ };
514
+ return commands[service];
515
+ }
516
+ /**
517
+ * 获取配置命令
518
+ */
519
+ getConfigCommand(service) {
520
+ const commands = {
521
+ gemini: 'gemini config',
522
+ opencode: 'opencode config',
523
+ claudecode: 'claudecode config',
524
+ };
525
+ return commands[service];
526
+ }
527
+ }
528
+ //# sourceMappingURL=coderocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coderocket.js","sourceRoot":"","sources":["../src/coderocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}