@kodus/cli 0.0.12 → 0.1.5

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 (131) hide show
  1. package/README.md +380 -0
  2. package/dist/cli.d.ts +4 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +23 -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 +80 -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 +59 -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/pr.d.ts +3 -0
  35. package/dist/commands/pr.d.ts.map +1 -0
  36. package/dist/commands/pr.js +75 -0
  37. package/dist/commands/pr.js.map +1 -0
  38. package/dist/commands/review.d.ts +3 -0
  39. package/dist/commands/review.d.ts.map +1 -0
  40. package/dist/commands/review.js +164 -0
  41. package/dist/commands/review.js.map +1 -0
  42. package/dist/commands/upgrade.d.ts +3 -0
  43. package/dist/commands/upgrade.d.ts.map +1 -0
  44. package/dist/commands/upgrade.js +35 -0
  45. package/dist/commands/upgrade.js.map +1 -0
  46. package/dist/constants.d.ts +3 -0
  47. package/dist/constants.d.ts.map +1 -0
  48. package/dist/constants.js +3 -0
  49. package/dist/constants.js.map +1 -0
  50. package/dist/formatters/json.d.ts +7 -0
  51. package/dist/formatters/json.d.ts.map +1 -0
  52. package/dist/formatters/json.js +7 -0
  53. package/dist/formatters/json.js.map +1 -0
  54. package/dist/formatters/markdown.d.ts +7 -0
  55. package/dist/formatters/markdown.d.ts.map +1 -0
  56. package/dist/formatters/markdown.js +93 -0
  57. package/dist/formatters/markdown.js.map +1 -0
  58. package/dist/formatters/prompt.d.ts +12 -0
  59. package/dist/formatters/prompt.d.ts.map +1 -0
  60. package/dist/formatters/prompt.js +90 -0
  61. package/dist/formatters/prompt.js.map +1 -0
  62. package/dist/formatters/terminal.d.ts +7 -0
  63. package/dist/formatters/terminal.d.ts.map +1 -0
  64. package/dist/formatters/terminal.js +127 -0
  65. package/dist/formatters/terminal.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +9 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/services/api/api.interface.d.ts +42 -0
  71. package/dist/services/api/api.interface.d.ts.map +1 -0
  72. package/dist/services/api/api.interface.js +2 -0
  73. package/dist/services/api/api.interface.js.map +1 -0
  74. package/dist/services/api/api.real.d.ts +7 -0
  75. package/dist/services/api/api.real.d.ts.map +1 -0
  76. package/dist/services/api/api.real.js +252 -0
  77. package/dist/services/api/api.real.js.map +1 -0
  78. package/dist/services/api/index.d.ts +4 -0
  79. package/dist/services/api/index.d.ts.map +1 -0
  80. package/dist/services/api/index.js +3 -0
  81. package/dist/services/api/index.js.map +1 -0
  82. package/dist/services/auth.service.d.ts +19 -0
  83. package/dist/services/auth.service.d.ts.map +1 -0
  84. package/dist/services/auth.service.js +90 -0
  85. package/dist/services/auth.service.js.map +1 -0
  86. package/dist/services/context.service.d.ts +22 -0
  87. package/dist/services/context.service.d.ts.map +1 -0
  88. package/dist/services/context.service.js +104 -0
  89. package/dist/services/context.service.js.map +1 -0
  90. package/dist/services/fix.service.d.ts +31 -0
  91. package/dist/services/fix.service.d.ts.map +1 -0
  92. package/dist/services/fix.service.js +120 -0
  93. package/dist/services/fix.service.js.map +1 -0
  94. package/dist/services/git.service.d.ts +32 -0
  95. package/dist/services/git.service.d.ts.map +1 -0
  96. package/dist/services/git.service.js +261 -0
  97. package/dist/services/git.service.js.map +1 -0
  98. package/dist/services/review.service.d.ts +28 -0
  99. package/dist/services/review.service.d.ts.map +1 -0
  100. package/dist/services/review.service.js +111 -0
  101. package/dist/services/review.service.js.map +1 -0
  102. package/dist/types/index.d.ts +161 -0
  103. package/dist/types/index.d.ts.map +1 -0
  104. package/dist/types/index.js +15 -0
  105. package/dist/types/index.js.map +1 -0
  106. package/dist/ui/interactive.d.ts +26 -0
  107. package/dist/ui/interactive.d.ts.map +1 -0
  108. package/dist/ui/interactive.js +371 -0
  109. package/dist/ui/interactive.js.map +1 -0
  110. package/dist/utils/config.d.ts +10 -0
  111. package/dist/utils/config.d.ts.map +1 -0
  112. package/dist/utils/config.js +54 -0
  113. package/dist/utils/config.js.map +1 -0
  114. package/dist/utils/credentials.d.ts +6 -0
  115. package/dist/utils/credentials.d.ts.map +1 -0
  116. package/dist/utils/credentials.js +54 -0
  117. package/dist/utils/credentials.js.map +1 -0
  118. package/dist/utils/rate-limit.d.ts +5 -0
  119. package/dist/utils/rate-limit.d.ts.map +1 -0
  120. package/dist/utils/rate-limit.js +47 -0
  121. package/dist/utils/rate-limit.js.map +1 -0
  122. package/package.json +41 -33
  123. package/index.js +0 -15
  124. package/license.md +0 -21
  125. package/readme.md +0 -128
  126. package/scripts/setup-db.sh +0 -77
  127. package/src/commands/install.js +0 -357
  128. package/src/config/default.js +0 -66
  129. package/src/utils/helpers.js +0 -128
  130. package/templates/.env.example +0 -142
  131. package/templates/docker-compose.yml +0 -139
