gitlab-auto-reviewers 2.0.0 → 2.1.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 (98) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -10
  3. package/dist/bin/cli.js +155 -85
  4. package/dist/bin/cli.js.map +1 -1
  5. package/dist/bin/index.d.ts +1 -8
  6. package/dist/bin/index.d.ts.map +1 -1
  7. package/dist/bin/index.js +26 -9
  8. package/dist/bin/index.js.map +1 -1
  9. package/dist/bin/mcp.js +0 -0
  10. package/dist/cli/cicd-integration.d.ts +127 -0
  11. package/dist/cli/cicd-integration.d.ts.map +1 -0
  12. package/dist/cli/cicd-integration.js +385 -0
  13. package/dist/cli/cicd-integration.js.map +1 -0
  14. package/dist/cli/commands.d.ts +21 -4
  15. package/dist/cli/commands.d.ts.map +1 -1
  16. package/dist/cli/commands.js +417 -71
  17. package/dist/cli/commands.js.map +1 -1
  18. package/dist/cli/config.d.ts +145 -0
  19. package/dist/cli/config.d.ts.map +1 -0
  20. package/dist/cli/config.js +277 -0
  21. package/dist/cli/config.js.map +1 -0
  22. package/dist/cli/consistency-validator.d.ts +175 -0
  23. package/dist/cli/consistency-validator.d.ts.map +1 -0
  24. package/dist/cli/consistency-validator.js +599 -0
  25. package/dist/cli/consistency-validator.js.map +1 -0
  26. package/dist/cli/data-source-consistency.d.ts +105 -0
  27. package/dist/cli/data-source-consistency.d.ts.map +1 -0
  28. package/dist/cli/data-source-consistency.js +271 -0
  29. package/dist/cli/data-source-consistency.js.map +1 -0
  30. package/dist/cli/data-source-selector.d.ts +103 -0
  31. package/dist/cli/data-source-selector.d.ts.map +1 -0
  32. package/dist/cli/data-source-selector.js +242 -0
  33. package/dist/cli/data-source-selector.js.map +1 -0
  34. package/dist/cli/enhanced-cli.d.ts +104 -0
  35. package/dist/cli/enhanced-cli.d.ts.map +1 -0
  36. package/dist/cli/enhanced-cli.js +321 -0
  37. package/dist/cli/enhanced-cli.js.map +1 -0
  38. package/dist/cli/enhanced-data-source-resolver.d.ts +67 -0
  39. package/dist/cli/enhanced-data-source-resolver.d.ts.map +1 -0
  40. package/dist/cli/enhanced-data-source-resolver.js +249 -0
  41. package/dist/cli/enhanced-data-source-resolver.js.map +1 -0
  42. package/dist/cli/enhanced-parameter-resolver.d.ts +111 -0
  43. package/dist/cli/enhanced-parameter-resolver.d.ts.map +1 -0
  44. package/dist/cli/enhanced-parameter-resolver.js +233 -0
  45. package/dist/cli/enhanced-parameter-resolver.js.map +1 -0
  46. package/dist/cli/errors.d.ts +105 -0
  47. package/dist/cli/errors.d.ts.map +1 -0
  48. package/dist/cli/errors.js +577 -0
  49. package/dist/cli/errors.js.map +1 -0
  50. package/dist/cli/output.d.ts +43 -3
  51. package/dist/cli/output.d.ts.map +1 -1
  52. package/dist/cli/output.js +157 -30
  53. package/dist/cli/output.js.map +1 -1
  54. package/dist/cli/parameter-source-tracker.d.ts +169 -0
  55. package/dist/cli/parameter-source-tracker.d.ts.map +1 -0
  56. package/dist/cli/parameter-source-tracker.js +252 -0
  57. package/dist/cli/parameter-source-tracker.js.map +1 -0
  58. package/dist/cli/template-engine.d.ts +109 -0
  59. package/dist/cli/template-engine.d.ts.map +1 -0
  60. package/dist/cli/template-engine.js +220 -0
  61. package/dist/cli/template-engine.js.map +1 -0
  62. package/dist/config/config.service.d.ts +24 -2
  63. package/dist/config/config.service.d.ts.map +1 -1
  64. package/dist/config/config.service.js +39 -6
  65. package/dist/config/config.service.js.map +1 -1
  66. package/dist/datasources/local-git-data-source.d.ts +39 -0
  67. package/dist/datasources/local-git-data-source.d.ts.map +1 -1
  68. package/dist/datasources/local-git-data-source.js +121 -1
  69. package/dist/datasources/local-git-data-source.js.map +1 -1
  70. package/dist/enhanced-config.js +26 -0
  71. package/dist/index.js +0 -0
  72. package/dist/mcp/server.js +2 -2
  73. package/dist/mcp/server.js.map +1 -1
  74. package/dist/services/blacklist.service.d.ts +11 -5
  75. package/dist/services/blacklist.service.d.ts.map +1 -1
  76. package/dist/services/blacklist.service.js +28 -7
  77. package/dist/services/blacklist.service.js.map +1 -1
  78. package/dist/services/reviewer-service.d.ts +24 -0
  79. package/dist/services/reviewer-service.d.ts.map +1 -1
  80. package/dist/services/reviewer-service.js +177 -7
  81. package/dist/services/reviewer-service.js.map +1 -1
  82. package/dist/services/whitelist.service.js +1 -1
  83. package/dist/services/whitelist.service.js.map +1 -1
  84. package/dist/types/enhanced-config.d.ts +121 -0
  85. package/dist/types/enhanced-config.d.ts.map +1 -0
  86. package/dist/types/enhanced-config.js +27 -0
  87. package/dist/types/enhanced-config.js.map +1 -0
  88. package/dist/types.d.ts +28 -0
  89. package/dist/types.d.ts.map +1 -1
  90. package/package.json +11 -11
  91. package/dist/bin/deprecated-mcp.d.ts +0 -12
  92. package/dist/bin/deprecated-mcp.d.ts.map +0 -1
  93. package/dist/bin/deprecated-mcp.js +0 -73
  94. package/dist/bin/deprecated-mcp.js.map +0 -1
  95. package/dist/tools.d.ts +0 -22
  96. package/dist/tools.d.ts.map +0 -1
  97. package/dist/tools.js +0 -176
  98. package/dist/tools.js.map +0 -1
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "gitlab-auto-reviewers",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Shared library for GitLab auto-reviewer suggestions with MCP server, CLI, and library modes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "gitlab-auto-reviewers": "dist/bin/index.js",
10
- "auto-reviewers-mcp-server": "dist/bin/deprecated-mcp.js"
9
+ "gitlab-auto-reviewers": "dist/bin/index.js"
11
10
  },
