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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Frank Renfeng
3
+ Copyright (c) 2025 Frank Ren
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -53,23 +53,26 @@ Or add it to your MCP configuration (see [MCP Integration](#mcp-integration) sec
53
53
 
54
54
  ### CLI Mode
55
55
 
56
- Use the command-line interface for local analysis:
56
+ Use the command-line interface for posting reviewer suggestions:
57
57
 
58
58
  ```bash
59
- # Analyze a merge request by IID
59
+ # Posts reviewer suggestions as comments (default behavior)
60
60
  npx gitlab-auto-reviewers cli --project my-group/my-project --mr 123
61
61
 
62
- # Analyze a branch
62
+ # Analysis only (use --dry-run for testing)
63
+ npx gitlab-auto-reviewers cli --project my-group/my-project --mr 123 --dry-run
64
+
65
+ # Post suggestions for a branch
63
66
  npx gitlab-auto-reviewers cli --project my-group/my-project --branch feature/new-feature
64
67
 
65
- # Output as JSON
68
+ # JSON output for automation (still posts comments)
66
69
  npx gitlab-auto-reviewers cli --project my-group/my-project --mr 123 --format json
67
70
 
68
- # Use local git repository (faster, works offline)
71
+ # Use local git repository (faster analysis)
69
72
  npx gitlab-auto-reviewers cli --repo-path /path/to/repo --mr 123
70
73
  ```
71
74
 
72
- See [CLI Usage](#cli-usage) section for detailed documentation.
75
+ See [CLI Usage](#cli-usage) section and [Migration Guide](./docs/MIGRATION-CLI-v2.md) for detailed documentation.
73
76
 
74
77
  ### Library Mode
75
78
 
@@ -124,7 +127,14 @@ Version 2.0 brings significant improvements to reliability, performance, and dev
124
127
  - **Default values** with logging
125
128
  - **Multiple configuration profiles** (development, production, etc.)
126
129
 
127
- See [MIGRATION.md](./MIGRATION.md) for detailed upgrade instructions.
130
+ ### 💬 CLI Enhancement (Breaking Change)
131
+ - **Comment posting by default** - CLI now posts reviewer suggestions as comments
132
+ - **Dry-run mode** with `--dry-run` flag for analysis-only
133
+ - **Cross-interface consistency** - CLI behavior matches MCP server
134
+ - **Enhanced help system** with actionable error messages
135
+ - **Migration guide** for upgrading from v1.x
136
+
137
+ See [MIGRATION.md](./MIGRATION.md) and [CLI Migration Guide](./docs/MIGRATION-CLI-v2.md) for detailed upgrade instructions.
128
138
 
129
139
  ## Features
130
140
 
@@ -252,7 +262,7 @@ The server can be configured through environment variables or tool parameters.
252
262
  | `CACHE_ENABLED` | Enable in-memory caching | `true` | No |
253
263
  | `CACHE_TTL` | Cache TTL in milliseconds | `300000` (5 min) | No |
254
264
  | `MAX_PARALLEL_REQUESTS` | Max parallel API requests | `5` | No |
255
- | `CONTRIBUTOR_DAYS` | Days to analyze for contributors | `365` | No |
265
+ | `CONTRIBUTOR_DAYS` | Days to analyze for contributors | `352` | No |
256
266
  | `MAX_RETRIES` | Max retry attempts for failures | `3` | No |
257
267
  | `RETRY_DELAY_MS` | Initial retry delay in ms | `1000` | No |
258
268
  | `LOG_LEVEL` | Logging level | `info` | No |
@@ -275,7 +285,7 @@ CACHE_TTL=300000
275
285
  MAX_PARALLEL_REQUESTS=5
276
286
 
277
287
  # Git Configuration
278
- CONTRIBUTOR_DAYS=365
288
+ CONTRIBUTOR_DAYS=352
279
289
  MAX_RETRIES=3
280
290
  RETRY_DELAY_MS=1000
281
291
 
@@ -311,7 +321,7 @@ MAX_RETRIES=1 # Fail fast
311
321
  CACHE_ENABLED=true
312
322
  CACHE_TTL=300000 # 5 minutes
313
323
  MAX_PARALLEL_REQUESTS=5 # Moderate concurrency
314
- CONTRIBUTOR_DAYS=365 # Full year analysis
324
+ CONTRIBUTOR_DAYS=352 # Empirically optimized analysis
315
325
  MAX_RETRIES=3 # Standard retries
316
326
  LOG_LEVEL=info # Normal logging
317
327
  DEBUG=false # Disable debug mode
package/dist/bin/cli.js CHANGED
@@ -6,9 +6,26 @@
6
6
  *
7
7
  * @module bin/cli
8
8
  */
9
- import { suggestReviewersCommand, displayHelp } from "../cli/commands.js";
10
- import { existsSync, statSync } from "fs";
11
- import { resolve } from "path";
9
+ import { inviteReviewersCommand, displayHelp } from "../cli/commands.js";
10
+ import { configLoader } from "../cli/config.js";
11
+ import { ParameterValidator, ErrorClassifier, CLIErrorCode, CLIError, formatCLIError } from "../cli/errors.js";
12
+ /**
13
+ * Extract format from arguments for error formatting
14
+ *
15
+ * @param args - Command line arguments
16
+ * @returns Format ('json' or 'text')
17
+ */
18
+ function getFormatFromArgs(args) {
19
+ for (let i = 0; i < args.length; i++) {
20
+ if (args[i] === '--format' && args[i + 1]) {
21
+ const format = args[i + 1];
22
+ if (format === 'json' || format === 'text') {
23
+ return format;
24
+ }
25
+ }
26
+ }
27
+ return 'text';
28
+ }
12
29
  /**
13
30
  * Parse command-line arguments
14
31
  *
@@ -16,9 +33,9 @@ import { resolve } from "path";
16
33
  * @returns Parsed CLI options
17
34
  */
18
35
  function parseArguments(args) {
19
- const options = {
20
- repoPath: '',
21
- };
36
+ // Initialize with undefined values - let the parameter tracker handle defaults
37
+ // This is important for Requirement 3.5 (logging parameter sources)
38
+ const options = {};
22
39
  for (let i = 0; i < args.length; i++) {
23
40
  const arg = args[i];
24
41
  const nextArg = args[i + 1];
@@ -28,98 +45,133 @@ function parseArguments(args) {
28
45
  return null; // Signal to display help
29
46
  case '--repo-path':
30
47
  if (!nextArg || nextArg.startsWith('--')) {
31
- console.error('Error: --repo-path requires a value');
32
- process.exit(1);
48
+ throw new CLIError('--repo-path requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --repo-path to specify the path to your git repository');
33
49
  }
34
50
  options.repoPath = nextArg;
35
51
  i++;
36
52
  break;
53
+ case '--project':
54
+ if (!nextArg || nextArg.startsWith('--')) {
55
+ throw new CLIError('--project requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --project to specify the GitLab project ID or path');
56
+ }
57
+ // Handle both numeric project IDs and project paths
58
+ const projectValue = isNaN(Number(nextArg)) ? nextArg : Number(nextArg);
59
+ options.project = projectValue;
60
+ i++;
61
+ break;
37
62
  case '--mr':
38
63
  if (!nextArg || nextArg.startsWith('--')) {
39
- console.error('Error: --mr requires a value');
40
- process.exit(1);
64
+ throw new CLIError('--mr requires a merge request IID', CLIErrorCode.VALIDATION_ERROR, 'Use --mr followed by a positive number (e.g., --mr 123)');
41
65
  }
42
66
  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);
67
+ try {
68
+ options.mergeRequestIid = ParameterValidator.validateMergeRequestIid(mrIid);
69
+ }
70
+ catch (error) {
71
+ // Pre-parse format for error formatting
72
+ const format = getFormatFromArgs(args);
73
+ const formattedError = formatCLIError(error instanceof Error ? error : new Error(String(error)), format);
74
+ console.error(formattedError);
75
+ process.exit(CLIErrorCode.VALIDATION_ERROR);
46
76
  }
47
- options.mergeRequestIid = mrIid;
48
77
  i++;
49
78
  break;
50
79
  case '--branch':
51
80
  if (!nextArg || nextArg.startsWith('--')) {
52
- console.error('Error: --branch requires a value');
53
- process.exit(1);
81
+ throw new CLIError('--branch requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --branch followed by a valid branch name');
54
82
  }
55
83
  options.branch = nextArg;
56
84
  i++;
57
85
  break;
58
86
  case '--gitlab-url':
59
87
  if (!nextArg || nextArg.startsWith('--')) {
60
- console.error('Error: --gitlab-url requires a value');
61
- process.exit(1);
88
+ throw new CLIError('--gitlab-url requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --gitlab-url followed by a valid GitLab URL');
62
89
  }
63
90
  options.gitlabUrl = nextArg;
64
91
  i++;
65
92
  break;
66
93
  case '--gitlab-token':
67
94
  if (!nextArg || nextArg.startsWith('--')) {
68
- console.error('Error: --gitlab-token requires a value');
69
- process.exit(1);
95
+ throw new CLIError('--gitlab-token requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --gitlab-token followed by your GitLab personal access token');
70
96
  }
71
97
  options.gitlabToken = nextArg;
72
98
  i++;
73
99
  break;
74
100
  case '--format':
75
101
  if (!nextArg || nextArg.startsWith('--')) {
76
- console.error('Error: --format requires a value');
77
- process.exit(1);
102
+ throw new CLIError('--format requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --format json or --format text');
103
+ }
104
+ try {
105
+ options.format = ParameterValidator.validateFormat(nextArg);
78
106
  }
79
- if (nextArg !== 'json' && nextArg !== 'text') {
80
- console.error('Error: --format must be either "json" or "text"');
81
- process.exit(1);
107
+ catch (error) {
108
+ // For format validation errors, we can use the attempted format if it's json
109
+ const format = nextArg === 'json' ? 'json' : 'text';
110
+ const formattedError = formatCLIError(error instanceof Error ? error : new Error(String(error)), format);
111
+ console.error(formattedError);
112
+ process.exit(CLIErrorCode.VALIDATION_ERROR);
82
113
  }
83
- options.format = nextArg;
84
114
  i++;
85
115
  break;
86
116
  case '--verbose':
87
117
  case '-v':
88
118
  options.verbose = true;
89
119
  break;
120
+ case '--dry-run':
121
+ options.dryRun = true;
122
+ break;
123
+ case '--template':
124
+ if (!nextArg || nextArg.startsWith('--')) {
125
+ throw new CLIError('--template requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --template followed by a template file path');
126
+ }
127
+ options.template = nextArg;
128
+ i++;
129
+ break;
130
+ case '--config':
131
+ if (!nextArg || nextArg.startsWith('--')) {
132
+ throw new CLIError('--config requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --config followed by a configuration file path');
133
+ }
134
+ options.config = nextArg;
135
+ i++;
136
+ break;
137
+ case '--log-file':
138
+ if (!nextArg || nextArg.startsWith('--')) {
139
+ throw new CLIError('--log-file requires a value', CLIErrorCode.VALIDATION_ERROR, 'Use --log-file followed by a log file path');
140
+ }
141
+ options.logFile = nextArg;
142
+ i++;
143
+ break;
144
+ case '--quiet':
145
+ case '-q':
146
+ options.quiet = true;
147
+ break;
148
+ case '--validate-consistency':
149
+ options.validateConsistency = true;
150
+ break;
151
+ case '--compare-data-sources':
152
+ options.compareDataSources = true;
153
+ break;
90
154
  default:
91
- console.error(`Error: Unknown option: ${arg}`);
92
- console.error('Use --help to see available options');
93
- process.exit(1);
155
+ throw new CLIError(`Unknown option: ${arg}`, CLIErrorCode.VALIDATION_ERROR, 'Use --help to see available options');
94
156
  }
95
157
  }
96
158
  return options;
97
159
  }
98
160
  /**
99
- * Validate repository path
161
+ * Validate that data source options are not conflicting
100
162
  *
101
- * @param repoPath - Path to validate
102
- * @returns Absolute path if valid
103
- * @throws Error if path is invalid
163
+ * Note: We don't require repoPath or project here because:
164
+ * - Intelligent fallbacks (CI_PROJECT_DIR, current directory) are handled in data-source-selector.ts
165
+ * - This validation only checks for conflicting options
166
+ *
167
+ * @param _options - CLI options to validate (unused - validation removed per Requirement 2.1)
104
168
  */
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;
169
+ function validateDataSourceOptions(_options) {
170
+ // Requirement 2.1: Allow both repoPath and project to be specified together
171
+ // - repoPath determines data source (local git vs API)
172
+ // - project is used for API calls when needed (e.g., posting comments)
173
+ // The data-source-selector.ts handles intelligent fallbacks
174
+ // No validation needed here - both can coexist
123
175
  }
124
176
  /**
125
177
  * Main CLI execution
@@ -130,57 +182,75 @@ async function main() {
130
182
  const args = process.argv.slice(2);
131
183
  // Remove 'cli' if it's the first argument (for direct execution)
132
184
  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) {
185
+ // Handle explicit help request only
186
+ if (cliArgs.includes('--help') || cliArgs.includes('-h')) {
141
187
  displayHelp();
142
188
  process.exit(0);
143
189
  }
190
+ let options = null;
144
191
  try {
145
- // Validate repository path
146
- options.repoPath = validateRepositoryPath(options.repoPath);
192
+ // Parse arguments
193
+ options = parseArguments(cliArgs);
194
+ if (!options) {
195
+ displayHelp();
196
+ process.exit(0);
197
+ }
198
+ // Load configuration
199
+ const config = await configLoader.load(options.config);
200
+ // Merge CLI options with configuration
201
+ const mergedOptions = configLoader.mergeWithCLIOptions(options, config);
202
+ // Validate final configuration
203
+ configLoader.validateConfiguration(mergedOptions);
204
+ // Validate data source options
205
+ validateDataSourceOptions(mergedOptions);
147
206
  // Execute command
148
- const exitCode = await suggestReviewersCommand(options);
207
+ const exitCode = await inviteReviewersCommand(mergedOptions);
149
208
  process.exit(exitCode);
150
209
  }
151
210
  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);
211
+ const cliError = error instanceof Error ? error : new Error(String(error));
212
+ // Use CLIError exit code if it's a CLIError, otherwise use ErrorClassifier
213
+ const errorCode = cliError instanceof CLIError
214
+ ? cliError.exitCode
215
+ : ErrorClassifier.classifyError(cliError);
216
+ // Format and output error with guidance
217
+ // Use format from options if available, otherwise default to text
218
+ const format = options?.format || 'text';
219
+ const verbose = options?.verbose || false;
220
+ const formattedError = formatCLIError(cliError, format, verbose);
221
+ console.error(formattedError);
222
+ process.exit(errorCode);
169
223
  }
170
224
  }
171
225
  // Handle uncaught errors
172
226
  process.on('uncaughtException', (error) => {
173
- console.error('Uncaught exception:', error.message);
174
- process.exit(1);
227
+ const errorCode = error instanceof CLIError
228
+ ? error.exitCode
229
+ : ErrorClassifier.classifyError(error);
230
+ const formattedError = formatCLIError(error, 'text', false);
231
+ console.error('Uncaught exception:');
232
+ console.error(formattedError);
233
+ process.exit(errorCode);
175
234
  });
176
235
  process.on('unhandledRejection', (reason) => {
177
236
  const error = reason instanceof Error ? reason : new Error(String(reason));
178
- console.error('Unhandled rejection:', error.message);
179
- process.exit(1);
237
+ const errorCode = error instanceof CLIError
238
+ ? error.exitCode
239
+ : ErrorClassifier.classifyError(error);
240
+ const formattedError = formatCLIError(error, 'text', false);
241
+ console.error('Unhandled rejection:');
242
+ console.error(formattedError);
243
+ process.exit(errorCode);
180
244
  });
181
245
  // Run main function
182
246
  main().catch((error) => {
183
- console.error('Fatal error:', error.message);
184
- process.exit(1);
247
+ const cliError = error instanceof Error ? error : new Error(String(error));
248
+ const errorCode = cliError instanceof CLIError
249
+ ? cliError.exitCode
250
+ : ErrorClassifier.classifyError(cliError);
251
+ const formattedError = formatCLIError(cliError, 'text', false);
252
+ console.error('Fatal error:');
253
+ console.error(formattedError);
254
+ process.exit(errorCode);
185
255
  });
186
256
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,5 @@
7
7
  *
8
8
  * @module bin/index
9
9
  */
10
- /**
11
- * Display main help text
12
- */
13
- declare function displayMainHelp(): void;
14
- /**
15
- * Main execution
16
- */
17
- declare function main(): Promise<void>;
10
+ export {};
18
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
package/dist/bin/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
2
  /**
4
3
  * Main Entry Point
5
4
  *
@@ -8,7 +7,9 @@
8
7
  *
9
8
  * @module bin/index
10
9
  */
11
- // No imports needed - dynamic imports are used below
10
+ // Load environment variables from .env file (if present)
11
+ import { config } from 'dotenv';
12
+ config();
12
13
  /**
13
14
  * Display main help text
14
15
  */
@@ -40,28 +41,44 @@ EXAMPLES:
40
41
  For more information, visit: https://github.com/your-org/gitlab-auto-reviewers
41
42
  `);
42
43
  }
44
+ /**
45
+ * Check if the first argument looks like a CLI option (starts with --)
46
+ * This helps determine if we should default to CLI mode
47
+ */
48
+ function looksLikeCLIOption(arg) {
49
+ if (!arg)
50
+ return false;
51
+ return arg.startsWith('--') || arg.startsWith('-');
52
+ }
43
53
  /**
44
54
  * Main execution
55
+ *
56
+ * Requirement 5.1: WHEN `cli` subcommand is not provided, THE System SHALL default to CLI mode
45
57
  */
46
58
  async function main() {
47
59
  const args = process.argv.slice(2);
48
60
  const subcommand = args[0];
49
- // Handle help or no arguments
50
- if (args.length === 0 || subcommand === '--help' || subcommand === '-h') {
61
+ // Handle explicit help request
62
+ if (subcommand === '--help' || subcommand === '-h') {
51
63
  displayMainHelp();
52
64
  process.exit(0);
53
65
  }
54
66
  // Route to appropriate subcommand
55
67
  if (subcommand === 'cli') {
56
- // Import and run CLI
68
+ // Explicit CLI subcommand
57
69
  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
70
  }
61
71
  else if (subcommand === 'mcp') {
62
- // Import and run MCP server
72
+ // Explicit MCP subcommand
63
73
  await import('./mcp.js');
64
- // The MCP module will handle its own execution
74
+ }
75
+ else if (args.length === 0 || looksLikeCLIOption(subcommand)) {
76
+ // Requirement 5.1: Default to CLI mode when:
77
+ // - No arguments provided (will show CLI help)
78
+ // - First argument looks like a CLI option (e.g., --repo-path, --mr)
79
+ // This allows users to run: gitlab-auto-reviewers --repo-path . --mr 123
80
+ // instead of: gitlab-auto-reviewers cli --repo-path . --mr 123
81
+ await import('./cli.js');
65
82
  }
66
83
  else {
67
84
  console.error(`Error: Unknown subcommand: ${subcommand}`);
@@ -1 +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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,yDAAyD;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,MAAM,EAAE,CAAC;AAET;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAuB;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;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,+BAA+B;IAC/B,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACnD,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,0BAA0B;QAC1B,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,0BAA0B;QAC1B,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,6CAA6C;QAC7C,+CAA+C;QAC/C,qEAAqE;QACrE,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,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"}
package/dist/bin/mcp.js CHANGED
File without changes