@kodus/cli 0.1.7 → 0.1.8
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/README.md +0 -45
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/hook.test.d.ts +2 -0
- package/dist/commands/__tests__/hook.test.d.ts.map +1 -0
- package/dist/commands/__tests__/hook.test.js +105 -0
- package/dist/commands/__tests__/hook.test.js.map +1 -0
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +0 -13
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +1 -13
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/hook/index.d.ts +3 -0
- package/dist/commands/hook/index.d.ts.map +1 -0
- package/dist/commands/hook/index.js +23 -0
- package/dist/commands/hook/index.js.map +1 -0
- package/dist/commands/hook/install.d.ts +9 -0
- package/dist/commands/hook/install.d.ts.map +1 -0
- package/dist/commands/hook/install.js +84 -0
- package/dist/commands/hook/install.js.map +1 -0
- package/dist/commands/hook/status.d.ts +2 -0
- package/dist/commands/hook/status.d.ts.map +1 -0
- package/dist/commands/hook/status.js +34 -0
- package/dist/commands/hook/status.js.map +1 -0
- package/dist/commands/hook/uninstall.d.ts +2 -0
- package/dist/commands/hook/uninstall.d.ts.map +1 -0
- package/dist/commands/hook/uninstall.js +29 -0
- package/dist/commands/hook/uninstall.js.map +1 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +10 -0
- package/dist/commands/review.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -1
- package/dist/constants.js.map +1 -1
- package/dist/services/__tests__/auth.service.test.d.ts +2 -0
- package/dist/services/__tests__/auth.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/auth.service.test.js +167 -0
- package/dist/services/__tests__/auth.service.test.js.map +1 -0
- package/dist/services/__tests__/git.service.test.d.ts +2 -0
- package/dist/services/__tests__/git.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/git.service.test.js +61 -0
- package/dist/services/__tests__/git.service.test.js.map +1 -0
- package/dist/services/__tests__/review.service.test.d.ts +2 -0
- package/dist/services/__tests__/review.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/review.service.test.js +132 -0
- package/dist/services/__tests__/review.service.test.js.map +1 -0
- package/dist/services/api/api.interface.d.ts +0 -1
- package/dist/services/api/api.interface.d.ts.map +1 -1
- package/dist/services/api/api.real.d.ts.map +1 -1
- package/dist/services/api/api.real.js +58 -21
- package/dist/services/api/api.real.js.map +1 -1
- package/dist/services/auth.service.d.ts +1 -2
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +1 -4
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/git.service.d.ts +1 -1
- package/dist/services/git.service.d.ts.map +1 -1
- package/dist/services/git.service.js.map +1 -1
- package/dist/services/review.service.d.ts +5 -5
- package/dist/services/review.service.d.ts.map +1 -1
- package/dist/services/review.service.js.map +1 -1
- package/dist/utils/__tests__/update-check.test.d.ts +2 -0
- package/dist/utils/__tests__/update-check.test.d.ts.map +1 -0
- package/dist/utils/__tests__/update-check.test.js +26 -0
- package/dist/utils/__tests__/update-check.test.js.map +1 -0
- package/dist/utils/rate-limit.js +1 -1
- package/dist/utils/rate-limit.js.map +1 -1
- package/dist/utils/update-check.d.ts +3 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +106 -0
- package/dist/utils/update-check.js.map +1 -0
- package/package.json +6 -2
- package/dist/commands/auth/signup.d.ts +0 -2
- package/dist/commands/auth/signup.d.ts.map +0 -1
- package/dist/commands/auth/signup.js +0 -59
- package/dist/commands/auth/signup.js.map +0 -1
package/README.md
CHANGED
|
@@ -298,47 +298,6 @@ npm run dev
|
|
|
298
298
|
node dist/index.js review
|
|
299
299
|
```
|
|
300
300
|
|
|
301
|
-
## Telemetry
|
|
302
|
-
|
|
303
|
-
Kodus CLI collects anonymous usage data to help improve the product. We take privacy seriously:
|
|
304
|
-
|
|
305
|
-
**What we collect:**
|
|
306
|
-
- Command usage (which commands you run)
|
|
307
|
-
- Feature usage (interactive mode, fix mode, etc)
|
|
308
|
-
- Performance metrics (review duration, files analyzed)
|
|
309
|
-
- Error events (to improve reliability)
|
|
310
|
-
|
|
311
|
-
**What we DON'T collect:**
|
|
312
|
-
- Your code or file contents
|
|
313
|
-
- File names or paths (only basenames)
|
|
314
|
-
- Passwords, tokens, or secrets
|
|
315
|
-
- Any personally identifiable information
|
|
316
|
-
|
|
317
|
-
### Managing Telemetry
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
# Check telemetry status
|
|
321
|
-
kodus telemetry status
|
|
322
|
-
|
|
323
|
-
# Disable telemetry (opt-out)
|
|
324
|
-
kodus telemetry disable
|
|
325
|
-
|
|
326
|
-
# Enable telemetry
|
|
327
|
-
kodus telemetry enable
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
### Environment Variables
|
|
331
|
-
|
|
332
|
-
You can also control telemetry via environment variables:
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
# Disable telemetry
|
|
336
|
-
export KODUS_TELEMETRY=false
|
|
337
|
-
|
|
338
|
-
# Or use standard DO_NOT_TRACK
|
|
339
|
-
export DO_NOT_TRACK=1
|
|
340
|
-
```
|
|
341
|
-
|
|
342
301
|
## Environment Variables
|
|
343
302
|
|
|
344
303
|
| Variable | Description | Security Notes |
|
|
@@ -347,10 +306,6 @@ export DO_NOT_TRACK=1
|
|
|
347
306
|
| `KODUS_VERBOSE` | Set to `true` to enable verbose logging | ⚠️ **DO NOT use in production/CI** - may expose sensitive data in logs |
|
|
348
307
|
| `KODUS_TOKEN` | CI/CD token for non-interactive environments | - |
|
|
349
308
|
| `KODUS_TEAM_KEY` | Team authentication key for AI coding agents (Codex, Claude Code, Cursor) | - |
|
|
350
|
-
| `KODUS_TELEMETRY` | Set to `false` to disable telemetry | - |
|
|
351
|
-
| `DO_NOT_TRACK` | Set to `1` to disable telemetry | Standard privacy flag |
|
|
352
|
-
| `POSTHOG_API_KEY` | Custom PostHog API key | Development only |
|
|
353
|
-
| `POSTHOG_HOST` | Custom PostHog host | Development only |
|
|
354
309
|
|
|
355
310
|
### Verbose Mode
|
|
356
311
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAsB9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -4,6 +4,8 @@ import { reviewCommand } from './commands/review.js';
|
|
|
4
4
|
import { authCommand } from './commands/auth/index.js';
|
|
5
5
|
import { upgradeCommand } from './commands/upgrade.js';
|
|
6
6
|
import { prCommand } from './commands/pr.js';
|
|
7
|
+
import { hookCommand } from './commands/hook/index.js';
|
|
8
|
+
import { checkForUpdates } from './utils/update-check.js';
|
|
7
9
|
const require = createRequire(import.meta.url);
|
|
8
10
|
const pkg = require('../package.json');
|
|
9
11
|
const program = new Command();
|
|
@@ -19,5 +21,9 @@ program.addCommand(reviewCommand);
|
|
|
19
21
|
program.addCommand(authCommand);
|
|
20
22
|
program.addCommand(upgradeCommand);
|
|
21
23
|
program.addCommand(prCommand);
|
|
24
|
+
program.addCommand(hookCommand);
|
|
25
|
+
program.hook('postAction', async () => {
|
|
26
|
+
await checkForUpdates(pkg.version);
|
|
27
|
+
});
|
|
22
28
|
export { program };
|
|
23
29
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,EAAE,UAAU,CAAC;KACtF,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC,CACxD;AAEH,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;IACpC,MAAM,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/hook.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { KODUS_MARKER, generateHookScript } from '../hook/install.js';
|
|
6
|
+
// Mock gitService
|
|
7
|
+
vi.mock('../../services/git.service.js', () => ({
|
|
8
|
+
gitService: {
|
|
9
|
+
isGitRepository: vi.fn().mockResolvedValue(true),
|
|
10
|
+
getGitRoot: vi.fn(),
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
13
|
+
// Mock inquirer
|
|
14
|
+
vi.mock('inquirer', () => ({
|
|
15
|
+
default: {
|
|
16
|
+
prompt: vi.fn(),
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
import { gitService } from '../../services/git.service.js';
|
|
20
|
+
import inquirer from 'inquirer';
|
|
21
|
+
import { installAction } from '../hook/install.js';
|
|
22
|
+
import { uninstallAction } from '../hook/uninstall.js';
|
|
23
|
+
import { statusAction } from '../hook/status.js';
|
|
24
|
+
let tmpDir;
|
|
25
|
+
beforeEach(async () => {
|
|
26
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'kodus-hook-test-'));
|
|
27
|
+
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
28
|
+
await fs.mkdir(hooksDir, { recursive: true });
|
|
29
|
+
vi.mocked(gitService.isGitRepository).mockResolvedValue(true);
|
|
30
|
+
vi.mocked(gitService.getGitRoot).mockResolvedValue(tmpDir);
|
|
31
|
+
});
|
|
32
|
+
afterEach(async () => {
|
|
33
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
34
|
+
vi.restoreAllMocks();
|
|
35
|
+
});
|
|
36
|
+
function hookPath() {
|
|
37
|
+
return path.join(tmpDir, '.git', 'hooks', 'pre-commit');
|
|
38
|
+
}
|
|
39
|
+
describe('hook install', () => {
|
|
40
|
+
it('creates hook at the correct path', async () => {
|
|
41
|
+
await installAction({ failOn: 'critical', fast: true });
|
|
42
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
43
|
+
expect(content).toBeTruthy();
|
|
44
|
+
});
|
|
45
|
+
it('hook contains marker and is executable', async () => {
|
|
46
|
+
await installAction({ failOn: 'critical', fast: true });
|
|
47
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
48
|
+
expect(content).toContain(KODUS_MARKER);
|
|
49
|
+
const stat = await fs.stat(hookPath());
|
|
50
|
+
// Check executable bit (owner)
|
|
51
|
+
expect(stat.mode & 0o100).toBeTruthy();
|
|
52
|
+
});
|
|
53
|
+
it('respects --fail-on severity option', async () => {
|
|
54
|
+
await installAction({ failOn: 'warning', fast: true });
|
|
55
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
56
|
+
expect(content).toContain('--fail-on warning');
|
|
57
|
+
});
|
|
58
|
+
it('does not overwrite existing non-kodus hook without --force', async () => {
|
|
59
|
+
// Write a third-party hook
|
|
60
|
+
await fs.writeFile(hookPath(), '#!/bin/sh\necho "third-party hook"\n');
|
|
61
|
+
vi.mocked(inquirer.prompt).mockResolvedValue({ overwrite: false });
|
|
62
|
+
await installAction({});
|
|
63
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
64
|
+
expect(content).toContain('third-party hook');
|
|
65
|
+
expect(content).not.toContain(KODUS_MARKER);
|
|
66
|
+
});
|
|
67
|
+
it('overwrites existing kodus hook without prompting', async () => {
|
|
68
|
+
// Write an old kodus hook
|
|
69
|
+
await fs.writeFile(hookPath(), `#!/bin/sh\n${KODUS_MARKER}\nkodus review --fail-on error\n`);
|
|
70
|
+
await installAction({ failOn: 'critical', fast: true });
|
|
71
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
72
|
+
expect(content).toContain('--fail-on critical');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('hook uninstall', () => {
|
|
76
|
+
it('removes hook with kodus marker', async () => {
|
|
77
|
+
await fs.writeFile(hookPath(), `#!/bin/sh\n${KODUS_MARKER}\nkodus review\n`);
|
|
78
|
+
await uninstallAction();
|
|
79
|
+
await expect(fs.access(hookPath())).rejects.toThrow();
|
|
80
|
+
});
|
|
81
|
+
it('does not remove third-party hook', async () => {
|
|
82
|
+
await fs.writeFile(hookPath(), '#!/bin/sh\necho "third-party"\n');
|
|
83
|
+
await uninstallAction();
|
|
84
|
+
const content = await fs.readFile(hookPath(), 'utf-8');
|
|
85
|
+
expect(content).toContain('third-party');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('hook status', () => {
|
|
89
|
+
it('detects installed kodus hook', async () => {
|
|
90
|
+
const script = generateHookScript('critical', true);
|
|
91
|
+
await fs.writeFile(hookPath(), script);
|
|
92
|
+
const consoleSpy = vi.spyOn(console, 'log');
|
|
93
|
+
await statusAction();
|
|
94
|
+
const output = consoleSpy.mock.calls.map((c) => c.join(' ')).join('\n');
|
|
95
|
+
expect(output).toContain('installed');
|
|
96
|
+
expect(output).toContain('critical');
|
|
97
|
+
});
|
|
98
|
+
it('detects when no hook is installed', async () => {
|
|
99
|
+
const consoleSpy = vi.spyOn(console, 'log');
|
|
100
|
+
await statusAction();
|
|
101
|
+
const output = consoleSpy.mock.calls.map((c) => c.join(' ')).join('\n');
|
|
102
|
+
expect(output).toContain('not installed');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=hook.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEtE"}
|
|
@@ -55,19 +55,6 @@ export async function loginAction(options) {
|
|
|
55
55
|
spinner.start(chalk.blue('Logging in...'));
|
|
56
56
|
await authService.login(email, password);
|
|
57
57
|
spinner.succeed(chalk.green(`Logged in as ${email}`));
|
|
58
|
-
if (process.env.KODUS_VERBOSE) {
|
|
59
|
-
try {
|
|
60
|
-
const creds = await authService.getCredentials();
|
|
61
|
-
if (creds) {
|
|
62
|
-
console.log(chalk.dim('\nDebug - Stored credentials:'));
|
|
63
|
-
console.log(chalk.dim(JSON.stringify(creds, null, 2)));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (postLoginError) {
|
|
67
|
-
console.log(chalk.dim('\nDebug - Post-login operations failed:'));
|
|
68
|
-
console.log(chalk.dim(postLoginError instanceof Error ? postLoginError.message : String(postLoginError)));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
58
|
}
|
|
72
59
|
catch (error) {
|
|
73
60
|
spinner.fail(chalk.red('Login failed'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAO7D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QAE5D,IAAI,eAAe,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAE/E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,gDAAgD;oBACzD,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACpC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACZ,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,QAAQ;wBACjB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;4BAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACnC,OAAO,4BAA4B,CAAC;4BACtC,CAAC;4BACD,OAAO,IAAI,CAAC;wBACd,CAAC;qBACF,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACR,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACf,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,WAAW;wBACpB,IAAI,EAAE,GAAG;wBACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;4BAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC/B,OAAO,wCAAwC,CAAC;4BAClD,CAAC;4BACD,OAAO,IAAI,CAAC;wBACd,CAAC;qBACF,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACT,CAAC,CAAC;YAEH,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;YAC/B,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAE3C,MAAM,WAAW,CAAC,KAAK,CAAC,KAAM,EAAE,QAAS,CAAC,CAAC;QAE3C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAmFlD"}
|
|
@@ -18,10 +18,6 @@ export async function statusAction() {
|
|
|
18
18
|
console.log(`${chalk.dim('Organization:')} ${teamConfig?.organizationName ?? '(unknown)'}`);
|
|
19
19
|
console.log(`${chalk.dim('Team:')} ${teamConfig?.teamName ?? '(unknown)'}`);
|
|
20
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
21
|
return;
|
|
26
22
|
}
|
|
27
23
|
if (!credentials) {
|
|
@@ -56,14 +52,6 @@ export async function statusAction() {
|
|
|
56
52
|
console.log(` ${chalk.dim('•')} ${org}`);
|
|
57
53
|
});
|
|
58
54
|
}
|
|
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
55
|
}
|
|
68
56
|
else {
|
|
69
57
|
spinner.start(chalk.blue('Checking trial status...'));
|
|
@@ -77,7 +65,7 @@ export async function statusAction() {
|
|
|
77
65
|
if (trialStatus.isLimited) {
|
|
78
66
|
console.log(chalk.yellow('\n⚡ Daily limit reached!'));
|
|
79
67
|
}
|
|
80
|
-
console.log(chalk.dim('\nSign up to remove limits: ') + chalk.cyan('kodus auth
|
|
68
|
+
console.log(chalk.dim('\nSign up to remove limits: ') + chalk.cyan('kodus auth login'));
|
|
81
69
|
}
|
|
82
70
|
}
|
|
83
71
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAsB,MAAM,2BAA2B,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QAE5D,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC;YAEtC,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;YACzC,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC;YAEhD,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,UAAU,EAAE,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,UAAU,EAAE,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC1E,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAC0C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { installAction } from './install.js';
|
|
3
|
+
import { uninstallAction } from './uninstall.js';
|
|
4
|
+
import { statusAction } from './status.js';
|
|
5
|
+
export const hookCommand = new Command('hook')
|
|
6
|
+
.description('Manage pre-commit hook for automatic code review');
|
|
7
|
+
hookCommand
|
|
8
|
+
.command('install')
|
|
9
|
+
.description('Install pre-commit hook for automatic code review')
|
|
10
|
+
.option('--fail-on <severity>', 'Minimum severity to block commit (info, warning, error, critical)', 'critical')
|
|
11
|
+
.option('--fast', 'Use fast mode for review (default: true)', true)
|
|
12
|
+
.option('--no-fast', 'Disable fast mode for review')
|
|
13
|
+
.option('--force', 'Overwrite existing hook without prompting')
|
|
14
|
+
.action(installAction);
|
|
15
|
+
hookCommand
|
|
16
|
+
.command('uninstall')
|
|
17
|
+
.description('Remove pre-commit hook installed by kodus')
|
|
18
|
+
.action(uninstallAction);
|
|
19
|
+
hookCommand
|
|
20
|
+
.command('status')
|
|
21
|
+
.description('Show pre-commit hook status')
|
|
22
|
+
.action(statusAction);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,kDAAkD,CAAC,CAAC;AAEnE,WAAW;KACR,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,sBAAsB,EAAE,mEAAmE,EAAE,UAAU,CAAC;KAC/G,MAAM,CAAC,QAAQ,EAAE,0CAA0C,EAAE,IAAI,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;KAC9D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,WAAW;KACR,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,WAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const KODUS_MARKER = "# kodus-hook";
|
|
2
|
+
declare function generateHookScript(failOn: string, fast: boolean): string;
|
|
3
|
+
export declare function installAction(options: {
|
|
4
|
+
failOn?: string;
|
|
5
|
+
fast?: boolean;
|
|
6
|
+
force?: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export { KODUS_MARKER, generateHookScript };
|
|
9
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,YAAY,iBAAiB,CAAC;AAEpC,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CA0BjE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDhB;AAED,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import { gitService } from '../../services/git.service.js';
|
|
6
|
+
const KODUS_MARKER = '# kodus-hook';
|
|
7
|
+
function generateHookScript(failOn, fast) {
|
|
8
|
+
const flags = ['--staged'];
|
|
9
|
+
if (fast)
|
|
10
|
+
flags.push('--fast');
|
|
11
|
+
flags.push('--fail-on', failOn);
|
|
12
|
+
flags.push('--format', 'terminal');
|
|
13
|
+
flags.push('--quiet');
|
|
14
|
+
return `#!/bin/sh
|
|
15
|
+
${KODUS_MARKER} — installed by kodus CLI
|
|
16
|
+
# To uninstall: kodus hook uninstall
|
|
17
|
+
|
|
18
|
+
# Skip hook if KODUS_SKIP_HOOK is set
|
|
19
|
+
if [ -n "$KODUS_SKIP_HOOK" ]; then
|
|
20
|
+
exit 0
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Check if kodus is available
|
|
24
|
+
if ! command -v kodus >/dev/null 2>&1; then
|
|
25
|
+
echo "Warning: kodus CLI not found. Skipping pre-commit review."
|
|
26
|
+
echo "Install: npm install -g @kodus/cli"
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Run review on staged files
|
|
31
|
+
kodus review ${flags.join(' ')}
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
export async function installAction(options) {
|
|
35
|
+
const failOn = options.failOn ?? 'critical';
|
|
36
|
+
const fast = options.fast !== false; // default true
|
|
37
|
+
const isRepo = await gitService.isGitRepository();
|
|
38
|
+
if (!isRepo) {
|
|
39
|
+
console.error(chalk.red('Error: Not a git repository.'));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const gitRoot = await gitService.getGitRoot();
|
|
43
|
+
const hooksDir = path.join(gitRoot.trim(), '.git', 'hooks');
|
|
44
|
+
const hookPath = path.join(hooksDir, 'pre-commit');
|
|
45
|
+
// Check if hook already exists
|
|
46
|
+
let existingContent = null;
|
|
47
|
+
try {
|
|
48
|
+
existingContent = await fs.readFile(hookPath, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// File doesn't exist
|
|
52
|
+
}
|
|
53
|
+
if (existingContent) {
|
|
54
|
+
const isKodusHook = existingContent.includes(KODUS_MARKER);
|
|
55
|
+
if (!isKodusHook && !options.force) {
|
|
56
|
+
const { overwrite } = await inquirer.prompt([
|
|
57
|
+
{
|
|
58
|
+
type: 'confirm',
|
|
59
|
+
name: 'overwrite',
|
|
60
|
+
message: 'A pre-commit hook already exists. Overwrite it?',
|
|
61
|
+
default: false,
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
if (!overwrite) {
|
|
65
|
+
console.log(chalk.yellow('Installation cancelled.'));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Ensure hooks directory exists
|
|
71
|
+
await fs.mkdir(hooksDir, { recursive: true });
|
|
72
|
+
// Write hook script
|
|
73
|
+
const script = generateHookScript(failOn, fast);
|
|
74
|
+
await fs.writeFile(hookPath, script, { mode: 0o755 });
|
|
75
|
+
console.log(chalk.green('✓ Pre-commit hook installed successfully!'));
|
|
76
|
+
console.log(chalk.dim(` Path: ${hookPath}`));
|
|
77
|
+
console.log(chalk.dim(` Fail on: ${failOn}`));
|
|
78
|
+
console.log(chalk.dim(` Fast mode: ${fast ? 'yes' : 'no'}`));
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(chalk.dim('Skip with: KODUS_SKIP_HOOK=1 git commit'));
|
|
81
|
+
console.log(chalk.dim('Remove with: kodus hook uninstall'));
|
|
82
|
+
}
|
|
83
|
+
export { KODUS_MARKER, generateHookScript };
|
|
84
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/hook/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/status.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgClD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { gitService } from '../../services/git.service.js';
|
|
5
|
+
import { KODUS_MARKER } from './install.js';
|
|
6
|
+
export async function statusAction() {
|
|
7
|
+
const isRepo = await gitService.isGitRepository();
|
|
8
|
+
if (!isRepo) {
|
|
9
|
+
console.error(chalk.red('Error: Not a git repository.'));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const gitRoot = await gitService.getGitRoot();
|
|
13
|
+
const hookPath = path.join(gitRoot.trim(), '.git', 'hooks', 'pre-commit');
|
|
14
|
+
let content;
|
|
15
|
+
try {
|
|
16
|
+
content = await fs.readFile(hookPath, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
console.log(chalk.yellow('Pre-commit hook: not installed'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!content.includes(KODUS_MARKER)) {
|
|
23
|
+
console.log(chalk.yellow('Pre-commit hook: installed (not by kodus)'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.green('Pre-commit hook: installed'));
|
|
27
|
+
// Parse config from hook script
|
|
28
|
+
const failOnMatch = content.match(/--fail-on\s+(\S+)/);
|
|
29
|
+
const hasFast = content.includes('--fast');
|
|
30
|
+
console.log(chalk.dim(` Fail on: ${failOnMatch?.[1] ?? 'unknown'}`));
|
|
31
|
+
console.log(chalk.dim(` Fast mode: ${hasFast ? 'yes' : 'no'}`));
|
|
32
|
+
console.log(chalk.dim(` Path: ${hookPath}`));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/hook/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAE1E,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEvD,gCAAgC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/hook/uninstall.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBrD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { gitService } from '../../services/git.service.js';
|
|
5
|
+
import { KODUS_MARKER } from './install.js';
|
|
6
|
+
export async function uninstallAction() {
|
|
7
|
+
const isRepo = await gitService.isGitRepository();
|
|
8
|
+
if (!isRepo) {
|
|
9
|
+
console.error(chalk.red('Error: Not a git repository.'));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const gitRoot = await gitService.getGitRoot();
|
|
13
|
+
const hookPath = path.join(gitRoot.trim(), '.git', 'hooks', 'pre-commit');
|
|
14
|
+
let content;
|
|
15
|
+
try {
|
|
16
|
+
content = await fs.readFile(hookPath, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
console.log(chalk.yellow('No pre-commit hook found.'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!content.includes(KODUS_MARKER)) {
|
|
23
|
+
console.log(chalk.yellow('The pre-commit hook was not installed by kodus. Skipping.'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
await fs.unlink(hookPath);
|
|
27
|
+
console.log(chalk.green('✓ Pre-commit hook removed successfully.'));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/hook/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAE1E,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,aAAa,SA0LtB,CAAC"}
|
package/dist/commands/review.js
CHANGED
|
@@ -23,6 +23,7 @@ export const reviewCommand = new Command('review')
|
|
|
23
23
|
.option('-i, --interactive', 'Interactive mode: navigate and apply fixes')
|
|
24
24
|
.option('--fix', 'Automatically apply all fixable issues')
|
|
25
25
|
.option('--prompt-only', 'Output optimized for AI agents (minimal, structured)')
|
|
26
|
+
.option('--fail-on <severity>', 'Exit with code 1 if issues meet or exceed severity (info, warning, error, critical)')
|
|
26
27
|
.option('--context <file>', 'Custom context file to include in review')
|
|
27
28
|
.action(async (files, options, cmd) => {
|
|
28
29
|
const globalOpts = cmd.optsWithGlobals();
|
|
@@ -143,6 +144,15 @@ export const reviewCommand = new Command('review')
|
|
|
143
144
|
else {
|
|
144
145
|
console.log(output);
|
|
145
146
|
}
|
|
147
|
+
// Check --fail-on after output
|
|
148
|
+
if (options.failOn) {
|
|
149
|
+
const severityOrder = { info: 0, warning: 1, error: 2, critical: 3 };
|
|
150
|
+
const threshold = severityOrder[options.failOn] ?? 0;
|
|
151
|
+
const hasBlockingIssues = result.issues.some((i) => (severityOrder[i.severity] ?? 0) >= threshold);
|
|
152
|
+
if (hasBlockingIssues) {
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
146
156
|
}
|
|
147
157
|
catch (error) {
|
|
148
158
|
spinner.fail(chalk.red('Review failed'));
|