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.
- package/LICENSE +1 -1
- package/README.md +20 -10
- package/dist/bin/cli.js +155 -85
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/index.d.ts +1 -8
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +26 -9
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/mcp.js +0 -0
- package/dist/cli/cicd-integration.d.ts +127 -0
- package/dist/cli/cicd-integration.d.ts.map +1 -0
- package/dist/cli/cicd-integration.js +385 -0
- package/dist/cli/cicd-integration.js.map +1 -0
- package/dist/cli/commands.d.ts +21 -4
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +417 -71
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/config.d.ts +145 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +277 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consistency-validator.d.ts +175 -0
- package/dist/cli/consistency-validator.d.ts.map +1 -0
- package/dist/cli/consistency-validator.js +599 -0
- package/dist/cli/consistency-validator.js.map +1 -0
- package/dist/cli/data-source-consistency.d.ts +105 -0
- package/dist/cli/data-source-consistency.d.ts.map +1 -0
- package/dist/cli/data-source-consistency.js +271 -0
- package/dist/cli/data-source-consistency.js.map +1 -0
- package/dist/cli/data-source-selector.d.ts +103 -0
- package/dist/cli/data-source-selector.d.ts.map +1 -0
- package/dist/cli/data-source-selector.js +242 -0
- package/dist/cli/data-source-selector.js.map +1 -0
- package/dist/cli/enhanced-cli.d.ts +104 -0
- package/dist/cli/enhanced-cli.d.ts.map +1 -0
- package/dist/cli/enhanced-cli.js +321 -0
- package/dist/cli/enhanced-cli.js.map +1 -0
- package/dist/cli/enhanced-data-source-resolver.d.ts +67 -0
- package/dist/cli/enhanced-data-source-resolver.d.ts.map +1 -0
- package/dist/cli/enhanced-data-source-resolver.js +249 -0
- package/dist/cli/enhanced-data-source-resolver.js.map +1 -0
- package/dist/cli/enhanced-parameter-resolver.d.ts +111 -0
- package/dist/cli/enhanced-parameter-resolver.d.ts.map +1 -0
- package/dist/cli/enhanced-parameter-resolver.js +233 -0
- package/dist/cli/enhanced-parameter-resolver.js.map +1 -0
- package/dist/cli/errors.d.ts +105 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +577 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/output.d.ts +43 -3
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +157 -30
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/parameter-source-tracker.d.ts +169 -0
- package/dist/cli/parameter-source-tracker.d.ts.map +1 -0
- package/dist/cli/parameter-source-tracker.js +252 -0
- package/dist/cli/parameter-source-tracker.js.map +1 -0
- package/dist/cli/template-engine.d.ts +109 -0
- package/dist/cli/template-engine.d.ts.map +1 -0
- package/dist/cli/template-engine.js +220 -0
- package/dist/cli/template-engine.js.map +1 -0
- package/dist/config/config.service.d.ts +24 -2
- package/dist/config/config.service.d.ts.map +1 -1
- package/dist/config/config.service.js +39 -6
- package/dist/config/config.service.js.map +1 -1
- package/dist/datasources/local-git-data-source.d.ts +39 -0
- package/dist/datasources/local-git-data-source.d.ts.map +1 -1
- package/dist/datasources/local-git-data-source.js +121 -1
- package/dist/datasources/local-git-data-source.js.map +1 -1
- package/dist/enhanced-config.js +26 -0
- package/dist/index.js +0 -0
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/services/blacklist.service.d.ts +11 -5
- package/dist/services/blacklist.service.d.ts.map +1 -1
- package/dist/services/blacklist.service.js +28 -7
- package/dist/services/blacklist.service.js.map +1 -1
- package/dist/services/reviewer-service.d.ts +24 -0
- package/dist/services/reviewer-service.d.ts.map +1 -1
- package/dist/services/reviewer-service.js +177 -7
- package/dist/services/reviewer-service.js.map +1 -1
- package/dist/services/whitelist.service.js +1 -1
- package/dist/services/whitelist.service.js.map +1 -1
- package/dist/types/enhanced-config.d.ts +121 -0
- package/dist/types/enhanced-config.d.ts.map +1 -0
- package/dist/types/enhanced-config.js +27 -0
- package/dist/types/enhanced-config.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -11
- package/dist/bin/deprecated-mcp.d.ts +0 -12
- package/dist/bin/deprecated-mcp.d.ts.map +0 -1
- package/dist/bin/deprecated-mcp.js +0 -73
- package/dist/bin/deprecated-mcp.js.map +0 -1
- package/dist/tools.d.ts +0 -22
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -176
- package/dist/tools.js.map +0 -1
package/LICENSE
CHANGED
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
|
|
56
|
+
Use the command-line interface for posting reviewer suggestions:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
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
|
-
|
|
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 | `
|
|
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=
|
|
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=
|
|
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 {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
|
|
161
|
+
* Validate that data source options are not conflicting
|
|
100
162
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
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
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
134
|
-
if (cliArgs.
|
|
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
|
-
//
|
|
146
|
-
options
|
|
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
|
|
207
|
+
const exitCode = await inviteReviewersCommand(mergedOptions);
|
|
149
208
|
process.exit(exitCode);
|
|
150
209
|
}
|
|
151
210
|
catch (error) {
|
|
152
|
-
const
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
174
|
-
|
|
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
|
-
|
|
179
|
-
|
|
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
|
-
|
|
184
|
-
|
|
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
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/index.d.ts
CHANGED
package/dist/bin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG
|
|
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
|
-
//
|
|
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
|
|
50
|
-
if (
|
|
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
|
-
//
|
|
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
|
-
//
|
|
72
|
+
// Explicit MCP subcommand
|
|
63
73
|
await import('./mcp.js');
|
|
64
|
-
|
|
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}`);
|
package/dist/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"
|
|
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
|