craftcommit-cli 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 +222 -0
- package/dist/ai.d.ts +9 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +189 -0
- package/dist/ai.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +262 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +94 -0
- package/dist/config.js.map +1 -0
- package/package.json +52 -0
- package/src/ai.ts +268 -0
- package/src/cli.ts +310 -0
- package/src/config.ts +118 -0
- package/tsconfig.json +20 -0
package/README.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# CommitCraft CLI
|
|
2
|
+
|
|
3
|
+
Generate AI-powered commit messages from your terminal.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g commitcraft-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or use with npx:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx commitcraft-cli
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
1. Stage your changes:
|
|
20
|
+
```bash
|
|
21
|
+
git add .
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. Generate commit message:
|
|
25
|
+
```bash
|
|
26
|
+
commitcraft
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
3. Select from 3 AI-generated options:
|
|
30
|
+
```
|
|
31
|
+
? Select a commit message:
|
|
32
|
+
❯ 1. feat(auth): add OAuth2 login support
|
|
33
|
+
2. feat(auth): implement authentication flow
|
|
34
|
+
3. feat: add social login feature
|
|
35
|
+
Cancel
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
4. The selected message is copied to your clipboard!
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
### Generate commit message (default command)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
commitcraft
|
|
46
|
+
# or
|
|
47
|
+
commitcraft generate
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Auto-commit with selected message
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
commitcraft --commit
|
|
54
|
+
# or
|
|
55
|
+
commitcraft -c
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Specify provider and options
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
commitcraft -p openai -m gpt-4 -l english
|
|
62
|
+
commitcraft -p groq
|
|
63
|
+
commitcraft -p ollama -m llama3.2
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Configure API keys
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
commitcraft config
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Options
|
|
73
|
+
|
|
74
|
+
| Option | Alias | Description |
|
|
75
|
+
|--------|-------|-------------|
|
|
76
|
+
| `--provider` | `-p` | AI provider: `openai`, `groq`, `gemini`, `ollama` |
|
|
77
|
+
| `--model` | `-m` | Specific model to use |
|
|
78
|
+
| `--language` | `-l` | Language: `english` or `korean` |
|
|
79
|
+
| `--commit` | `-c` | Auto-commit with selected message |
|
|
80
|
+
| `--issue-pattern` | | Regex to extract issue from branch |
|
|
81
|
+
| `--issue-prefix` | | Prefix for issue (e.g., `#`) |
|
|
82
|
+
|
|
83
|
+
## Configuration
|
|
84
|
+
|
|
85
|
+
### Environment Variables
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
export OPENAI_API_KEY="sk-..."
|
|
89
|
+
export GROQ_API_KEY="gsk_..."
|
|
90
|
+
export GEMINI_API_KEY="AI..."
|
|
91
|
+
export OLLAMA_URL="http://localhost:11434"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Config File (~/.commitcraftrc)
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"provider": "openai",
|
|
99
|
+
"model": "gpt-4o-mini",
|
|
100
|
+
"language": "english",
|
|
101
|
+
"openaiApiKey": "sk-...",
|
|
102
|
+
"groqApiKey": "gsk_...",
|
|
103
|
+
"geminiApiKey": "AI..."
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### .env File
|
|
108
|
+
|
|
109
|
+
You can also use a `.env` file in your project or home directory:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
OPENAI_API_KEY=sk-...
|
|
113
|
+
GROQ_API_KEY=gsk_...
|
|
114
|
+
COMMITCRAFT_PROVIDER=openai
|
|
115
|
+
COMMITCRAFT_LANGUAGE=english
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Issue Linking
|
|
119
|
+
|
|
120
|
+
Extract issue numbers from branch names:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Branch: feature/123-add-login
|
|
124
|
+
commitcraft --issue-pattern "feature/(\d+)" --issue-prefix "#"
|
|
125
|
+
# Result: feat(auth): add login validation #123
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Branch: JIRA-456-fix-bug
|
|
130
|
+
commitcraft --issue-pattern "(JIRA-\d+)"
|
|
131
|
+
# Result: fix(api): resolve null pointer JIRA-456
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Providers
|
|
135
|
+
|
|
136
|
+
### OpenAI (default)
|
|
137
|
+
- Default model: `gpt-4o-mini`
|
|
138
|
+
- Requires: `OPENAI_API_KEY`
|
|
139
|
+
- Get key: https://platform.openai.com/api-keys
|
|
140
|
+
|
|
141
|
+
### Groq
|
|
142
|
+
- Default model: `llama-3.1-8b-instant`
|
|
143
|
+
- Requires: `GROQ_API_KEY`
|
|
144
|
+
- Get key: https://console.groq.com/keys
|
|
145
|
+
- Fast and free tier available
|
|
146
|
+
|
|
147
|
+
### Gemini
|
|
148
|
+
- Default model: `gemini-1.5-flash`
|
|
149
|
+
- Requires: `GEMINI_API_KEY`
|
|
150
|
+
- Get key: https://aistudio.google.com/app/apikey
|
|
151
|
+
|
|
152
|
+
### Ollama (Local/Offline)
|
|
153
|
+
- Default model: `llama3.2`
|
|
154
|
+
- No API key required
|
|
155
|
+
- Install: https://ollama.ai/
|
|
156
|
+
- Run: `ollama pull llama3.2`
|
|
157
|
+
|
|
158
|
+
## Examples
|
|
159
|
+
|
|
160
|
+
### Basic usage
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
$ git add src/auth.ts
|
|
164
|
+
$ commitcraft
|
|
165
|
+
|
|
166
|
+
✓ Got staged changes
|
|
167
|
+
✓ Generated commit messages
|
|
168
|
+
|
|
169
|
+
? Select a commit message:
|
|
170
|
+
❯ 1. feat(auth): add password validation
|
|
171
|
+
2. feat(auth): implement input validation for login
|
|
172
|
+
3. feat: add authentication validation
|
|
173
|
+
Cancel
|
|
174
|
+
|
|
175
|
+
✓ Copied to clipboard: feat(auth): add password validation
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Auto-commit
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
$ commitcraft --commit
|
|
182
|
+
|
|
183
|
+
✓ Got staged changes
|
|
184
|
+
✓ Generated commit messages
|
|
185
|
+
|
|
186
|
+
? Select a commit message: 1. feat(auth): add password validation
|
|
187
|
+
✓ Committed: feat(auth): add password validation
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Korean language
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
$ commitcraft -l korean
|
|
194
|
+
|
|
195
|
+
✓ Got staged changes
|
|
196
|
+
✓ Generated commit messages
|
|
197
|
+
|
|
198
|
+
? Select a commit message:
|
|
199
|
+
❯ 1. feat(auth): 비밀번호 유효성 검사 추가
|
|
200
|
+
2. feat(auth): 로그인 입력값 검증 구현
|
|
201
|
+
3. feat: 인증 유효성 검사 추가
|
|
202
|
+
Cancel
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Supported Commit Types
|
|
206
|
+
|
|
207
|
+
| Type | Description |
|
|
208
|
+
|------|-------------|
|
|
209
|
+
| `feat` | New feature |
|
|
210
|
+
| `fix` | Bug fix |
|
|
211
|
+
| `docs` | Documentation |
|
|
212
|
+
| `style` | Formatting |
|
|
213
|
+
| `refactor` | Code refactoring |
|
|
214
|
+
| `perf` | Performance |
|
|
215
|
+
| `test` | Tests |
|
|
216
|
+
| `build` | Build system |
|
|
217
|
+
| `ci` | CI/CD |
|
|
218
|
+
| `chore` | Maintenance |
|
|
219
|
+
|
|
220
|
+
## License
|
|
221
|
+
|
|
222
|
+
MIT
|
package/dist/ai.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Provider, Language } from './config.js';
|
|
2
|
+
export interface CommitMessage {
|
|
3
|
+
type: string;
|
|
4
|
+
scope?: string;
|
|
5
|
+
subject: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateCommitMessages(provider: Provider, apiKey: string, diff: string, fileSummary: string, model: string, language: Language, ollamaUrl?: string, issueReference?: string): Promise<CommitMessage[]>;
|
|
8
|
+
export declare function formatCommitMessage(commit: CommitMessage): string;
|
|
9
|
+
//# sourceMappingURL=ai.d.ts.map
|
package/dist/ai.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAsOD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAa1B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAKjE"}
|
package/dist/ai.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
3
|
+
const SYSTEM_PROMPT_EN = `You are a commit message generator. Analyze the git diff and generate 3 different commit message suggestions following Conventional Commits format.
|
|
4
|
+
|
|
5
|
+
Output JSON only: { "candidates": [{ "type": "...", "scope": "...", "subject": "..." }, ...] }
|
|
6
|
+
|
|
7
|
+
Rules:
|
|
8
|
+
- type: one of feat, fix, docs, style, refactor, perf, test, build, ci, chore
|
|
9
|
+
- scope: optional, short identifier for affected area (e.g., "auth", "api", "ui"). Omit if changes span multiple areas
|
|
10
|
+
- subject: imperative mood (e.g., "add", "fix", "update"), max 72 chars, no period at end, lowercase first letter
|
|
11
|
+
- Provide 3 different variations with different wording or focus
|
|
12
|
+
|
|
13
|
+
Example output:
|
|
14
|
+
{ "candidates": [
|
|
15
|
+
{ "type": "feat", "scope": "auth", "subject": "add OAuth2 login support" },
|
|
16
|
+
{ "type": "feat", "scope": "auth", "subject": "implement OAuth2 authentication flow" },
|
|
17
|
+
{ "type": "feat", "subject": "add social login via OAuth2" }
|
|
18
|
+
]}`;
|
|
19
|
+
const SYSTEM_PROMPT_KO = `You are a commit message generator. Analyze the git diff and generate 3 different commit message suggestions following Conventional Commits format.
|
|
20
|
+
|
|
21
|
+
Output JSON only: { "candidates": [{ "type": "...", "scope": "...", "subject": "..." }, ...] }
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
- type: one of feat, fix, docs, style, refactor, perf, test, build, ci, chore (MUST be in English)
|
|
25
|
+
- scope: optional, short identifier for affected area (MUST be in English)
|
|
26
|
+
- subject: MUST be written in Korean, max 72 chars, no period at end
|
|
27
|
+
- Provide 3 different variations with different wording or focus
|
|
28
|
+
|
|
29
|
+
Example output:
|
|
30
|
+
{ "candidates": [
|
|
31
|
+
{ "type": "feat", "scope": "auth", "subject": "OAuth2 로그인 지원 추가" },
|
|
32
|
+
{ "type": "feat", "scope": "auth", "subject": "OAuth2 인증 흐름 구현" },
|
|
33
|
+
{ "type": "feat", "subject": "OAuth2를 통한 소셜 로그인 추가" }
|
|
34
|
+
]}`;
|
|
35
|
+
function getSystemPrompt(language, issueReference) {
|
|
36
|
+
let prompt = language === 'korean' ? SYSTEM_PROMPT_KO : SYSTEM_PROMPT_EN;
|
|
37
|
+
if (issueReference) {
|
|
38
|
+
prompt += `\n\nIMPORTANT: Include "${issueReference}" at the end of each subject.`;
|
|
39
|
+
}
|
|
40
|
+
return prompt;
|
|
41
|
+
}
|
|
42
|
+
function buildUserPrompt(diff, fileSummary) {
|
|
43
|
+
return `Generate 3 commit message candidates for the following changes:
|
|
44
|
+
|
|
45
|
+
## Files Changed:
|
|
46
|
+
${fileSummary || 'No files changed'}
|
|
47
|
+
|
|
48
|
+
## Diff:
|
|
49
|
+
${diff || 'No diff available'}`;
|
|
50
|
+
}
|
|
51
|
+
function parseJsonFromText(text) {
|
|
52
|
+
const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/) ||
|
|
53
|
+
text.match(/(\{[\s\S]*\})/);
|
|
54
|
+
if (jsonMatch) {
|
|
55
|
+
return JSON.parse(jsonMatch[1].trim());
|
|
56
|
+
}
|
|
57
|
+
return JSON.parse(text);
|
|
58
|
+
}
|
|
59
|
+
function validateCandidates(data) {
|
|
60
|
+
if (typeof data !== 'object' || data === null) {
|
|
61
|
+
throw new Error('Response is not an object');
|
|
62
|
+
}
|
|
63
|
+
const obj = data;
|
|
64
|
+
if (!Array.isArray(obj.candidates)) {
|
|
65
|
+
throw new Error('Missing candidates array');
|
|
66
|
+
}
|
|
67
|
+
return obj.candidates.slice(0, 3).map((candidate) => {
|
|
68
|
+
const c = candidate;
|
|
69
|
+
let subject = String(c.subject || '').trim();
|
|
70
|
+
if (subject.endsWith('.')) {
|
|
71
|
+
subject = subject.slice(0, -1);
|
|
72
|
+
}
|
|
73
|
+
if (subject.length > 72) {
|
|
74
|
+
subject = subject.substring(0, 69) + '...';
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
type: String(c.type || 'chore'),
|
|
78
|
+
scope: c.scope ? String(c.scope).trim() : undefined,
|
|
79
|
+
subject
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async function callOpenAI(apiKey, model, diff, fileSummary, language, issueReference) {
|
|
84
|
+
const client = new OpenAI({ apiKey });
|
|
85
|
+
const response = await client.chat.completions.create({
|
|
86
|
+
model,
|
|
87
|
+
messages: [
|
|
88
|
+
{ role: 'system', content: getSystemPrompt(language, issueReference) },
|
|
89
|
+
{ role: 'user', content: buildUserPrompt(diff, fileSummary) }
|
|
90
|
+
],
|
|
91
|
+
response_format: { type: 'json_object' },
|
|
92
|
+
temperature: 0.7,
|
|
93
|
+
max_tokens: 500
|
|
94
|
+
});
|
|
95
|
+
const content = response.choices[0]?.message?.content;
|
|
96
|
+
if (!content) {
|
|
97
|
+
throw new Error('Empty response from OpenAI');
|
|
98
|
+
}
|
|
99
|
+
return validateCandidates(JSON.parse(content));
|
|
100
|
+
}
|
|
101
|
+
async function callGroq(apiKey, model, diff, fileSummary, language, issueReference) {
|
|
102
|
+
const client = new OpenAI({
|
|
103
|
+
apiKey,
|
|
104
|
+
baseURL: 'https://api.groq.com/openai/v1'
|
|
105
|
+
});
|
|
106
|
+
const response = await client.chat.completions.create({
|
|
107
|
+
model,
|
|
108
|
+
messages: [
|
|
109
|
+
{ role: 'system', content: getSystemPrompt(language, issueReference) },
|
|
110
|
+
{ role: 'user', content: buildUserPrompt(diff, fileSummary) }
|
|
111
|
+
],
|
|
112
|
+
response_format: { type: 'json_object' },
|
|
113
|
+
temperature: 0.7,
|
|
114
|
+
max_tokens: 500
|
|
115
|
+
});
|
|
116
|
+
const content = response.choices[0]?.message?.content;
|
|
117
|
+
if (!content) {
|
|
118
|
+
throw new Error('Empty response from Groq');
|
|
119
|
+
}
|
|
120
|
+
return validateCandidates(JSON.parse(content));
|
|
121
|
+
}
|
|
122
|
+
async function callGemini(apiKey, model, diff, fileSummary, language, issueReference) {
|
|
123
|
+
const genAI = new GoogleGenerativeAI(apiKey);
|
|
124
|
+
const geminiModel = genAI.getGenerativeModel({
|
|
125
|
+
model,
|
|
126
|
+
generationConfig: {
|
|
127
|
+
temperature: 0.7,
|
|
128
|
+
maxOutputTokens: 500,
|
|
129
|
+
responseMimeType: 'application/json'
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
const prompt = `${getSystemPrompt(language, issueReference)}
|
|
133
|
+
|
|
134
|
+
${buildUserPrompt(diff, fileSummary)}`;
|
|
135
|
+
const result = await geminiModel.generateContent(prompt);
|
|
136
|
+
const text = result.response.text();
|
|
137
|
+
if (!text) {
|
|
138
|
+
throw new Error('Empty response from Gemini');
|
|
139
|
+
}
|
|
140
|
+
return validateCandidates(parseJsonFromText(text));
|
|
141
|
+
}
|
|
142
|
+
async function callOllama(ollamaUrl, model, diff, fileSummary, language, issueReference) {
|
|
143
|
+
const response = await fetch(`${ollamaUrl}/api/chat`, {
|
|
144
|
+
method: 'POST',
|
|
145
|
+
headers: { 'Content-Type': 'application/json' },
|
|
146
|
+
body: JSON.stringify({
|
|
147
|
+
model,
|
|
148
|
+
messages: [
|
|
149
|
+
{ role: 'system', content: getSystemPrompt(language, issueReference) },
|
|
150
|
+
{ role: 'user', content: buildUserPrompt(diff, fileSummary) }
|
|
151
|
+
],
|
|
152
|
+
format: 'json',
|
|
153
|
+
stream: false
|
|
154
|
+
})
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
if (response.status === 404) {
|
|
158
|
+
throw new Error(`Model "${model}" not found. Run: ollama pull ${model}`);
|
|
159
|
+
}
|
|
160
|
+
throw new Error(`Ollama request failed: ${response.status}`);
|
|
161
|
+
}
|
|
162
|
+
const data = await response.json();
|
|
163
|
+
const content = data.message?.content;
|
|
164
|
+
if (!content) {
|
|
165
|
+
throw new Error('Empty response from Ollama');
|
|
166
|
+
}
|
|
167
|
+
return validateCandidates(parseJsonFromText(content));
|
|
168
|
+
}
|
|
169
|
+
export async function generateCommitMessages(provider, apiKey, diff, fileSummary, model, language, ollamaUrl, issueReference) {
|
|
170
|
+
switch (provider) {
|
|
171
|
+
case 'openai':
|
|
172
|
+
return callOpenAI(apiKey, model, diff, fileSummary, language, issueReference);
|
|
173
|
+
case 'groq':
|
|
174
|
+
return callGroq(apiKey, model, diff, fileSummary, language, issueReference);
|
|
175
|
+
case 'gemini':
|
|
176
|
+
return callGemini(apiKey, model, diff, fileSummary, language, issueReference);
|
|
177
|
+
case 'ollama':
|
|
178
|
+
return callOllama(ollamaUrl || 'http://localhost:11434', model, diff, fileSummary, language, issueReference);
|
|
179
|
+
default:
|
|
180
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export function formatCommitMessage(commit) {
|
|
184
|
+
if (commit.scope) {
|
|
185
|
+
return `${commit.type}(${commit.scope}): ${commit.subject}`;
|
|
186
|
+
}
|
|
187
|
+
return `${commit.type}: ${commit.subject}`;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=ai.js.map
|
package/dist/ai.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|