12
11
  "keywords": [
13
12
  "mcp",
@@ -17,11 +16,11 @@
17
16
  "auto-reviewer",
18
17
  "merge-request"
19
18
  ],
20
- "author": "Frank Renfeng",
19
+ "author": "Frank Ren",
21
20
  "license": "MIT",
22
21
  "repository": {
23
22
  "type": "git",
24
- "url": "git+https://gitlab.com/renfeng.cn/state-of-merge-requests.git",
23
+ "url": "https://gitlab.com/renfeng.cn/state-of-merge-requests.git",
25
24
  "directory": "auto-reviewers"
26
25
  },
27
26
  "bugs": {
@@ -55,17 +54,18 @@
55
54
  "type-check": "tsc --noEmit"
56
55
  },
57
56
  "dependencies": {
58
- "@modelcontextprotocol/sdk": "^1.24.3",
57
+ "@modelcontextprotocol/sdk": "^1.25.1",
58
+ "dotenv": "^17.2.3",
59
59
  "simple-git": "^3.30.0"
60
60
  },
61
61
  "devDependencies": {
62
+ "@eslint/js": "^9.0.0",
62
63
  "@types/node": "^20.0.0",
63
- "@typescript-eslint/eslint-plugin": "^6.0.0",
64
- "@typescript-eslint/parser": "^6.0.0",
65
- "@vitest/coverage-v8": "^4.0.15",
66
- "eslint": "^8.0.0",
64
+ "@vitest/coverage-v8": "^4.0.0",
65
+ "eslint": "^9.0.0",
67
66
  "fast-check": "^3.15.0",
68
67
  "typescript": "^5.0.0",
69
- "vitest": "^4.0.15"
68
+ "typescript-eslint": "^8.0.0",
69
+ "vitest": "^4.0.0"
70
70
  }
