@kodus/cli 0.0.12 → 0.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 (151) hide show
  1. package/README.md +387 -0
  2. package/dist/cli.d.ts +4 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +26 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/auth/index.d.ts +3 -0
  7. package/dist/commands/auth/index.d.ts.map +1 -0
  8. package/dist/commands/auth/index.js +36 -0
  9. package/dist/commands/auth/index.js.map +1 -0
  10. package/dist/commands/auth/login.d.ts +7 -0
  11. package/dist/commands/auth/login.d.ts.map +1 -0
  12. package/dist/commands/auth/login.js +97 -0
  13. package/dist/commands/auth/login.js.map +1 -0
  14. package/dist/commands/auth/logout.d.ts +2 -0
  15. package/dist/commands/auth/logout.d.ts.map +1 -0
  16. package/dist/commands/auth/logout.js +24 -0
  17. package/dist/commands/auth/logout.js.map +1 -0
  18. package/dist/commands/auth/signup.d.ts +2 -0
  19. package/dist/commands/auth/signup.d.ts.map +1 -0
  20. package/dist/commands/auth/signup.js +74 -0
  21. package/dist/commands/auth/signup.js.map +1 -0
  22. package/dist/commands/auth/status.d.ts +2 -0
  23. package/dist/commands/auth/status.d.ts.map +1 -0
  24. package/dist/commands/auth/status.js +91 -0
  25. package/dist/commands/auth/status.js.map +1 -0
  26. package/dist/commands/auth/team-key.d.ts +5 -0
  27. package/dist/commands/auth/team-key.d.ts.map +1 -0
  28. package/dist/commands/auth/team-key.js +59 -0
  29. package/dist/commands/auth/team-key.js.map +1 -0
  30. package/dist/commands/auth/token.d.ts +2 -0
  31. package/dist/commands/auth/token.d.ts.map +1 -0
  32. package/dist/commands/auth/token.js +31 -0
  33. package/dist/commands/auth/token.js.map +1 -0
  34. package/dist/commands/config.d.ts +3 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +47 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/pr.d.ts +3 -0
  39. package/dist/commands/pr.d.ts.map +1 -0
  40. package/dist/commands/pr.js +75 -0
  41. package/dist/commands/pr.js.map +1 -0
  42. package/dist/commands/review.d.ts +3 -0
  43. package/dist/commands/review.d.ts.map +1 -0
  44. package/dist/commands/review.js +245 -0
  45. package/dist/commands/review.js.map +1 -0
  46. package/dist/commands/telemetry.d.ts +3 -0
  47. package/dist/commands/telemetry.d.ts.map +1 -0
  48. package/dist/commands/telemetry.js +76 -0
  49. package/dist/commands/telemetry.js.map +1 -0
  50. package/dist/commands/upgrade.d.ts +3 -0
  51. package/dist/commands/upgrade.d.ts.map +1 -0
  52. package/dist/commands/upgrade.js +35 -0
  53. package/dist/commands/upgrade.js.map +1 -0
  54. package/dist/constants.d.ts +3 -0
  55. package/dist/constants.d.ts.map +1 -0
  56. package/dist/constants.js +3 -0
  57. package/dist/constants.js.map +1 -0
  58. package/dist/formatters/json.d.ts +7 -0
  59. package/dist/formatters/json.d.ts.map +1 -0
  60. package/dist/formatters/json.js +7 -0
  61. package/dist/formatters/json.js.map +1 -0
  62. package/dist/formatters/markdown.d.ts +7 -0
  63. package/dist/formatters/markdown.d.ts.map +1 -0
  64. package/dist/formatters/markdown.js +93 -0
  65. package/dist/formatters/markdown.js.map +1 -0
  66. package/dist/formatters/prompt.d.ts +12 -0
  67. package/dist/formatters/prompt.d.ts.map +1 -0
  68. package/dist/formatters/prompt.js +90 -0
  69. package/dist/formatters/prompt.js.map +1 -0
  70. package/dist/formatters/terminal.d.ts +7 -0
  71. package/dist/formatters/terminal.d.ts.map +1 -0
  72. package/dist/formatters/terminal.js +127 -0
  73. package/dist/formatters/terminal.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/services/api/api.interface.d.ts +46 -0
  79. package/dist/services/api/api.interface.d.ts.map +1 -0
  80. package/dist/services/api/api.interface.js +2 -0
  81. package/dist/services/api/api.interface.js.map +1 -0
  82. package/dist/services/api/api.mock.d.ts +8 -0
  83. package/dist/services/api/api.mock.d.ts.map +1 -0
  84. package/dist/services/api/api.mock.js +249 -0
  85. package/dist/services/api/api.mock.js.map +1 -0
  86. package/dist/services/api/api.real.d.ts +8 -0
  87. package/dist/services/api/api.real.d.ts.map +1 -0
  88. package/dist/services/api/api.real.js +253 -0
  89. package/dist/services/api/api.real.js.map +1 -0
  90. package/dist/services/api/index.d.ts +4 -0
  91. package/dist/services/api/index.d.ts.map +1 -0
  92. package/dist/services/api/index.js +9 -0
  93. package/dist/services/api/index.js.map +1 -0
  94. package/dist/services/auth.service.d.ts +19 -0
  95. package/dist/services/auth.service.d.ts.map +1 -0
  96. package/dist/services/auth.service.js +90 -0
  97. package/dist/services/auth.service.js.map +1 -0
  98. package/dist/services/context.service.d.ts +22 -0
  99. package/dist/services/context.service.d.ts.map +1 -0
  100. package/dist/services/context.service.js +104 -0
  101. package/dist/services/context.service.js.map +1 -0
  102. package/dist/services/fix.service.d.ts +31 -0
  103. package/dist/services/fix.service.d.ts.map +1 -0
  104. package/dist/services/fix.service.js +120 -0
  105. package/dist/services/fix.service.js.map +1 -0
  106. package/dist/services/git.service.d.ts +32 -0
  107. package/dist/services/git.service.d.ts.map +1 -0
  108. package/dist/services/git.service.js +261 -0
  109. package/dist/services/git.service.js.map +1 -0
  110. package/dist/services/review.service.d.ts +26 -0
  111. package/dist/services/review.service.d.ts.map +1 -0
  112. package/dist/services/review.service.js +82 -0
  113. package/dist/services/review.service.js.map +1 -0
  114. package/dist/services/telemetry.service.d.ts +73 -0
  115. package/dist/services/telemetry.service.d.ts.map +1 -0
  116. package/dist/services/telemetry.service.js +229 -0
  117. package/dist/services/telemetry.service.js.map +1 -0
  118. package/dist/types/index.d.ts +143 -0
  119. package/dist/types/index.d.ts.map +1 -0
  120. package/dist/types/index.js +15 -0
  121. package/dist/types/index.js.map +1 -0
  122. package/dist/ui/interactive.d.ts +26 -0
  123. package/dist/ui/interactive.d.ts.map +1 -0
  124. package/dist/ui/interactive.js +365 -0
  125. package/dist/ui/interactive.js.map +1 -0
  126. package/dist/utils/config.d.ts +10 -0
  127. package/dist/utils/config.d.ts.map +1 -0
  128. package/dist/utils/config.js +54 -0
  129. package/dist/utils/config.js.map +1 -0
  130. package/dist/utils/credentials.d.ts +6 -0
  131. package/dist/utils/credentials.d.ts.map +1 -0
  132. package/dist/utils/credentials.js +54 -0
  133. package/dist/utils/credentials.js.map +1 -0
  134. package/dist/utils/rate-limit.d.ts +5 -0
  135. package/dist/utils/rate-limit.d.ts.map +1 -0
  136. package/dist/utils/rate-limit.js +47 -0
  137. package/dist/utils/rate-limit.js.map +1 -0
  138. package/dist/utils/review-loading.d.ts +19 -0
  139. package/dist/utils/review-loading.d.ts.map +1 -0
  140. package/dist/utils/review-loading.js +140 -0
  141. package/dist/utils/review-loading.js.map +1 -0
  142. package/package.json +39 -33
  143. package/index.js +0 -15
  144. package/license.md +0 -21
  145. package/readme.md +0 -128
  146. package/scripts/setup-db.sh +0 -77
  147. package/src/commands/install.js +0 -357
  148. package/src/config/default.js +0 -66
  149. package/src/utils/helpers.js +0 -128
  150. package/templates/.env.example +0 -142
  151. package/templates/docker-compose.yml +0 -139
