@reck98/git-smart 1.0.0 → 1.0.2
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 +108 -14
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +6 -6
- package/dist/ai/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +40 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/core/config.d.ts +9 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +79 -15
- package/dist/core/config.js.map +1 -1
- package/dist/core/types.d.ts +27 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +1 -0
- package/dist/core/types.js.map +1 -1
- package/dist/prompts/index.d.ts +9 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +52 -0
- package/dist/prompts/index.js.map +1 -1
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -24,10 +24,26 @@ npx git-smart
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Install globally
|
|
31
|
+
npm install -g git-smart
|
|
32
|
+
|
|
33
|
+
# Run the config wizard (required before first use)
|
|
34
|
+
git-smart config
|
|
35
|
+
|
|
36
|
+
# Run the full workflow
|
|
37
|
+
git-smart
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
27
42
|
## Commands
|
|
28
43
|
|
|
29
44
|
| Command | Description |
|
|
30
45
|
|---|---|
|
|
46
|
+
| `git-smart config` | Interactive configuration wizard for AI provider and API keys |
|
|
31
47
|
| `git-smart` | Full workflow: prechecks → stage → AI summary → commit → push |
|
|
32
48
|
| `git-smart --dry-run` | Generate summary and messages; no commit or push |
|
|
33
49
|
| `git-smart summary` | Generate change summary only |
|
|
@@ -41,6 +57,8 @@ npx git-smart
|
|
|
41
57
|
```
|
|
42
58
|
START
|
|
43
59
|
↓
|
|
60
|
+
Configuration Gate (must be configured)
|
|
61
|
+
↓
|
|
44
62
|
Validate Repository
|
|
45
63
|
↓
|
|
46
64
|
Validate .gitignore
|
|
@@ -96,47 +114,115 @@ npm link
|
|
|
96
114
|
|
|
97
115
|
---
|
|
98
116
|
|
|
117
|
+
## First Run
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
git-smart
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
If no configuration is found:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Welcome to git-smart.
|
|
127
|
+
|
|
128
|
+
No configuration found.
|
|
129
|
+
|
|
130
|
+
Run:
|
|
131
|
+
|
|
132
|
+
git-smart config
|
|
133
|
+
|
|
134
|
+
to get started.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
99
139
|
## Configuration
|
|
100
140
|
|
|
141
|
+
### Config Wizard
|
|
142
|
+
|
|
143
|
+
Run the interactive wizard:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git-smart config
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
It will guide you through:
|
|
150
|
+
1. Selecting an AI provider (OpenRouter, OpenAI, Anthropic, Gemini)
|
|
151
|
+
2. Setting the model name
|
|
152
|
+
3. Entering your API key (masked input)
|
|
153
|
+
4. Optionally configuring additional providers
|
|
154
|
+
|
|
155
|
+
### Manual Configuration
|
|
156
|
+
|
|
101
157
|
Create `.git-smart.json` in your project root:
|
|
102
158
|
|
|
103
159
|
```json
|
|
104
160
|
{
|
|
105
161
|
"provider": "openrouter",
|
|
106
|
-
"model": "google/gemma-
|
|
162
|
+
"model": "google/gemma-4-26b-a4b-it:free",
|
|
107
163
|
"conventionalCommits": true,
|
|
108
164
|
"autoPush": false,
|
|
109
|
-
"showSummary": true
|
|
165
|
+
"showSummary": true,
|
|
166
|
+
"providers": {
|
|
167
|
+
"openrouter": {
|
|
168
|
+
"apiKey": "sk-or-v1-..."
|
|
169
|
+
},
|
|
170
|
+
"openai": {
|
|
171
|
+
"apiKey": "sk-..."
|
|
172
|
+
}
|
|
173
|
+
}
|
|
110
174
|
}
|
|
111
175
|
```
|
|
112
176
|
|
|
113
177
|
| Option | Default | Description |
|
|
114
178
|
|---|---|---|
|
|
115
|
-
| `provider` | `openrouter` | LLM provider
|
|
116
|
-
| `model` | `google/gemma-
|
|
117
|
-
| `conventionalCommits` | `true` | Generate Conventional Commit messages
|
|
118
|
-
| `autoPush` | `false` | Automatically push after commit
|
|
179
|
+
| `provider` | `openrouter` | Active LLM provider |
|
|
180
|
+
| `model` | `google/gemma-4-26b-a4b-it:free` | Model name for the active provider |
|
|
181
|
+
| `conventionalCommits` | `true` | Generate Conventional Commit messages |
|
|
182
|
+
| `autoPush` | `false` | Automatically push after commit |
|
|
119
183
|
| `showSummary` | `true` | Display AI-generated summary before committing |
|
|
120
|
-
| `
|
|
184
|
+
| `providers` | `{}` | Per-provider API key storage (allows instant switching) |
|
|
185
|
+
|
|
186
|
+
### Configuration Gate
|
|
187
|
+
|
|
188
|
+
All AI-powered commands (`git-smart`, `git-smart --dry-run`, `git-smart summary`, `git-smart commit`) require a valid configuration. If missing, they will exit with a message directing you to run `git-smart config`.
|
|
121
189
|
|
|
122
190
|
---
|
|
123
191
|
|
|
124
192
|
## Environment Variables
|
|
125
193
|
|
|
126
|
-
|
|
194
|
+
Environment variables take **highest priority** over stored config.
|
|
127
195
|
|
|
128
|
-
|
|
|
196
|
+
| Variable | Provider |
|
|
129
197
|
|---|---|
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
198
|
+
| `GIT_SMART_OPENROUTER_API_KEY` | OpenRouter |
|
|
199
|
+
| `GIT_SMART_OPENAI_API_KEY` | OpenAI |
|
|
200
|
+
| `GIT_SMART_ANTHROPIC_API_KEY` | Anthropic |
|
|
201
|
+
| `GIT_SMART_GEMINI_API_KEY` | Gemini |
|
|
202
|
+
|
|
203
|
+
Priority order:
|
|
204
|
+
1. Environment variable
|
|
205
|
+
2. Stored config (`providers.{provider}.apiKey`)
|
|
206
|
+
3. Fail
|
|
207
|
+
|
|
208
|
+
Examples:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
export GIT_SMART_OPENROUTER_API_KEY=sk-or-v1-xxxx
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```powershell
|
|
215
|
+
$env:GIT_SMART_OPENROUTER_API_KEY="sk-or-v1-xxxx"
|
|
216
|
+
```
|
|
134
217
|
|
|
135
218
|
---
|
|
136
219
|
|
|
137
220
|
## Usage Examples
|
|
138
221
|
|
|
139
222
|
```bash
|
|
223
|
+
# Configure your provider and API key
|
|
224
|
+
git-smart config
|
|
225
|
+
|
|
140
226
|
# Full interactive workflow
|
|
141
227
|
git-smart
|
|
142
228
|
|
|
@@ -174,6 +260,14 @@ Suggested Commits
|
|
|
174
260
|
|
|
175
261
|
---
|
|
176
262
|
|
|
263
|
+
## Security
|
|
264
|
+
|
|
265
|
+
- API keys are **never** displayed in full. Only the first 8 and last 4 characters are shown (e.g., `sk-or-v1-****5156`).
|
|
266
|
+
- API keys are **never** logged to console, debug output, or telemetry.
|
|
267
|
+
- API keys stored in `.git-smart.json` are your responsibility — add the file to `.gitignore` if using a public repository, or use environment variables instead.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
177
271
|
## Supported Languages
|
|
178
272
|
|
|
179
273
|
The `.gitignore` generator includes templates for:
|
|
@@ -220,7 +314,7 @@ Files are classified by importance to focus the AI on business logic:
|
|
|
220
314
|
|
|
221
315
|
- **Node.js** >= 20
|
|
222
316
|
- A **Git** repository (or let git-smart initialize one)
|
|
223
|
-
-
|
|
317
|
+
- An **API key** for your chosen LLM provider (configured via `git-smart config`)
|
|
224
318
|
|
|
225
319
|
---
|
|
226
320
|
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIpE,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIpE,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAarB"}
|
package/dist/ai/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getActiveProvider, getActiveModel, getActiveApiKey } from '../core/config.js';
|
|
2
2
|
import { getProvider } from '../providers/index.js';
|
|
3
3
|
import { buildSystemPrompt, buildUserPrompt } from './prompt.js';
|
|
4
4
|
export async function generateAIContent(repoState, files, stats, diff) {
|
|
5
|
-
const
|
|
6
|
-
const apiKey =
|
|
5
|
+
const model = getActiveModel();
|
|
6
|
+
const apiKey = getActiveApiKey();
|
|
7
7
|
if (!apiKey) {
|
|
8
|
-
throw new Error(
|
|
8
|
+
throw new Error('No API key available. Run "git-smart config" to configure one.');
|
|
9
9
|
}
|
|
10
|
-
const provider = getProvider(
|
|
10
|
+
const provider = getProvider(getActiveProvider());
|
|
11
11
|
const systemPrompt = buildSystemPrompt();
|
|
12
12
|
const userPrompt = buildUserPrompt(repoState, files, stats, diff);
|
|
13
|
-
return provider.generateResponse(systemPrompt, userPrompt, apiKey,
|
|
13
|
+
return provider.generateResponse(systemPrompt, userPrompt, apiKey, model);
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/ai/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAoB,EACpB,KAAe,EACf,KAAgB,EAChB,IAAY;IAEZ,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAElE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5E,CAAC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,SAAS,IAAI,OAAO,CAyDnC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { runConfigWizard } from './commands/config.js';
|
|
2
4
|
import { runPreChecks } from './commands/prechecks.js';
|
|
3
5
|
import { runWorkflow } from './commands/workflow.js';
|
|
4
6
|
import { runSummary } from './commands/summary.js';
|
|
5
7
|
import { runCommit } from './commands/commit.js';
|
|
6
8
|
import { runPush } from './commands/push.js';
|
|
7
|
-
import {
|
|
9
|
+
import { isFirstRun, assertConfigured } from './core/config.js';
|
|
8
10
|
export function createCLI() {
|
|
9
|
-
const config = loadConfig();
|
|
10
11
|
const program = new Command();
|
|
11
12
|
program
|
|
12
13
|
.name('git-smart')
|
|
13
14
|
.description('AI-powered Git workflow assistant')
|
|
14
15
|
.version('1.0.0');
|
|
16
|
+
program
|
|
17
|
+
.command('config')
|
|
18
|
+
.description('Configure AI provider and API keys')
|
|
19
|
+
.action(async () => {
|
|
20
|
+
await runConfigWizard();
|
|
21
|
+
});
|
|
15
22
|
program
|
|
16
23
|
.option('--dry-run', 'Generate summary and messages without committing or pushing')
|
|
17
24
|
.action(async (options) => {
|
|
25
|
+
if (isFirstRun()) {
|
|
26
|
+
console.log(chalk.cyan('\n Welcome to git-smart.\n'));
|
|
27
|
+
console.log(' No configuration found.\n');
|
|
28
|
+
console.log(' Run:\n');
|
|
29
|
+
console.log(chalk.bold(' git-smart config'));
|
|
30
|
+
console.log('\n to get started.\n');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
assertConfigured();
|
|
18
34
|
await runPreChecks();
|
|
19
35
|
await runWorkflow({ dryRun: options.dryRun });
|
|
20
36
|
});
|
|
@@ -22,6 +38,7 @@ export function createCLI() {
|
|
|
22
38
|
.command('summary')
|
|
23
39
|
.description('Generate change summary only')
|
|
24
40
|
.action(async () => {
|
|
41
|
+
assertConfigured();
|
|
25
42
|
await runPreChecks();
|
|
26
43
|
await runSummary();
|
|
27
44
|
});
|
|
@@ -29,6 +46,7 @@ export function createCLI() {
|
|
|
29
46
|
.command('commit')
|
|
30
47
|
.description('Generate commit messages and commit')
|
|
31
48
|
.action(async () => {
|
|
49
|
+
assertConfigured();
|
|
32
50
|
await runPreChecks();
|
|
33
51
|
await runCommit();
|
|
34
52
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,mCAAmC,CAAC;SAChD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,gBAAgB,EAAE,CAAC;QACnB,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA2CrD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadConfig, saveConfig, maskApiKey } from '../core/config.js';
|
|
3
|
+
import { PROVIDERS } from '../core/types.js';
|
|
4
|
+
import { promptConfigWizard, promptAdditionalProviderKey } from '../prompts/index.js';
|
|
5
|
+
export async function runConfigWizard() {
|
|
6
|
+
const existing = loadConfig();
|
|
7
|
+
console.log(chalk.cyan('\n git-smart configuration\n'));
|
|
8
|
+
const { provider, model, apiKey, configureMore } = await promptConfigWizard();
|
|
9
|
+
const providers = { ...existing.providers };
|
|
10
|
+
if (apiKey) {
|
|
11
|
+
providers[provider] = { ...providers[provider], apiKey };
|
|
12
|
+
}
|
|
13
|
+
if (configureMore) {
|
|
14
|
+
for (const p of PROVIDERS) {
|
|
15
|
+
if (p === provider)
|
|
16
|
+
continue;
|
|
17
|
+
const key = await promptAdditionalProviderKey(p);
|
|
18
|
+
if (key) {
|
|
19
|
+
providers[p] = { ...providers[p], apiKey: key };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const config = {
|
|
24
|
+
...existing,
|
|
25
|
+
provider,
|
|
26
|
+
model,
|
|
27
|
+
providers,
|
|
28
|
+
};
|
|
29
|
+
saveConfig(config);
|
|
30
|
+
console.log(chalk.green('\n Configuration saved.\n'));
|
|
31
|
+
for (const p of PROVIDERS) {
|
|
32
|
+
const key = config.providers?.[p]?.apiKey;
|
|
33
|
+
if (key) {
|
|
34
|
+
console.log(chalk.dim(` ${p}: ${maskApiKey(key)}`));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.dim(`\n Active provider: ${config.provider}`));
|
|
38
|
+
console.log(chalk.dim(` Model: ${config.model}`));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAA4B,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAEzD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE9E,MAAM,SAAS,GAAgC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAEzE,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,QAAQ;gBAAE,SAAS;YAC7B,MAAM,GAAG,GAAG,MAAM,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,EAAE,CAAC;gBACR,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAmB;QAC7B,GAAG,QAAQ;QACX,QAAQ;QACR,KAAK;QACL,SAAS;KACV,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import { GitSmartConfig, Provider } from './types.js';
|
|
1
|
+
import { GitSmartConfig, Provider, ConfigValidationError } from './types.js';
|
|
2
2
|
export declare function loadConfig(): GitSmartConfig;
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function saveConfig(config: GitSmartConfig): void;
|
|
4
|
+
export declare function getActiveProvider(): Provider;
|
|
5
|
+
export declare function getActiveModel(): string;
|
|
6
|
+
export declare function getActiveApiKey(): string | undefined;
|
|
7
|
+
export declare function maskApiKey(key: string | undefined): string;
|
|
8
|
+
export declare function validateConfig(): ConfigValidationError[];
|
|
9
|
+
export declare function assertConfigured(): void;
|
|
10
|
+
export declare function isFirstRun(): boolean;
|
|
4
11
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,qBAAqB,EAAuB,MAAM,YAAY,CAAC;AA8BlG,wBAAgB,UAAU,IAAI,cAAc,CAmB3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAGvD;AAED,wBAAgB,iBAAiB,IAAI,QAAQ,CAE5C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAQpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG1D;AAED,wBAAgB,cAAc,IAAI,qBAAqB,EAAE,CAgCxD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
|
package/dist/core/config.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'node:fs';
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
const BUILTIN_API_KEY = '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';
|
|
4
3
|
const DEFAULT_CONFIG = {
|
|
5
4
|
provider: 'openrouter',
|
|
6
|
-
model: 'google/gemma-
|
|
5
|
+
model: 'google/gemma-4-26b-a4b-it:free',
|
|
7
6
|
conventionalCommits: true,
|
|
8
7
|
autoPush: false,
|
|
9
8
|
showSummary: true,
|
|
10
|
-
|
|
9
|
+
providers: {},
|
|
11
10
|
};
|
|
11
|
+
const ENV_VAR_MAP = {
|
|
12
|
+
openai: 'GIT_SMART_OPENAI_API_KEY',
|
|
13
|
+
openrouter: 'GIT_SMART_OPENROUTER_API_KEY',
|
|
14
|
+
anthropic: 'GIT_SMART_ANTHROPIC_API_KEY',
|
|
15
|
+
gemini: 'GIT_SMART_GEMINI_API_KEY',
|
|
16
|
+
};
|
|
17
|
+
function configPath() {
|
|
18
|
+
return join(process.cwd(), '.git-smart.json');
|
|
19
|
+
}
|
|
12
20
|
function getProviderFromKey(provider) {
|
|
13
21
|
const key = provider.toLowerCase();
|
|
14
22
|
if (['openai', 'openrouter', 'anthropic', 'gemini'].includes(key)) {
|
|
@@ -17,15 +25,16 @@ function getProviderFromKey(provider) {
|
|
|
17
25
|
return DEFAULT_CONFIG.provider;
|
|
18
26
|
}
|
|
19
27
|
export function loadConfig() {
|
|
20
|
-
const
|
|
21
|
-
if (existsSync(
|
|
28
|
+
const path = configPath();
|
|
29
|
+
if (existsSync(path)) {
|
|
22
30
|
try {
|
|
23
|
-
const raw = readFileSync(
|
|
31
|
+
const raw = readFileSync(path, 'utf-8');
|
|
24
32
|
const parsed = JSON.parse(raw);
|
|
25
33
|
return {
|
|
26
34
|
...DEFAULT_CONFIG,
|
|
27
35
|
...parsed,
|
|
28
36
|
provider: getProviderFromKey(parsed.provider || DEFAULT_CONFIG.provider),
|
|
37
|
+
providers: { ...DEFAULT_CONFIG.providers, ...parsed.providers },
|
|
29
38
|
};
|
|
30
39
|
}
|
|
31
40
|
catch {
|
|
@@ -34,13 +43,68 @@ export function loadConfig() {
|
|
|
34
43
|
}
|
|
35
44
|
return { ...DEFAULT_CONFIG };
|
|
36
45
|
}
|
|
37
|
-
export function
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
export function saveConfig(config) {
|
|
47
|
+
const path = configPath();
|
|
48
|
+
writeFileSync(path, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
export function getActiveProvider() {
|
|
51
|
+
return loadConfig().provider;
|
|
52
|
+
}
|
|
53
|
+
export function getActiveModel() {
|
|
54
|
+
return loadConfig().model;
|
|
55
|
+
}
|
|
56
|
+
export function getActiveApiKey() {
|
|
57
|
+
const config = loadConfig();
|
|
58
|
+
const envVar = ENV_VAR_MAP[config.provider];
|
|
59
|
+
const envKey = process.env[envVar];
|
|
60
|
+
if (envKey)
|
|
61
|
+
return envKey;
|
|
62
|
+
return config.providers?.[config.provider]?.apiKey;
|
|
63
|
+
}
|
|
64
|
+
export function maskApiKey(key) {
|
|
65
|
+
if (!key || key.length < 8)
|
|
66
|
+
return '****';
|
|
67
|
+
return key.substring(0, 8) + '****' + key.substring(key.length - 4);
|
|
68
|
+
}
|
|
69
|
+
export function validateConfig() {
|
|
70
|
+
const errors = [];
|
|
71
|
+
const path = configPath();
|
|
72
|
+
if (!existsSync(path)) {
|
|
73
|
+
errors.push({ type: 'missing_config', message: 'No configuration file found.' });
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
const config = loadConfig();
|
|
77
|
+
if (!config.provider) {
|
|
78
|
+
errors.push({ type: 'missing_provider', message: 'No provider specified in configuration.' });
|
|
79
|
+
}
|
|
80
|
+
else if (!['openai', 'openrouter', 'anthropic', 'gemini'].includes(config.provider)) {
|
|
81
|
+
errors.push({ type: 'invalid_provider', message: `Invalid provider: "${config.provider}".` });
|
|
82
|
+
}
|
|
83
|
+
if (!config.model) {
|
|
84
|
+
errors.push({ type: 'missing_model', message: 'No model specified in configuration.' });
|
|
85
|
+
}
|
|
86
|
+
const apiKey = getActiveApiKey();
|
|
87
|
+
if (!apiKey) {
|
|
88
|
+
const provider = config.provider || 'openrouter';
|
|
89
|
+
const envVar = ENV_VAR_MAP[provider];
|
|
90
|
+
errors.push({
|
|
91
|
+
type: 'missing_api_key',
|
|
92
|
+
message: `No API key found for "${provider}". Set ${envVar} or add it via "git-smart config".`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return errors;
|
|
96
|
+
}
|
|
97
|
+
export function assertConfigured() {
|
|
98
|
+
const errors = validateConfig();
|
|
99
|
+
if (errors.length === 0)
|
|
100
|
+
return;
|
|
101
|
+
console.log('git-smart is not configured.\n');
|
|
102
|
+
console.log('Run:\n');
|
|
103
|
+
console.log(' git-smart config\n');
|
|
104
|
+
console.log('to configure your AI provider.');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
export function isFirstRun() {
|
|
108
|
+
return !existsSync(configPath());
|
|
45
109
|
}
|
|
46
110
|
//# sourceMappingURL=config.js.map
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
+
export interface ProviderConfig {
|
|
2
|
+
apiKey?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface ProviderKeyedConfig {
|
|
5
|
+
openrouter?: ProviderConfig;
|
|
6
|
+
openai?: ProviderConfig;
|
|
7
|
+
anthropic?: ProviderConfig;
|
|
8
|
+
gemini?: ProviderConfig;
|
|
9
|
+
}
|
|
1
10
|
export interface GitSmartConfig {
|
|
2
11
|
provider: 'openai' | 'openrouter' | 'anthropic' | 'gemini';
|
|
3
12
|
model: string;
|
|
4
13
|
conventionalCommits: boolean;
|
|
5
14
|
autoPush: boolean;
|
|
6
15
|
showSummary: boolean;
|
|
7
|
-
|
|
16
|
+
providers: ProviderKeyedConfig;
|
|
8
17
|
}
|
|
9
18
|
export type ImpactLevel = 'low' | 'medium' | 'high';
|
|
10
19
|
export interface AIResponse {
|
|
@@ -30,6 +39,23 @@ export interface FileClassification {
|
|
|
30
39
|
ignored: string[];
|
|
31
40
|
}
|
|
32
41
|
export type Provider = 'openai' | 'openrouter' | 'anthropic' | 'gemini';
|
|
42
|
+
export type ConfigValidationError = {
|
|
43
|
+
type: 'missing_config';
|
|
44
|
+
message: string;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'missing_provider';
|
|
47
|
+
message: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'invalid_provider';
|
|
50
|
+
message: string;
|
|
51
|
+
} | {
|
|
52
|
+
type: 'missing_model';
|
|
53
|
+
message: string;
|
|
54
|
+
} | {
|
|
55
|
+
type: 'missing_api_key';
|
|
56
|
+
message: string;
|
|
57
|
+
};
|
|
58
|
+
export declare const PROVIDERS: Provider[];
|
|
33
59
|
export declare const HIGH_IMPORTANCE_PATTERNS: string[];
|
|
34
60
|
export declare const MEDIUM_IMPORTANCE_PATTERNS: string[];
|
|
35
61
|
export declare const LOW_IMPORTANCE_PATTERNS: string[];
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,eAAO,MAAM,SAAS,EAAE,QAAQ,EAAoD,CAAC;AAErF,eAAO,MAAM,wBAAwB,UAEpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAEtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAEnC,CAAC;AAEF,eAAO,MAAM,eAAe,UAE3B,CAAC"}
|
package/dist/core/types.js
CHANGED
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAyDA,MAAM,CAAC,MAAM,SAAS,GAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa;CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc,EAAE,WAAW,EAAE,WAAW;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc;CAC5C,CAAC"}
|
package/dist/prompts/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Provider } from '../core/types.js';
|
|
1
2
|
export declare function promptInitOrExit(): Promise<'init' | 'exit'>;
|
|
2
3
|
export type GitignoreOption = 'node' | 'python' | 'go' | 'php' | 'ruby' | 'rust' | 'java' | 'skip';
|
|
3
4
|
export type StageChoice = 'all' | 'none' | 'select';
|
|
@@ -9,4 +10,12 @@ export declare function promptSelectFiles(files: string[]): Promise<string[]>;
|
|
|
9
10
|
export declare function promptUseConventionalCommits(): Promise<boolean>;
|
|
10
11
|
export declare function promptSelectCommitMessage(messages: string[]): Promise<string>;
|
|
11
12
|
export declare function promptPushToRemote(): Promise<boolean>;
|
|
13
|
+
export interface ConfigWizardAnswers {
|
|
14
|
+
provider: Provider;
|
|
15
|
+
model: string;
|
|
16
|
+
apiKey: string;
|
|
17
|
+
configureMore: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function promptConfigWizard(): Promise<ConfigWizardAnswers>;
|
|
20
|
+
export declare function promptAdditionalProviderKey(provider: Provider): Promise<string>;
|
|
12
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAC;AAEvD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAajE;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACnG,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,wBAAsB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,CAmBhE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAa7D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAUvD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAc/D;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1E;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAarE;AAED,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BnF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa3D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA4CvE;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAUrF"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -140,4 +140,56 @@ export async function promptPushToRemote() {
|
|
|
140
140
|
]);
|
|
141
141
|
return push;
|
|
142
142
|
}
|
|
143
|
+
export async function promptConfigWizard() {
|
|
144
|
+
const { provider } = await inquirer.prompt([
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
name: 'provider',
|
|
148
|
+
message: 'Select AI provider:',
|
|
149
|
+
default: 'openrouter',
|
|
150
|
+
choices: [
|
|
151
|
+
{ name: 'OpenRouter', value: 'openrouter' },
|
|
152
|
+
{ name: 'OpenAI', value: 'openai' },
|
|
153
|
+
{ name: 'Anthropic', value: 'anthropic' },
|
|
154
|
+
{ name: 'Gemini', value: 'gemini' },
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
]);
|
|
158
|
+
const { model } = await inquirer.prompt([
|
|
159
|
+
{
|
|
160
|
+
type: 'input',
|
|
161
|
+
name: 'model',
|
|
162
|
+
message: 'Enter model name:',
|
|
163
|
+
default: 'google/gemma-4-26b-a4b-it:free',
|
|
164
|
+
},
|
|
165
|
+
]);
|
|
166
|
+
const { apiKey } = await inquirer.prompt([
|
|
167
|
+
{
|
|
168
|
+
type: 'password',
|
|
169
|
+
name: 'apiKey',
|
|
170
|
+
message: `Enter API key for ${provider}:`,
|
|
171
|
+
mask: '*',
|
|
172
|
+
},
|
|
173
|
+
]);
|
|
174
|
+
const { configureMore } = await inquirer.prompt([
|
|
175
|
+
{
|
|
176
|
+
type: 'confirm',
|
|
177
|
+
name: 'configureMore',
|
|
178
|
+
message: 'Configure additional providers?',
|
|
179
|
+
default: false,
|
|
180
|
+
},
|
|
181
|
+
]);
|
|
182
|
+
return { provider, model, apiKey, configureMore };
|
|
183
|
+
}
|
|
184
|
+
export async function promptAdditionalProviderKey(provider) {
|
|
185
|
+
const { apiKey } = await inquirer.prompt([
|
|
186
|
+
{
|
|
187
|
+
type: 'password',
|
|
188
|
+
name: 'apiKey',
|
|
189
|
+
message: `Enter API key for ${provider} (leave empty to skip):`,
|
|
190
|
+
mask: '*',
|
|
191
|
+
},
|
|
192
|
+
]);
|
|
193
|
+
return apiKey;
|
|
194
|
+
}
|
|
143
195
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reck98/git-smart",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "AI-powered Git workflow assistant that generates production-quality commit messages, summarizes code changes, and streamlines Git operations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
"build": "tsc && copyfiles -u 2 \"src/utils/templates/**/*\" dist/utils/",
|
|
15
15
|
"start": "node dist/index.js",
|
|
16
16
|
"dev": "tsx src/index.ts",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
"postinstall": "npm run build"
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
19
18
|
},
|
|
20
19
|
"dependencies": {
|
|
21
20
|
"@anthropic-ai/sdk": "^0.24.0",
|