@kodus/cli 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -27
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth/index.d.ts.map +1 -1
- package/dist/commands/auth/index.js +1 -2
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +44 -45
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.d.ts.map +1 -1
- package/dist/commands/auth/logout.js +5 -3
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +28 -25
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/auth/team-key.d.ts.map +1 -1
- package/dist/commands/auth/team-key.js +49 -29
- package/dist/commands/auth/team-key.js.map +1 -1
- package/dist/commands/auth/token.d.ts.map +1 -1
- package/dist/commands/auth/token.js +12 -10
- package/dist/commands/auth/token.js.map +1 -1
- package/dist/commands/hook/index.d.ts.map +1 -1
- package/dist/commands/hook/index.js +1 -2
- package/dist/commands/hook/index.js.map +1 -1
- package/dist/commands/hook/install.d.ts.map +1 -1
- package/dist/commands/hook/install.js +21 -22
- package/dist/commands/hook/install.js.map +1 -1
- package/dist/commands/hook/status.d.ts.map +1 -1
- package/dist/commands/hook/status.js +10 -8
- package/dist/commands/hook/status.js.map +1 -1
- package/dist/commands/hook/uninstall.d.ts.map +1 -1
- package/dist/commands/hook/uninstall.js +7 -5
- package/dist/commands/hook/uninstall.js.map +1 -1
- package/dist/commands/memory/capture.d.ts.map +1 -1
- package/dist/commands/memory/capture.js +28 -14
- package/dist/commands/memory/capture.js.map +1 -1
- package/dist/commands/memory/disable.d.ts.map +1 -1
- package/dist/commands/memory/disable.js +9 -7
- package/dist/commands/memory/disable.js.map +1 -1
- package/dist/commands/memory/enable.d.ts.map +1 -1
- package/dist/commands/memory/enable.js +18 -14
- package/dist/commands/memory/enable.js.map +1 -1
- package/dist/commands/memory/hooks.d.ts.map +1 -1
- package/dist/commands/memory/hooks.js +37 -17
- package/dist/commands/memory/hooks.js.map +1 -1
- package/dist/commands/memory/index.d.ts.map +1 -1
- package/dist/commands/memory/index.js +1 -2
- package/dist/commands/memory/index.js.map +1 -1
- package/dist/commands/memory/promote.d.ts.map +1 -1
- package/dist/commands/memory/promote.js +14 -10
- package/dist/commands/memory/promote.js.map +1 -1
- package/dist/commands/memory/show.d.ts.map +1 -1
- package/dist/commands/memory/show.js +11 -10
- package/dist/commands/memory/show.js.map +1 -1
- package/dist/commands/memory/status.d.ts.map +1 -1
- package/dist/commands/memory/status.js +22 -20
- package/dist/commands/memory/status.js.map +1 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +131 -13
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +57 -38
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +119 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscribe.d.ts +4 -0
- package/dist/commands/subscribe.d.ts.map +1 -0
- package/dist/commands/subscribe.js +25 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +74 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/formatters/json.d.ts.map +1 -1
- package/dist/formatters/json.js.map +1 -1
- package/dist/formatters/markdown.d.ts.map +1 -1
- package/dist/formatters/markdown.js.map +1 -1
- package/dist/formatters/prompt.d.ts.map +1 -1
- package/dist/formatters/prompt.js +6 -6
- package/dist/formatters/prompt.js.map +1 -1
- package/dist/formatters/terminal.d.ts.map +1 -1
- package/dist/formatters/terminal.js +7 -4
- package/dist/formatters/terminal.js.map +1 -1
- package/dist/index.js +28 -5
- package/dist/index.js.map +1 -1
- package/dist/services/api/api.interface.d.ts +10 -1
- package/dist/services/api/api.interface.d.ts.map +1 -1
- package/dist/services/api/api.real.d.ts +14 -0
- package/dist/services/api/api.real.d.ts.map +1 -1
- package/dist/services/api/api.real.js +163 -58
- package/dist/services/api/api.real.js.map +1 -1
- package/dist/services/api/index.d.ts +2 -2
- package/dist/services/api/index.js +1 -1
- package/dist/services/auth.service.d.ts +1 -0
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +21 -2
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/context.service.d.ts +4 -1
- package/dist/services/context.service.d.ts.map +1 -1
- package/dist/services/context.service.js +30 -19
- package/dist/services/context.service.js.map +1 -1
- package/dist/services/fix.service.d.ts.map +1 -1
- package/dist/services/fix.service.js +3 -2
- package/dist/services/fix.service.js.map +1 -1
- package/dist/services/git.service.d.ts +1 -0
- package/dist/services/git.service.d.ts.map +1 -1
- package/dist/services/git.service.js +123 -48
- package/dist/services/git.service.js.map +1 -1
- package/dist/services/memory.service.d.ts.map +1 -1
- package/dist/services/memory.service.js +93 -35
- package/dist/services/memory.service.js.map +1 -1
- package/dist/services/review.service.d.ts +12 -1
- package/dist/services/review.service.d.ts.map +1 -1
- package/dist/services/review.service.js +88 -65
- package/dist/services/review.service.js.map +1 -1
- package/dist/services/transcript-parser.service.d.ts.map +1 -1
- package/dist/services/transcript-parser.service.js +46 -15
- package/dist/services/transcript-parser.service.js.map +1 -1
- package/dist/types/index.d.ts +12 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/memory.d.ts.map +1 -1
- package/dist/ui/interactive.d.ts.map +1 -1
- package/dist/ui/interactive.js +86 -92
- package/dist/ui/interactive.js.map +1 -1
- package/dist/utils/banner.d.ts +2 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +190 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/cli-exit.d.ts +13 -0
- package/dist/utils/cli-exit.d.ts.map +1 -0
- package/dist/utils/cli-exit.js +29 -0
- package/dist/utils/cli-exit.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +11 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/config.d.ts +3 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/credentials.d.ts.map +1 -1
- package/dist/utils/credentials.js.map +1 -1
- package/dist/utils/device.d.ts.map +1 -1
- package/dist/utils/device.js +17 -6
- package/dist/utils/device.js.map +1 -1
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/module-matcher.d.ts.map +1 -1
- package/dist/utils/module-matcher.js +12 -7
- package/dist/utils/module-matcher.js.map +1 -1
- package/dist/utils/rate-limit.d.ts.map +1 -1
- package/dist/utils/rate-limit.js +12 -3
- package/dist/utils/rate-limit.js.map +1 -1
- package/dist/utils/recent-activity.d.ts +9 -0
- package/dist/utils/recent-activity.d.ts.map +1 -0
- package/dist/utils/recent-activity.js +139 -0
- package/dist/utils/recent-activity.js.map +1 -0
- package/dist/utils/skills.d.ts +2 -0
- package/dist/utils/skills.d.ts.map +1 -0
- package/dist/utils/skills.js +40 -0
- package/dist/utils/skills.js.map +1 -0
- package/dist/utils/update-check.d.ts +1 -2
- package/dist/utils/update-check.d.ts.map +1 -1
- package/dist/utils/update-check.js +21 -97
- package/dist/utils/update-check.js.map +1 -1
- package/package.json +83 -59
- package/skills/README.md +49 -0
- package/skills/business-rules-validation/SKILL.md +43 -0
- package/skills/kodus-pr-suggestions-resolver/SKILL.md +61 -0
- package/skills/kodus-review/SKILL.md +40 -0
- package/skills/kodus-review-dev/SKILL.md +41 -0
- package/skills/kodus-review-dev/scripts/run-local-cli.sh +49 -0
- package/dist/commands/__tests__/auth.login-logout.test.d.ts +0 -2
- package/dist/commands/__tests__/auth.login-logout.test.d.ts.map +0 -1
- package/dist/commands/__tests__/auth.login-logout.test.js +0 -125
- package/dist/commands/__tests__/auth.login-logout.test.js.map +0 -1
- package/dist/commands/__tests__/auth.team-key.test.d.ts +0 -2
- package/dist/commands/__tests__/auth.team-key.test.d.ts.map +0 -1
- package/dist/commands/__tests__/auth.team-key.test.js +0 -145
- package/dist/commands/__tests__/auth.team-key.test.js.map +0 -1
- package/dist/commands/__tests__/capture-api.test.d.ts +0 -2
- package/dist/commands/__tests__/capture-api.test.d.ts.map +0 -1
- package/dist/commands/__tests__/capture-api.test.js +0 -88
- package/dist/commands/__tests__/capture-api.test.js.map +0 -1
- package/dist/commands/__tests__/disable.test.d.ts +0 -2
- package/dist/commands/__tests__/disable.test.d.ts.map +0 -1
- package/dist/commands/__tests__/disable.test.js +0 -103
- package/dist/commands/__tests__/disable.test.js.map +0 -1
- package/dist/commands/__tests__/enable.test.d.ts +0 -2
- package/dist/commands/__tests__/enable.test.d.ts.map +0 -1
- package/dist/commands/__tests__/enable.test.js +0 -103
- package/dist/commands/__tests__/enable.test.js.map +0 -1
- package/dist/commands/__tests__/hook.test.d.ts +0 -2
- package/dist/commands/__tests__/hook.test.d.ts.map +0 -1
- package/dist/commands/__tests__/hook.test.js +0 -105
- package/dist/commands/__tests__/hook.test.js.map +0 -1
- package/dist/commands/__tests__/install-merge-hook.test.d.ts +0 -2
- package/dist/commands/__tests__/install-merge-hook.test.d.ts.map +0 -1
- package/dist/commands/__tests__/install-merge-hook.test.js +0 -54
- package/dist/commands/__tests__/install-merge-hook.test.js.map +0 -1
- package/dist/commands/upgrade.d.ts +0 -3
- package/dist/commands/upgrade.d.ts.map +0 -1
- package/dist/commands/upgrade.js +0 -35
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/services/__tests__/auth.service.test.d.ts +0 -2
- package/dist/services/__tests__/auth.service.test.d.ts.map +0 -1
- package/dist/services/__tests__/auth.service.test.js +0 -201
- package/dist/services/__tests__/auth.service.test.js.map +0 -1
- package/dist/services/__tests__/git.service.test.d.ts +0 -2
- package/dist/services/__tests__/git.service.test.d.ts.map +0 -1
- package/dist/services/__tests__/git.service.test.js +0 -61
- package/dist/services/__tests__/git.service.test.js.map +0 -1
- package/dist/services/__tests__/memory.service.test.d.ts +0 -2
- package/dist/services/__tests__/memory.service.test.d.ts.map +0 -1
- package/dist/services/__tests__/memory.service.test.js +0 -279
- package/dist/services/__tests__/memory.service.test.js.map +0 -1
- package/dist/services/__tests__/review.service.auth-fallback.test.d.ts +0 -2
- package/dist/services/__tests__/review.service.auth-fallback.test.d.ts.map +0 -1
- package/dist/services/__tests__/review.service.auth-fallback.test.js +0 -63
- package/dist/services/__tests__/review.service.auth-fallback.test.js.map +0 -1
- package/dist/services/__tests__/review.service.test.d.ts +0 -2
- package/dist/services/__tests__/review.service.test.d.ts.map +0 -1
- package/dist/services/__tests__/review.service.test.js +0 -132
- package/dist/services/__tests__/review.service.test.js.map +0 -1
- package/dist/services/__tests__/review.suggestions-auth.test.d.ts +0 -2
- package/dist/services/__tests__/review.suggestions-auth.test.d.ts.map +0 -1
- package/dist/services/__tests__/review.suggestions-auth.test.js +0 -81
- package/dist/services/__tests__/review.suggestions-auth.test.js.map +0 -1
- package/dist/services/__tests__/transcript-parser.service.test.d.ts +0 -2
- package/dist/services/__tests__/transcript-parser.service.test.d.ts.map +0 -1
- package/dist/services/__tests__/transcript-parser.service.test.js +0 -134
- package/dist/services/__tests__/transcript-parser.service.test.js.map +0 -1
- package/dist/services/api/__tests__/api.real.test.d.ts +0 -2
- package/dist/services/api/__tests__/api.real.test.d.ts.map +0 -1
- package/dist/services/api/__tests__/api.real.test.js +0 -182
- package/dist/services/api/__tests__/api.real.test.js.map +0 -1
- package/dist/utils/__tests__/config.test.d.ts +0 -2
- package/dist/utils/__tests__/config.test.d.ts.map +0 -1
- package/dist/utils/__tests__/config.test.js +0 -79
- package/dist/utils/__tests__/config.test.js.map +0 -1
- package/dist/utils/__tests__/credentials.test.d.ts +0 -2
- package/dist/utils/__tests__/credentials.test.d.ts.map +0 -1
- package/dist/utils/__tests__/credentials.test.js +0 -89
- package/dist/utils/__tests__/credentials.test.js.map +0 -1
- package/dist/utils/__tests__/device.test.d.ts +0 -2
- package/dist/utils/__tests__/device.test.d.ts.map +0 -1
- package/dist/utils/__tests__/device.test.js +0 -108
- package/dist/utils/__tests__/device.test.js.map +0 -1
- package/dist/utils/__tests__/module-matcher.test.d.ts +0 -2
- package/dist/utils/__tests__/module-matcher.test.d.ts.map +0 -1
- package/dist/utils/__tests__/module-matcher.test.js +0 -164
- package/dist/utils/__tests__/module-matcher.test.js.map +0 -1
- package/dist/utils/__tests__/update-check.test.d.ts +0 -2
- package/dist/utils/__tests__/update-check.test.d.ts.map +0 -1
- package/dist/utils/__tests__/update-check.test.js +0 -26
- package/dist/utils/__tests__/update-check.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<a href="https://www.npmjs.com/package/@kodus/cli"><img src="https://img.shields.io/npm/dm/@kodus/cli.svg" alt="npm downloads"></a>
|
|
12
12
|
<a href="https://github.com/kodustech/cli/blob/main/LICENSE"><img src="https://img.shields.io/github/license/kodustech/cli" alt="license"></a>
|
|
13
13
|
<a href="https://github.com/kodustech/cli"><img src="https://img.shields.io/github/stars/kodustech/cli" alt="stars"></a>
|
|
14
|
-
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%
|
|
14
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="node version"></a>
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
17
|
<p align="center">
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
|
|
26
|
+
yarn global add @kodus/cli
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
---
|
|
@@ -32,7 +32,7 @@ npm install -g @kodus/cli
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# 1. Install
|
|
35
|
-
|
|
35
|
+
yarn global add @kodus/cli
|
|
36
36
|
|
|
37
37
|
# 2. Authenticate (or skip for trial mode — no account needed)
|
|
38
38
|
kodus auth login
|
|
@@ -72,6 +72,22 @@ kodus pr suggestions --pr-number 42 --repo-id <id>
|
|
|
72
72
|
|
|
73
73
|
Filter by severity, export as JSON or Markdown, or pipe into an AI agent with `--prompt-only` for automated fixes.
|
|
74
74
|
|
|
75
|
+
### Business Validation (Local Diff vs Task)
|
|
76
|
+
|
|
77
|
+
Run Kodus business-rules validation directly from your local diff with optional task reference.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Working tree diff (default)
|
|
81
|
+
kodus pr business-validation
|
|
82
|
+
|
|
83
|
+
# Staged-only with explicit task reference
|
|
84
|
+
kodus pr business-validation --staged --task-id KC-1441
|
|
85
|
+
|
|
86
|
+
# Branch or files scope
|
|
87
|
+
kodus pr business-validation --branch main --task-id KC-1441
|
|
88
|
+
kodus pr business-validation src/service.ts src/use-case.ts --task-id KC-1441
|
|
89
|
+
```
|
|
90
|
+
|
|
75
91
|
### Decision Memory
|
|
76
92
|
|
|
77
93
|
AI agents make dozens of decisions per session — architecture choices, trade-offs, why approach X was picked over Y. Without a record, that reasoning vanishes when the session ends.
|
|
@@ -125,6 +141,7 @@ Add to your project's `CLAUDE.md`:
|
|
|
125
141
|
|
|
126
142
|
```markdown
|
|
127
143
|
## Code Review
|
|
144
|
+
|
|
128
145
|
After implementing changes, run `kodus review --prompt-only` to check for issues.
|
|
129
146
|
If issues are found, fix them and re-run until clean.
|
|
130
147
|
```
|
|
@@ -176,14 +193,33 @@ curl -fsSL https://review-skill.com/install | bash
|
|
|
176
193
|
|
|
177
194
|
Installs the CLI and deploys the review skill to all detected agents in one step.
|
|
178
195
|
|
|
196
|
+
### Keep everything updated
|
|
197
|
+
|
|
198
|
+
`kodus update` updates the CLI package only.
|
|
199
|
+
|
|
200
|
+
To sync/refresh skills and commands in supported agents (Claude Code, Cursor, Codex, etc.), run:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
curl -fsSL https://review-skill.com/install | bash
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
If you want to inspect the script before execution:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
curl -fsSL https://review-skill.com/install -o /tmp/kodus-install.sh
|
|
210
|
+
less /tmp/kodus-install.sh
|
|
211
|
+
bash /tmp/kodus-install.sh
|
|
212
|
+
```
|
|
213
|
+
|
|
179
214
|
### CLI only
|
|
180
215
|
|
|
181
216
|
<details>
|
|
182
|
-
<summary><strong>
|
|
217
|
+
<summary><strong>yarn</strong></summary>
|
|
183
218
|
|
|
184
219
|
```bash
|
|
185
|
-
|
|
220
|
+
yarn global add @kodus/cli
|
|
186
221
|
```
|
|
222
|
+
|
|
187
223
|
</details>
|
|
188
224
|
|
|
189
225
|
<details>
|
|
@@ -192,6 +228,7 @@ npm install -g @kodus/cli
|
|
|
192
228
|
```bash
|
|
193
229
|
npx @kodus/cli review
|
|
194
230
|
```
|
|
231
|
+
|
|
195
232
|
</details>
|
|
196
233
|
|
|
197
234
|
<details>
|
|
@@ -200,6 +237,7 @@ npx @kodus/cli review
|
|
|
200
237
|
```bash
|
|
201
238
|
curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bash
|
|
202
239
|
```
|
|
240
|
+
|
|
203
241
|
</details>
|
|
204
242
|
|
|
205
243
|
<details>
|
|
@@ -208,6 +246,7 @@ curl -fsSL https://raw.githubusercontent.com/kodustech/cli/main/install.sh | bas
|
|
|
208
246
|
```bash
|
|
209
247
|
brew install kodus/tap/kodus
|
|
210
248
|
```
|
|
249
|
+
|
|
211
250
|
</details>
|
|
212
251
|
|
|
213
252
|
## Review Modes
|
|
@@ -249,6 +288,18 @@ kodus review --prompt-only # AI agent output
|
|
|
249
288
|
kodus review --format markdown -o report.md # Save to file
|
|
250
289
|
```
|
|
251
290
|
|
|
291
|
+
#### Output Streams
|
|
292
|
+
|
|
293
|
+
- `stdout`: command result/payload (for example JSON/Markdown reports)
|
|
294
|
+
- `stderr`: debug traces (`--verbose`), spinner/progress messages, and errors
|
|
295
|
+
|
|
296
|
+
This keeps machine-readable output clean for piping:
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
kodus review --format json > review.json
|
|
300
|
+
kodus review --format json --verbose 1>review.json 2>review.debug.log
|
|
301
|
+
```
|
|
302
|
+
|
|
252
303
|
#### Diff Targets
|
|
253
304
|
|
|
254
305
|
```bash
|
|
@@ -261,20 +312,20 @@ kodus review src/index.ts src/utils.ts # Specific files
|
|
|
261
312
|
|
|
262
313
|
#### All Flags
|
|
263
314
|
|
|
264
|
-
| Flag
|
|
265
|
-
|
|
266
|
-
| `--staged`
|
|
267
|
-
| `--commit <sha>`
|
|
268
|
-
| `--branch <name>`
|
|
269
|
-
| `--rules-only`
|
|
270
|
-
| `--fast`
|
|
271
|
-
| `--fix`
|
|
272
|
-
| `--prompt-only`
|
|
273
|
-
| `--context <file>`
|
|
274
|
-
| `--format <fmt>`
|
|
275
|
-
| `--output <file>`
|
|
315
|
+
| Flag | Description |
|
|
316
|
+
| ---------------------- | --------------------------------------------- |
|
|
317
|
+
| `--staged` | Analyze only staged files |
|
|
318
|
+
| `--commit <sha>` | Analyze a specific commit |
|
|
319
|
+
| `--branch <name>` | Compare against a branch |
|
|
320
|
+
| `--rules-only` | Only check configured rules |
|
|
321
|
+
| `--fast` | Faster analysis for large diffs |
|
|
322
|
+
| `--fix` | Auto-apply all fixable issues |
|
|
323
|
+
| `--prompt-only` | AI agent optimized output |
|
|
324
|
+
| `--context <file>` | Include custom context file |
|
|
325
|
+
| `--format <fmt>` | Output format: `terminal`, `json`, `markdown` |
|
|
326
|
+
| `--output <file>` | Save output to file |
|
|
276
327
|
| `--fail-on <severity>` | Exit code 1 if issues meet or exceed severity |
|
|
277
|
-
| `-i, --interactive`
|
|
328
|
+
| `-i, --interactive` | Explicitly enable interactive mode |
|
|
278
329
|
|
|
279
330
|
</details>
|
|
280
331
|
|
|
@@ -387,11 +438,11 @@ kodus review --format json --fail-on error
|
|
|
387
438
|
<details>
|
|
388
439
|
<summary><strong>Environment variables</strong></summary>
|
|
389
440
|
|
|
390
|
-
| Variable
|
|
391
|
-
|
|
392
|
-
| `KODUS_API_URL`
|
|
393
|
-
| `KODUS_TOKEN`
|
|
394
|
-
| `KODUS_TEAM_KEY` | Team key for shared team access and AI coding agents
|
|
441
|
+
| Variable | Description |
|
|
442
|
+
| ---------------- | ------------------------------------------------------------------------------ |
|
|
443
|
+
| `KODUS_API_URL` | API endpoint (default: `https://api.kodus.io`). HTTPS only (except localhost). |
|
|
444
|
+
| `KODUS_TOKEN` | CI/CD token for automated pipelines (generated via `kodus auth token`) |
|
|
445
|
+
| `KODUS_TEAM_KEY` | Team key for shared team access and AI coding agents |
|
|
395
446
|
|
|
396
447
|
</details>
|
|
397
448
|
|
|
@@ -409,10 +460,10 @@ Kodus sends your code diffs to the Kodus API for analysis. We take this seriousl
|
|
|
409
460
|
We welcome contributions! Please see our [issues page](https://github.com/kodustech/cli/issues) to get started.
|
|
410
461
|
|
|
411
462
|
```bash
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
463
|
+
yarn install # Install dependencies
|
|
464
|
+
yarn build # Build
|
|
465
|
+
yarn dev # Watch mode
|
|
466
|
+
yarn test # Run tests
|
|
416
467
|
```
|
|
417
468
|
|
|
418
469
|
## License
|
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;AAgBpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2C9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -2,14 +2,19 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { reviewCommand } from './commands/review.js';
|
|
4
4
|
import { authCommand } from './commands/auth/index.js';
|
|
5
|
-
import {
|
|
5
|
+
import { subscribeCommand } from './commands/subscribe.js';
|
|
6
|
+
import { updateCommand } from './commands/update.js';
|
|
6
7
|
import { prCommand } from './commands/pr.js';
|
|
7
8
|
import { hookCommand } from './commands/hook/index.js';
|
|
8
9
|
import { decisionsCommand } from './commands/memory/index.js';
|
|
10
|
+
import { statusCommand } from './commands/status.js';
|
|
9
11
|
import { checkForUpdates } from './utils/update-check.js';
|
|
12
|
+
import { setCliOutputMode } from './utils/logger.js';
|
|
13
|
+
import { recordRecentActivity } from './utils/recent-activity.js';
|
|
10
14
|
const require = createRequire(import.meta.url);
|
|
11
15
|
const pkg = require('../package.json');
|
|
12
16
|
const program = new Command();
|
|
17
|
+
program.exitOverride();
|
|
13
18
|
program
|
|
14
19
|
.name('kodus')
|
|
15
20
|
.description('Kodus CLI - AI-powered code review from your terminal')
|
|
@@ -20,12 +25,24 @@ program
|
|
|
20
25
|
.option('-q, --quiet', 'Quiet mode (errors only)', false);
|
|
21
26
|
program.addCommand(reviewCommand);
|
|
22
27
|
program.addCommand(authCommand);
|
|
23
|
-
program.addCommand(
|
|
28
|
+
program.addCommand(subscribeCommand);
|
|
29
|
+
program.addCommand(updateCommand);
|
|
24
30
|
program.addCommand(prCommand);
|
|
25
31
|
program.addCommand(hookCommand);
|
|
26
32
|
program.addCommand(decisionsCommand);
|
|
33
|
+
program.addCommand(statusCommand);
|
|
34
|
+
program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
35
|
+
const opts = actionCommand.optsWithGlobals();
|
|
36
|
+
setCliOutputMode({
|
|
37
|
+
quiet: !!opts.quiet,
|
|
38
|
+
verbose: !!opts.verbose,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
27
41
|
program.hook('postAction', async () => {
|
|
28
|
-
await
|
|
42
|
+
await Promise.all([
|
|
43
|
+
checkForUpdates(),
|
|
44
|
+
recordRecentActivity(process.argv.slice(2)).catch(() => { }),
|
|
45
|
+
]);
|
|
29
46
|
});
|
|
30
47
|
export { program };
|
|
31
48
|
//# 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,
|
|
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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,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;AAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;AAEvB,OAAO;KACF,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CACH,uBAAuB,EACvB,yCAAyC,EACzC,UAAU,CACb;KACA,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;AAE9D,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,EAGzC,CAAC;IACF,gBAAgB,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;QACnB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;KAC1B,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;IAClC,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,eAAe,EAAE;QACjB,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;KAC9D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1 +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,
|
|
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,SAEvB,CAAC"}
|
|
@@ -4,8 +4,7 @@ import { logoutAction } from './logout.js';
|
|
|
4
4
|
import { statusAction } from './status.js';
|
|
5
5
|
import { tokenAction } from './token.js';
|
|
6
6
|
import { teamKeyAction, teamStatusAction } from './team-key.js';
|
|
7
|
-
export const authCommand = new Command('auth')
|
|
8
|
-
.description('Authentication commands');
|
|
7
|
+
export const authCommand = new Command('auth').description('Authentication commands');
|
|
9
8
|
authCommand
|
|
10
9
|
.command('login')
|
|
11
10
|
.description('Login with email and password')
|
|
@@ -1 +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
|
|
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,CAAC,WAAW,CACtD,yBAAyB,CAC5B,CAAC;AAEF,WAAW;KACN,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;AAEzB,WAAW;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,YAAY,CAAC,CAAC;AAE1B,WAAW;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,YAAY,CAAC,CAAC;AAE1B,WAAW;KACN,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEzB,WAAW;KACN,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,cAAc,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,aAAa,CAAC,CAAC;AAE3B,WAAW;KACN,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EtE"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { input, password, confirm } from '@inquirer/prompts';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import ora from 'ora';
|
|
4
4
|
import { authService } from '../../services/auth.service.js';
|
|
5
|
+
import { exitWithCode } from '../../utils/cli-exit.js';
|
|
6
|
+
import { cliError, cliInfo } from '../../utils/logger.js';
|
|
5
7
|
export async function loginAction(options) {
|
|
6
8
|
const spinner = ora();
|
|
7
9
|
try {
|
|
@@ -9,62 +11,59 @@ export async function loginAction(options) {
|
|
|
9
11
|
if (isAuthenticated && !options.email) {
|
|
10
12
|
const credentials = await authService.getCredentials();
|
|
11
13
|
const email = credentials?.user?.email;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]);
|
|
23
|
-
if (!confirm) {
|
|
14
|
+
cliInfo(chalk.yellow(email
|
|
15
|
+
? `\nAlready logged in as ${email}`
|
|
16
|
+
: '\nAlready authenticated with team key'));
|
|
17
|
+
const shouldRelogin = await confirm({
|
|
18
|
+
message: email
|
|
19
|
+
? 'Do you want to login with a different account?'
|
|
20
|
+
: 'Do you want to login with an account instead?',
|
|
21
|
+
default: false,
|
|
22
|
+
});
|
|
23
|
+
if (!shouldRelogin) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
let email = options.email;
|
|
28
|
-
let
|
|
29
|
-
if (!email
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return true;
|
|
52
|
-
},
|
|
53
|
-
}] : []),
|
|
54
|
-
]);
|
|
55
|
-
email = email || answers.email;
|
|
56
|
-
password = password || answers.password;
|
|
28
|
+
let pwd = options.password;
|
|
29
|
+
if (!email) {
|
|
30
|
+
email = await input({
|
|
31
|
+
message: 'Email:',
|
|
32
|
+
validate: (value) => {
|
|
33
|
+
if (!value || !value.includes('@')) {
|
|
34
|
+
return 'Please enter a valid email';
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (!pwd) {
|
|
41
|
+
pwd = await password({
|
|
42
|
+
message: 'Password:',
|
|
43
|
+
mask: '*',
|
|
44
|
+
validate: (value) => {
|
|
45
|
+
if (!value || value.length < 6) {
|
|
46
|
+
return 'Password must be at least 6 characters';
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
},
|
|
50
|
+
});
|
|
57
51
|
}
|
|
58
52
|
spinner.start(chalk.blue('Logging in...'));
|
|
59
|
-
await authService.login(email,
|
|
53
|
+
await authService.login(email, pwd);
|
|
60
54
|
spinner.succeed(chalk.green(`Logged in as ${email}`));
|
|
61
55
|
}
|
|
62
56
|
catch (error) {
|
|
57
|
+
// Check if user cancelled prompt (Ctrl+C throws Error)
|
|
58
|
+
if (error instanceof Error && error.message.includes('force closed')) {
|
|
59
|
+
cliInfo(chalk.yellow('\nOperation cancelled'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
63
62
|
spinner.fail(chalk.red('Login failed'));
|
|
64
63
|
if (error instanceof Error) {
|
|
65
|
-
|
|
64
|
+
cliError(chalk.red(error.message));
|
|
66
65
|
}
|
|
67
|
-
|
|
66
|
+
exitWithCode(1);
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,
|
|
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":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBlD"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { authService } from '../../services/auth.service.js';
|
|
4
|
+
import { exitWithCode } from '../../utils/cli-exit.js';
|
|
5
|
+
import { cliError, cliInfo } from '../../utils/logger.js';
|
|
4
6
|
export async function logoutAction() {
|
|
5
7
|
const spinner = ora();
|
|
6
8
|
try {
|
|
7
9
|
const isAuthenticated = await authService.isAuthenticated();
|
|
8
10
|
if (!isAuthenticated) {
|
|
9
|
-
|
|
11
|
+
cliInfo(chalk.yellow('\nNot authenticated.'));
|
|
10
12
|
return;
|
|
11
13
|
}
|
|
12
14
|
spinner.start(chalk.blue('Logging out...'));
|
|
@@ -16,9 +18,9 @@ export async function logoutAction() {
|
|
|
16
18
|
catch (error) {
|
|
17
19
|
spinner.fail(chalk.red('Logout failed'));
|
|
18
20
|
if (error instanceof Error) {
|
|
19
|
-
|
|
21
|
+
cliError(chalk.red(error.message));
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
exitWithCode(1);
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +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;
|
|
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;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QAE5D,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC9C,OAAO;QACX,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;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,YAAY,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA4GlD"}
|
|
@@ -3,6 +3,8 @@ import ora from 'ora';
|
|
|
3
3
|
import { authService } from '../../services/auth.service.js';
|
|
4
4
|
import { loadConfig } from '../../utils/config.js';
|
|
5
5
|
import { checkTrialStatus } from '../../utils/rate-limit.js';
|
|
6
|
+
import { exitWithCode } from '../../utils/cli-exit.js';
|
|
7
|
+
import { cliError, cliInfo } from '../../utils/logger.js';
|
|
6
8
|
export async function statusAction() {
|
|
7
9
|
const spinner = ora();
|
|
8
10
|
try {
|
|
@@ -13,43 +15,43 @@ export async function statusAction() {
|
|
|
13
15
|
const hasTeamKey = !!teamConfig?.teamKey;
|
|
14
16
|
const hasUserEmail = !!credentials?.user?.email;
|
|
15
17
|
if (!hasUserEmail && hasTeamKey) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
cliInfo(chalk.bold('\nAuthentication Status\n'));
|
|
19
|
+
cliInfo(`${chalk.dim('Mode:')} ${chalk.green('Team Key')}`);
|
|
20
|
+
cliInfo(`${chalk.dim('Organization:')} ${teamConfig?.organizationName ?? '(unknown)'}`);
|
|
21
|
+
cliInfo(`${chalk.dim('Team:')} ${teamConfig?.teamName ?? '(unknown)'}`);
|
|
22
|
+
cliInfo(`${chalk.dim('Token:')} ${chalk.green('Configured')}`);
|
|
21
23
|
return;
|
|
22
24
|
}
|
|
23
25
|
if (!credentials) {
|
|
24
|
-
|
|
26
|
+
cliInfo(chalk.yellow('\nNo credentials found.'));
|
|
25
27
|
return;
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
cliInfo(chalk.bold('\nAuthentication Status\n'));
|
|
30
|
+
cliInfo(`${chalk.dim('Mode:')} ${chalk.green('Logged In')}`);
|
|
31
|
+
cliInfo(`${chalk.dim('Email:')} ${credentials.user?.email ?? '(unknown)'}`);
|
|
30
32
|
const expiresAt = new Date(credentials.expiresAt);
|
|
31
33
|
const timeUntilExpiry = expiresAt.getTime() - Date.now();
|
|
32
34
|
const hoursUntilExpiry = Math.floor(timeUntilExpiry / (1000 * 60 * 60));
|
|
33
35
|
if (timeUntilExpiry > 0) {
|
|
34
36
|
if (hoursUntilExpiry < 1) {
|
|
35
|
-
|
|
37
|
+
cliInfo(`${chalk.dim('Token:')} ${chalk.yellow('Expires in < 1 hour')}`);
|
|
36
38
|
}
|
|
37
39
|
else if (hoursUntilExpiry < 24) {
|
|
38
|
-
|
|
40
|
+
cliInfo(`${chalk.dim('Token:')} ${chalk.yellow(`Expires in ${hoursUntilExpiry} hours`)}`);
|
|
39
41
|
}
|
|
40
42
|
else {
|
|
41
|
-
|
|
43
|
+
cliInfo(`${chalk.dim('Token:')} ${chalk.green('Valid')}`);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
else {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
cliInfo(`${chalk.dim('Token:')} ${chalk.red('Expired')}`);
|
|
48
|
+
cliInfo(chalk.yellow('\nYour session has expired. Run `kodus auth login` to refresh.'));
|
|
47
49
|
return;
|
|
48
50
|
}
|
|
49
51
|
if (credentials.user?.orgs && credentials.user.orgs.length > 0) {
|
|
50
|
-
|
|
52
|
+
cliInfo(`${chalk.dim('Organizations:')}`);
|
|
51
53
|
credentials.user.orgs.forEach((org) => {
|
|
52
|
-
|
|
54
|
+
cliInfo(` ${chalk.dim('•')} ${org}`);
|
|
53
55
|
});
|
|
54
56
|
}
|
|
55
57
|
}
|
|
@@ -57,23 +59,24 @@ export async function statusAction() {
|
|
|
57
59
|
spinner.start(chalk.blue('Checking trial status...'));
|
|
58
60
|
const trialStatus = await checkTrialStatus();
|
|
59
61
|
spinner.stop();
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
cliInfo(chalk.bold('\nAuthentication Status\n'));
|
|
63
|
+
cliInfo(`${chalk.dim('Mode:')} ${chalk.yellow('Trial')}`);
|
|
64
|
+
cliInfo(`${chalk.dim('Reviews today:')} ${trialStatus.reviewsUsed}/${trialStatus.reviewsLimit}`);
|
|
65
|
+
cliInfo(`${chalk.dim('Files limit:')} ${trialStatus.filesLimit} per review`);
|
|
66
|
+
cliInfo(`${chalk.dim('Resets at:')} ${new Date(trialStatus.resetsAt).toLocaleString()}`);
|
|
65
67
|
if (trialStatus.isLimited) {
|
|
66
|
-
|
|
68
|
+
cliInfo(chalk.yellow('\n⚡ Daily limit reached!'));
|
|
67
69
|
}
|
|
68
|
-
|
|
70
|
+
cliInfo(chalk.dim('\nSign up to remove limits: ') +
|
|
71
|
+
chalk.cyan('kodus auth login'));
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
catch (error) {
|
|
72
75
|
spinner.fail(chalk.red('Failed to get status'));
|
|
73
76
|
if (error instanceof Error) {
|
|
74
|
-
|
|
77
|
+
cliError(chalk.red(error.message));
|
|
75
78
|
}
|
|
76
|
-
|
|
79
|
+
exitWithCode(1);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
//# sourceMappingURL=status.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-key.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/team-key.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"team-key.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/team-key.ts"],"names":[],"mappings":"AAmCA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyG5E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetD"}
|