reviewflow 3.1.0 → 3.2.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 (72) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +38 -13
  3. package/dist/cli/formatters/initSummary.d.ts +11 -0
  4. package/dist/cli/formatters/initSummary.d.ts.map +1 -0
  5. package/dist/cli/formatters/initSummary.js +35 -0
  6. package/dist/cli/formatters/initSummary.js.map +1 -0
  7. package/dist/cli/parseCliArgs.d.ts +12 -1
  8. package/dist/cli/parseCliArgs.d.ts.map +1 -1
  9. package/dist/cli/parseCliArgs.js +29 -1
  10. package/dist/cli/parseCliArgs.js.map +1 -1
  11. package/dist/frameworks/config/configLoader.d.ts.map +1 -1
  12. package/dist/frameworks/config/configLoader.js +22 -3
  13. package/dist/frameworks/config/configLoader.js.map +1 -1
  14. package/dist/main/cli.d.ts +2 -0
  15. package/dist/main/cli.d.ts.map +1 -1
  16. package/dist/main/cli.js +233 -3
  17. package/dist/main/cli.js.map +1 -1
  18. package/dist/shared/services/configDir.d.ts +2 -0
  19. package/dist/shared/services/configDir.d.ts.map +1 -0
  20. package/dist/shared/services/configDir.js +20 -0
  21. package/dist/shared/services/configDir.js.map +1 -0
  22. package/dist/shared/services/secretGenerator.d.ts +6 -0
  23. package/dist/shared/services/secretGenerator.d.ts.map +1 -0
  24. package/dist/shared/services/secretGenerator.js +13 -0
  25. package/dist/shared/services/secretGenerator.js.map +1 -0
  26. package/dist/tests/units/cli/formatters/initSummary.test.d.ts +2 -0
  27. package/dist/tests/units/cli/formatters/initSummary.test.d.ts.map +1 -0
  28. package/dist/tests/units/cli/formatters/initSummary.test.js +45 -0
  29. package/dist/tests/units/cli/formatters/initSummary.test.js.map +1 -0
  30. package/dist/tests/units/cli/parseCliArgs.test.js +63 -0
  31. package/dist/tests/units/cli/parseCliArgs.test.js.map +1 -1
  32. package/dist/tests/units/shared/services/configDir.test.d.ts +2 -0
  33. package/dist/tests/units/shared/services/configDir.test.d.ts.map +1 -0
  34. package/dist/tests/units/shared/services/configDir.test.js +42 -0
  35. package/dist/tests/units/shared/services/configDir.test.js.map +1 -0
  36. package/dist/tests/units/shared/services/secretGenerator.test.d.ts +2 -0
  37. package/dist/tests/units/shared/services/secretGenerator.test.d.ts.map +1 -0
  38. package/dist/tests/units/shared/services/secretGenerator.test.js +46 -0
  39. package/dist/tests/units/shared/services/secretGenerator.test.js.map +1 -0
  40. package/dist/tests/units/usecases/cli/configureMcp.usecase.test.d.ts +2 -0
  41. package/dist/tests/units/usecases/cli/configureMcp.usecase.test.d.ts.map +1 -0
  42. package/dist/tests/units/usecases/cli/configureMcp.usecase.test.js +94 -0
  43. package/dist/tests/units/usecases/cli/configureMcp.usecase.test.js.map +1 -0
  44. package/dist/tests/units/usecases/cli/discoverRepositories.usecase.test.d.ts +2 -0
  45. package/dist/tests/units/usecases/cli/discoverRepositories.usecase.test.d.ts.map +1 -0
  46. package/dist/tests/units/usecases/cli/discoverRepositories.usecase.test.js +193 -0
  47. package/dist/tests/units/usecases/cli/discoverRepositories.usecase.test.js.map +1 -0
  48. package/dist/tests/units/usecases/cli/validateConfig.usecase.test.d.ts +2 -0
  49. package/dist/tests/units/usecases/cli/validateConfig.usecase.test.d.ts.map +1 -0
  50. package/dist/tests/units/usecases/cli/validateConfig.usecase.test.js +119 -0
  51. package/dist/tests/units/usecases/cli/validateConfig.usecase.test.js.map +1 -0
  52. package/dist/tests/units/usecases/cli/writeInitConfig.usecase.test.d.ts +2 -0
  53. package/dist/tests/units/usecases/cli/writeInitConfig.usecase.test.d.ts.map +1 -0
  54. package/dist/tests/units/usecases/cli/writeInitConfig.usecase.test.js +75 -0
  55. package/dist/tests/units/usecases/cli/writeInitConfig.usecase.test.js.map +1 -0
  56. package/dist/usecases/cli/configureMcp.usecase.d.ts +16 -0
  57. package/dist/usecases/cli/configureMcp.usecase.d.ts.map +1 -0
  58. package/dist/usecases/cli/configureMcp.usecase.js +36 -0
  59. package/dist/usecases/cli/configureMcp.usecase.js.map +1 -0
  60. package/dist/usecases/cli/discoverRepositories.usecase.d.ts +34 -0
  61. package/dist/usecases/cli/discoverRepositories.usecase.d.ts.map +1 -0
  62. package/dist/usecases/cli/discoverRepositories.usecase.js +67 -0
  63. package/dist/usecases/cli/discoverRepositories.usecase.js.map +1 -0
  64. package/dist/usecases/cli/validateConfig.usecase.d.ts +28 -0
  65. package/dist/usecases/cli/validateConfig.usecase.d.ts.map +1 -0
  66. package/dist/usecases/cli/validateConfig.usecase.js +74 -0
  67. package/dist/usecases/cli/validateConfig.usecase.js.map +1 -0
  68. package/dist/usecases/cli/writeInitConfig.usecase.d.ts +31 -0
  69. package/dist/usecases/cli/writeInitConfig.usecase.d.ts.map +1 -0
  70. package/dist/usecases/cli/writeInitConfig.usecase.js +37 -0
  71. package/dist/usecases/cli/writeInitConfig.usecase.js.map +1 -0
  72. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.2.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.1.1...reviewflow-v3.2.0) (2026-02-12)
