gitlab-auto-reviewers 2.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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1878 -0
  3. package/dist/api/gitlab-api.d.ts +136 -0
  4. package/dist/api/gitlab-api.d.ts.map +1 -0
  5. package/dist/api/gitlab-api.js +334 -0
  6. package/dist/api/gitlab-api.js.map +1 -0
  7. package/dist/bin/cli.d.ts +10 -0
  8. package/dist/bin/cli.d.ts.map +1 -0
  9. package/dist/bin/cli.js +186 -0
  10. package/dist/bin/cli.js.map +1 -0
  11. package/dist/bin/deprecated-mcp.d.ts +12 -0
  12. package/dist/bin/deprecated-mcp.d.ts.map +1 -0
  13. package/dist/bin/deprecated-mcp.js +73 -0
  14. package/dist/bin/deprecated-mcp.js.map +1 -0
  15. package/dist/bin/index.d.ts +18 -0
  16. package/dist/bin/index.d.ts.map +1 -0
  17. package/dist/bin/index.js +78 -0
  18. package/dist/bin/index.js.map +1 -0
  19. package/dist/bin/mcp.d.ts +11 -0
  20. package/dist/bin/mcp.d.ts.map +1 -0
  21. package/dist/bin/mcp.js +43 -0
  22. package/dist/bin/mcp.js.map +1 -0
  23. package/dist/cache/cache.service.d.ts +113 -0
  24. package/dist/cache/cache.service.d.ts.map +1 -0
  25. package/dist/cache/cache.service.js +213 -0
  26. package/dist/cache/cache.service.js.map +1 -0
  27. package/dist/cli/commands.d.ts +40 -0
  28. package/dist/cli/commands.d.ts.map +1 -0
  29. package/dist/cli/commands.js +142 -0
  30. package/dist/cli/commands.js.map +1 -0
  31. package/dist/cli/output.d.ts +24 -0
  32. package/dist/cli/output.d.ts.map +1 -0
  33. package/dist/cli/output.js +143 -0
  34. package/dist/cli/output.js.map +1 -0
  35. package/dist/config/config.service.d.ts +89 -0
  36. package/dist/config/config.service.d.ts.map +1 -0
  37. package/dist/config/config.service.js +169 -0
  38. package/dist/config/config.service.js.map +1 -0
  39. package/dist/datasources/git-data-source.interface.d.ts +140 -0
  40. package/dist/datasources/git-data-source.interface.d.ts.map +1 -0
  41. package/dist/datasources/git-data-source.interface.js +2 -0
  42. package/dist/datasources/git-data-source.interface.js.map +1 -0
  43. package/dist/datasources/gitlab-api-data-source.d.ts +127 -0
  44. package/dist/datasources/gitlab-api-data-source.d.ts.map +1 -0
  45. package/dist/datasources/gitlab-api-data-source.js +248 -0
  46. package/dist/datasources/gitlab-api-data-source.js.map +1 -0
  47. package/dist/datasources/local-git-data-source.d.ts +124 -0
  48. package/dist/datasources/local-git-data-source.d.ts.map +1 -0
  49. package/dist/datasources/local-git-data-source.js +580 -0
  50. package/dist/datasources/local-git-data-source.js.map +1 -0
  51. package/dist/errors/error-handler.d.ts +113 -0
  52. package/dist/errors/error-handler.d.ts.map +1 -0
  53. package/dist/errors/error-handler.js +230 -0
  54. package/dist/errors/error-handler.js.map +1 -0
  55. package/dist/index.d.ts +139 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +139 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logging/example.d.ts +15 -0
  60. package/dist/logging/example.d.ts.map +1 -0
  61. package/dist/logging/example.js +79 -0
  62. package/dist/logging/example.js.map +1 -0
  63. package/dist/logging/index.d.ts +7 -0
  64. package/dist/logging/index.d.ts.map +1 -0
  65. package/dist/logging/index.js +7 -0
  66. package/dist/logging/index.js.map +1 -0
  67. package/dist/logging/logger.service.d.ts +98 -0
  68. package/dist/logging/logger.service.d.ts.map +1 -0
  69. package/dist/logging/logger.service.js +160 -0
  70. package/dist/logging/logger.service.js.map +1 -0
  71. package/dist/mcp/server.d.ts +67 -0
  72. package/dist/mcp/server.d.ts.map +1 -0
  73. package/dist/mcp/server.js +213 -0
  74. package/dist/mcp/server.js.map +1 -0
  75. package/dist/mcp/tools.d.ts +22 -0
  76. package/dist/mcp/tools.d.ts.map +1 -0
  77. package/dist/mcp/tools.js +176 -0
  78. package/dist/mcp/tools.js.map +1 -0
  79. package/dist/services/blacklist.service.d.ts +32 -0
  80. package/dist/services/blacklist.service.d.ts.map +1 -0
  81. package/dist/services/blacklist.service.js +59 -0
  82. package/dist/services/blacklist.service.js.map +1 -0
  83. package/dist/services/codeowners.service.d.ts +45 -0
  84. package/dist/services/codeowners.service.d.ts.map +1 -0
  85. package/dist/services/codeowners.service.js +200 -0
  86. package/dist/services/codeowners.service.js.map +1 -0
  87. package/dist/services/comment-builder.service.d.ts +48 -0
  88. package/dist/services/comment-builder.service.d.ts.map +1 -0
  89. package/dist/services/comment-builder.service.js +61 -0
  90. package/dist/services/comment-builder.service.js.map +1 -0
  91. package/dist/services/contributors.service.d.ts +52 -0
  92. package/dist/services/contributors.service.d.ts.map +1 -0
  93. package/dist/services/contributors.service.js +144 -0
  94. package/dist/services/contributors.service.js.map +1 -0
  95. package/dist/services/reviewer-service.d.ts +125 -0
  96. package/dist/services/reviewer-service.d.ts.map +1 -0
  97. package/dist/services/reviewer-service.js +554 -0
  98. package/dist/services/reviewer-service.js.map +1 -0
  99. package/dist/services/team-members.service.d.ts +29 -0
  100. package/dist/services/team-members.service.d.ts.map +1 -0
  101. package/dist/services/team-members.service.js +45 -0
  102. package/dist/services/team-members.service.js.map +1 -0
  103. package/dist/services/whitelist.service.d.ts +31 -0
  104. package/dist/services/whitelist.service.d.ts.map +1 -0
  105. package/dist/services/whitelist.service.js +51 -0
  106. package/dist/services/whitelist.service.js.map +1 -0
  107. package/dist/tools.d.ts +22 -0
  108. package/dist/tools.d.ts.map +1 -0
  109. package/dist/tools.js +176 -0
  110. package/dist/tools.js.map +1 -0
  111. package/dist/types/index.d.ts +502 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +91 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/dist/types.d.ts +219 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +7 -0
  118. package/dist/types.js.map +1 -0
  119. package/package.json +71 -0
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Type Definitions for Auto Reviewers MCP Server
3
+ *
4
+ * This module contains all TypeScript interfaces and types used throughout the MCP server.
5
+ */
6
+ /**
7
+ * Parameters for the suggest_reviewers tool
8
+ *
9
+ * @property project - GitLab project ID or path (e.g., "group/project" or 123)
10
+ * @property mergeRequestIid - Merge request internal ID (IID)
11
+ * @property branch - Branch name (alternative to mergeRequestIid)
12
+ * @property gitlabToken - GitLab API token (optional if set in environment)
13
+ * @property gitlabUrl - GitLab instance URL (defaults to https://gitlab.com)
14
+ * @property repoPath - Local repository path for git operations (optional)
15
+ */
16
+ export interface AutoReviewerParams {
17
+ project?: string | number;
18
+ mergeRequestIid?: number;
19
+ branch?: string;
20
+ gitlabToken?: string;
21
+ gitlabUrl?: string;
22
+ repoPath?: string;
23
+ }
24
+ /**
25
+ * A suggested reviewer with scoring and reasoning
26
+ *
27
+ * @property username - GitLab username of the suggested reviewer
28
+ * @property reason - Human-readable explanation for the suggestion
29
+ * @property workload - Current number of open merge requests assigned to this reviewer
30
+ * @property fte - Full-Time Equivalent (0.0-1.0) indicating availability
31
+ * @property score - Detailed scoring breakdown (optional)
32
+ * @property score.total - Total combined score
33
+ * @property score.breakdown - Score breakdown by category
34
+ * @property score.breakdown.contribution - Score from code contributions
35
+ * @property score.breakdown.codeOwnership - Score from CODEOWNERS matches
36
+ * @property score.breakdown.teamMembership - Score from team membership
37
+ * @property score.breakdown.availability - Score from FTE availability
38
+ * @property reasoning - Detailed reasoning with multiple factors (optional)
39
+ * @property reasoning.primary - Primary reason for the suggestion
40
+ * @property reasoning.factors - Array of contributing factors
41
+ * @property reasoning.factors[].type - Type of factor
42
+ * @property reasoning.factors[].description - Description of this factor's contribution
43
+ * @property reasoning.factors[].weight - Weight of this factor in the decision
44
+ * @property workloadDetails - Detailed workload information (optional)
45
+ * @property workloadDetails.current - Current number of assigned MRs
46
+ * @property workloadDetails.capacity - Maximum capacity based on FTE
47
+ * @property workloadDetails.utilizationPercent - Percentage of capacity utilized
48
+ */
49
+ export interface ReviewerSuggestion {
50
+ username: string;
51
+ reason: string;
52
+ workload: number;
53
+ fte?: number;
54
+ score?: {
55
+ total: number;
56
+ breakdown: {
57
+ contribution: number;
58
+ codeOwnership: number;
59
+ teamMembership: number;
60
+ availability: number;
61
+ };
62
+ };
63
+ reasoning?: {
64
+ primary: string;
65
+ factors: Array<{
66
+ type: 'contribution' | 'ownership' | 'team' | 'availability';
67
+ description: string;
68
+ weight: number;
69
+ }>;
70
+ };
71
+ workloadDetails?: {
72
+ current: number;
73
+ capacity: number;
74
+ utilizationPercent: number;
75
+ };
76
+ }
77
+ /**
78
+ * Result from the suggest_reviewers tool
79
+ *
80
+ * @property contributors - Reviewers suggested based on file contributions
81
+ * @property teamMembers - Reviewers suggested based on team membership
82
+ * @property codeOwners - Reviewers suggested based on CODEOWNERS file
83
+ * @property comment - Formatted comment text for posting to GitLab
84
+ */
85
+ export interface AutoReviewerResult {
86
+ contributors: ReviewerSuggestion[];
87
+ teamMembers: ReviewerSuggestion[];
88
+ codeOwners: ReviewerSuggestion[];
89
+ comment: string;
90
+ }
91
+ /**
92
+ * Parameters for the get_contributor_analysis tool
93
+ *
94
+ * @property project - GitLab project ID or path
95
+ * @property mergeRequestIid - Merge request internal ID
96
+ * @property gitlabToken - GitLab API token (optional if set in environment)
97
+ * @property gitlabUrl - GitLab instance URL (defaults to https://gitlab.com)
98
+ */
99
+ export interface ContributorAnalysisParams {
100
+ project: string | number;
101
+ mergeRequestIid: number;
102
+ gitlabToken?: string;
103
+ gitlabUrl?: string;
104
+ }
105
+ /**
106
+ * Parameters for the get_reviewer_workload tool
107
+ *
108
+ * @property project - GitLab project ID or path
109
+ * @property gitlabToken - GitLab API token (optional if set in environment)
110
+ * @property gitlabUrl - GitLab instance URL (defaults to https://gitlab.com)
111
+ */
112
+ export interface WorkloadAnalysisParams {
113
+ project: string | number;
114
+ gitlabToken?: string;
115
+ gitlabUrl?: string;
116
+ }
117
+ /**
118
+ * Parameters for the post_comment tool
119
+ *
120
+ * @property project - GitLab project ID or path
121
+ * @property mergeRequestIid - Merge request internal ID
122
+ * @property branch - Branch name (alternative to mergeRequestIid)
123
+ * @property comment - Comment text to post
124
+ * @property gitlabToken - GitLab API token (optional if set in environment)
125
+ * @property gitlabUrl - GitLab instance URL (defaults to https://gitlab.com)
126
+ * @property repoPath - Local repository path (optional)
127
+ */
128
+ export interface PostCommentParams {
129
+ project?: string | number;
130
+ mergeRequestIid?: number;
131
+ branch?: string;
132
+ comment: string;
133
+ gitlabToken?: string;
134
+ gitlabUrl?: string;
135
+ repoPath?: string;
136
+ }
137
+ /**
138
+ * Parameters for the invite_reviewers tool
139
+ *
140
+ * @property project - GitLab project ID or path
141
+ * @property mergeRequestIid - Merge request internal ID
142
+ * @property branch - Branch name (alternative to mergeRequestIid)
143
+ * @property gitlabToken - GitLab API token (optional if set in environment)
144
+ * @property gitlabUrl - GitLab instance URL (defaults to https://gitlab.com)
145
+ * @property repoPath - Local repository path (optional)
146
+ */
147
+ export interface InviteReviewersParams {
148
+ project?: string | number;
149
+ mergeRequestIid?: number;
150
+ branch?: string;
151
+ gitlabToken?: string;
152
+ gitlabUrl?: string;
153
+ repoPath?: string;
154
+ }
155
+ /**
156
+ * A contributor to the codebase
157
+ *
158
+ * @property id - GitLab user ID (optional)
159
+ * @property username - GitLab username
160
+ * @property email - Email address
161
+ * @property teams - Teams the contributor belongs to (optional)
162
+ * @property fte - Full-Time Equivalent availability (optional)
163
+ * @property changes - Files changed by this contributor (optional)
164
+ */
165
+ export interface Contributor {
166
+ id?: number;
167
+ username: string;
168
+ email: string;
169
+ teams?: Team[];
170
+ fte?: number;
171
+ changes?: Change[];
172
+ }
173
+ /**
174
+ * A team that a contributor belongs to
175
+ *
176
+ * @property name - Team name
177
+ * @property fte - FTE allocation to this team (optional)
178
+ */
179
+ export interface Team {
180
+ name: string;
181
+ fte?: number;
182
+ }
183
+ /**
184
+ * A file change made by a contributor
185
+ *
186
+ * @property path - File path
187
+ * @property fragments - Code fragments changed (optional)
188
+ */
189
+ export interface Change {
190
+ path: string;
191
+ fragments?: string[];
192
+ }
193
+ /**
194
+ * A rule from the CODEOWNERS file
195
+ *
196
+ * @property pattern - File pattern (glob or path)
197
+ * @property owners - List of owner usernames
198
+ * @property section - Section name from CODEOWNERS file (optional)
199
+ */
200
+ export interface CodeOwnerRule {
201
+ pattern: string;
202
+ owners: string[];
203
+ section?: string;
204
+ }
205
+ /**
206
+ * A match between changed files and CODEOWNERS rules
207
+ *
208
+ * @property sectionName - Name of the CODEOWNERS section
209
+ * @property files - List of files matching this rule
210
+ * @property owners - List of owner usernames for these files
211
+ * @property approvals - Number of required approvals (optional)
212
+ */
213
+ export interface CodeOwnerMatch {
214
+ sectionName: string;
215
+ files: string[];
216
+ owners: string[];
217
+ approvals?: number;
218
+ }
219
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Type Definitions for Auto Reviewers MCP Server
3
+ *
4
+ * This module contains all TypeScript interfaces and types used throughout the MCP server.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "gitlab-auto-reviewers",
3
+ "version": "2.0.0",
4
+ "description": "Shared library for GitLab auto-reviewer suggestions with MCP server, CLI, and library modes",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "gitlab-auto-reviewers": "dist/bin/index.js",
10
+ "auto-reviewers-mcp-server": "dist/bin/deprecated-mcp.js"
11
+ },
12
+ "keywords": [
13
+ "mcp",
14
+ "model-context-protocol",
15
+ "gitlab",
16
+ "code-review",
17
+ "auto-reviewer",
18
+ "merge-request"
19
+ ],
20
+ "author": "Frank Renfeng",
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://gitlab.com/renfeng.cn/state-of-merge-requests.git",
25
+ "directory": "auto-reviewers"
26
+ },
27
+ "bugs": {
28
+ "url": "https://gitlab.com/renfeng.cn/state-of-merge-requests/-/issues"
29
+ },
30
+ "homepage": "https://gitlab.com/renfeng.cn/state-of-merge-requests#readme",
31
+ "engines": {
32
+ "node": ">=18.0.0"
33
+ },
34
+ "publishConfig": {
35
+ "registry": "https://registry.npmjs.org"
36
+ },
37
+ "files": [
38
+ "dist/",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "scripts": {
43
+ "build": "npm run type-check && tsc",
44
+ "prepublishOnly": "npm run build",
45
+ "start": "node dist/index.js",
46
+ "dev": "tsc --watch",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest",
49
+ "test:coverage": "vitest run --coverage",
50
+ "test:unit": "vitest run tests/unit",
51
+ "test:properties": "vitest run tests/properties",
52
+ "test:integration": "vitest run tests/integration",
53
+ "lint": "eslint src/**/*.ts",
54
+ "lint:fix": "eslint src/**/*.ts --fix",
55
+ "type-check": "tsc --noEmit"
56
+ },
57
+ "dependencies": {
58
+ "@modelcontextprotocol/sdk": "^1.24.3",
59
+ "simple-git": "^3.30.0"
60
+ },
61
+ "devDependencies": {
62
+ "@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",
67
+ "fast-check": "^3.15.0",
68
+ "typescript": "^5.0.0",
69
+ "vitest": "^4.0.15"
70
+ }
71
+ }