@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 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-2-9b-it:free",
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: `openai`, `openrouter`, `anthropic`, `gemini` |
116
- | `model` | `google/gemma-2-9b-it:free` | Model name for the chosen provider |
117
- | `conventionalCommits` | `true` | Generate Conventional Commit messages (`feat:`, `fix:`, etc.) |
118
- | `autoPush` | `false` | Automatically push after commit (no prompt) |
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
- | `apiKey` | | Override the built-in API key (optional) |
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
- Set the API key for your chosen provider:
194
+ Environment variables take **highest priority** over stored config.
127
195
 
128
- | Provider | Variable |
196
+ | Variable | Provider |
129
197
  |---|---|
130
- | OpenAI | `OPENAI_API_KEY` |
131
- | OpenRouter | `OPENROUTER_API_KEY` |
132
- | Anthropic | `ANTHROPIC_API_KEY` |
133
- | Gemini | `GEMINI_API_KEY` |
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
- - No API key needed a built-in key ships with the package. Set your own via `OPENROUTER_API_KEY` or `apiKey` in `.git-smart.json` to override.
317
+ - An **API key** for your chosen LLM provider (configured via `git-smart config`)
224
318
 
225
319
  ---
226
320
 
@@ -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,CAerB"}
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 { loadConfig, getApiKey } from '../core/config.js';
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 config = loadConfig();
6
- const apiKey = getApiKey(config.provider, config);
5
+ const model = getActiveModel();
6
+ const apiKey = getActiveApiKey();
7
7
  if (!apiKey) {
8
- throw new Error(`No API key found for provider "${config.provider}". Set the ${config.provider.toUpperCase()}_API_KEY environment variable, or add "apiKey" to your .git-smart.json file.`);
8
+ throw new Error('No API key available. Run "git-smart config" to configure one.');
9
9
  }
10
- const provider = getProvider(config.provider);
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, config.model);
13
+ return provider.generateResponse(systemPrompt, userPrompt, apiKey, model);
14
14
  }
15
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE1D,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,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,8EAA8E,CAC3K,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,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,MAAM,CAAC,KAAK,CAAC,CAAC;AACnF,CAAC"}
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;AAQpC,wBAAgB,SAAS,IAAI,OAAO,CAyCnC"}
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 { loadConfig } from './core/config.js';
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;AAE9C,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,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,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,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,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,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"}
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,2 @@
1
+ export declare function runConfigWizard(): Promise<void>;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -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"}
@@ -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 getApiKey(provider: Provider, config: GitSmartConfig): string | undefined;
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;AAqBtD,wBAAgB,UAAU,IAAI,cAAc,CAkB3C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CASxF"}
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"}
@@ -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-2-9b-it:free',
5
+ model: 'google/gemma-4-26b-a4b-it:free',
7
6
  conventionalCommits: true,
8
7
  autoPush: false,
9
8
  showSummary: true,
10
- apiKey: undefined,
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 configPath = join(process.cwd(), '.git-smart.json');
21
- if (existsSync(configPath)) {
28
+ const path = configPath();
29
+ if (existsSync(path)) {
22
30
  try {
23
- const raw = readFileSync(configPath, 'utf-8');
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 getApiKey(provider, config) {
38
- const envMap = {
39
- openai: 'OPENAI_API_KEY',
40
- openrouter: 'OPENROUTER_API_KEY',
41
- anthropic: 'ANTHROPIC_API_KEY',
42
- gemini: 'GEMINI_API_KEY',
43
- };
44
- return process.env[envMap[provider]] || config.apiKey || BUILTIN_API_KEY || undefined;
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
@@ -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;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,eAAe,GAAG,2EAA2E,CAAC;AAEpG,MAAM,cAAc,GAAmB;IACrC,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE,2BAA2B;IAClC,mBAAmB,EAAE,IAAI;IACzB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,GAAe,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;gBACL,GAAG,cAAc;gBACjB,GAAG,MAAM;gBACT,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC;aACzE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,MAAsB;IAClE,MAAM,MAAM,GAA6B;QACvC,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,gBAAgB;KACzB,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,IAAI,SAAS,CAAC;AACxF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -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
- apiKey?: string;
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[];
@@ -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,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;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,eAAO,MAAM,wBAAwB,UAEpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAEtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAEnC,CAAC;AAEF,eAAO,MAAM,eAAe,UAE3B,CAAC"}
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"}
@@ -1,3 +1,4 @@
1
+ export const PROVIDERS = ['openai', 'openrouter', 'anthropic', 'gemini'];
1
2
  export const HIGH_IMPORTANCE_PATTERNS = [
2
3
  'controllers', 'routes', 'services', 'models', 'middlewares',
3
4
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAuCA,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"}
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"}
@@ -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":"AAEA,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"}
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"}
@@ -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":"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"}
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.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",