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,186 @@
1
+ /**
2
+ * CLI Entry Point
3
+ *
4
+ * This is the entry point for the gitlab-auto-reviewers CLI.
5
+ * Parses command-line arguments and executes the appropriate command.
6
+ *
7
+ * @module bin/cli
8
+ */
9
+ import { suggestReviewersCommand, displayHelp } from "../cli/commands.js";
10
+ import { existsSync, statSync } from "fs";
11
+ import { resolve } from "path";
12
+ /**
13
+ * Parse command-line arguments
14
+ *
15
+ * @param args - Command-line arguments (process.argv.slice(2))
16
+ * @returns Parsed CLI options
17
+ */
18
+ function parseArguments(args) {
19
+ const options = {
20
+ repoPath: '',
21
+ };
22
+ for (let i = 0; i < args.length; i++) {
23
+ const arg = args[i];
24
+ const nextArg = args[i + 1];
25
+ switch (arg) {
26
+ case '--help':
27
+ case '-h':
28
+ return null; // Signal to display help
29
+ case '--repo-path':
30
+ if (!nextArg || nextArg.startsWith('--')) {
31
+ console.error('Error: --repo-path requires a value');
32
+ process.exit(1);
33
+ }
34
+ options.repoPath = nextArg;
35
+ i++;
36
+ break;
37
+ case '--mr':
38
+ if (!nextArg || nextArg.startsWith('--')) {
39
+ console.error('Error: --mr requires a value');
40
+ process.exit(1);
41
+ }
42
+ const mrIid = parseInt(nextArg, 10);
43
+ if (isNaN(mrIid) || mrIid <= 0) {
44
+ console.error('Error: --mr must be a positive integer');
45
+ process.exit(1);
46
+ }
47
+ options.mergeRequestIid = mrIid;
48
+ i++;
49
+ break;
50
+ case '--branch':
51
+ if (!nextArg || nextArg.startsWith('--')) {
52
+ console.error('Error: --branch requires a value');
53
+ process.exit(1);
54
+ }
55
+ options.branch = nextArg;
56
+ i++;
57
+ break;
58
+ case '--gitlab-url':
59
+ if (!nextArg || nextArg.startsWith('--')) {
60
+ console.error('Error: --gitlab-url requires a value');
61
+ process.exit(1);
62
+ }
63
+ options.gitlabUrl = nextArg;
64
+ i++;
65
+ break;
66
+ case '--gitlab-token':
67
+ if (!nextArg || nextArg.startsWith('--')) {
68
+ console.error('Error: --gitlab-token requires a value');
69
+ process.exit(1);
70
+ }
71
+ options.gitlabToken = nextArg;
72
+ i++;
73
+ break;
74
+ case '--format':
75
+ if (!nextArg || nextArg.startsWith('--')) {
76
+ console.error('Error: --format requires a value');
77
+ process.exit(1);
78
+ }
79
+ if (nextArg !== 'json' && nextArg !== 'text') {
80
+ console.error('Error: --format must be either "json" or "text"');
81
+ process.exit(1);
82
+ }
83
+ options.format = nextArg;
84
+ i++;
85
+ break;
86
+ case '--verbose':
87
+ case '-v':
88
+ options.verbose = true;
89
+ break;
90
+ default:
91
+ console.error(`Error: Unknown option: ${arg}`);
92
+ console.error('Use --help to see available options');
93
+ process.exit(1);
94
+ }
95
+ }
96
+ return options;
97
+ }
98
+ /**
99
+ * Validate repository path
100
+ *
101
+ * @param repoPath - Path to validate
102
+ * @returns Absolute path if valid
103
+ * @throws Error if path is invalid
104
+ */
105
+ function validateRepositoryPath(repoPath) {
106
+ if (!repoPath) {
107
+ throw new Error('Repository path is required. Use --repo-path to specify the path.');
108
+ }
109
+ const absolutePath = resolve(repoPath);
110
+ if (!existsSync(absolutePath)) {
111
+ throw new Error(`Repository path does not exist: ${absolutePath}`);
112
+ }
113
+ const stats = statSync(absolutePath);
114
+ if (!stats.isDirectory()) {
115
+ throw new Error(`Repository path is not a directory: ${absolutePath}`);
116
+ }
117
+ // Check if it's a git repository
118
+ const gitDir = resolve(absolutePath, '.git');
119
+ if (!existsSync(gitDir)) {
120
+ throw new Error(`Not a git repository: ${absolutePath} (no .git directory found)`);
121
+ }
122
+ return absolutePath;
123
+ }
124
+ /**
125
+ * Main CLI execution
126
+ */
127
+ async function main() {
128
+ // When imported from index.ts, args will already have 'cli' removed
129
+ // When run directly, we need to handle it
130
+ const args = process.argv.slice(2);
131
+ // Remove 'cli' if it's the first argument (for direct execution)
132
+ const cliArgs = args[0] === 'cli' ? args.slice(1) : args;
133
+ // Handle help for CLI subcommand
134
+ if (cliArgs.length === 0 || cliArgs.includes('--help') || cliArgs.includes('-h')) {
135
+ displayHelp();
136
+ process.exit(0);
137
+ }
138
+ // Parse arguments
139
+ const options = parseArguments(cliArgs);
140
+ if (!options) {
141
+ displayHelp();
142
+ process.exit(0);
143
+ }
144
+ try {
145
+ // Validate repository path
146
+ options.repoPath = validateRepositoryPath(options.repoPath);
147
+ // Execute command
148
+ const exitCode = await suggestReviewersCommand(options);
149
+ process.exit(exitCode);
150
+ }
151
+ catch (error) {
152
+ const errorMessage = error instanceof Error ? error.message : String(error);
153
+ // Format error based on output format
154
+ if (options.format === 'json') {
155
+ const errorOutput = {
156
+ error: errorMessage,
157
+ ...(options.verbose && error instanceof Error && error.stack ? { stack: error.stack } : {}),
158
+ };
159
+ console.error(JSON.stringify(errorOutput, null, 2));
160
+ }
161
+ else {
162
+ console.error(`Error: ${errorMessage}`);
163
+ if (options.verbose && error instanceof Error && error.stack) {
164
+ console.error('\nStack trace:');
165
+ console.error(error.stack);
166
+ }
167
+ }
168
+ process.exit(1);
169
+ }
170
+ }
171
+ // Handle uncaught errors
172
+ process.on('uncaughtException', (error) => {
173
+ console.error('Uncaught exception:', error.message);
174
+ process.exit(1);
175
+ });
176
+ process.on('unhandledRejection', (reason) => {
177
+ const error = reason instanceof Error ? reason : new Error(String(reason));
178
+ console.error('Unhandled rejection:', error.message);
179
+ process.exit(1);
180
+ });
181
+ // Run main function
182
+ main().catch((error) => {
183
+ console.error('Fatal error:', error.message);
184
+ process.exit(1);
185
+ });
186
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-mcp.d.ts","sourceRoot":"","sources":["../../src/bin/deprecated-mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -0,0 +1,73 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Main Entry Point
4
+ *
5
+ * This is the unified entry point for gitlab-auto-reviewers.
6
+ * Routes to either CLI or MCP mode based on the subcommand.
7
+ *
8
+ * @module bin/index
9
+ */
10
+ /**
11
+ * Display main help text
12
+ */
13
+ declare function displayMainHelp(): void;
14
+ /**
15
+ * Main execution
16
+ */
17
+ declare function main(): Promise<void>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAIH;;GAEG;AACH,iBAAS,eAAe,IAAI,IAAI,CA2B/B;AAED;;GAEG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BnC"}
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Main Entry Point
5
+ *
6
+ * This is the unified entry point for gitlab-auto-reviewers.
7
+ * Routes to either CLI or MCP mode based on the subcommand.
8
+ *
9
+ * @module bin/index
10
+ */
11
+ // No imports needed - dynamic imports are used below
12
+ /**
13
+ * Display main help text
14
+ */
15
+ function displayMainHelp() {
16
+ console.log(`
17
+ gitlab-auto-reviewers
18
+
19
+ USAGE:
20
+ gitlab-auto-reviewers <SUBCOMMAND> [OPTIONS]
21
+
22
+ SUBCOMMANDS:
23
+ cli Run in CLI mode (local git repository analysis)
24
+ mcp Run in MCP server mode (for AI assistants)
25
+
26
+ OPTIONS:
27
+ --help, -h Display this help message
28
+
29
+ EXAMPLES:
30
+ # Run CLI mode
31
+ gitlab-auto-reviewers cli --repo-path . --mr 123
32
+
33
+ # Run MCP server mode
34
+ gitlab-auto-reviewers mcp
35
+
36
+ # Get help for specific subcommand
37
+ gitlab-auto-reviewers cli --help
38
+ gitlab-auto-reviewers mcp --help
39
+
40
+ For more information, visit: https://github.com/your-org/gitlab-auto-reviewers
41
+ `);
42
+ }
43
+ /**
44
+ * Main execution
45
+ */
46
+ async function main() {
47
+ const args = process.argv.slice(2);
48
+ const subcommand = args[0];
49
+ // Handle help or no arguments
50
+ if (args.length === 0 || subcommand === '--help' || subcommand === '-h') {
51
+ displayMainHelp();
52
+ process.exit(0);
53
+ }
54
+ // Route to appropriate subcommand
55
+ if (subcommand === 'cli') {
56
+ // Import and run CLI
57
+ await import('./cli.js');
58
+ // The CLI module will handle its own execution
59
+ // We don't need to do anything here as it will call process.exit
60
+ }
61
+ else if (subcommand === 'mcp') {
62
+ // Import and run MCP server
63
+ await import('./mcp.js');
64
+ // The MCP module will handle its own execution
65
+ }
66
+ else {
67
+ console.error(`Error: Unknown subcommand: ${subcommand}`);
68
+ console.error('Available subcommands: cli, mcp');
69
+ console.error('Use --help to see available options');
70
+ process.exit(1);
71
+ }
72
+ }
73
+ // Run main function
74
+ main().catch((error) => {
75
+ console.error('Fatal error:', error.message);
76
+ process.exit(1);
77
+ });
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;AAEH,qDAAqD;AAErD;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxE,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,qBAAqB;QACrB,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,+CAA+C;QAC/C,iEAAiE;IACnE,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,4BAA4B;QAC5B,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,+CAA+C;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,oBAAoB;AACpB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server Entry Point
4
+ *
5
+ * This is the entry point for the Auto Reviewers MCP Server.
6
+ * It initializes the server and handles process lifecycle events.
7
+ *
8
+ * @module bin/mcp
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/bin/mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server Entry Point
4
+ *
5
+ * This is the entry point for the Auto Reviewers MCP Server.
6
+ * It initializes the server and handles process lifecycle events.
7
+ *
8
+ * @module bin/mcp
9
+ */
10
+ import { AutoReviewerMCPServer } from "../mcp/server.js";
11
+ import { ErrorHandler } from "../errors/error-handler.js";
12
+ // Initialize and start server
13
+ let server;
14
+ try {
15
+ server = new AutoReviewerMCPServer();
16
+ }
17
+ catch (error) {
18
+ console.error("Failed to initialize MCP server:", error);
19
+ console.error(ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error))));
20
+ process.exit(1);
21
+ }
22
+ process.on("SIGINT", async () => {
23
+ await server.shutdown();
24
+ process.exit(0);
25
+ });
26
+ process.on("SIGTERM", async () => {
27
+ await server.shutdown();
28
+ process.exit(0);
29
+ });
30
+ process.on('uncaughtException', (error) => {
31
+ console.error('Uncaught exception:', ErrorHandler.formatError(error));
32
+ server.shutdown().finally(() => process.exit(1));
33
+ });
34
+ process.on('unhandledRejection', (reason) => {
35
+ const error = reason instanceof Error ? reason : new Error(String(reason));
36
+ console.error('Unhandled rejection:', ErrorHandler.formatError(error));
37
+ server.shutdown().finally(() => process.exit(1));
38
+ });
39
+ server.run().catch((error) => {
40
+ console.error("Failed to start MCP server:", ErrorHandler.formatError(error));
41
+ process.exit(1);
42
+ });
43
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/bin/mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8BAA8B;AAC9B,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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Cache Service
3
+ *
4
+ * Provides in-memory caching with TTL (Time To Live) support for performance optimization.
5
+ * Supports automatic expiration and cache statistics tracking.
6
+ */
7
+ import { Logger } from '../logging/logger.service.js';
8
+ /**
9
+ * Cache statistics
10
+ *
11
+ * @property hits - Number of cache hits
12
+ * @property misses - Number of cache misses
13
+ * @property size - Current number of entries in cache
14
+ * @property hitRate - Cache hit rate (hits / (hits + misses))
15
+ */
16
+ export interface CacheStats {
17
+ hits: number;
18
+ misses: number;
19
+ size: number;
20
+ hitRate: number;
21
+ }
22
+ /**
23
+ * Cache options
24
+ *
25
+ * @property ttlMs - Time to live in milliseconds for cache entries
26
+ * @property maxSize - Maximum number of entries in cache (optional)
27
+ */
28
+ export interface CacheOptions {
29
+ ttlMs: number;
30
+ maxSize?: number;
31
+ }
32
+ /**
33
+ * Default cache options
34
+ */
35
+ export declare const DEFAULT_CACHE_OPTIONS: CacheOptions;
36
+ /**
37
+ * Cache Service for in-memory caching with TTL support
38
+ */
39
+ /**
40
+ * Cache Service for in-memory caching with TTL support
41
+ */
42
+ export declare class CacheService {
43
+ private cache;
44
+ private hits;
45
+ private misses;
46
+ private logger;
47
+ private options;
48
+ /**
49
+ * Create a new cache service
50
+ *
51
+ * @param options - Cache configuration options (ttlMs, maxSize)
52
+ * @param logger - Optional logger instance for logging cache operations
53
+ */
54
+ constructor(options?: Partial<CacheOptions>, logger?: Logger);
55
+ /**
56
+ * Get a value from the cache
57
+ */
58
+ get<T>(key: string): T | undefined;
59
+ /**
60
+ * Set a value in the cache
61
+ */
62
+ set<T>(key: string, value: T, ttlMs?: number): void;
63
+ /**
64
+ * Check if a key exists in the cache and is not expired
65
+ *
66
+ * @param key - The cache key to check
67
+ * @returns True if key exists and is not expired, false otherwise
68
+ */
69
+ has(key: string): boolean;
70
+ /**
71
+ * Delete a specific key from the cache
72
+ *
73
+ * @param key - The cache key to delete
74
+ * @returns True if key was deleted, false if key didn't exist
75
+ */
76
+ delete(key: string): boolean;
77
+ /**
78
+ * Clear all entries from the cache
79
+ */
80
+ clear(): void;
81
+ /**
82
+ * Invalidate all entries matching a pattern
83
+ *
84
+ * @param pattern - String or RegExp pattern to match cache keys against
85
+ * @returns Number of entries invalidated
86
+ */
87
+ invalidatePattern(pattern: string | RegExp): number;
88
+ /**
89
+ * Remove expired entries from the cache
90
+ */
91
+ cleanup(): number;
92
+ /**
93
+ * Get cache statistics
94
+ */
95
+ getStats(): CacheStats;
96
+ /**
97
+ * Wrap an operation with caching
98
+ */
99
+ wrap<T>(key: string, operation: () => Promise<T>, ttlMs?: number): Promise<T>;
100
+ /**
101
+ * Evict the oldest entry from the cache
102
+ */
103
+ private evictOldest;
104
+ /**
105
+ * Get the current cache size
106
+ */
107
+ get size(): number;
108
+ /**
109
+ * Get all cache keys
110
+ */
111
+ keys(): string[];
112
+ }
113
+ //# sourceMappingURL=cache.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../src/cache/cache.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAUtD;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAGnC,CAAC;AAEF;;GAEG;AACH;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAyB;IAExC;;;;;OAKG;gBACS,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAShE;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAsBlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAanD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgBzB;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAkBnD;;OAEG;IACH,OAAO,IAAI,MAAM;IAkBjB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAYtB;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC;IAkBb;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB"}