@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.
- package/.eslintrc.cjs +36 -0
- package/CHANGELOG +111 -0
- package/LICENSE +201 -0
- package/README.md +400 -0
- package/bin/coderocket-mcp +108 -0
- package/dist/coderocket.d.ts +88 -0
- package/dist/coderocket.d.ts.map +1 -0
- package/dist/coderocket.js +528 -0
- package/dist/coderocket.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +71 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +204 -0
- package/dist/logger.js.map +1 -0
- package/dist/test.d.ts +9 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +108 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +211 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +85 -0
- package/dist/types.js.map +1 -0
- package/eslint.config.ts +9 -0
- package/package.json +71 -0
- package/scripts/prepare-release.sh +150 -0
package/dist/index.js
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
5
|
+
import { CodeRocketService } from './coderocket.js';
|
6
|
+
import { ReviewCodeRequestSchema, ReviewCommitRequestSchema, ReviewFilesRequestSchema, ConfigureAIServiceRequestSchema, } from './types.js';
|
7
|
+
/**
|
8
|
+
* CodeRocket MCP Server
|
9
|
+
*
|
10
|
+
* 提供AI驱动的代码审查功能,集成多种AI服务(Gemini、OpenCode、ClaudeCode)
|
11
|
+
* 支持代码片段审查、Git提交审查、文件审查和AI服务管理
|
12
|
+
*/
|
13
|
+
class CodeRocketMCPServer {
|
14
|
+
server;
|
15
|
+
codeRocketService;
|
16
|
+
constructor() {
|
17
|
+
this.server = new Server({
|
18
|
+
name: 'coderocket-mcp',
|
19
|
+
version: '1.0.0',
|
20
|
+
}, {
|
21
|
+
capabilities: {
|
22
|
+
tools: {},
|
23
|
+
},
|
24
|
+
});
|
25
|
+
this.codeRocketService = new CodeRocketService();
|
26
|
+
this.setupToolHandlers();
|
27
|
+
}
|
28
|
+
setupToolHandlers() {
|
29
|
+
// 注册工具列表处理器
|
30
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
31
|
+
return {
|
32
|
+
tools: [
|
33
|
+
{
|
34
|
+
name: 'review_code',
|
35
|
+
description: '审查代码片段,提供详细的质量分析和改进建议',
|
36
|
+
inputSchema: ReviewCodeRequestSchema,
|
37
|
+
},
|
38
|
+
{
|
39
|
+
name: 'review_commit',
|
40
|
+
description: '审查Git提交,分析代码变更的质量和影响',
|
41
|
+
inputSchema: ReviewCommitRequestSchema,
|
42
|
+
},
|
43
|
+
{
|
44
|
+
name: 'review_files',
|
45
|
+
description: '审查指定文件列表,提供全面的代码质量评估',
|
46
|
+
inputSchema: ReviewFilesRequestSchema,
|
47
|
+
},
|
48
|
+
{
|
49
|
+
name: 'configure_ai_service',
|
50
|
+
description: '配置AI服务设置,包括服务选择、API密钥等',
|
51
|
+
inputSchema: ConfigureAIServiceRequestSchema,
|
52
|
+
},
|
53
|
+
{
|
54
|
+
name: 'get_ai_service_status',
|
55
|
+
description: '获取所有AI服务的状态信息,包括可用性和配置状态',
|
56
|
+
inputSchema: {
|
57
|
+
type: 'object',
|
58
|
+
properties: {},
|
59
|
+
additionalProperties: false,
|
60
|
+
},
|
61
|
+
},
|
62
|
+
],
|
63
|
+
};
|
64
|
+
});
|
65
|
+
// 注册工具调用处理器
|
66
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
67
|
+
const { name, arguments: args } = request.params;
|
68
|
+
try {
|
69
|
+
switch (name) {
|
70
|
+
case 'review_code': {
|
71
|
+
const parsedArgs = ReviewCodeRequestSchema.parse(args);
|
72
|
+
const result = await this.codeRocketService.reviewCode(parsedArgs);
|
73
|
+
return {
|
74
|
+
content: [
|
75
|
+
{
|
76
|
+
type: 'text',
|
77
|
+
text: JSON.stringify(result, null, 2),
|
78
|
+
},
|
79
|
+
],
|
80
|
+
};
|
81
|
+
}
|
82
|
+
case 'review_commit': {
|
83
|
+
const parsedArgs = ReviewCommitRequestSchema.parse(args);
|
84
|
+
const result = await this.codeRocketService.reviewCommit(parsedArgs);
|
85
|
+
return {
|
86
|
+
content: [
|
87
|
+
{
|
88
|
+
type: 'text',
|
89
|
+
text: JSON.stringify(result, null, 2),
|
90
|
+
},
|
91
|
+
],
|
92
|
+
};
|
93
|
+
}
|
94
|
+
case 'review_files': {
|
95
|
+
const parsedArgs = ReviewFilesRequestSchema.parse(args);
|
96
|
+
const result = await this.codeRocketService.reviewFiles(parsedArgs);
|
97
|
+
return {
|
98
|
+
content: [
|
99
|
+
{
|
100
|
+
type: 'text',
|
101
|
+
text: JSON.stringify(result, null, 2),
|
102
|
+
},
|
103
|
+
],
|
104
|
+
};
|
105
|
+
}
|
106
|
+
case 'configure_ai_service': {
|
107
|
+
const parsedArgs = ConfigureAIServiceRequestSchema.parse(args);
|
108
|
+
const result = await this.codeRocketService.configureAIService(parsedArgs);
|
109
|
+
return {
|
110
|
+
content: [
|
111
|
+
{
|
112
|
+
type: 'text',
|
113
|
+
text: JSON.stringify(result, null, 2),
|
114
|
+
},
|
115
|
+
],
|
116
|
+
};
|
117
|
+
}
|
118
|
+
case 'get_ai_service_status': {
|
119
|
+
const result = await this.codeRocketService.getAIServiceStatus();
|
120
|
+
return {
|
121
|
+
content: [
|
122
|
+
{
|
123
|
+
type: 'text',
|
124
|
+
text: JSON.stringify(result, null, 2),
|
125
|
+
},
|
126
|
+
],
|
127
|
+
};
|
128
|
+
}
|
129
|
+
default:
|
130
|
+
throw new Error(`Unknown tool: ${name}`);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
catch (error) {
|
134
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
135
|
+
return {
|
136
|
+
content: [
|
137
|
+
{
|
138
|
+
type: 'text',
|
139
|
+
text: JSON.stringify({
|
140
|
+
error: errorMessage,
|
141
|
+
error_code: 'TOOL_EXECUTION_ERROR',
|
142
|
+
suggestions: [
|
143
|
+
'检查输入参数是否正确',
|
144
|
+
'确保coderocket-cli已正确安装',
|
145
|
+
'验证AI服务配置是否正确',
|
146
|
+
],
|
147
|
+
}, null, 2),
|
148
|
+
},
|
149
|
+
],
|
150
|
+
isError: true,
|
151
|
+
};
|
152
|
+
}
|
153
|
+
});
|
154
|
+
}
|
155
|
+
async run() {
|
156
|
+
const transport = new StdioServerTransport();
|
157
|
+
await this.server.connect(transport);
|
158
|
+
console.error('CodeRocket MCP Server running on stdio');
|
159
|
+
}
|
160
|
+
}
|
161
|
+
// 启动服务器
|
162
|
+
const server = new CodeRocketMCPServer();
|
163
|
+
server.run().catch(error => {
|
164
|
+
console.error('Failed to start server:', error);
|
165
|
+
process.exit(1);
|
166
|
+
});
|
167
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,mBAAmB;IACf,MAAM,CAAS;IACf,iBAAiB,CAAoB;IAE7C;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,uBAAuB;wBACpC,WAAW,EAAE,uBAAuB;qBACrC;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,sBAAsB;wBACnC,WAAW,EAAE,yBAAyB;qBACvC;oBACD;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,sBAAsB;wBACnC,WAAW,EAAE,wBAAwB;qBACtC;oBACD;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,WAAW,EAAE,wBAAwB;wBACrC,WAAW,EAAE,+BAA+B;qBAC7C;oBACD;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,WAAW,EAAE,0BAA0B;wBACvC,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,EAAE;4BACd,oBAAoB,EAAE,KAAK;yBAC5B;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACnE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,aAAa,CAAC,CAAC,CAAC;wBACnB,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;wBACnE,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iCACtC;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACzD,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wBACxD,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iCACtC;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBACpE,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iCACtC;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;wBAC5B,MAAM,UAAU,GAAG,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC/D,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;wBAC9D,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iCACtC;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;wBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;wBACjE,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iCACtC;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED;wBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,KAAK,EAAE,YAAY;gCACnB,UAAU,EAAE,sBAAsB;gCAClC,WAAW,EAAE;oCACX,YAAY;oCACZ,uBAAuB;oCACvB,cAAc;iCACf;6BACF,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,QAAQ;AACR,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;AACzC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/logger.d.ts
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
/**
|
2
|
+
* 日志级别
|
3
|
+
*/
|
4
|
+
export declare enum LogLevel {
|
5
|
+
DEBUG = 0,
|
6
|
+
INFO = 1,
|
7
|
+
WARN = 2,
|
8
|
+
ERROR = 3
|
9
|
+
}
|
10
|
+
/**
|
11
|
+
* 简单的日志记录器
|
12
|
+
*/
|
13
|
+
export declare class Logger {
|
14
|
+
private logLevel;
|
15
|
+
private logFile?;
|
16
|
+
constructor(level?: LogLevel, logFile?: string);
|
17
|
+
/**
|
18
|
+
* 记录调试信息
|
19
|
+
*/
|
20
|
+
debug(message: string, context?: Record<string, any>): void;
|
21
|
+
/**
|
22
|
+
* 记录信息
|
23
|
+
*/
|
24
|
+
info(message: string, context?: Record<string, any>): void;
|
25
|
+
/**
|
26
|
+
* 记录警告
|
27
|
+
*/
|
28
|
+
warn(message: string, context?: Record<string, any>): void;
|
29
|
+
/**
|
30
|
+
* 记录错误
|
31
|
+
*/
|
32
|
+
error(message: string, error?: Error, context?: Record<string, any>): void;
|
33
|
+
/**
|
34
|
+
* 核心日志记录方法
|
35
|
+
*/
|
36
|
+
private log;
|
37
|
+
/**
|
38
|
+
* 获取日志文件路径
|
39
|
+
*/
|
40
|
+
getLogFile(): string | undefined;
|
41
|
+
/**
|
42
|
+
* 设置日志级别
|
43
|
+
*/
|
44
|
+
setLevel(level: LogLevel): void;
|
45
|
+
}
|
46
|
+
export declare const logger: Logger;
|
47
|
+
/**
|
48
|
+
* 错误处理工具类
|
49
|
+
*/
|
50
|
+
export declare class ErrorHandler {
|
51
|
+
private logger;
|
52
|
+
constructor(logger: Logger);
|
53
|
+
/**
|
54
|
+
* 处理并格式化错误
|
55
|
+
*/
|
56
|
+
handleError(error: unknown, context?: string): Error;
|
57
|
+
/**
|
58
|
+
* 包装异步函数,自动处理错误
|
59
|
+
*/
|
60
|
+
wrapAsync<T extends any[], R>(fn: (...args: T) => Promise<R>, context?: string): (...args: T) => Promise<R>;
|
61
|
+
/**
|
62
|
+
* 创建用户友好的错误消息
|
63
|
+
*/
|
64
|
+
createUserFriendlyError(error: Error, suggestions?: string[]): {
|
65
|
+
error: string;
|
66
|
+
error_code: string;
|
67
|
+
suggestions: string[];
|
68
|
+
};
|
69
|
+
}
|
70
|
+
export declare const errorHandler: ErrorHandler;
|
71
|
+
//# sourceMappingURL=logger.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAaD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,KAAK,GAAE,QAAwB,EAAE,OAAO,CAAC,EAAE,MAAM;IAU7D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIpD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAInD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAInD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAInE;;OAEG;YACW,GAAG;IAmDjB;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ;CAGzB;AAGD,eAAO,MAAM,MAAM,QAElB,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK;IAqBpD;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAC1B,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAU7B;;OAEG;IACH,uBAAuB,CACrB,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;CAoDF;AAGD,eAAO,MAAM,YAAY,cAA2B,CAAC"}
|
package/dist/logger.js
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
import { appendFile } from 'fs/promises';
|
2
|
+
import { join } from 'path';
|
3
|
+
import { tmpdir } from 'os';
|
4
|
+
/**
|
5
|
+
* 日志级别
|
6
|
+
*/
|
7
|
+
export var LogLevel;
|
8
|
+
(function (LogLevel) {
|
9
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
10
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
11
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
12
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
13
|
+
})(LogLevel || (LogLevel = {}));
|
14
|
+
/**
|
15
|
+
* 简单的日志记录器
|
16
|
+
*/
|
17
|
+
export class Logger {
|
18
|
+
logLevel;
|
19
|
+
logFile;
|
20
|
+
constructor(level = LogLevel.INFO, logFile) {
|
21
|
+
this.logLevel = level;
|
22
|
+
this.logFile = logFile;
|
23
|
+
// 如果没有指定日志文件,使用临时目录
|
24
|
+
if (!this.logFile) {
|
25
|
+
this.logFile = join(tmpdir(), 'coderocket-mcp.log');
|
26
|
+
}
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* 记录调试信息
|
30
|
+
*/
|
31
|
+
debug(message, context) {
|
32
|
+
this.log(LogLevel.DEBUG, message, context);
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* 记录信息
|
36
|
+
*/
|
37
|
+
info(message, context) {
|
38
|
+
this.log(LogLevel.INFO, message, context);
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* 记录警告
|
42
|
+
*/
|
43
|
+
warn(message, context) {
|
44
|
+
this.log(LogLevel.WARN, message, context);
|
45
|
+
}
|
46
|
+
/**
|
47
|
+
* 记录错误
|
48
|
+
*/
|
49
|
+
error(message, error, context) {
|
50
|
+
this.log(LogLevel.ERROR, message, context, error);
|
51
|
+
}
|
52
|
+
/**
|
53
|
+
* 核心日志记录方法
|
54
|
+
*/
|
55
|
+
async log(level, message, context, error) {
|
56
|
+
if (level < this.logLevel) {
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
const entry = {
|
60
|
+
timestamp: new Date().toISOString(),
|
61
|
+
level,
|
62
|
+
message,
|
63
|
+
context,
|
64
|
+
error,
|
65
|
+
};
|
66
|
+
// 输出到控制台(根据日志级别选择合适的输出流)
|
67
|
+
const levelName = LogLevel[level];
|
68
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
69
|
+
const errorStr = error ? ` Error: ${error.message}` : '';
|
70
|
+
const logMethod = level >= LogLevel.WARN ? console.error : console.log;
|
71
|
+
logMethod(`[${entry.timestamp}] ${levelName}: ${message}${contextStr}${errorStr}`);
|
72
|
+
// 写入日志文件
|
73
|
+
if (this.logFile) {
|
74
|
+
try {
|
75
|
+
// 处理 Error 对象,避免循环结构
|
76
|
+
let logEntry = entry;
|
77
|
+
if (entry.error instanceof Error) {
|
78
|
+
logEntry = {
|
79
|
+
...entry,
|
80
|
+
error: {
|
81
|
+
name: entry.error.name,
|
82
|
+
message: entry.error.message,
|
83
|
+
stack: entry.error.stack,
|
84
|
+
},
|
85
|
+
};
|
86
|
+
}
|
87
|
+
const logLine = JSON.stringify(logEntry) + '\n';
|
88
|
+
await appendFile(this.logFile, logLine, 'utf-8');
|
89
|
+
}
|
90
|
+
catch (fileError) {
|
91
|
+
console.error('Failed to write to log file:', fileError);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
/**
|
96
|
+
* 获取日志文件路径
|
97
|
+
*/
|
98
|
+
getLogFile() {
|
99
|
+
return this.logFile;
|
100
|
+
}
|
101
|
+
/**
|
102
|
+
* 设置日志级别
|
103
|
+
*/
|
104
|
+
setLevel(level) {
|
105
|
+
this.logLevel = level;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
// 全局日志实例
|
109
|
+
export const logger = new Logger(process.env.NODE_ENV === 'development' ? LogLevel.DEBUG : LogLevel.INFO);
|
110
|
+
/**
|
111
|
+
* 错误处理工具类
|
112
|
+
*/
|
113
|
+
export class ErrorHandler {
|
114
|
+
logger;
|
115
|
+
constructor(logger) {
|
116
|
+
this.logger = logger;
|
117
|
+
}
|
118
|
+
/**
|
119
|
+
* 处理并格式化错误
|
120
|
+
*/
|
121
|
+
handleError(error, context) {
|
122
|
+
let formattedError;
|
123
|
+
if (error instanceof Error) {
|
124
|
+
formattedError = error;
|
125
|
+
}
|
126
|
+
else if (typeof error === 'string') {
|
127
|
+
formattedError = new Error(error);
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
formattedError = new Error(`Unknown error: ${JSON.stringify(error)}`);
|
131
|
+
}
|
132
|
+
// 记录错误
|
133
|
+
this.logger.error(`${context ? `[${context}] ` : ''}${formattedError.message}`, formattedError, { context });
|
134
|
+
return formattedError;
|
135
|
+
}
|
136
|
+
/**
|
137
|
+
* 包装异步函数,自动处理错误
|
138
|
+
*/
|
139
|
+
wrapAsync(fn, context) {
|
140
|
+
return async (...args) => {
|
141
|
+
try {
|
142
|
+
return await fn(...args);
|
143
|
+
}
|
144
|
+
catch (error) {
|
145
|
+
throw this.handleError(error, context);
|
146
|
+
}
|
147
|
+
};
|
148
|
+
}
|
149
|
+
/**
|
150
|
+
* 创建用户友好的错误消息
|
151
|
+
*/
|
152
|
+
createUserFriendlyError(error, suggestions) {
|
153
|
+
// 根据错误类型提供不同的错误代码和建议
|
154
|
+
let errorCode = 'UNKNOWN_ERROR';
|
155
|
+
let userSuggestions = suggestions || [];
|
156
|
+
if (error.message.includes('Shell command failed')) {
|
157
|
+
errorCode = 'SHELL_COMMAND_ERROR';
|
158
|
+
userSuggestions = [
|
159
|
+
'检查coderocket-cli是否正确安装',
|
160
|
+
'验证AI服务是否已配置',
|
161
|
+
'确保有足够的权限执行命令',
|
162
|
+
...userSuggestions,
|
163
|
+
];
|
164
|
+
}
|
165
|
+
else if (error.message.includes('AI服务') ||
|
166
|
+
error.message.includes('AI service')) {
|
167
|
+
errorCode = 'AI_SERVICE_ERROR';
|
168
|
+
userSuggestions = [
|
169
|
+
'检查AI服务配置',
|
170
|
+
'验证API密钥是否正确',
|
171
|
+
'确保网络连接正常',
|
172
|
+
'尝试切换到其他AI服务',
|
173
|
+
...userSuggestions,
|
174
|
+
];
|
175
|
+
}
|
176
|
+
else if (error.message.includes('文件') ||
|
177
|
+
error.message.includes('file')) {
|
178
|
+
errorCode = 'FILE_ERROR';
|
179
|
+
userSuggestions = [
|
180
|
+
'检查文件路径是否正确',
|
181
|
+
'确保文件存在且可读',
|
182
|
+
'验证文件权限',
|
183
|
+
...userSuggestions,
|
184
|
+
];
|
185
|
+
}
|
186
|
+
else if (error.message.includes('Git') || error.message.includes('git')) {
|
187
|
+
errorCode = 'GIT_ERROR';
|
188
|
+
userSuggestions = [
|
189
|
+
'确保在Git仓库中执行',
|
190
|
+
'检查Git仓库状态',
|
191
|
+
'验证提交哈希是否存在',
|
192
|
+
...userSuggestions,
|
193
|
+
];
|
194
|
+
}
|
195
|
+
return {
|
196
|
+
error: error.message,
|
197
|
+
error_code: errorCode,
|
198
|
+
suggestions: userSuggestions,
|
199
|
+
};
|
200
|
+
}
|
201
|
+
}
|
202
|
+
// 全局错误处理器实例
|
203
|
+
export const errorHandler = new ErrorHandler(logger);
|
204
|
+
//# sourceMappingURL=logger.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/test.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AA4FH,iBAAe,QAAQ,kBAqBtB;AAUD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/test.js
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
/**
|
3
|
+
* CodeRocket MCP 测试脚本
|
4
|
+
*
|
5
|
+
* 用于测试MCP服务器的基本功能
|
6
|
+
*/
|
7
|
+
import { CodeRocketService } from './coderocket.js';
|
8
|
+
import { logger } from './logger.js';
|
9
|
+
async function testCodeReview() {
|
10
|
+
console.log('🧪 测试代码审查功能...\n');
|
11
|
+
const service = new CodeRocketService();
|
12
|
+
// 测试代码片段审查
|
13
|
+
try {
|
14
|
+
const result = await service.reviewCode({
|
15
|
+
code: `function add(a, b) {
|
16
|
+
return a + b;
|
17
|
+
}
|
18
|
+
|
19
|
+
function multiply(a, b) {
|
20
|
+
var result = 0;
|
21
|
+
for (var i = 0; i < b; i++) {
|
22
|
+
result = add(result, a);
|
23
|
+
}
|
24
|
+
return result;
|
25
|
+
}`,
|
26
|
+
language: 'javascript',
|
27
|
+
context: '简单的数学函数实现',
|
28
|
+
});
|
29
|
+
console.log('✅ 代码审查测试成功');
|
30
|
+
console.log('状态:', result.status);
|
31
|
+
console.log('摘要:', result.summary);
|
32
|
+
console.log('AI服务:', result.ai_service_used);
|
33
|
+
console.log('时间:', result.timestamp);
|
34
|
+
console.log('---\n');
|
35
|
+
}
|
36
|
+
catch (error) {
|
37
|
+
console.error('❌ 代码审查测试失败:', error);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
async function testServiceStatus() {
|
41
|
+
console.log('🔍 测试服务状态功能...\n');
|
42
|
+
const service = new CodeRocketService();
|
43
|
+
try {
|
44
|
+
const status = await service.getAIServiceStatus();
|
45
|
+
console.log('✅ 服务状态测试成功');
|
46
|
+
console.log('当前服务:', status.current_service);
|
47
|
+
console.log('自动切换:', status.auto_switch_enabled);
|
48
|
+
console.log('服务状态:');
|
49
|
+
status.services.forEach(svc => {
|
50
|
+
console.log(` - ${svc.service}: ${svc.available ? '✅' : '❌'} 可用, ${svc.configured ? '✅' : '❌'} 已配置`);
|
51
|
+
if (!svc.available && svc.install_command) {
|
52
|
+
console.log(` 安装命令: ${svc.install_command}`);
|
53
|
+
}
|
54
|
+
if (!svc.configured && svc.config_command) {
|
55
|
+
console.log(` 配置命令: ${svc.config_command}`);
|
56
|
+
}
|
57
|
+
});
|
58
|
+
console.log('---\n');
|
59
|
+
}
|
60
|
+
catch (error) {
|
61
|
+
console.error('❌ 服务状态测试失败:', error);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
async function testConfiguration() {
|
65
|
+
console.log('⚙️ 测试配置功能...\n');
|
66
|
+
const service = new CodeRocketService();
|
67
|
+
try {
|
68
|
+
const result = await service.configureAIService({
|
69
|
+
service: 'gemini',
|
70
|
+
scope: 'project',
|
71
|
+
timeout: 60,
|
72
|
+
max_retries: 2,
|
73
|
+
});
|
74
|
+
console.log('✅ 配置测试成功');
|
75
|
+
console.log('结果:', result.message);
|
76
|
+
console.log('数据:', JSON.stringify(result.data, null, 2));
|
77
|
+
console.log('---\n');
|
78
|
+
}
|
79
|
+
catch (error) {
|
80
|
+
console.error('❌ 配置测试失败:', error);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
async function runTests() {
|
84
|
+
console.log('🚀 CodeRocket MCP 测试开始\n');
|
85
|
+
console.log('='.repeat(50));
|
86
|
+
// 测试服务状态
|
87
|
+
await testServiceStatus();
|
88
|
+
// 测试配置功能
|
89
|
+
await testConfiguration();
|
90
|
+
// 测试代码审查(如果有可用的AI服务)
|
91
|
+
await testCodeReview();
|
92
|
+
console.log('='.repeat(50));
|
93
|
+
console.log('🎉 测试完成!');
|
94
|
+
// 显示日志文件位置
|
95
|
+
const logFile = logger.getLogFile();
|
96
|
+
if (logFile) {
|
97
|
+
console.log(`📝 详细日志: ${logFile}`);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
// 运行测试
|
101
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
102
|
+
runTests().catch(error => {
|
103
|
+
console.error('测试运行失败:', error);
|
104
|
+
process.exit(1);
|
105
|
+
});
|
106
|
+
}
|
107
|
+
export { runTests };
|
108
|
+
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
|