71
71
  }
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Deprecated MCP Server Entry Point
4
- *
5
- * This is the deprecated entry point for the old 'auto-reviewers-mcp-server' command.
6
- * It displays a deprecation warning and then delegates to the new MCP server.
7
- *
8
- * @deprecated Use 'gitlab-auto-reviewers mcp' instead
9
- * @module bin/deprecated-mcp
10
- */
11
- export {};
12
- //# sourceMappingURL=deprecated-mcp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deprecated-mcp.d.ts","sourceRoot":"","sources":["../../src/bin/deprecated-mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -1,73 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Deprecated MCP Server Entry Point
4
- *
5
- * This is the deprecated entry point for the old 'auto-reviewers-mcp-server' command.
6
- * It displays a deprecation warning and then delegates to the new MCP server.
7
- *
8
- * @deprecated Use 'gitlab-auto-reviewers mcp' instead
9
- * @module bin/deprecated-mcp
10
- */
11
- import { AutoReviewerMCPServer } from "../mcp/server.js";
12
- import { ErrorHandler } from "../errors/error-handler.js";
13
- /**
14
- * Display deprecation warning
15
- */
16
- function displayDeprecationWarning() {
17
- console.error(`
18
- ╔════════════════════════════════════════════════════════════════════════════╗
19
- ║ DEPRECATION WARNING ║
20
- ╠════════════════════════════════════════════════════════════════════════════╣
21
- ║ ║
22
- ║ The command 'auto-reviewers-mcp-server' is deprecated and will be ║
23
- ║ removed in a future version. ║
24
- ║ ║
25
- ║ Please update your configuration to use the new command: ║
26
- ║ ║
27
- ║ npx gitlab-auto-reviewers mcp ║
28
- ║ ║
29
- ║ Or update your MCP client configuration to use: ║
30
- ║ ║
31
- ║ "command": "npx", ║
32
- ║ "args": ["-y", "gitlab-auto-reviewers", "mcp"] ║
33
- ║ ║
34
- ║ For more information, see the migration guide: ║
35
- ║ https://github.com/your-org/gitlab-auto-reviewers#migration ║
36
- ║ ║
37
- ╚════════════════════════════════════════════════════════════════════════════╝
38
- `);
39
- }
40
- // Display deprecation warning
41
- displayDeprecationWarning();
42
- // Initialize and start server (same as mcp.ts)
43
- let server;
44
- try {
45
- server = new AutoReviewerMCPServer();
46
- }
47
- catch (error) {
48
- console.error("Failed to initialize MCP server:", error);
49
- console.error(ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error))));
50
- process.exit(1);
51
- }
52
- process.on("SIGINT", async () => {
53
- await server.shutdown();
54
- process.exit(0);
55
- });
56
- process.on("SIGTERM", async () => {
57
- await server.shutdown();
58
- process.exit(0);
59
- });
60
- process.on('uncaughtException', (error) => {
61
- console.error('Uncaught exception:', ErrorHandler.formatError(error));
62
- server.shutdown().finally(() => process.exit(1));
63
- });
64
- process.on('unhandledRejection', (reason) => {
65
- const error = reason instanceof Error ? reason : new Error(String(reason));
66
- console.error('Unhandled rejection:', ErrorHandler.formatError(error));
67
- server.shutdown().finally(() => process.exit(1));
68
- });
69
- server.run().catch((error) => {
70
- console.error("Failed to start MCP server:", ErrorHandler.formatError(error));
71
- process.exit(1);
72
- });
73
- //# sourceMappingURL=deprecated-mcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deprecated-mcp.js","sourceRoot":"","sources":["../../src/bin/deprecated-mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;GAEG;AACH,SAAS,yBAAyB;IAChC,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBf,CAAC,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,yBAAyB,EAAE,CAAC;AAE5B,+CAA+C;AAC/C,IAAI,MAA6B,CAAC;AAElC,IAAI,CAAC;IACH,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACvC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/tools.d.ts DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * MCP Tool Definitions
3
- *
4
- * This module defines all tools exposed by the Auto Reviewers MCP Server.
5
- * Each tool follows the Model Context Protocol specification and includes
6
- * detailed input schemas for validation.
7
- *
8
- * @module tools
9
- */
10
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
11
- /**
12
- * Array of all tools exposed by the MCP server
13
- *
14
- * Tools:
15
- * - suggest_reviewers: Suggest reviewers based on multiple factors
16
- * - get_contributor_analysis: Analyze file contributors
17
- * - get_reviewer_workload: Analyze reviewer workload
18
- * - post_comment: Post a comment to a merge request
19
- * - invite_reviewers: Suggest and invite reviewers
20
- */
21
- export declare const TOOLS: Tool[];
22
- //# sourceMappingURL=tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,EAAE,IAAI,EAuKvB,CAAC"}
package/dist/tools.js DELETED
@@ -1,176 +0,0 @@
1
- /**
2
- * MCP Tool Definitions
3
- *
4
- * This module defines all tools exposed by the Auto Reviewers MCP Server.
5
- * Each tool follows the Model Context Protocol specification and includes
6
- * detailed input schemas for validation.
7
- *
8
- * @module tools
9
- */
10
- /**
11
- * Array of all tools exposed by the MCP server
12
- *
13
- * Tools:
14
- * - suggest_reviewers: Suggest reviewers based on multiple factors
15
- * - get_contributor_analysis: Analyze file contributors
16
- * - get_reviewer_workload: Analyze reviewer workload
17
- * - post_comment: Post a comment to a merge request
18
- * - invite_reviewers: Suggest and invite reviewers
19
- */
20
- export const TOOLS = [
21
- {
22
- name: "suggest_reviewers",
23
- description: "Automatically suggest reviewers for a GitLab merge request based on contributors, team members, and code owners",
24
- inputSchema: {
25
- type: "object",
26
- properties: {
27
- project: {
28
- type: ["string", "number"],
29
- description: "GitLab project ID (e.g., 12345) or project path (e.g., 'group/project-name')",
30
- },
31
- mergeRequestIid: {
32
- type: "number",
33
- description: "Merge request internal ID (optional if branch provided)",
34
- },
35
- branch: {
36
- type: "string",
37
- description: "Branch name (optional, uses current branch if not provided)",
38
- },
39
- gitlabToken: {
40
- type: "string",
41
- description: "GitLab API token (optional, uses environment variable if not provided)",
42
- },
43
- gitlabUrl: {
44
- type: "string",
45
- description: "GitLab instance URL (optional, defaults to gitlab.com)",
46
- },
47
- repoPath: {
48
- type: "string",
49
- description: "Local repository path (optional, uses API if not provided)",
50
- },
51
- },
52
- required: [],
53
- },
54
- },
55
- {
56
- name: "get_contributor_analysis",
57
- description: "Get detailed contributor analysis for changed files in a merge request",
58
- inputSchema: {
59
- type: "object",
60
- properties: {
61
- project: {
62
- type: ["string", "number"],
63
- description: "GitLab project ID (e.g., 12345) or project path (e.g., 'group/project-name')",
64
- },
65
- mergeRequestIid: {
66
- type: "number",
67
- description: "Merge request internal ID",
68
- },
69
- gitlabToken: {
70
- type: "string",
71
- description: "GitLab API token (optional)",
72
- },
73
- gitlabUrl: {
74
- type: "string",
75
- description: "GitLab instance URL (optional)",
76
- },
77
- },
78
- required: ["project", "mergeRequestIid"],
79
- },
80
- },
81
- {
82
- name: "get_reviewer_workload",
83
- description: "Get current workload analysis for potential reviewers",
84
- inputSchema: {
85
- type: "object",
86
- properties: {
87
- project: {
88
- type: ["string", "number"],
89
- description: "GitLab project ID (e.g., 12345) or project path (e.g., 'group/project-name')",
90
- },
91
- gitlabToken: {
92
- type: "string",
93
- description: "GitLab API token (optional)",
94
- },
95
- gitlabUrl: {
96
- type: "string",
97
- description: "GitLab instance URL (optional)",
98
- },
99
- },
100
- required: ["project"],
101
- },
102
- },
103
- {
104
- name: "post_comment",
105
- description: "Post a comment to a GitLab merge request",
106
- inputSchema: {
107
- type: "object",
108
- properties: {
109
- project: {
110
- type: ["string", "number"],
111
- description: "GitLab project ID or path (optional in local git mode)",
112
- },
113
- mergeRequestIid: {
114
- type: "number",
115
- description: "Merge request internal ID (optional if branch provided)",
116
- },
117
- branch: {
118
- type: "string",
119
- description: "Branch name (optional)",
120
- },
121
- comment: {
122
- type: "string",
123
- description: "Comment text to post",
124
- },
125
- gitlabToken: {
126
- type: "string",
127
- description: "GitLab API token (optional)",
128
- },
129
- gitlabUrl: {
130
- type: "string",
131
- description: "GitLab instance URL (optional)",
132
- },
133
- repoPath: {
134
- type: "string",
135
- description: "Local repository path (optional)",
136
- },
137
- },
138
- required: ["comment"],
139
- },
140
- },
141
- {
142
- name: "invite_reviewers",
143
- description: "Suggest reviewers, post comment, and invite them to a GitLab merge request",
144
- inputSchema: {
145
- type: "object",
146
- properties: {
147
- project: {
148
- type: ["string", "number"],
149
- description: "GitLab project ID or path (optional in local git mode)",
150
- },
151
- mergeRequestIid: {
152
- type: "number",
153
- description: "Merge request internal ID (optional if branch provided)",
154
- },
155
- branch: {
156
- type: "string",
157
- description: "Branch name (optional)",
158
- },
159
- gitlabToken: {
160
- type: "string",
161
- description: "GitLab API token (optional)",
162
- },
163
- gitlabUrl: {
164
- type: "string",
165
- description: "GitLab instance URL (optional)",
166
- },
167
- repoPath: {
168
- type: "string",
169
- description: "Local repository path (optional)",
170
- },
171
- },
172
- required: [],
173
- },
174
- },
175
- ];
176
- //# sourceMappingURL=tools.js.map
package/dist/tools.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}