@@ -0,0 +1,74 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { authService } from '../../services/auth.service.js';
5
+ import { telemetryService } from '../../services/telemetry.service.js';
6
+ export async function signupAction() {
7
+ const spinner = ora();
8
+ try {
9
+ console.log(chalk.bold('\nCreate your Kodus account\n'));
10
+ const answers = await inquirer.prompt([
11
+ {
12
+ type: 'input',
13
+ name: 'email',
14
+ message: 'Email:',
15
+ validate: (input) => {
16
+ if (!input || !input.includes('@')) {
17
+ return 'Please enter a valid email';
18
+ }
19
+ return true;
20
+ },
21
+ },
22
+ {
23
+ type: 'password',
24
+ name: 'password',
25
+ message: 'Password:',
26
+ mask: '*',
27
+ validate: (input) => {
28
+ if (!input || input.length < 6) {
29
+ return 'Password must be at least 6 characters';
30
+ }
31
+ return true;
32
+ },
33
+ },
34
+ {
35
+ type: 'password',
36
+ name: 'confirmPassword',
37
+ message: 'Confirm password:',
38
+ mask: '*',
39
+ validate: (input, allAnswers) => {
40
+ if (input !== allAnswers?.password) {
41
+ return 'Passwords do not match';
42
+ }
43
+ return true;
44
+ },
45
+ },
46
+ ]);
47
+ spinner.start(chalk.blue('Creating account...'));
48
+ await authService.signup(answers.email, answers.password);
49
+ spinner.succeed(chalk.green('Account created!'));
50
+ console.log(chalk.dim('\nPlease check your email to verify your account.'));
51
+ // Track successful signup
52
+ telemetryService.track('auth_signup_success');
53
+ }
54
+ catch (error) {
55
+ spinner.fail(chalk.red('Signup failed'));
56
+ // Track failed signup
57
+ try {
58
+ await telemetryService.track('auth_signup_failed', {
59
+ error: error instanceof Error ? error.message : 'Unknown error',
60
+ });
61
+ }
62
+ catch (telemetryError) {
63
+ // Silently ignore telemetry errors to not hide the original error
64
+ if (process.env.KODUS_VERBOSE) {
65
+ console.log(chalk.dim('Debug - Telemetry failed'));
66
+ }
67
+ }
68
+ if (error instanceof Error) {
69
+ console.error(chalk.red(error.message));
70
+ }
71
+ process.exit(1);
72
+ }
73
+ }
74
+ //# sourceMappingURL=signup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/commands/auth/signup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function statusAction(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgGlD"}
@@ -0,0 +1,91 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { authService } from '../../services/auth.service.js';
4
+ import { loadConfig } from '../../utils/config.js';
5
+ import { checkTrialStatus } from '../../utils/rate-limit.js';
6
+ export async function statusAction() {
7
+ const spinner = ora();
8
+ try {
9
+ const isAuthenticated = await authService.isAuthenticated();
10
+ if (isAuthenticated) {
11
+ const credentials = await authService.getCredentials();
12
+ const teamConfig = await loadConfig();
13
+ const hasTeamKey = !!teamConfig?.teamKey;
14
+ const hasUserEmail = !!credentials?.user?.email;
15
+ if (!hasUserEmail && hasTeamKey) {
16
+ console.log(chalk.bold('\nAuthentication Status\n'));
17
+ console.log(`${chalk.dim('Mode:')} ${chalk.green('Team Key')}`);
18
+ console.log(`${chalk.dim('Organization:')} ${teamConfig?.organizationName ?? '(unknown)'}`);
19
+ console.log(`${chalk.dim('Team:')} ${teamConfig?.teamName ?? '(unknown)'}`);
20
+ console.log(`${chalk.dim('Token:')} ${chalk.green('Configured')}`);
21
+ if (process.env.KODUS_VERBOSE) {
22
+ console.log(chalk.dim('\nDebug - team config:'));
23
+ console.log(chalk.dim(JSON.stringify(teamConfig, null, 2)));
24
+ }
25
+ return;
26
+ }
27
+ if (!credentials) {
28
+ console.log(chalk.yellow('\nNo credentials found.'));
29
+ return;
30
+ }
31
+ console.log(chalk.bold('\nAuthentication Status\n'));
32
+ console.log(`${chalk.dim('Mode:')} ${chalk.green('Logged In')}`);
33
+ console.log(`${chalk.dim('Email:')} ${credentials.user?.email ?? '(unknown)'}`);
34
+ const expiresAt = new Date(credentials.expiresAt);
35
+ const timeUntilExpiry = expiresAt.getTime() - Date.now();
36
+ const hoursUntilExpiry = Math.floor(timeUntilExpiry / (1000 * 60 * 60));
37
+ if (timeUntilExpiry > 0) {
38
+ if (hoursUntilExpiry < 1) {
39
+ console.log(`${chalk.dim('Token:')} ${chalk.yellow('Expires in < 1 hour')}`);
40
+ }
41
+ else if (hoursUntilExpiry < 24) {
42
+ console.log(`${chalk.dim('Token:')} ${chalk.yellow(`Expires in ${hoursUntilExpiry} hours`)}`);
43
+ }
44
+ else {
45
+ console.log(`${chalk.dim('Token:')} ${chalk.green('Valid')}`);
46
+ }
47
+ }
48
+ else {
49
+ console.log(`${chalk.dim('Token:')} ${chalk.red('Expired')}`);
50
+ console.log(chalk.yellow('\nYour session has expired. Run `kodus auth login` to refresh.'));
51
+ return;
52
+ }
53
+ if (credentials.user?.orgs && credentials.user.orgs.length > 0) {
54
+ console.log(`${chalk.dim('Organizations:')}`);
55
+ credentials.user.orgs.forEach((org) => {
56
+ console.log(` ${chalk.dim('•')} ${org}`);
57
+ });
58
+ }
59
+ if (process.env.KODUS_VERBOSE) {
60
+ console.log(chalk.dim('\nDebug - stored credentials:'));
61
+ console.log(chalk.dim(JSON.stringify(credentials, null, 2)));
62
+ if (teamConfig) {
63
+ console.log(chalk.dim('\nDebug - team config:'));
64
+ console.log(chalk.dim(JSON.stringify(teamConfig, null, 2)));
65
+ }
66
+ }
67
+ }
68
+ else {
69
+ spinner.start(chalk.blue('Checking trial status...'));
70
+ const trialStatus = await checkTrialStatus();
71
+ spinner.stop();
72
+ console.log(chalk.bold('\nAuthentication Status\n'));
73
+ console.log(`${chalk.dim('Mode:')} ${chalk.yellow('Trial')}`);
74
+ console.log(`${chalk.dim('Reviews today:')} ${trialStatus.reviewsUsed}/${trialStatus.reviewsLimit}`);
75
+ console.log(`${chalk.dim('Files limit:')} ${trialStatus.filesLimit} per review`);
76
+ console.log(`${chalk.dim('Resets at:')} ${new Date(trialStatus.resetsAt).toLocaleString()}`);
77
+ if (trialStatus.isLimited) {
78
+ console.log(chalk.yellow('\n⚡ Daily limit reached!'));
79
+ }
80
+ console.log(chalk.dim('\nSign up to remove limits: ') + chalk.cyan('kodus auth signup'));
81
+ }
82
+ }
83
+ catch (error) {
84
+ spinner.fail(chalk.red('Failed to get status'));
85
+ if (error instanceof Error) {
86
+ console.error(chalk.red(error.message));
87
+ }
88
+ process.exit(1);
89
+ }
90
+ }
91
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function teamKeyAction(options: {
2
+ key?: string;
3
+ }): Promise<void>;
4
+ export declare function teamStatusAction(): Promise<void>;
5
+ //# sourceMappingURL=team-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-key.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/team-key.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD5E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAatD"}
@@ -0,0 +1,59 @@
1
+ import chalk from 'chalk';
2
+ import { loadConfig, saveConfig } from '../../utils/config.js';
3
+ import { API_URL } from '../../constants.js';
4
+ export async function teamKeyAction(options) {
5
+ if (!options.key) {
6
+ console.error(chalk.red('Error: --key is required'));
7
+ console.log('\nGet your team key from: https://app.kodus.io/settings/cli');
8
+ process.exit(1);
9
+ }
10
+ if (!options.key.startsWith('kodus_')) {
11
+ console.error(chalk.red('Error: Invalid key format. Key should start with "kodus_"'));
12
+ process.exit(1);
13
+ }
14
+ try {
15
+ const response = await fetch(`${API_URL}/cli/validate-key`, {
16
+ headers: { 'X-Team-Key': options.key }
17
+ });
18
+ if (!response.ok) {
19
+ const error = await response.json();
20
+ throw new Error(error.message || 'Invalid team key');
21
+ }
22
+ const rawData = await response.json().catch(() => ({}));
23
+ const payload = rawData && typeof rawData === 'object' && 'data' in rawData ? rawData.data : rawData;
24
+ const teamName = payload?.team?.name ?? payload?.teamName;
25
+ const organizationName = payload?.organization?.name ?? payload?.organizationName ?? payload?.org?.name;
26
+ if (!teamName || !organizationName) {
27
+ throw new Error('Invalid response from server. Missing organization or team info.');
28
+ }
29
+ await saveConfig({
30
+ teamKey: options.key,
31
+ teamName,
32
+ organizationName,
33
+ });
34
+ console.log(chalk.green('✓ Authenticated successfully!'));
35
+ console.log(chalk.cyan(` Organization: ${organizationName}`));
36
+ console.log(chalk.cyan(` Team: ${teamName}`));
37
+ }
38
+ catch (error) {
39
+ console.error(chalk.red('✗ Authentication failed:'), error instanceof Error ? error.message : 'Unknown error');
40
+ console.log('\nMake sure:');
41
+ console.log(' 1. Your key is correct');
42
+ console.log(' 2. The key has not been revoked');
43
+ console.log(' 3. You have internet connection');
44
+ process.exit(1);
45
+ }
46
+ }
47
+ export async function teamStatusAction() {
48
+ const config = await loadConfig();
49
+ if (!config) {
50
+ console.log(chalk.yellow('Not authenticated with team key'));
51
+ console.log('\nRun: kodus auth team-key --key <your-key>');
52
+ console.log('Get your key from: https://app.kodus.io/settings/cli');
53
+ return;
54
+ }
55
+ console.log(chalk.green('✓ Authenticated'));
56
+ console.log(chalk.cyan(` Organization: ${config.organizationName}`));
57
+ console.log(chalk.cyan(` Team: ${config.teamName}`));
58
+ }
59
+ //# sourceMappingURL=team-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-key.js","sourceRoot":"","sources":["../../../src/commands/auth/team-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function tokenAction(): Promise<void>;
2
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/token.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD"}
@@ -0,0 +1,31 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { authService } from '../../services/auth.service.js';
4
+ export async function tokenAction() {
5
+ const spinner = ora();
6
+ try {
7
+ const isAuthenticated = await authService.isAuthenticated();
8
+ if (!isAuthenticated) {
9
+ console.log(chalk.yellow('\nYou need to be logged in to generate a token.'));
10
+ console.log(chalk.dim('Run `kodus auth login` first.'));
11
+ return;
12
+ }
13
+ spinner.start(chalk.blue('Generating token...'));
14
+ const token = await authService.generateCIToken();
15
+ spinner.succeed(chalk.green('Token generated!'));
16
+ console.log(chalk.bold('\nCI/CD Token\n'));
17
+ console.log(chalk.dim('Use this token in your CI/CD pipelines:'));
18
+ console.log(chalk.cyan(`\n${token}\n`));
19
+ console.log(chalk.dim('Set as environment variable:'));
20
+ console.log(chalk.dim(' export KODUS_TOKEN=<token>'));
21
+ console.log(chalk.yellow('\n⚠️ Keep this token secret! It provides access to your account.'));
22
+ }
23
+ catch (error) {
24
+ spinner.fail(chalk.red('Failed to generate token'));
25
+ if (error instanceof Error) {
26
+ console.error(chalk.red(error.message));
27
+ }
28
+ process.exit(1);
29
+ }
30
+ }
31
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/commands/auth/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QAE5D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QAElD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mEAAmE,CAAC,CAAC,CAAC;IAEjG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SAgDtB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { authService } from '../services/auth.service.js';
5
+ import { reviewService } from '../services/review.service.js';
6
+ export const configCommand = new Command('config')
7
+ .description('Show active configuration from platform')
8
+ .action(async (_opts, cmd) => {
9
+ const globalOpts = cmd.optsWithGlobals();
10
+ const spinner = ora();
11
+ try {
12
+ const isAuthenticated = await authService.isAuthenticated();
13
+ if (!isAuthenticated) {
14
+ console.log(chalk.yellow('Not logged in. Using default configuration.'));
15
+ console.log(chalk.dim('Run `kodus auth login` to access your organization settings.'));
16
+ return;
17
+ }
18
+ spinner.start(chalk.blue('Fetching configuration...'));
19
+ const config = await reviewService.getConfig(globalOpts.org, globalOpts.repo);
20
+ spinner.stop();
21
+ console.log(chalk.bold('\nActive Configuration\n'));
22
+ console.log(`${chalk.dim('Organization:')} ${globalOpts.org || chalk.dim('(auto-detected)')}`);
23
+ console.log(`${chalk.dim('Repository:')} ${globalOpts.repo || chalk.dim('(auto-detected)')}`);
24
+ console.log(`${chalk.dim('Language:')} ${config.language}`);
25
+ console.log(`${chalk.dim('Severity:')} ${config.severity}`);
26
+ console.log(`${chalk.dim('LLM Provider:')} ${config.llmProvider === 'byok' ? 'Your API Key (BYOK)' : 'Kodus'}`);
27
+ console.log(chalk.dim('\nRules:'));
28
+ Object.entries(config.rules).forEach(([rule, enabled]) => {
29
+ const status = enabled ? chalk.green('✓') : chalk.dim('✗');
30
+ console.log(` ${status} ${rule}`);
31
+ });
32
+ if (config.ignore.length > 0) {
33
+ console.log(chalk.dim('\nIgnored patterns:'));
34
+ config.ignore.forEach((pattern) => {
35
+ console.log(` ${chalk.dim('•')} ${pattern}`);
36
+ });
37
+ }
38
+ }
39
+ catch (error) {
40
+ spinner.fail(chalk.red('Failed to fetch configuration'));
41
+ if (error instanceof Error) {
42
+ console.error(chalk.red(error.message));
43
+ }
44
+ process.exit(1);
45
+ }
46
+ });
47
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const prCommand: Command;
3
+ //# sourceMappingURL=pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,SAAS,SACiB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import fs from 'fs/promises';
5
+ import { reviewService } from '../services/review.service.js';
6
+ import { terminalFormatter } from '../formatters/terminal.js';
7
+ import { jsonFormatter } from '../formatters/json.js';
8
+ import { markdownFormatter } from '../formatters/markdown.js';
9
+ import { promptFormatter } from '../formatters/prompt.js';
10
+ export const prCommand = new Command('pr')
11
+ .description('Pull request commands');
12
+ prCommand
13
+ .command('suggestions')
14
+ .description('Fetch suggestions for a pull request')
15
+ .option('--pr-url <url>', 'Pull request URL')
16
+ .option('--pr-number <number>', 'Pull request number')
17
+ .option('--repo-id <id>', 'Repository ID for the pull request')
18
+ .option('--severity <list>', 'Comma-separated severities to include')
19
+ .option('--category <list>', 'Comma-separated categories to include')
20
+ .action(async (options, cmd) => {
21
+ const globalOpts = cmd.optsWithGlobals();
22
+ const spinner = ora();
23
+ try {
24
+ const prNumber = options.prNumber !== undefined ? Number(options.prNumber) : undefined;
25
+ if (options.prNumber !== undefined && Number.isNaN(prNumber)) {
26
+ throw new Error('Invalid --pr-number value');
27
+ }
28
+ if (!options.prUrl && !(prNumber && options.repoId)) {
29
+ console.error(chalk.red('Provide --pr-url or both --pr-number and --repo-id.'));
30
+ process.exit(1);
31
+ }
32
+ const shouldRequestMarkdown = globalOpts.format === 'prompt' || globalOpts.format === 'markdown';
33
+ spinner.start(chalk.cyan('Fetching pull request suggestions...'));
34
+ const { result, markdown } = await reviewService.getPullRequestSuggestions({
35
+ prUrl: options.prUrl,
36
+ prNumber,
37
+ repositoryId: options.repoId,
38
+ format: shouldRequestMarkdown ? 'markdown' : undefined,
39
+ severity: options.severity,
40
+ category: options.category,
41
+ });
42
+ spinner.succeed(chalk.green('Suggestions fetched'));
43
+ const output = markdown && shouldRequestMarkdown
44
+ ? markdown
45
+ : formatOutput(result, globalOpts.format);
46
+ if (globalOpts.output) {
47
+ await fs.writeFile(globalOpts.output, output, 'utf-8');
48
+ console.log(chalk.green(`\nOutput saved to ${globalOpts.output}`));
49
+ }
50
+ else {
51
+ console.log(output);
52
+ }
53
+ }
54
+ catch (error) {
55
+ spinner.fail(chalk.red('Failed to fetch pull request suggestions'));
56
+ if (error instanceof Error) {
57
+ console.error(chalk.red(error.message));
58
+ }
59
+ process.exit(1);
60
+ }
61
+ });
62
+ function formatOutput(result, format) {
63
+ switch (format) {
64
+ case 'json':
65
+ return jsonFormatter.format(result);
66
+ case 'markdown':
67
+ return markdownFormatter.format(result);
68
+ case 'prompt':
69
+ return promptFormatter.format(result);
70
+ case 'terminal':
71
+ default:
72
+ return terminalFormatter.format(result);
73
+ }
74
+ }
75
+ //# sourceMappingURL=pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAExC,SAAS;KACN,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;KAC5C,MAAM,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;KACvD,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,OAAqG,EAAE,GAAY,EAAE,EAAE;IAElI,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC;QAEjG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAElE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC,yBAAyB,CAAC;YACzE,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ;YACR,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,QAAQ,IAAI,qBAAqB;YAC9C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAEpE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,SAAS,YAAY,CAAC,MAAoB,EAAE,MAAoB;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const reviewCommand: Command;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,aAAa,SA2OtB,CAAC"}