package/README.md ADDED
@@ -0,0 +1,380 @@
1
+ # Kodus CLI
2
+
3
+ AI-powered code review from your terminal.
4
+
5
+ ## Installation
6
+
7
+ ### npm (Recommended)
8
+
9
+ ```bash
10
+ npm install -g @kodus/cli
11
+ ```
12
+
13
+ ### Via curl
14
+
15
+ ```bash
16
+ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bash
17
+ ```
18
+
19
+ ### Homebrew (Coming soon)
20
+
21
+ ```bash
22
+ brew install kodus/tap/kodus
23
+ ```
24
+
25
+ ### Using npx (No installation)
26
+
27
+ ```bash
28
+ npx @kodus/cli review
29
+ ```
30
+
31
+ ## Quick Start
32
+
33
+ ```bash
34
+ # Run an interactive review (default mode)
35
+ kodus review
36
+
37
+ # Run a review on staged files (interactive)
38
+ kodus review --staged
39
+
40
+ # Run a review on a specific commit (interactive)
41
+ kodus review --commit HEAD~1
42
+
43
+ # Run a review comparing against another branch (interactive)
44
+ kodus review --branch main
45
+
46
+ # Run a review on specific files (interactive)
47
+ kodus review src/index.ts src/utils.ts
48
+
49
+ # Review using only configured rules (no general suggestions)
50
+ kodus review --rules-only
51
+
52
+ # Fast mode: quicker analysis (good for large diffs)
53
+ kodus review --fast
54
+
55
+ # Auto-fix: apply all fixable issues automatically
56
+ kodus review --fix
57
+
58
+ # Non-interactive modes:
59
+ # - JSON output
60
+ kodus review --format json
61
+
62
+ # - Markdown report
63
+ kodus review --format markdown
64
+
65
+ # - AI Agent mode (optimized for Claude Code, Cursor, etc)
66
+ kodus review --prompt-only
67
+ ```
68
+
69
+ ## Authentication
70
+
71
+ Sign up at **https://app.kodus.io** to create your account.
72
+
73
+ ```bash
74
+ # Login with your account
75
+ kodus auth login
76
+
77
+ # Check authentication status
78
+ kodus auth status
79
+
80
+ # Logout
81
+ kodus auth logout
82
+
83
+ # Generate CI/CD token
84
+ kodus auth token
85
+ ```
86
+
87
+ ## Review Modes
88
+
89
+ ### Interactive Mode (Default)
90
+ Navigate through issues and apply fixes interactively:
91
+
92
+ ```bash
93
+ # Interactive mode is now the default
94
+ kodus review
95
+
96
+ # You can also explicitly enable it
97
+ kodus review --interactive
98
+ kodus review -i
99
+ ```
100
+
101
+ Features:
102
+ - **File-first navigation**: Browse files with issue counts
103
+ - **Copy fix prompt**: Generate AI-friendly prompts for Claude Code, Cursor, etc.
104
+ - **One-by-one review**: See issues with detailed information
105
+ - **Preview fixes**: View changes before applying
106
+ - **Apply fixes**: Choose which fixes to apply
107
+ - **Live progress**: Track fixed vs remaining issues
108
+
109
+ ### Auto-fix Mode
110
+ Automatically apply all fixable issues:
111
+
112
+ ```bash
113
+ kodus review --fix
114
+ ```
115
+
116
+ Features:
117
+ - Applies all auto-fixable issues at once
118
+ - Shows confirmation prompt before applying
119
+ - Reports success/failure for each fix
120
+
121
+ ### AI Agent Mode
122
+ Optimized for AI coding agents (Claude Code, Cursor, Windsurf):
123
+
124
+ ```bash
125
+ kodus review --prompt-only
126
+ ```
127
+
128
+ Features:
129
+ - Minimal, structured output
130
+ - Easy to parse programmatically
131
+ - Includes fix code for auto-fixable issues
132
+ - Perfect for autonomous generate-review-fix loops
133
+
134
+ ## Output Formats
135
+
136
+ ```bash
137
+ # Interactive mode (default)
138
+ kodus review
139
+
140
+ # JSON output (non-interactive)
141
+ kodus review --format json
142
+
143
+ # Markdown report (non-interactive)
144
+ kodus review --format markdown
145
+
146
+ # AI Agent output (non-interactive)
147
+ kodus review --prompt-only
148
+
149
+ # Save to file (non-interactive)
150
+ kodus review --format markdown --output report.md
151
+
152
+ # Terminal output without interactivity
153
+ kodus review --format terminal --output report.txt
154
+ ```
155
+
156
+ ## Context-Aware Reviews
157
+
158
+ Kodus CLI automatically reads your project's context files to provide better, more relevant reviews:
159
+
160
+ **Auto-detected files:**
161
+ - `.cursorrules` - Cursor IDE rules
162
+ - `claude.md` / `.claude.md` - Claude Code guidelines
163
+ - `.kodus.md` / `.kodus/rules.md` - Kodus-specific rules
164
+
165
+ **Custom context:**
166
+ ```bash
167
+ # Include custom context file
168
+ kodus review --context path/to/custom-guidelines.md
169
+ ```
170
+
171
+ This ensures reviews follow your team's standards, coding patterns, and architectural preferences.
172
+
173
+ ### Flags
174
+
175
+ | Flag | Description | Use Case |
176
+ |------|-------------|----------|
177
+ | (none) | Interactive mode (default) | Local development, manual review |
178
+ | `--rules-only` | Only check configured rules | Team standards, CI/CD |
179
+ | `--fast` | Faster analysis with lighter checks | Large diffs, quick feedback |
180
+ | `--staged` | Analyze only staged files | Pre-commit |
181
+ | `--interactive` / `-i` | Explicitly enable interactive mode | When combined with other flags |
182
+ | `--fix` | Auto-apply all fixable issues | Quick fixes, automation |
183
+ | `--prompt-only` | AI agent optimized output | Claude Code, Cursor integration |
184
+ | `--context <file>` | Include custom context file | Project-specific guidelines |
185
+ | `--format json` | Output as JSON (non-interactive) | Automation, integrations |
186
+ | `--output <file>` | Save to file (non-interactive) | Reports, CI/CD artifacts |
187
+
188
+ **Examples:**
189
+
190
+ ```bash
191
+ # Pre-commit: interactive check on staged files (default)
192
+ kodus review --staged
193
+
194
+ # CI/CD: strict rules only, JSON output
195
+ kodus review --rules-only --format json
196
+
197
+ # Quick feedback on large changes (still interactive)
198
+ kodus review --fast
199
+
200
+ # Auto-fix all issues in staged files
201
+ kodus review --staged --fix
202
+
203
+ # AI agent workflow (non-interactive)
204
+ kodus review --prompt-only
205
+
206
+ # Custom context with interactive mode (default)
207
+ kodus review --context .github/GUIDELINES.md
208
+
209
+ # Copy fix prompts and paste into Claude Code
210
+ kodus review # Select file → "Copy fix prompt for AI agent"
211
+ ```
212
+
213
+ ## AI Agent Integration
214
+
215
+ Kodus CLI works seamlessly with AI coding agents like **Claude Code**, **Cursor**, and **Windsurf**.
216
+
217
+ ### Interactive Mode with Copy Prompt (Recommended)
218
+
219
+ The easiest way to use with AI agents:
220
+
221
+ ```bash
222
+ # 1. Run interactive review
223
+ kodus review
224
+
225
+ # 2. Navigate to a file with issues
226
+ # 3. Select "Copy fix prompt for AI agent"
227
+ # 4. Paste into Claude Code/Cursor
228
+ # 5. AI automatically fixes the issues
229
+ ```
230
+
231
+ The copied prompt includes:
232
+ - File path
233
+ - All issues with line numbers and severity
234
+ - Detailed suggestions and recommendations
235
+ - AI-optimized formatting
236
+
237
+ ### Automated Mode with --prompt-only
238
+
239
+ For fully automated workflows:
240
+
241
+ Set your team key as an environment variable:
242
+
243
+ ```bash
244
+ export KODUS_TEAM_KEY=kodus_xxxxx
245
+ ```
246
+
247
+ Add this to your `.cursorrules` or prompt:
248
+
249
+ ```
250
+ When writing code:
251
+ 1. Implement the feature
252
+ 2. Run: kodus review --prompt-only
253
+ 3. If issues are found, fix them automatically
254
+ 4. Repeat until review is clean
255
+ 5. Show final result
256
+ ```
257
+
258
+ Claude Code will automatically run reviews and fix issues in a loop.
259
+
260
+ ### Using with Cursor
261
+
262
+ Similar workflow - the AI agent can autonomously:
263
+ - Generate code
264
+ - Review with `kodus review --prompt-only`
265
+ - Parse the structured output
266
+ - Apply fixes
267
+ - Iterate until clean
268
+
269
+ ### Benefits
270
+ - ✅ Catch issues during development, not after
271
+ - ✅ Autonomous fix loops (no manual intervention)
272
+ - ✅ Consistent with team standards
273
+ - ✅ Faster development cycles
274
+
275
+ ## Trial Mode
276
+
277
+ Without an account, you can use the CLI with rate limits:
278
+
279
+ - 5 reviews per day
280
+ - 10 files per review
281
+ - 500 lines per file
282
+
283
+ Sign up for free to remove these limits.
284
+
285
+ ## Development
286
+
287
+ ```bash
288
+ # Install dependencies
289
+ npm install
290
+
291
+ # Build
292
+ npm run build
293
+
294
+ # Run in development
295
+ npm run dev
296
+
297
+ # Test locally
298
+ node dist/index.js review
299
+ ```
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
+ ## Environment Variables
343
+
344
+ | Variable | Description | Security Notes |
345
+ |----------|-------------|----------------|
346
+ | `KODUS_API_URL` | API endpoint (default: https://api.kodus.io) | ⚠️ Only HTTPS URLs accepted (except localhost). Custom URLs validated for security. |
347
+ | `KODUS_VERBOSE` | Set to `true` to enable verbose logging | ⚠️ **DO NOT use in production/CI** - may expose sensitive data in logs |
348
+ | `KODUS_TOKEN` | CI/CD token for non-interactive environments | - |
349
+ | `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
+
355
+ ### Verbose Mode
356
+
357
+ Enable detailed logging for debugging purposes:
358
+
359
+ ```bash
360
+ # Enable verbose logging
361
+ export KODUS_VERBOSE=true
362
+ kodus review
363
+ ```
364
+
365
+ **⚠️ Security Warning:** Verbose mode may log sensitive information including:
366
+ - API responses and errors
367
+ - Authentication token details
368
+ - Full request/response payloads
369
+
370
+ **Never use verbose mode in:**
371
+ - Production environments
372
+ - CI/CD pipelines
373
+ - Shared or public logs
374
+ - Automated workflows
375
+
376
+ Verbose mode is intended **only for local development and debugging**.
377
+
378
+ ## License
379
+
380
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ declare const program: Command;
3
+ export { program };
4
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAiB9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,23 @@
1
+ import { createRequire } from 'node:module';
2
+ import { Command } from 'commander';
3
+ import { reviewCommand } from './commands/review.js';
4
+ import { authCommand } from './commands/auth/index.js';
5
+ import { upgradeCommand } from './commands/upgrade.js';
6
+ import { prCommand } from './commands/pr.js';
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require('../package.json');
9
+ const program = new Command();
10
+ program
11
+ .name('kodus')
12
+ .description('Kodus CLI - AI-powered code review from your terminal')
13
+ .version(pkg.version)
14
+ .option('-f, --format <format>', 'Output format: terminal, json, markdown', 'terminal')
15
+ .option('-o, --output <file>', 'Output file (for json/markdown)')
16
+ .option('-v, --verbose', 'Verbose output', false)
17
+ .option('-q, --quiet', 'Quiet mode (errors only)', false);
18
+ program.addCommand(reviewCommand);
19
+ program.addCommand(authCommand);
20
+ program.addCommand(upgradeCommand);
21
+ program.addCommand(prCommand);
22
+ export { program };
23
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +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;AAE7C,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;AAE9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const authCommand: Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SACiB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { Command } from 'commander';
2
+ import { loginAction } from './login.js';
3
+ import { logoutAction } from './logout.js';
4
+ import { statusAction } from './status.js';
5
+ import { tokenAction } from './token.js';
6
+ import { teamKeyAction, teamStatusAction } from './team-key.js';
7
+ export const authCommand = new Command('auth')
8
+ .description('Authentication commands');
9
+ authCommand
10
+ .command('login')
11
+ .description('Login with email and password')
12
+ .option('-e, --email <email>', 'Email address')
13
+ .option('-p, --password <password>', 'Password')
14
+ .action(loginAction);
15
+ authCommand
16
+ .command('logout')
17
+ .description('Remove local credentials')
18
+ .action(logoutAction);
19
+ authCommand
20
+ .command('status')
21
+ .description('Show authentication status and usage limits')
22
+ .action(statusAction);
23
+ authCommand
24
+ .command('token')
25
+ .description('Generate a token for CI/CD')
26
+ .action(tokenAction);
27
+ authCommand
28
+ .command('team-key')
29
+ .description('Authenticate using team API key')
30
+ .requiredOption('--key <key>', 'Team API key from Kodus dashboard')
31
+ .action(teamKeyAction);
32
+ authCommand
33
+ .command('team-status')
34
+ .description('Show team authentication status')
35
+ .action(teamStatusAction);
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAE1C,WAAW;KACR,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,eAAe,CAAC;KAC9C,MAAM,CAAC,2BAA2B,EAAE,UAAU,CAAC;KAC/C,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,WAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,WAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,WAAW;KACR,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,WAAW;KACR,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,cAAc,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,WAAW;KACR,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface LoginOptions {
2
+ email?: string;
3
+ password?: string;
4
+ }
5
+ export declare function loginAction(options: LoginOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +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,CAqFtE"}
@@ -0,0 +1,80 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { authService } from '../../services/auth.service.js';
5
+ export async function loginAction(options) {
6
+ const spinner = ora();
7
+ try {
8
+ const isAuthenticated = await authService.isAuthenticated();
9
+ if (isAuthenticated && !options.email) {
10
+ const credentials = await authService.getCredentials();
11
+ console.log(chalk.yellow(`\nAlready logged in as ${credentials?.user.email}`));
12
+ const { confirm } = await inquirer.prompt([
13
+ {
14
+ type: 'confirm',
15
+ name: 'confirm',
16
+ message: 'Do you want to login with a different account?',
17
+ default: false,
18
+ },
19
+ ]);
20
+ if (!confirm) {
21
+ return;
22
+ }
23
+ }
24
+ let email = options.email;
25
+ let password = options.password;
26
+ if (!email || !password) {
27
+ const answers = await inquirer.prompt([
28
+ ...(!email ? [{
29
+ type: 'input',
30
+ name: 'email',
31
+ message: 'Email:',
32
+ validate: (input) => {
33
+ if (!input || !input.includes('@')) {
34
+ return 'Please enter a valid email';
35
+ }
36
+ return true;
37
+ },
38
+ }] : []),
39
+ ...(!password ? [{
40
+ type: 'password',
41
+ name: 'password',
42
+ message: 'Password:',
43
+ mask: '*',
44
+ validate: (input) => {
45
+ if (!input || input.length < 6) {
46
+ return 'Password must be at least 6 characters';
47
+ }
48
+ return true;
49
+ },
50
+ }] : []),
51
+ ]);
52
+ email = email || answers.email;
53
+ password = password || answers.password;
54
+ }
55
+ spinner.start(chalk.blue('Logging in...'));
56
+ await authService.login(email, password);
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
+ }
72
+ catch (error) {
73
+ spinner.fail(chalk.red('Login failed'));
74
+ if (error instanceof Error) {
75
+ console.error(chalk.red(error.message));
76
+ }
77
+ process.exit(1);
78
+ }
79
+ }
80
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logoutAction(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBlD"}
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { authService } from '../../services/auth.service.js';
4
+ export async function logoutAction() {
5
+ const spinner = ora();
6
+ try {
7
+ const isAuthenticated = await authService.isAuthenticated();
8
+ if (!isAuthenticated) {
9
+ console.log(chalk.yellow('\nNot logged in.'));
10
+ return;
11
+ }
12
+ spinner.start(chalk.blue('Logging out...'));
13
+ await authService.logout();
14
+ spinner.succeed(chalk.green('Logged out successfully'));
15
+ }
16
+ catch (error) {
17
+ spinner.fail(chalk.red('Logout failed'));
18
+ if (error instanceof Error) {
19
+ console.error(chalk.red(error.message));
20
+ }
21
+ process.exit(1);
22
+ }
23
+ }
24
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.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,YAAY;IAChC,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,kBAAkB,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAE5C,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAE3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAE1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,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,2 @@
1
+ export declare function signupAction(): Promise<void>;
2
+ //# sourceMappingURL=signup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/signup.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA2DlD"}
@@ -0,0 +1,59 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { authService } from '../../services/auth.service.js';
5
+ export async function signupAction() {
6
+ const spinner = ora();
7
+ try {
8
+ console.log(chalk.bold('\nCreate your Kodus account\n'));
9
+ const answers = await inquirer.prompt([
10
+ {
11
+ type: 'input',
12
+ name: 'email',
13
+ message: 'Email:',
14
+ validate: (input) => {
15
+ if (!input || !input.includes('@')) {
16
+ return 'Please enter a valid email';
17
+ }
18
+ return true;
19
+ },
20
+ },
21
+ {
22
+ type: 'password',
23
+ name: 'password',
24
+ message: 'Password:',
25
+ mask: '*',
26
+ validate: (input) => {
27
+ if (!input || input.length < 6) {
28
+ return 'Password must be at least 6 characters';
29
+ }
30
+ return true;
31
+ },
32
+ },
33
+ {
34
+ type: 'password',
35
+ name: 'confirmPassword',
36
+ message: 'Confirm password:',
37
+ mask: '*',
38
+ validate: (input, allAnswers) => {
39
+ if (input !== allAnswers?.password) {
40
+ return 'Passwords do not match';
41
+ }
42
+ return true;
43
+ },
44
+ },
45
+ ]);
46
+ spinner.start(chalk.blue('Creating account...'));
47
+ await authService.signup(answers.email, answers.password);
48
+ spinner.succeed(chalk.green('Account created!'));
49
+ console.log(chalk.dim('\nPlease check your email to verify your account.'));
50
+ }
51
+ catch (error) {
52
+ spinner.fail(chalk.red('Signup failed'));
53
+ if (error instanceof Error) {
54
+ console.error(chalk.red(error.message));
55
+ }
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=signup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/commands/auth/signup.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;AAE7D,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnC,OAAO,4BAA4B,CAAC;oBACtC,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/B,OAAO,wCAAwC,CAAC;oBAClD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,CAAC,KAAa,EAAE,UAAU,EAAE,EAAE;oBACtC,IAAI,KAAK,KAAK,UAAU,EAAE,QAAQ,EAAE,CAAC;wBACnC,OAAO,wBAAwB,CAAC;oBAClC,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEjD,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAE9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAEzC,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,2 @@
1
+ export declare function statusAction(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map