@renfeng/kiro-code-review 1.9.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.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/dist/api/gitlab-api.d.ts +122 -0
- package/dist/api/gitlab-api.d.ts.map +1 -0
- package/dist/api/gitlab-api.js +334 -0
- package/dist/api/gitlab-api.js.map +1 -0
- package/dist/bin/index.d.ts +11 -0
- package/dist/bin/index.d.ts.map +1 -0
- package/dist/bin/index.js +67 -0
- package/dist/bin/index.js.map +1 -0
- package/dist/config/glab-config.loader.d.ts +14 -0
- package/dist/config/glab-config.loader.d.ts.map +1 -0
- package/dist/config/glab-config.loader.js +87 -0
- package/dist/config/glab-config.loader.js.map +1 -0
- package/dist/errors/error-handler.d.ts +45 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +134 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.service.d.ts +34 -0
- package/dist/logging/logger.service.d.ts.map +1 -0
- package/dist/logging/logger.service.js +91 -0
- package/dist/logging/logger.service.js.map +1 -0
- package/dist/servers/general-server.d.ts +18 -0
- package/dist/servers/general-server.d.ts.map +1 -0
- package/dist/servers/general-server.js +73 -0
- package/dist/servers/general-server.js.map +1 -0
- package/dist/servers/git-server.d.ts +17 -0
- package/dist/servers/git-server.d.ts.map +1 -0
- package/dist/servers/git-server.js +74 -0
- package/dist/servers/git-server.js.map +1 -0
- package/dist/servers/gitlab-server.d.ts +18 -0
- package/dist/servers/gitlab-server.d.ts.map +1 -0
- package/dist/servers/gitlab-server.js +139 -0
- package/dist/servers/gitlab-server.js.map +1 -0
- package/dist/services/__tests__/batch-retro.service.test.d.ts +9 -0
- package/dist/services/__tests__/batch-retro.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/batch-retro.service.test.js +235 -0
- package/dist/services/__tests__/batch-retro.service.test.js.map +1 -0
- package/dist/services/__tests__/general-save-diffs.test.d.ts +5 -0
- package/dist/services/__tests__/general-save-diffs.test.d.ts.map +1 -0
- package/dist/services/__tests__/general-save-diffs.test.js +99 -0
- package/dist/services/__tests__/general-save-diffs.test.js.map +1 -0
- package/dist/services/__tests__/git-diff-files.test.d.ts +8 -0
- package/dist/services/__tests__/git-diff-files.test.d.ts.map +1 -0
- package/dist/services/__tests__/git-diff-files.test.js +64 -0
- package/dist/services/__tests__/git-diff-files.test.js.map +1 -0
- package/dist/services/__tests__/review-tools.service.test.d.ts +8 -0
- package/dist/services/__tests__/review-tools.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-tools.service.test.js +169 -0
- package/dist/services/__tests__/review-tools.service.test.js.map +1 -0
- package/dist/services/__tests__/review-utils.service.test.d.ts +8 -0
- package/dist/services/__tests__/review-utils.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-utils.service.test.js +306 -0
- package/dist/services/__tests__/review-utils.service.test.js.map +1 -0
- package/dist/services/anchor-resolver.d.ts +29 -0
- package/dist/services/anchor-resolver.d.ts.map +1 -0
- package/dist/services/anchor-resolver.js +97 -0
- package/dist/services/anchor-resolver.js.map +1 -0
- package/dist/services/general.service.d.ts +42 -0
- package/dist/services/general.service.d.ts.map +1 -0
- package/dist/services/general.service.js +157 -0
- package/dist/services/general.service.js.map +1 -0
- package/dist/services/git-tools.service.d.ts +123 -0
- package/dist/services/git-tools.service.d.ts.map +1 -0
- package/dist/services/git-tools.service.js +231 -0
- package/dist/services/git-tools.service.js.map +1 -0
- package/dist/services/review-tools.service.d.ts +130 -0
- package/dist/services/review-tools.service.d.ts.map +1 -0
- package/dist/services/review-tools.service.js +902 -0
- package/dist/services/review-tools.service.js.map +1 -0
- package/dist/tools/general-tools.d.ts +9 -0
- package/dist/tools/general-tools.d.ts.map +1 -0
- package/dist/tools/general-tools.js +99 -0
- package/dist/tools/general-tools.js.map +1 -0
- package/dist/tools/git-tools.d.ts +8 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +175 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/gitlab-tools.d.ts +8 -0
- package/dist/tools/gitlab-tools.d.ts.map +1 -0
- package/dist/tools/gitlab-tools.js +348 -0
- package/dist/tools/gitlab-tools.js.map +1 -0
- package/dist/types.d.ts +294 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads GitLab host and token from glab CLI configuration.
|
|
3
|
+
*
|
|
4
|
+
* glab stores its config as YAML at a platform-specific path:
|
|
5
|
+
* macOS: ~/Library/Application Support/glab-cli/config.yml
|
|
6
|
+
* Linux: ~/.config/glab-cli/config.yml
|
|
7
|
+
* Windows: %APPDATA%/glab-cli/config.yml
|
|
8
|
+
*/
|
|
9
|
+
export interface GlabHostConfig {
|
|
10
|
+
gitlabUrl: string;
|
|
11
|
+
gitlabToken: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadGlabConfig(hostname?: string): GlabHostConfig | null;
|
|
14
|
+
//# sourceMappingURL=glab-config.loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glab-config.loader.d.ts","sourceRoot":"","sources":["../../src/config/glab-config.loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkDD,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAsBvE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads GitLab host and token from glab CLI configuration.
|
|
3
|
+
*
|
|
4
|
+
* glab stores its config as YAML at a platform-specific path:
|
|
5
|
+
* macOS: ~/Library/Application Support/glab-cli/config.yml
|
|
6
|
+
* Linux: ~/.config/glab-cli/config.yml
|
|
7
|
+
* Windows: %APPDATA%/glab-cli/config.yml
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { homedir, platform } from 'node:os';
|
|
12
|
+
function getGlabConfigPath() {
|
|
13
|
+
const home = homedir();
|
|
14
|
+
switch (platform()) {
|
|
15
|
+
case 'darwin':
|
|
16
|
+
return join(home, 'Library', 'Application Support', 'glab-cli', 'config.yml');
|
|
17
|
+
case 'win32':
|
|
18
|
+
return join(process.env.APPDATA ?? join(home, 'AppData', 'Roaming'), 'glab-cli', 'config.yml');
|
|
19
|
+
default:
|
|
20
|
+
return join(process.env.XDG_CONFIG_HOME ?? join(home, '.config'), 'glab-cli', 'config.yml');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function parseGlabConfig(content) {
|
|
24
|
+
const hosts = new Map();
|
|
25
|
+
const lines = content.split('\n');
|
|
26
|
+
let inHosts = false;
|
|
27
|
+
let currentHost = null;
|
|
28
|
+
let currentEntry = {};
|
|
29
|
+
for (const line of lines) {
|
|
30
|
+
if (/^hosts:\s*$/.test(line)) {
|
|
31
|
+
inHosts = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!inHosts)
|
|
35
|
+
continue;
|
|
36
|
+
if (line.length > 0 && !line.startsWith(' ') && !line.startsWith('\t')) {
|
|
37
|
+
if (currentHost)
|
|
38
|
+
hosts.set(currentHost, currentEntry);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
const hostMatch = line.match(/^ {4}(\S+):\s*$/);
|
|
42
|
+
if (hostMatch) {
|
|
43
|
+
if (currentHost)
|
|
44
|
+
hosts.set(currentHost, currentEntry);
|
|
45
|
+
currentHost = hostMatch[1];
|
|
46
|
+
currentEntry = {};
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (currentHost) {
|
|
50
|
+
const propMatch = line.match(/^ {8}(\w[\w_-]*):\s*(.+)$/);
|
|
51
|
+
if (propMatch) {
|
|
52
|
+
const [, key, rawValue] = propMatch;
|
|
53
|
+
const value = rawValue.replace(/^!!null\s*/, '').replace(/^["']|["']$/g, '').trim();
|
|
54
|
+
if (key === 'token')
|
|
55
|
+
currentEntry.token = value;
|
|
56
|
+
if (key === 'api_protocol')
|
|
57
|
+
currentEntry.apiProtocol = value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (currentHost && !hosts.has(currentHost))
|
|
62
|
+
hosts.set(currentHost, currentEntry);
|
|
63
|
+
return hosts;
|
|
64
|
+
}
|
|
65
|
+
export function loadGlabConfig(hostname) {
|
|
66
|
+
const configPath = getGlabConfigPath();
|
|
67
|
+
if (!existsSync(configPath))
|
|
68
|
+
return null;
|
|
69
|
+
let content;
|
|
70
|
+
try {
|
|
71
|
+
content = readFileSync(configPath, 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
if (!hostname) {
|
|
77
|
+
const hostMatch = content.match(/^host:\s*(\S+)/m);
|
|
78
|
+
hostname = hostMatch?.[1] ?? 'gitlab.com';
|
|
79
|
+
}
|
|
80
|
+
const hosts = parseGlabConfig(content);
|
|
81
|
+
const entry = hosts.get(hostname);
|
|
82
|
+
if (!entry?.token)
|
|
83
|
+
return null;
|
|
84
|
+
const protocol = entry.apiProtocol ?? 'https';
|
|
85
|
+
return { gitlabUrl: `${protocol}://${hostname}`, gitlabToken: entry.token };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=glab-config.loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glab-config.loader.js","sourceRoot":"","sources":["../../src/config/glab-config.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error handling with retry logic and clear error messages.
|
|
5
|
+
*/
|
|
6
|
+
export declare class MCPError extends Error {
|
|
7
|
+
code: string;
|
|
8
|
+
details?: Record<string, unknown> | undefined;
|
|
9
|
+
cause?: Error | undefined;
|
|
10
|
+
constructor(message: string, code: string, details?: Record<string, unknown> | undefined, cause?: Error | undefined);
|
|
11
|
+
toJSON(): Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare enum ErrorCategory {
|
|
14
|
+
CONFIGURATION = "configuration",
|
|
15
|
+
VALIDATION = "validation",
|
|
16
|
+
GIT_OPERATION = "git_operation",
|
|
17
|
+
API_CALL = "api_call",
|
|
18
|
+
NETWORK = "network",
|
|
19
|
+
PERMISSION = "permission",
|
|
20
|
+
NOT_FOUND = "not_found",
|
|
21
|
+
INTERNAL = "internal"
|
|
22
|
+
}
|
|
23
|
+
export interface RetryOptions {
|
|
24
|
+
maxRetries: number;
|
|
25
|
+
delayMs: number;
|
|
26
|
+
backoffMultiplier: number;
|
|
27
|
+
onRetry?: (attempt: number, error: Error) => void;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_RETRY_OPTIONS: RetryOptions;
|
|
30
|
+
export declare class ErrorHandler {
|
|
31
|
+
private static logger;
|
|
32
|
+
static withRetry<T>(operation: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
|
|
33
|
+
static isTransient(error: Error): boolean;
|
|
34
|
+
static formatError(error: Error): string;
|
|
35
|
+
static toMCPError(error: unknown, code: string, details?: Record<string, unknown>): MCPError;
|
|
36
|
+
static wrap<T>(operation: () => Promise<T>, errorCode: string, _errorMessage: string, details?: Record<string, unknown>): Promise<T>;
|
|
37
|
+
private static delay;
|
|
38
|
+
static configurationError(message: string, details?: Record<string, unknown>): MCPError;
|
|
39
|
+
static validationError(message: string, details?: Record<string, unknown>): MCPError;
|
|
40
|
+
static gitOperationError(message: string, details?: Record<string, unknown>, cause?: Error): MCPError;
|
|
41
|
+
static apiCallError(message: string, details?: Record<string, unknown>, cause?: Error): MCPError;
|
|
42
|
+
static notFoundError(message: string, details?: Record<string, unknown>): MCPError;
|
|
43
|
+
static permissionError(message: string, details?: Record<string, unknown>): MCPError;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/errors/error-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK;gBAHpB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACjC,KAAK,CAAC,EAAE,KAAK,YAAA;IAStB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMlC;AAED,oBAAY,aAAa;IACvB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA8B;WAEtC,SAAS,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAClC,OAAO,CAAC,CAAC,CAAC;IA4Bb,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAYzC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAYxC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;WAM/E,IAAI,CAAC,CAAC,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvG,OAAO,CAAC,CAAC,CAAC;IAUb,OAAO,CAAC,MAAM,CAAC,KAAK;IAIpB,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;IAIvF,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;IAIpF,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAIrG,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAIhG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;IAIlF,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ;CAGrF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error handling with retry logic and clear error messages.
|
|
5
|
+
*/
|
|
6
|
+
import { Logger } from '../logging/logger.service.js';
|
|
7
|
+
export class MCPError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
details;
|
|
10
|
+
cause;
|
|
11
|
+
constructor(message, code, details, cause) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.details = details;
|
|
15
|
+
this.cause = cause;
|
|
16
|
+
this.name = 'MCPError';
|
|
17
|
+
if (Error.captureStackTrace) {
|
|
18
|
+
Error.captureStackTrace(this, MCPError);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
toJSON() {
|
|
22
|
+
return {
|
|
23
|
+
name: this.name, message: this.message, code: this.code,
|
|
24
|
+
details: this.details, cause: this.cause?.message, stack: this.stack,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export var ErrorCategory;
|
|
29
|
+
(function (ErrorCategory) {
|
|
30
|
+
ErrorCategory["CONFIGURATION"] = "configuration";
|
|
31
|
+
ErrorCategory["VALIDATION"] = "validation";
|
|
32
|
+
ErrorCategory["GIT_OPERATION"] = "git_operation";
|
|
33
|
+
ErrorCategory["API_CALL"] = "api_call";
|
|
34
|
+
ErrorCategory["NETWORK"] = "network";
|
|
35
|
+
ErrorCategory["PERMISSION"] = "permission";
|
|
36
|
+
ErrorCategory["NOT_FOUND"] = "not_found";
|
|
37
|
+
ErrorCategory["INTERNAL"] = "internal";
|
|
38
|
+
})(ErrorCategory || (ErrorCategory = {}));
|
|
39
|
+
export const DEFAULT_RETRY_OPTIONS = {
|
|
40
|
+
maxRetries: 3,
|
|
41
|
+
delayMs: 1000,
|
|
42
|
+
backoffMultiplier: 2,
|
|
43
|
+
};
|
|
44
|
+
export class ErrorHandler {
|
|
45
|
+
static logger = new Logger('ErrorHandler');
|
|
46
|
+
static async withRetry(operation, options = {}) {
|
|
47
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
48
|
+
let lastError;
|
|
49
|
+
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
50
|
+
try {
|
|
51
|
+
return await operation();
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
55
|
+
if (attempt < opts.maxRetries && this.isTransient(lastError)) {
|
|
56
|
+
const delay = opts.delayMs * Math.pow(opts.backoffMultiplier, attempt);
|
|
57
|
+
this.logger.warn(`Operation failed, retrying (attempt ${attempt + 1}/${opts.maxRetries})`, { error: lastError.message, delay, attempt: attempt + 1, maxRetries: opts.maxRetries });
|
|
58
|
+
if (opts.onRetry)
|
|
59
|
+
opts.onRetry(attempt + 1, lastError);
|
|
60
|
+
await this.delay(delay);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
if (attempt >= opts.maxRetries) {
|
|
64
|
+
this.logger.error(`Operation failed after ${opts.maxRetries} retries`, lastError);
|
|
65
|
+
}
|
|
66
|
+
throw lastError;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
throw lastError || new Error('Operation failed with unknown error');
|
|
71
|
+
}
|
|
72
|
+
static isTransient(error) {
|
|
73
|
+
const message = error.message.toLowerCase();
|
|
74
|
+
const patterns = [
|
|
75
|
+
'econnrefused', 'econnreset', 'etimedout', 'enotfound', 'enetunreach',
|
|
76
|
+
'socket hang up', 'network error', 'fetch failed',
|
|
77
|
+
'rate limit', 'too many requests', '429',
|
|
78
|
+
'503', 'service unavailable', 'gateway timeout', '504',
|
|
79
|
+
'lock', 'unable to access', 'could not resolve host',
|
|
80
|
+
];
|
|
81
|
+
return patterns.some(p => message.includes(p));
|
|
82
|
+
}
|
|
83
|
+
static formatError(error) {
|
|
84
|
+
if (error instanceof MCPError) {
|
|
85
|
+
const parts = [`[${error.code}] ${error.message}`];
|
|
86
|
+
if (error.details && Object.keys(error.details).length > 0) {
|
|
87
|
+
parts.push(`Details: ${JSON.stringify(error.details, null, 2)}`);
|
|
88
|
+
}
|
|
89
|
+
if (error.cause)
|
|
90
|
+
parts.push(`Caused by: ${error.cause.message}`);
|
|
91
|
+
return parts.join('\n');
|
|
92
|
+
}
|
|
93
|
+
return error.message;
|
|
94
|
+
}
|
|
95
|
+
static toMCPError(error, code, details) {
|
|
96
|
+
if (error instanceof MCPError)
|
|
97
|
+
return error;
|
|
98
|
+
if (error instanceof Error)
|
|
99
|
+
return new MCPError(error.message, code, details, error);
|
|
100
|
+
return new MCPError(String(error), code, details);
|
|
101
|
+
}
|
|
102
|
+
static async wrap(operation, errorCode, _errorMessage, details) {
|
|
103
|
+
try {
|
|
104
|
+
return await operation();
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw this.toMCPError(error, errorCode, {
|
|
108
|
+
...details, originalMessage: error instanceof Error ? error.message : String(error),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
static delay(ms) {
|
|
113
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
114
|
+
}
|
|
115
|
+
static configurationError(message, details) {
|
|
116
|
+
return new MCPError(message, ErrorCategory.CONFIGURATION, details);
|
|
117
|
+
}
|
|
118
|
+
static validationError(message, details) {
|
|
119
|
+
return new MCPError(message, ErrorCategory.VALIDATION, details);
|
|
120
|
+
}
|
|
121
|
+
static gitOperationError(message, details, cause) {
|
|
122
|
+
return new MCPError(message, ErrorCategory.GIT_OPERATION, details, cause);
|
|
123
|
+
}
|
|
124
|
+
static apiCallError(message, details, cause) {
|
|
125
|
+
return new MCPError(message, ErrorCategory.API_CALL, details, cause);
|
|
126
|
+
}
|
|
127
|
+
static notFoundError(message, details) {
|
|
128
|
+
return new MCPError(message, ErrorCategory.NOT_FOUND, details);
|
|
129
|
+
}
|
|
130
|
+
static permissionError(message, details) {
|
|
131
|
+
return new MCPError(message, ErrorCategory.PERMISSION, details);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/errors/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Service
|
|
3
|
+
*
|
|
4
|
+
* Structured logging with appropriate log levels and context.
|
|
5
|
+
* Provides performance timing utilities and debug mode support.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum LogLevel {
|
|
8
|
+
DEBUG = 0,
|
|
9
|
+
INFO = 1,
|
|
10
|
+
WARN = 2,
|
|
11
|
+
ERROR = 3
|
|
12
|
+
}
|
|
13
|
+
export interface LogContext {
|
|
14
|
+
operation?: string;
|
|
15
|
+
project?: string;
|
|
16
|
+
mr?: number;
|
|
17
|
+
duration?: number;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export declare class Logger {
|
|
21
|
+
private readonly context;
|
|
22
|
+
private readonly minLevel;
|
|
23
|
+
constructor(context: string, minLevel?: LogLevel);
|
|
24
|
+
debug(message: string, context?: LogContext): void;
|
|
25
|
+
info(message: string, context?: LogContext): void;
|
|
26
|
+
warn(message: string, context?: LogContext): void;
|
|
27
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
28
|
+
startTimer(operation: string): () => void;
|
|
29
|
+
private log;
|
|
30
|
+
private formatMessage;
|
|
31
|
+
child(childContext: string): Logger;
|
|
32
|
+
static parseLogLevel(level: string): LogLevel;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=logger.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/logging/logger.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAwB;IAK/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAUjE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI;IAQzC,OAAO,CAAC,GAAG;IAmBX,OAAO,CAAC,aAAa;IAarB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAInC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;CAS9C"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Service
|
|
3
|
+
*
|
|
4
|
+
* Structured logging with appropriate log levels and context.
|
|
5
|
+
* Provides performance timing utilities and debug mode support.
|
|
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
|
+
export class Logger {
|
|
15
|
+
context;
|
|
16
|
+
minLevel;
|
|
17
|
+
constructor(context, minLevel = LogLevel.INFO) {
|
|
18
|
+
this.context = context;
|
|
19
|
+
this.minLevel = minLevel;
|
|
20
|
+
}
|
|
21
|
+
debug(message, context) {
|
|
22
|
+
this.log(LogLevel.DEBUG, message, context);
|
|
23
|
+
}
|
|
24
|
+
info(message, context) {
|
|
25
|
+
this.log(LogLevel.INFO, message, context);
|
|
26
|
+
}
|
|
27
|
+
warn(message, context) {
|
|
28
|
+
this.log(LogLevel.WARN, message, context);
|
|
29
|
+
}
|
|
30
|
+
error(message, error, context) {
|
|
31
|
+
const fullMessage = error ? `${message}: ${error.message}` : message;
|
|
32
|
+
const errorContext = {
|
|
33
|
+
...context,
|
|
34
|
+
error: error?.message,
|
|
35
|
+
stack: error?.stack,
|
|
36
|
+
};
|
|
37
|
+
this.log(LogLevel.ERROR, fullMessage, errorContext);
|
|
38
|
+
}
|
|
39
|
+
startTimer(operation) {
|
|
40
|
+
const startTime = Date.now();
|
|
41
|
+
return () => {
|
|
42
|
+
const duration = Date.now() - startTime;
|
|
43
|
+
this.debug(`${operation} completed`, { operation, duration });
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
log(level, message, context) {
|
|
47
|
+
if (level < this.minLevel)
|
|
48
|
+
return;
|
|
49
|
+
const timestamp = new Date().toISOString();
|
|
50
|
+
const levelName = LogLevel[level];
|
|
51
|
+
const formattedMessage = this.formatMessage(timestamp, levelName, this.context, message, context);
|
|
52
|
+
if (level === LogLevel.ERROR) {
|
|
53
|
+
console.error(formattedMessage);
|
|
54
|
+
if (context?.stack)
|
|
55
|
+
console.error(context.stack);
|
|
56
|
+
}
|
|
57
|
+
else if (level === LogLevel.WARN) {
|
|
58
|
+
console.error(`WARN: ${formattedMessage}`);
|
|
59
|
+
}
|
|
60
|
+
else if (level === LogLevel.DEBUG) {
|
|
61
|
+
console.error(`DEBUG: ${formattedMessage}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.error(formattedMessage);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
formatMessage(timestamp, level, context, message, data) {
|
|
68
|
+
const parts = [`[${timestamp}]`, `[${level}]`, `[${context}]`, message];
|
|
69
|
+
if (data && Object.keys(data).length > 0) {
|
|
70
|
+
const { stack: _stack, error: _error, ...displayData } = data;
|
|
71
|
+
if (Object.keys(displayData).length > 0) {
|
|
72
|
+
parts.push(JSON.stringify(displayData));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return parts.join(' ');
|
|
76
|
+
}
|
|
77
|
+
child(childContext) {
|
|
78
|
+
return new Logger(`${this.context}:${childContext}`, this.minLevel);
|
|
79
|
+
}
|
|
80
|
+
static parseLogLevel(level) {
|
|
81
|
+
switch (level.toLowerCase()) {
|
|
82
|
+
case 'debug': return LogLevel.DEBUG;
|
|
83
|
+
case 'info': return LogLevel.INFO;
|
|
84
|
+
case 'warn':
|
|
85
|
+
case 'warning': return LogLevel.WARN;
|
|
86
|
+
case 'error': return LogLevel.ERROR;
|
|
87
|
+
default: return LogLevel.INFO;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=logger.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/logging/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Platform-neutral review utility tools — findings normalization, anchor resolution,
|
|
5
|
+
* and draft staleness checks.
|
|
6
|
+
* Uses git CLI (via GitToolsService) for diff/show operations. No GitLab API or token.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GeneralMCPServer {
|
|
9
|
+
private server;
|
|
10
|
+
private generalService;
|
|
11
|
+
private logger;
|
|
12
|
+
constructor();
|
|
13
|
+
private setupHandlers;
|
|
14
|
+
private handleToolCall;
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
shutdown(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=general-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-server.d.ts","sourceRoot":"","sources":["../../src/servers/general-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAS;;IAevB,OAAO,CAAC,aAAa;YAoBP,cAAc;IAgBtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Platform-neutral review utility tools — findings normalization, anchor resolution,
|
|
5
|
+
* and draft staleness checks.
|
|
6
|
+
* Uses git CLI (via GitToolsService) for diff/show operations. No GitLab API or token.
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
9
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
11
|
+
import { GENERAL_TOOLS } from "../tools/general-tools.js";
|
|
12
|
+
import { GeneralService } from "../services/general.service.js";
|
|
13
|
+
import { GitToolsService } from "../services/git-tools.service.js";
|
|
14
|
+
import { Logger } from "../logging/logger.service.js";
|
|
15
|
+
import { ErrorHandler } from "../errors/error-handler.js";
|
|
16
|
+
export class GeneralMCPServer {
|
|
17
|
+
server;
|
|
18
|
+
generalService;
|
|
19
|
+
logger;
|
|
20
|
+
constructor() {
|
|
21
|
+
const logLevel = Logger.parseLogLevel(process.env.LOG_LEVEL || 'info');
|
|
22
|
+
this.logger = new Logger('GeneralServer', logLevel);
|
|
23
|
+
this.server = new Server({ name: "ai-code-review-general", version: "1.0.0" }, { capabilities: { tools: {} } });
|
|
24
|
+
const gitTools = new GitToolsService(this.logger.child('GitTools'));
|
|
25
|
+
this.generalService = new GeneralService(this.logger.child('General'), gitTools);
|
|
26
|
+
this.setupHandlers();
|
|
27
|
+
this.logger.info('General MCP Server initialized');
|
|
28
|
+
}
|
|
29
|
+
setupHandlers() {
|
|
30
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: GENERAL_TOOLS }));
|
|
31
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
32
|
+
const { name, arguments: args } = request.params;
|
|
33
|
+
this.logger.info(`Tool call: ${name}`, { tool: name });
|
|
34
|
+
const endTimer = this.logger.startTimer(`Tool: ${name}`);
|
|
35
|
+
try {
|
|
36
|
+
const result = await this.handleToolCall(name, args);
|
|
37
|
+
endTimer();
|
|
38
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
endTimer();
|
|
42
|
+
const errorMessage = ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error)));
|
|
43
|
+
return { content: [{ type: "text", text: `Error: ${errorMessage}` }], isError: true };
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async handleToolCall(name, args) {
|
|
48
|
+
const params = args;
|
|
49
|
+
switch (name) {
|
|
50
|
+
case "write_findings":
|
|
51
|
+
return this.generalService.writeFindings(params);
|
|
52
|
+
case "resolve_anchors":
|
|
53
|
+
return this.generalService.resolveAnchors(params);
|
|
54
|
+
case "check_draft_staleness":
|
|
55
|
+
return this.generalService.checkDraftStaleness(params);
|
|
56
|
+
case "save_per_file_diffs":
|
|
57
|
+
return this.generalService.savePerFileDiffs(params);
|
|
58
|
+
default:
|
|
59
|
+
throw ErrorHandler.validationError(`Unknown tool: ${name}`, { tool: name });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async run() {
|
|
63
|
+
const transport = new StdioServerTransport();
|
|
64
|
+
await this.server.connect(transport);
|
|
65
|
+
this.logger.info('General MCP Server started successfully');
|
|
66
|
+
}
|
|
67
|
+
async shutdown() {
|
|
68
|
+
this.logger.info('Shutting down General MCP server...');
|
|
69
|
+
await this.server.close();
|
|
70
|
+
this.logger.info('General MCP server shut down successfully');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=general-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-server.js","sourceRoot":"","sources":["../../src/servers/general-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Registers only GIT_TOOLS and dispatches to GitToolsService.
|
|
5
|
+
* No GitLab token required.
|
|
6
|
+
*/
|
|
7
|
+
export declare class GitMCPServer {
|
|
8
|
+
private server;
|
|
9
|
+
private gitToolsService;
|
|
10
|
+
private logger;
|
|
11
|
+
constructor();
|
|
12
|
+
private setupHandlers;
|
|
13
|
+
private handleToolCall;
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
shutdown(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=git-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-server.d.ts","sourceRoot":"","sources":["../../src/servers/git-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAS;;IAcvB,OAAO,CAAC,aAAa;YAoBP,cAAc;IAoBtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC"}
|