9
+
10
+
11
+ ### Added
12
+
13
+ * **cli:** add interactive setup wizard and config validation ([5ca96b6](https://github.com/DGouron/review-flow/commit/5ca96b601be6cad015551aba0d383e6f5494989b))
14
+ * **cli:** add reviewflow init wizard and validate command ([41ee87b](https://github.com/DGouron/review-flow/commit/41ee87b924bd9e9a72517e736913950ac8d7d4bf))
15
+
16
+ ## [3.1.1](https://github.com/DGouron/review-flow/compare/reviewflow-v3.1.0...reviewflow-v3.1.1) (2026-02-11)
17
+
18
+
19
+ ### Fixed
20
+
21
+ * **cli:** resolve symlinks for global npm install detection ([5f70ee6](https://github.com/DGouron/review-flow/commit/5f70ee6763e24348aa9cfd07d78e0f0f33ab2c56))
22
+ * **cli:** resolve symlinks for global npm install detection ([8ed3b45](https://github.com/DGouron/review-flow/commit/8ed3b45fecf07ce69a9c6eb3dc6d46bd240de317))
23
+
8
24
  ## [3.1.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.0.1...reviewflow-v3.1.0) (2026-02-11)
9
25
 
10
26
 
package/README.md CHANGED
@@ -125,40 +125,65 @@ Review behavior is defined by [Claude Code skills](https://docs.anthropic.com/en
125
125
 
126
126
  ## Quick Start
127
127
 
128
- ### Install globally
128
+ ### 1. Install
129
129
 
130
130
  ```bash
131
131
  npm install -g reviewflow
132
- # or
133
- yarn global add reviewflow
134
132
  ```
135
133
 
136
- ### Or run directly with npx
134
+ ### 2. Initialize
137
135
 
138
136
  ```bash
139
- npx reviewflow --help
140
- npx reviewflow start
137
+ reviewflow init
141
138
  ```
142
139
 
143
- ### Configure & run
140
+ The interactive wizard will:
141
+ - Configure server port and usernames
142
+ - Generate webhook secrets
143
+ - Scan your filesystem for git repositories
144
+ - Set up MCP server integration with Claude Code
144
145
 
145
- ```bash
146
- # Configure
147
- cp .env.example .env
148
- cp config.example.json config.json
149
- # Edit config.json with your repositories
146
+ For non-interactive setup: `reviewflow init --yes`
147
+
148
+ ### 3. Start
150
149
 
151
- # Start the server
150
+ ```bash
152
151
  reviewflow start
153
152
  # Dashboard at http://localhost:3847
154
153
  ```
155
154
 
156
155
  Then [configure a webhook](https://dgouron.github.io/review-flow/guide/quick-start) on your GitLab/GitHub project pointing to your server.
157
156
 
157
+ ### Validate your setup
158
+
159
+ ```bash
160
+ reviewflow validate
161
+ ```
162
+
158
163
  For detailed setup, see the **[Quick Start Guide](https://dgouron.github.io/review-flow/guide/quick-start)**.
159
164
 
160
165
  ---
161
166
 
167
+ ## CLI Reference
168
+
169
+ | Command | Description |
170
+ |---------|-------------|
171
+ | `reviewflow init` | Interactive setup wizard |
172
+ | `reviewflow start` | Start the review server |
173
+ | `reviewflow stop` | Stop the running daemon |
174
+ | `reviewflow status` | Show server status |
175
+ | `reviewflow logs` | Show daemon logs |
176
+ | `reviewflow validate` | Validate configuration |
177
+
178
+ | Init Flag | Description |
179
+ |-----------|-------------|
180
+ | `-y, --yes` | Accept all defaults (non-interactive) |
181
+ | `--skip-mcp` | Skip MCP server configuration |
182
+ | `--show-secrets` | Display full webhook secrets |
183
+ | `--scan-path <path>` | Custom scan path (repeatable) |
184
+
185
+ ---
186
+
162
187
  ## Documentation
163
188
 
164
189
  | Topic | Link |
@@ -0,0 +1,11 @@
1
+ export interface InitSummaryInput {
2
+ configPath: string;
3
+ envPath: string;
4
+ port: number;
5
+ repositoryCount: number;
6
+ mcpStatus: 'configured' | 'already-configured' | 'claude-not-found' | 'skipped' | 'failed';
7
+ gitlabUsername: string;
8
+ githubUsername: string;
9
+ }
10
+ export declare function formatInitSummary(input: InitSummaryInput): string;
11
+ //# sourceMappingURL=initSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initSummary.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/initSummary.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,YAAY,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3F,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAiBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAoBjE"}
@@ -0,0 +1,35 @@
1
+ function mcpLine(status) {
2
+ switch (status) {
3
+ case 'configured':
4
+ return ' MCP server: configured';
5
+ case 'already-configured':
6
+ return ' MCP server: already configured';
7
+ case 'claude-not-found':
8
+ return ' MCP server: skipped (Claude CLI not found)';
9
+ case 'skipped':
10
+ return ' MCP server: skipped by user';
11
+ case 'failed':
12
+ return ' MCP server: configuration failed';
13
+ }
14
+ }
15
+ export function formatInitSummary(input) {
16
+ const lines = [
17
+ '',
18
+ 'ReviewFlow initialized successfully!',
19
+ '',
20
+ 'Configuration:',
21
+ ` Config file: ${input.configPath}`,
22
+ ` Env file: ${input.envPath}`,
23
+ ` Port: ${input.port}`,
24
+ ` Repositories: ${input.repositoryCount}`,
25
+ mcpLine(input.mcpStatus),
26
+ '',
27
+ 'Next steps:',
28
+ ' 1. Configure webhook secrets on your GitLab/GitHub projects',
29
+ ' 2. Start the server: reviewflow start',
30
+ ' 3. Check status: reviewflow validate',
31
+ '',
32
+ ];
33
+ return lines.join('\n');
34
+ }
35
+ //# sourceMappingURL=initSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initSummary.js","sourceRoot":"","sources":["../../../src/cli/formatters/initSummary.ts"],"names":[],"mappings":"AAUA,SAAS,OAAO,CAAC,MAAqC;IACpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,6BAA6B,CAAC;QACvC,KAAK,oBAAoB;YACvB,OAAO,qCAAqC,CAAC;QAC/C,KAAK,kBAAkB;YACrB,OAAO,iDAAiD,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,kCAAkC,CAAC;QAC5C,KAAK,QAAQ;YACX,OAAO,uCAAuC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,KAAK,GAAa;QACtB,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,gBAAgB;QAChB,oBAAoB,KAAK,CAAC,UAAU,EAAE;QACtC,oBAAoB,KAAK,CAAC,OAAO,EAAE;QACnC,oBAAoB,KAAK,CAAC,IAAI,EAAE;QAChC,oBAAoB,KAAK,CAAC,eAAe,EAAE;QAC3C,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QACxB,EAAE;QACF,aAAa;QACb,+DAA+D;QAC/D,yCAAyC;QACzC,4CAA4C;QAC5C,EAAE;KACH,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -18,13 +18,24 @@ interface LogsArgs {
18
18
  follow: boolean;
19
19
  lines: number;
20
20
  }
21
+ interface InitArgs {
22
+ command: 'init';
23
+ yes: boolean;
24
+ skipMcp: boolean;
25
+ showSecrets: boolean;
26
+ scanPaths: string[];
27
+ }
28
+ interface ValidateArgs {
29
+ command: 'validate';
30
+ fix: boolean;
31
+ }
21
32
  interface VersionArgs {
22
33
  command: 'version';
23
34
  }
24
35
  interface HelpArgs {
25
36
  command: 'help';
26
37
  }
27
- export type CliArgs = StartArgs | StopArgs | StatusArgs | LogsArgs | VersionArgs | HelpArgs;
38
+ export type CliArgs = StartArgs | StopArgs | StatusArgs | LogsArgs | InitArgs | ValidateArgs | VersionArgs | HelpArgs;
28
39
  export declare function parseCliArgs(args: string[]): CliArgs;
29
40
  export {};
30
41
  //# sourceMappingURL=parseCliArgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseCliArgs.d.ts","sourceRoot":"","sources":["../../src/cli/parseCliArgs.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AA4D5F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAqBpD"}
1
+ {"version":3,"file":"parseCliArgs.d.ts","sourceRoot":"","sources":["../../src/cli/parseCliArgs.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAuFtH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAyBpD"}
@@ -1,4 +1,4 @@
1
- const KNOWN_COMMANDS = ['start', 'stop', 'status', 'logs'];
1
+ const KNOWN_COMMANDS = ['start', 'stop', 'status', 'logs', 'init', 'validate'];
2
2
  function hasFlag(args, long, short) {
3
3
  return args.includes(long) || (short !== undefined && args.includes(short));
4
4
  }
@@ -47,6 +47,30 @@ function parseLogsArgs(args) {
47
47
  lines: linesValue !== undefined ? Number(linesValue) : 20,
48
48
  };
49
49
  }
50
+ function getAllFlagValues(args, long) {
51
+ const values = [];
52
+ for (let index = 0; index < args.length; index++) {
53
+ if (args[index] === long && args[index + 1] !== undefined) {
54
+ values.push(args[index + 1]);
55
+ }
56
+ }
57
+ return values;
58
+ }
59
+ function parseInitArgs(args) {
60
+ return {
61
+ command: 'init',
62
+ yes: hasFlag(args, '--yes', '-y'),
63
+ skipMcp: hasFlag(args, '--skip-mcp'),
64
+ showSecrets: hasFlag(args, '--show-secrets'),
65
+ scanPaths: getAllFlagValues(args, '--scan-path'),
66
+ };
67
+ }
68
+ function parseValidateArgs(args) {
69
+ return {
70
+ command: 'validate',
71
+ fix: hasFlag(args, '--fix'),
72
+ };
73
+ }
50
74
  export function parseCliArgs(args) {
51
75
  if (hasFlag(args, '--version', '-v')) {
52
76
  return { command: 'version' };
@@ -64,6 +88,10 @@ export function parseCliArgs(args) {
64
88
  return parseStatusArgs(args);
65
89
  case 'logs':
66
90
  return parseLogsArgs(args);
91
+ case 'init':
92
+ return parseInitArgs(args);
93
+ case 'validate':
94
+ return parseValidateArgs(args);
67
95
  }
68
96
  }
69
97
  //# sourceMappingURL=parseCliArgs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseCliArgs.js","sourceRoot":"","sources":["../../src/cli/parseCliArgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseCliArgs.js","sourceRoot":"","sources":["../../src/cli/parseCliArgs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"configLoader.d.ts","sourceRoot":"","sources":["../../../src/frameworks/config/configLoader.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAwKD,wBAAgB,UAAU,IAAI,MAAM,CAcnC;AAED,wBAAgB,cAAc,IAAI,UAAU,CAI3C;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAWzF;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAa7F"}
1
+ {"version":3,"file":"configLoader.d.ts","sourceRoot":"","sources":["../../../src/frameworks/config/configLoader.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAiLD,wBAAgB,UAAU,IAAI,MAAM,CAcnC;AAED,wBAAgB,cAAc,IAAI,UAAU,CAI3C;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAWzF;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAa7F"}
@@ -2,7 +2,15 @@ import { readFileSync, existsSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { join } from 'node:path';
4
4
  import { config as loadEnv } from 'dotenv';
5
- loadEnv();
5
+ import { getConfigDir } from '../../shared/services/configDir.js';
6
+ const configDir = getConfigDir();
7
+ const xdgEnvPath = join(configDir, '.env');
8
+ if (existsSync(xdgEnvPath)) {
9
+ loadEnv({ path: xdgEnvPath });
10
+ }
11
+ else {
12
+ loadEnv();
13
+ }
6
14
  function loadProjectConfig(localPath) {
7
15
  const configPath = join(localPath, '.claude', 'reviews', 'config.json');
8
16
  if (!existsSync(configPath)) {
@@ -142,12 +150,23 @@ function loadSecrets() {
142
150
  // Main loader
143
151
  let cachedConfig = null;
144
152
  let cachedSecrets = null;
153
+ function resolveConfigPath() {
154
+ if (process.env.CONFIG_PATH)
155
+ return process.env.CONFIG_PATH;
156
+ const cwdPath = join(process.cwd(), 'config.json');
157
+ if (existsSync(cwdPath))
158
+ return cwdPath;
159
+ const xdgPath = join(configDir, 'config.json');
160
+ if (existsSync(xdgPath))
161
+ return xdgPath;
162
+ return cwdPath;
163
+ }
145
164
  export function loadConfig() {
146
165
  if (cachedConfig)
147
166
  return cachedConfig;
148
- const configPath = process.env.CONFIG_PATH || join(process.cwd(), 'config.json');
167
+ const configPath = resolveConfigPath();
149
168
  if (!existsSync(configPath)) {
150
- throw new Error(`Fichier de configuration non trouvé : ${configPath}`);
169
+ throw new Error(`Configuration file not found: ${configPath}\nRun 'reviewflow init' to create one.`);
151
170
  }
152
171
  const rawContent = readFileSync(configPath, 'utf-8');
153
172
  const parsed = JSON.parse(rawContent);
@@ -1 +1 @@
1
- {"version":3,"file":"configLoader.js","sourceRoot":"","sources":["../../../src/frameworks/config/configLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configLoader.js","sourceRoot":"","sources":["../../../src/frameworks/config/configLoader.ts"],"names":[],"mappings":"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"}
@@ -40,4 +40,6 @@ export interface LogsDeps {
40
40
  exit: (code: number) => void;
41
41
  }
42
42
  export declare function executeLogs(follow: boolean, lines: number, deps: LogsDeps): void;
43
+ export declare function executeInit(yes: boolean, skipMcp: boolean, showSecrets: boolean, scanPaths: string[]): Promise<void>;
44
+ export declare function executeValidate(fix: boolean): void;
43
45
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/main/cli.ts"],"names":[],"mappings":";AAQA,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC1G,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACvG,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC1G,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAqDjG,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,eAAe,EAAE,uBAAuB,CAAC;IACzC,eAAe,EAAE,MAAM;QAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAkBD,wBAAgB,YAAY,CAC1B,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,iBAAiB,GACtB,IAAI,CA0CN;AAED,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,sBAAsB,CAAC;IACvC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAgBhE;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,uBAAuB,CAAC;IACzC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAmBnE;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,oBAAoB,CAAC;IACnC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAyBhF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/main/cli.ts"],"names":[],"mappings":";AAUA,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC1G,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACvG,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC1G,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAwEjG,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,eAAe,EAAE,uBAAuB,CAAC;IACzC,eAAe,EAAE,MAAM;QAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAkBD,wBAAgB,YAAY,CAC1B,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,iBAAiB,GACtB,IAAI,CA0CN;AAED,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,sBAAsB,CAAC;IACvC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAgBhE;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,uBAAuB,CAAC;IACzC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAmBnE;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,oBAAoB,CAAC;IACnC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAyBhF;AAuBD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Jf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA0ClD"}
package/dist/main/cli.js CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync } from 'node:fs';
2
+ import { readFileSync, realpathSync, existsSync, mkdirSync, writeFileSync, readdirSync, copyFileSync } from 'node:fs';
3
3
  import { join, dirname, resolve } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
+ import { execSync } from 'node:child_process';
6
+ import { homedir } from 'node:os';
5
7
  import { parseCliArgs } from '../cli/parseCliArgs.js';
6
- import { validateDependencies } from '../shared/services/dependencyChecker.js';
8
+ import { validateDependencies, checkDependency } from '../shared/services/dependencyChecker.js';
7
9
  import { startServer } from './server.js';
8
10
  import { StartDaemonUseCase } from '../usecases/cli/startDaemon.usecase.js';
9
11
  import { StopDaemonUseCase } from '../usecases/cli/stopDaemon.usecase.js';
@@ -18,6 +20,14 @@ import { green, red, yellow, dim, bold } from '../shared/services/ansiColors.js'
18
20
  import { formatStartupBanner } from '../cli/startupBanner.js';
19
21
  import { openInBrowser } from '../shared/services/browserOpener.js';
20
22
  import { loadConfig } from '../frameworks/config/configLoader.js';
23
+ import { getConfigDir } from '../shared/services/configDir.js';
24
+ import { generateWebhookSecret, truncateSecret } from '../shared/services/secretGenerator.js';
25
+ import { DiscoverRepositoriesUseCase } from '../usecases/cli/discoverRepositories.usecase.js';
26
+ import { ConfigureMcpUseCase } from '../usecases/cli/configureMcp.usecase.js';
27
+ import { WriteInitConfigUseCase } from '../usecases/cli/writeInitConfig.usecase.js';
28
+ import { ValidateConfigUseCase } from '../usecases/cli/validateConfig.usecase.js';
29
+ import { formatInitSummary } from '../cli/formatters/initSummary.js';
30
+ import { resolveMcpServerPath } from '../frameworks/claude/claudeInvoker.js';
21
31
  const currentDir = dirname(fileURLToPath(import.meta.url));
22
32
  function readVersion() {
23
33
  const packageJsonPath = join(currentDir, '..', '..', 'package.json');
@@ -31,10 +41,18 @@ Usage:
31
41
  reviewflow [command] [options]
32
42
 
33
43
  Commands:
44
+ init Interactive setup wizard
34
45
  start Start the review server (default)
35
46
  stop Stop the running daemon
36
47
  status Show server status
37
48
  logs Show daemon logs
49
+ validate Validate configuration
50
+
51
+ Init options:
52
+ -y, --yes Accept all defaults (non-interactive)
53
+ --skip-mcp Skip MCP server configuration
54
+ --show-secrets Display full webhook secrets
55
+ --scan-path <path> Custom scan path (repeatable)
38
56
 
39
57
  Start options:
40
58
  -d, --daemon Run as background daemon
@@ -52,6 +70,9 @@ Logs options:
52
70
  -f, --follow Follow log output (tail -f)
53
71
  -n, --lines <count> Number of lines to show (default: 20)
54
72
 
73
+ Validate options:
74
+ --fix Auto-fix correctable issues
75
+
55
76
  General options:
56
77
  -v, --version Show version
57
78
  -h, --help Show this help
@@ -168,6 +189,209 @@ export function executeLogs(follow, lines, deps) {
168
189
  break;
169
190
  }
170
191
  }
192
+ const DEFAULT_SCAN_PATHS = [
193
+ join(homedir(), 'Documents'),
194
+ join(homedir(), 'Projects'),
195
+ join(homedir(), 'Development'),
196
+ join(homedir(), 'dev'),
197
+ join(homedir(), 'repos'),
198
+ ];
199
+ function getGitRemoteUrl(localPath) {
200
+ try {
201
+ const result = execSync('git remote get-url origin', {
202
+ cwd: localPath,
203
+ encoding: 'utf-8',
204
+ timeout: 5000,
205
+ });
206
+ return result.trim().replace(/\.git$/, '');
207
+ }
208
+ catch {
209
+ return null;
210
+ }
211
+ }
212
+ export async function executeInit(yes, skipMcp, showSecrets, scanPaths) {
213
+ const configDir = getConfigDir();
214
+ const configPath = join(configDir, 'config.json');
215
+ if (existsSync(configPath) && !yes) {
216
+ const { confirm } = await import('@inquirer/prompts');
217
+ const overwrite = await confirm({
218
+ message: `Config already exists at ${configPath}. Overwrite?`,
219
+ default: false,
220
+ });
221
+ if (!overwrite) {
222
+ console.log(yellow('Init cancelled.'));
223
+ return;
224
+ }
225
+ }
226
+ let port = 3847;
227
+ let gitlabUsername = '';
228
+ let githubUsername = '';
229
+ if (yes) {
230
+ console.log(dim('Non-interactive mode: using defaults'));
231
+ }
232
+ else {
233
+ const { input, number: numberPrompt } = await import('@inquirer/prompts');
234
+ const portAnswer = await numberPrompt({
235
+ message: 'Server port:',
236
+ default: 3847,
237
+ validate: (value) => {
238
+ if (value === undefined || value < 1 || value > 65535)
239
+ return 'Port must be between 1 and 65535';
240
+ return true;
241
+ },
242
+ });
243
+ port = portAnswer ?? 3847;
244
+ gitlabUsername = await input({
245
+ message: 'GitLab username (optional):',
246
+ default: '',
247
+ });
248
+ githubUsername = await input({
249
+ message: 'GitHub username (optional):',
250
+ default: '',
251
+ });
252
+ }
253
+ const gitlabSecret = generateWebhookSecret();
254
+ const githubSecret = generateWebhookSecret();
255
+ console.log('');
256
+ console.log(bold('Webhook secrets generated:'));
257
+ if (showSecrets) {
258
+ console.log(` GitLab: ${gitlabSecret}`);
259
+ console.log(` GitHub: ${githubSecret}`);
260
+ }
261
+ else {
262
+ console.log(` GitLab: ${truncateSecret(gitlabSecret, 16)}`);
263
+ console.log(` GitHub: ${truncateSecret(githubSecret, 16)}`);
264
+ console.log(dim(' Use --show-secrets to display full values'));
265
+ }
266
+ const pathsToScan = scanPaths.length > 0 ? scanPaths : DEFAULT_SCAN_PATHS;
267
+ let selectedRepos = [];
268
+ const shouldScan = yes || (await (async () => {
269
+ const { confirm } = await import('@inquirer/prompts');
270
+ return confirm({ message: 'Scan for repositories?', default: true });
271
+ })());
272
+ if (shouldScan) {
273
+ console.log(dim('\nScanning for repositories...'));
274
+ const discoverer = new DiscoverRepositoriesUseCase({
275
+ existsSync,
276
+ readdirSync: (path) => readdirSync(path, { withFileTypes: true }).map(d => ({
277
+ name: d.name,
278
+ isDirectory: () => d.isDirectory(),
279
+ })),
280
+ getGitRemoteUrl,
281
+ });
282
+ const discovered = discoverer.execute({ scanPaths: pathsToScan, maxDepth: 3 });
283
+ console.log(` Found ${discovered.repositories.length} repositories`);
284
+ if (discovered.repositories.length > 0) {
285
+ if (yes) {
286
+ selectedRepos = discovered.repositories.map(r => ({
287
+ name: r.name,
288
+ localPath: r.localPath,
289
+ enabled: true,
290
+ }));
291
+ }
292
+ else {
293
+ const { checkbox } = await import('@inquirer/prompts');
294
+ const selected = await checkbox({
295
+ message: 'Select repositories to configure:',
296
+ choices: discovered.repositories.map(r => ({
297
+ name: `${r.name} ${dim(`(${r.localPath})`)}${r.hasReviewConfig ? green(' [configured]') : ''}`,
298
+ value: r,
299
+ checked: r.hasReviewConfig,
300
+ })),
301
+ });
302
+ selectedRepos = selected.map(r => ({
303
+ name: r.name,
304
+ localPath: r.localPath,
305
+ enabled: true,
306
+ }));
307
+ }
308
+ }
309
+ }
310
+ let mcpStatus = 'skipped';
311
+ if (!skipMcp) {
312
+ console.log(dim('\nConfiguring MCP server...'));
313
+ try {
314
+ const mcpUseCase = new ConfigureMcpUseCase({
315
+ isClaudeInstalled: () => checkDependency({ name: 'Claude', command: 'claude --version' }),
316
+ readFileSync: (path, encoding) => readFileSync(path, encoding),
317
+ writeFileSync,
318
+ existsSync,
319
+ copyFileSync,
320
+ resolveMcpServerPath: () => {
321
+ try {
322
+ return resolveMcpServerPath();
323
+ }
324
+ catch {
325
+ return join(dirname(fileURLToPath(import.meta.url)), '..', 'mcpServer.js');
326
+ }
327
+ },
328
+ settingsPath: join(homedir(), '.claude', 'settings.json'),
329
+ });
330
+ mcpStatus = mcpUseCase.execute();
331
+ }
332
+ catch {
333
+ mcpStatus = 'failed';
334
+ }
335
+ console.log(` MCP: ${mcpStatus}`);
336
+ }
337
+ const writer = new WriteInitConfigUseCase({ mkdirSync, writeFileSync });
338
+ const result = writer.execute({
339
+ configDir,
340
+ port,
341
+ gitlabUsername,
342
+ githubUsername,
343
+ repositories: selectedRepos,
344
+ gitlabWebhookSecret: gitlabSecret,
345
+ githubWebhookSecret: githubSecret,
346
+ });
347
+ const summary = formatInitSummary({
348
+ configPath: result.configPath,
349
+ envPath: result.envPath,
350
+ port,
351
+ repositoryCount: selectedRepos.length,
352
+ mcpStatus,
353
+ gitlabUsername,
354
+ githubUsername,
355
+ });
356
+ console.log(green(summary));
357
+ }
358
+ export function executeValidate(fix) {
359
+ const configDir = getConfigDir();
360
+ const configPath = join(configDir, 'config.json');
361
+ const envPath = join(configDir, '.env');
362
+ const cwdConfigPath = join(process.cwd(), 'config.json');
363
+ const resolvedConfigPath = existsSync(cwdConfigPath) ? cwdConfigPath : configPath;
364
+ const resolvedEnvPath = existsSync(join(process.cwd(), '.env')) ? join(process.cwd(), '.env') : envPath;
365
+ const validator = new ValidateConfigUseCase({
366
+ existsSync,
367
+ readFileSync: (path, encoding) => readFileSync(path, encoding),
368
+ });
369
+ const result = validator.execute({ configPath: resolvedConfigPath, envPath: resolvedEnvPath });
370
+ switch (result.status) {
371
+ case 'not-found':
372
+ console.log(red('No configuration found.'));
373
+ console.log(dim(`Looked in: ${resolvedConfigPath}`));
374
+ console.log(`Run ${bold('reviewflow init')} to create one.`);
375
+ process.exit(1);
376
+ break;
377
+ case 'valid':
378
+ console.log(green(bold('Configuration is valid!')));
379
+ console.log(dim(` Config: ${resolvedConfigPath}`));
380
+ console.log(dim(` Env: ${resolvedEnvPath}`));
381
+ break;
382
+ case 'invalid':
383
+ console.log(red(bold('Configuration has issues:')));
384
+ for (const issue of result.issues) {
385
+ const prefix = issue.severity === 'error' ? red('ERROR') : yellow('WARN');
386
+ console.log(` ${prefix} [${issue.field}]: ${issue.message}`);
387
+ }
388
+ if (fix) {
389
+ console.log(dim('\n--fix flag detected, but no auto-fixable issues implemented yet.'));
390
+ }
391
+ process.exit(1);
392
+ break;
393
+ }
394
+ }
171
395
  function createPidFileDeps() {
172
396
  return {
173
397
  readPidFile: () => readPidFile(PID_FILE_PATH),
@@ -177,7 +401,7 @@ function createPidFileDeps() {
177
401
  };
178
402
  }
179
403
  const isDirectlyExecuted = process.argv[1] &&
180
- resolve(process.argv[1]) === fileURLToPath(import.meta.url);
404
+ realpathSync(resolve(process.argv[1])) === fileURLToPath(import.meta.url);
181
405
  if (isDirectlyExecuted) {
182
406
  const args = parseCliArgs(process.argv.slice(2));
183
407
  switch (args.command) {
@@ -247,6 +471,12 @@ if (isDirectlyExecuted) {
247
471
  exit: process.exit,
248
472
  });
249
473
  break;
474
+ case 'init':
475
+ executeInit(args.yes, args.skipMcp, args.showSecrets, args.scanPaths);
476
+ break;
477
+ case 'validate':
478
+ executeValidate(args.fix);
479
+ break;
250
480
  }
251
481
  }
252
482
  //# sourceMappingURL=cli.js.map