ownkey 0.5.1 → 0.7.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 +61 -14
- package/dist/ai/anthropic.d.ts +22 -0
- package/dist/ai/anthropic.d.ts.map +1 -0
- package/dist/ai/anthropic.js +119 -0
- package/dist/ai/anthropic.js.map +1 -0
- package/dist/ai/factory.d.ts +1 -1
- package/dist/ai/factory.d.ts.map +1 -1
- package/dist/ai/factory.js +32 -20
- package/dist/ai/factory.js.map +1 -1
- package/dist/ai/gemini.d.ts +1 -1
- package/dist/ai/gemini.d.ts.map +1 -1
- package/dist/ai/gemini.js +22 -2
- package/dist/ai/gemini.js.map +1 -1
- package/dist/ai/openai.d.ts +11 -0
- package/dist/ai/openai.d.ts.map +1 -0
- package/dist/ai/openai.js +113 -0
- package/dist/ai/openai.js.map +1 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +63 -14
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/suggest.d.ts.map +1 -1
- package/dist/commands/suggest.js +6 -0
- package/dist/commands/suggest.js.map +1 -1
- package/dist/commands/undo.d.ts +3 -0
- package/dist/commands/undo.d.ts.map +1 -0
- package/dist/commands/undo.js +197 -0
- package/dist/commands/undo.js.map +1 -0
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/core/apply/engine.d.ts +36 -0
- package/dist/core/apply/engine.d.ts.map +1 -0
- package/dist/core/apply/engine.js +179 -0
- package/dist/core/apply/engine.js.map +1 -0
- package/dist/core/apply/index.d.ts +3 -0
- package/dist/core/apply/index.d.ts.map +1 -0
- package/dist/core/apply/index.js +3 -0
- package/dist/core/apply/index.js.map +1 -0
- package/dist/core/apply/interactive.d.ts +53 -0
- package/dist/core/apply/interactive.d.ts.map +1 -0
- package/dist/core/apply/interactive.js +188 -0
- package/dist/core/apply/interactive.js.map +1 -0
- package/dist/core/backup/index.d.ts +2 -0
- package/dist/core/backup/index.d.ts.map +1 -0
- package/dist/core/backup/index.js +2 -0
- package/dist/core/backup/index.js.map +1 -0
- package/dist/core/backup/manager.d.ts +49 -0
- package/dist/core/backup/manager.d.ts.map +1 -0
- package/dist/core/backup/manager.js +133 -0
- package/dist/core/backup/manager.js.map +1 -0
- package/dist/core/diff/applier.d.ts +22 -0
- package/dist/core/diff/applier.d.ts.map +1 -0
- package/dist/core/diff/applier.js +98 -0
- package/dist/core/diff/applier.js.map +1 -0
- package/dist/core/diff/index.d.ts +4 -0
- package/dist/core/diff/index.d.ts.map +1 -0
- package/dist/core/diff/index.js +4 -0
- package/dist/core/diff/index.js.map +1 -0
- package/dist/core/diff/parser.d.ts +32 -0
- package/dist/core/diff/parser.d.ts.map +1 -0
- package/dist/core/diff/parser.js +108 -0
- package/dist/core/diff/parser.js.map +1 -0
- package/dist/core/diff/validator.d.ts +21 -0
- package/dist/core/diff/validator.d.ts.map +1 -0
- package/dist/core/diff/validator.js +86 -0
- package/dist/core/diff/validator.js.map +1 -0
- package/dist/db/client.d.ts +2 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +3 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrations/002_applies.sql +32 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
11
|
[](https://www.npmjs.com/package/ownkey)
|
|
12
12
|
|
|
13
|
-
*Intelligent code analysis powered by
|
|
13
|
+
*Intelligent code analysis powered by OpenAI, Anthropic Claude 4.5, and Google Gemini • Your code never leaves your machine*
|
|
14
14
|
|
|
15
15
|
[Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [Documentation](#-commands)
|
|
16
16
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
>
|
|
21
|
+
> ✨ **v0.7.0** - Apply System! Auto-fix code with AI suggestions, automatic backups, and rollback support.
|
|
22
22
|
|
|
23
23
|
## 🚀 Quick Start
|
|
24
24
|
|
|
@@ -26,14 +26,24 @@
|
|
|
26
26
|
# Install globally
|
|
27
27
|
npm install -g ownkey
|
|
28
28
|
|
|
29
|
-
# Configure with your
|
|
30
|
-
ownkey config --provider gemini --api-key
|
|
29
|
+
# Configure with your preferred AI provider
|
|
30
|
+
ownkey config --provider gemini --api-key YOUR_GEMINI_KEY
|
|
31
|
+
# OR
|
|
32
|
+
ownkey config --provider openai --api-key YOUR_OPENAI_KEY
|
|
33
|
+
# OR
|
|
34
|
+
ownkey config --provider anthropic --api-key YOUR_ANTHROPIC_KEY
|
|
31
35
|
|
|
32
36
|
# Analyze your codebase
|
|
33
37
|
ownkey suggest .
|
|
38
|
+
|
|
39
|
+
# Apply AI suggestions to fix code
|
|
40
|
+
ownkey apply <suggestion-id>
|
|
34
41
|
```
|
|
35
42
|
|
|
36
|
-
**Get
|
|
43
|
+
**Get API Keys:**
|
|
44
|
+
- **Gemini:** [Google AI Studio](https://aistudio.google.com/app/apikey) (Free tier available)
|
|
45
|
+
- **OpenAI:** [OpenAI Platform](https://platform.openai.com/api-keys)
|
|
46
|
+
- **Anthropic:** [Anthropic Console](https://console.anthropic.com/)
|
|
37
47
|
|
|
38
48
|
## ✨ Features
|
|
39
49
|
|
|
@@ -41,8 +51,8 @@ ownkey suggest .
|
|
|
41
51
|
<tr>
|
|
42
52
|
<td width="50%">
|
|
43
53
|
|
|
44
|
-
### 🤖
|
|
45
|
-
|
|
54
|
+
### 🤖 Multi-Provider AI
|
|
55
|
+
Choose between OpenAI, Claude 4.5, or Gemini
|
|
46
56
|
|
|
47
57
|
### 🔒 Privacy-First
|
|
48
58
|
Your code never leaves your machine - all analysis is local
|
|
@@ -50,6 +60,9 @@ Your code never leaves your machine - all analysis is local
|
|
|
50
60
|
### 💾 Optional Cloud Sync
|
|
51
61
|
Store history in your own Supabase database
|
|
52
62
|
|
|
63
|
+
### 🔧 Auto-Fix Code
|
|
64
|
+
Apply AI suggestions with automatic backups
|
|
65
|
+
|
|
53
66
|
</td>
|
|
54
67
|
<td width="50%">
|
|
55
68
|
|
|
@@ -59,8 +72,11 @@ API keys stored in OS keychain or encrypted
|
|
|
59
72
|
### 📂 Smart Scanning
|
|
60
73
|
Respects .gitignore and custom patterns
|
|
61
74
|
|
|
62
|
-
### 🎯
|
|
63
|
-
|
|
75
|
+
### 🎯 15+ AI Models
|
|
76
|
+
GPT-4, Claude Opus 4.5, Gemini 2.5, and more
|
|
77
|
+
|
|
78
|
+
### ↩️ Rollback Support
|
|
79
|
+
Undo any applied changes instantly
|
|
64
80
|
|
|
65
81
|
</td>
|
|
66
82
|
</tr>
|
|
@@ -70,13 +86,15 @@ Use any Gemini model (pro, flash, flash-lite)
|
|
|
70
86
|
|
|
71
87
|
<div align="center">
|
|
72
88
|
|
|
73
|
-
| Provider | Status | Models |
|
|
74
|
-
|
|
75
|
-
| **🟢 Google Gemini** | ✅ **Available
|
|
76
|
-
| **🔵 OpenAI** |
|
|
77
|
-
| **🟣 Anthropic** |
|
|
89
|
+
| Provider | Status | Models | Get API Key |
|
|
90
|
+
|:--------:|:------:|:------:|:-----------:|
|
|
91
|
+
| **🟢 Google Gemini** | ✅ **Available** | Gemini 2.5 Pro, Flash, 2.0 | [Get Key](https://aistudio.google.com/app/apikey) |
|
|
92
|
+
| **🔵 OpenAI** | ✅ **Available** | GPT-4 Turbo, GPT-4, GPT-3.5 | [Get Key](https://platform.openai.com/api-keys) |
|
|
93
|
+
| **🟣 Anthropic** | ✅ **Available** | Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 | [Get Key](https://console.anthropic.com/) |
|
|
78
94
|
| **🟠 Ollama** | 🔜 Coming Soon | Any local model | v0.8.0 |
|
|
79
95
|
|
|
96
|
+
**New in v0.7.0:** Apply System with automatic backups and rollback!
|
|
97
|
+
|
|
80
98
|
</div>
|
|
81
99
|
|
|
82
100
|
## 🛠 Installation
|
|
@@ -172,6 +190,35 @@ ownkey suggest --local-only # Skip database storage
|
|
|
172
190
|
Total suggestions: 12
|
|
173
191
|
```
|
|
174
192
|
|
|
193
|
+
### `ownkey apply <suggestion-id>` *(New in v0.7.0)*
|
|
194
|
+
|
|
195
|
+
Apply an AI-generated suggestion to your code with automatic backups.
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
ownkey apply abc123 # Interactive mode (default)
|
|
199
|
+
ownkey apply abc123 --auto # Auto-apply without confirmation
|
|
200
|
+
ownkey apply abc123 --dry-run # Preview changes without applying
|
|
201
|
+
ownkey apply abc123 --force # Apply even if validation fails
|
|
202
|
+
ownkey apply abc123 --no-backup # Skip backup (not recommended)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Features:**
|
|
206
|
+
- ✅ Automatic backups before applying
|
|
207
|
+
- ✅ Interactive confirmation with diff preview
|
|
208
|
+
- ✅ Validation to prevent conflicts
|
|
209
|
+
- ✅ Automatic rollback on failure
|
|
210
|
+
|
|
211
|
+
### `ownkey undo [backup-id]` *(New in v0.7.0)*
|
|
212
|
+
|
|
213
|
+
Undo a previously applied suggestion and restore from backup.
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
ownkey undo # Interactive - choose from list
|
|
217
|
+
ownkey undo abc123 # Undo specific backup
|
|
218
|
+
ownkey undo --list # List recent applies
|
|
219
|
+
ownkey undo --all # Undo all applies from today
|
|
220
|
+
```
|
|
221
|
+
|
|
175
222
|
### `ownkey apply <id>` *(Coming in v0.7.0)*
|
|
176
223
|
|
|
177
224
|
Apply a suggestion to your code.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import type { CodeContext, Suggestion } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Anthropic Claude AI Provider
|
|
5
|
+
* Supports all Claude models: Opus, Sonnet, and Haiku variants
|
|
6
|
+
* Model names are user-configurable and future-proof
|
|
7
|
+
*/
|
|
8
|
+
export declare class AnthropicProvider extends AIProvider {
|
|
9
|
+
private baseUrl;
|
|
10
|
+
private apiVersion;
|
|
11
|
+
constructor(apiKey?: string, model?: string);
|
|
12
|
+
getDefaultModel(): string;
|
|
13
|
+
testConnection(): Promise<boolean>;
|
|
14
|
+
analyze(context: CodeContext): AsyncGenerator<Suggestion>;
|
|
15
|
+
/**
|
|
16
|
+
* Get available Claude models
|
|
17
|
+
* Note: Anthropic doesn't provide a models API endpoint
|
|
18
|
+
* Returns known models - users can specify any model name in config
|
|
19
|
+
*/
|
|
20
|
+
static getAvailableModels(_apiKey: string): Promise<string[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGjE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC7C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAgB;gBAEtB,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAI3C,eAAe,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAkCjC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;IAmDhE;;;;OAIG;WACU,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAsBtE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Anthropic Claude AI Provider
|
|
5
|
+
* Supports all Claude models: Opus, Sonnet, and Haiku variants
|
|
6
|
+
* Model names are user-configurable and future-proof
|
|
7
|
+
*/
|
|
8
|
+
export class AnthropicProvider extends AIProvider {
|
|
9
|
+
baseUrl = 'https://api.anthropic.com/v1';
|
|
10
|
+
apiVersion = '2023-06-01';
|
|
11
|
+
constructor(apiKey, model) {
|
|
12
|
+
super(apiKey, model);
|
|
13
|
+
}
|
|
14
|
+
getDefaultModel() {
|
|
15
|
+
return 'claude-opus-4-5-20251101';
|
|
16
|
+
}
|
|
17
|
+
async testConnection() {
|
|
18
|
+
try {
|
|
19
|
+
// Anthropic doesn't have a models endpoint, so we test with a minimal message
|
|
20
|
+
const response = await fetch(`${this.baseUrl}/messages`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
'x-api-key': this.apiKey || '',
|
|
25
|
+
'anthropic-version': this.apiVersion,
|
|
26
|
+
},
|
|
27
|
+
body: JSON.stringify({
|
|
28
|
+
model: this.model,
|
|
29
|
+
max_tokens: 10,
|
|
30
|
+
messages: [
|
|
31
|
+
{
|
|
32
|
+
role: 'user',
|
|
33
|
+
content: 'test',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
logger.debug(`Anthropic connection test failed: ${response.status}`);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
logger.debug('Anthropic connection test error:', error);
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async *analyze(context) {
|
|
50
|
+
const prompt = this.buildUserPrompt(context);
|
|
51
|
+
try {
|
|
52
|
+
logger.verbose(`Analyzing with Anthropic (${this.model})...`);
|
|
53
|
+
const response = await fetch(`${this.baseUrl}/messages`, {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
headers: {
|
|
56
|
+
'Content-Type': 'application/json',
|
|
57
|
+
'x-api-key': this.apiKey || '',
|
|
58
|
+
'anthropic-version': this.apiVersion,
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
model: this.model,
|
|
62
|
+
max_tokens: 8192,
|
|
63
|
+
temperature: 0.3,
|
|
64
|
+
system: this.getSystemPrompt(),
|
|
65
|
+
messages: [
|
|
66
|
+
{
|
|
67
|
+
role: 'user',
|
|
68
|
+
content: prompt,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
const errorData = await response.json();
|
|
75
|
+
logger.error('Anthropic API error:', errorData);
|
|
76
|
+
throw new Error(`Anthropic API error: ${errorData.error?.message || response.statusText}`);
|
|
77
|
+
}
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
const content = data.content[0]?.text;
|
|
80
|
+
if (!content) {
|
|
81
|
+
throw new Error('No content in Anthropic response');
|
|
82
|
+
}
|
|
83
|
+
// Parse suggestions from response
|
|
84
|
+
const suggestions = this.parseSuggestions(content);
|
|
85
|
+
for (const suggestion of suggestions) {
|
|
86
|
+
yield suggestion;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logger.error('Anthropic analysis error:', error);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get available Claude models
|
|
96
|
+
* Note: Anthropic doesn't provide a models API endpoint
|
|
97
|
+
* Returns known models - users can specify any model name in config
|
|
98
|
+
*/
|
|
99
|
+
static async getAvailableModels(_apiKey) {
|
|
100
|
+
// Return known models as of Jan 2026
|
|
101
|
+
// Users can use ANY model name - this list is just for convenience
|
|
102
|
+
return [
|
|
103
|
+
// Claude 4.5 (Latest - Nov 2025)
|
|
104
|
+
'claude-opus-4-5-20251101', // Opus 4.5 (Recommended - Best for coding)
|
|
105
|
+
'claude-sonnet-4-5-20251022', // Sonnet 4.5 (Balanced)
|
|
106
|
+
'claude-haiku-4-5-20251022', // Haiku 4.5 (Fast)
|
|
107
|
+
// Claude 3.5 (Legacy)
|
|
108
|
+
'claude-3-5-sonnet-20241022', // Sonnet 3.5
|
|
109
|
+
'claude-3-5-sonnet-20240620', // Sonnet 3.5 (Older)
|
|
110
|
+
// Claude 3 (Legacy)
|
|
111
|
+
'claude-3-opus-20240229', // Opus 3
|
|
112
|
+
'claude-3-sonnet-20240229', // Sonnet 3
|
|
113
|
+
'claude-3-haiku-20240307', // Haiku 3
|
|
114
|
+
// Future models (5.x, 6.x, etc.) will work automatically
|
|
115
|
+
// Users just need to specify the model name in config
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/ai/anthropic.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/factory.d.ts
CHANGED
|
@@ -18,6 +18,6 @@ export declare class AIProviderFactory {
|
|
|
18
18
|
/**
|
|
19
19
|
* Get available models for a provider
|
|
20
20
|
*/
|
|
21
|
-
static getAvailableModels(provider: string): string[]
|
|
21
|
+
static getAvailableModels(provider: string, apiKey: string): Promise<string[]>;
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=factory.d.ts.map
|
package/dist/ai/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ3C;;GAEG;AACH,qBAAa,iBAAiB;IAC1B;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IA0ClD;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBjE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAepD;;OAEG;WACU,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAmBvF"}
|
package/dist/ai/factory.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GeminiProvider } from './gemini.js';
|
|
2
|
+
import { OpenAIProvider } from './openai.js';
|
|
3
|
+
import { AnthropicProvider } from './anthropic.js';
|
|
2
4
|
import { ConfigError } from '../types/index.js';
|
|
3
5
|
import { configManager } from '../config/manager.js';
|
|
4
6
|
import { logger } from '../utils/logger.js';
|
|
@@ -25,11 +27,19 @@ export class AIProviderFactory {
|
|
|
25
27
|
const geminiModel = config.providers.gemini?.model || GeminiProvider.getRecommendedModel();
|
|
26
28
|
return new GeminiProvider(apiKey, geminiModel);
|
|
27
29
|
case 'openai':
|
|
28
|
-
|
|
30
|
+
if (!apiKey) {
|
|
31
|
+
throw new ConfigError('OpenAI API key not found. Run: ownkey config');
|
|
32
|
+
}
|
|
33
|
+
const openaiModel = config.providers.openai?.model || 'gpt-4-turbo';
|
|
34
|
+
return new OpenAIProvider(apiKey, openaiModel);
|
|
29
35
|
case 'anthropic':
|
|
30
|
-
|
|
36
|
+
if (!apiKey) {
|
|
37
|
+
throw new ConfigError('Anthropic API key not found. Run: ownkey config');
|
|
38
|
+
}
|
|
39
|
+
const anthropicModel = config.providers.anthropic?.model || 'claude-opus-4-5-20251101';
|
|
40
|
+
return new AnthropicProvider(apiKey, anthropicModel);
|
|
31
41
|
case 'ollama':
|
|
32
|
-
throw new ConfigError('Ollama provider not yet implemented (coming
|
|
42
|
+
throw new ConfigError('Ollama provider not yet implemented (coming in v0.7.0)');
|
|
33
43
|
default:
|
|
34
44
|
throw new ConfigError(`Unknown provider: ${provider}`);
|
|
35
45
|
}
|
|
@@ -64,7 +74,7 @@ export class AIProviderFactory {
|
|
|
64
74
|
case 'openai':
|
|
65
75
|
return 'gpt-4-turbo';
|
|
66
76
|
case 'anthropic':
|
|
67
|
-
return 'claude-
|
|
77
|
+
return 'claude-opus-4-5-20251101';
|
|
68
78
|
case 'ollama':
|
|
69
79
|
return 'deepseek-coder:latest';
|
|
70
80
|
default:
|
|
@@ -74,22 +84,24 @@ export class AIProviderFactory {
|
|
|
74
84
|
/**
|
|
75
85
|
* Get available models for a provider
|
|
76
86
|
*/
|
|
77
|
-
static getAvailableModels(provider) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
'
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
static async getAvailableModels(provider, apiKey) {
|
|
88
|
+
try {
|
|
89
|
+
switch (provider) {
|
|
90
|
+
case 'gemini':
|
|
91
|
+
return await GeminiProvider.getAvailableModels(apiKey);
|
|
92
|
+
case 'openai':
|
|
93
|
+
return await OpenAIProvider.getAvailableModels(apiKey);
|
|
94
|
+
case 'anthropic':
|
|
95
|
+
return await AnthropicProvider.getAvailableModels(apiKey);
|
|
96
|
+
case 'ollama':
|
|
97
|
+
return ['deepseek-coder:latest', 'codellama:latest', 'llama2:latest'];
|
|
98
|
+
default:
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger.error(`Failed to fetch models for ${provider}:`, error);
|
|
104
|
+
return [AIProviderFactory.getRecommendedModel(provider)];
|
|
93
105
|
}
|
|
94
106
|
}
|
|
95
107
|
}
|
package/dist/ai/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC1B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc;QACvB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,WAAW,CAAC,sDAAsD,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,cAAc,CAAC,CAAC;QAEnD,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,QAAQ;gBACT,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,IAAI,WAAW,CAAC,8CAA8C,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;gBAC3F,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAEnD,KAAK,QAAQ;gBACT,MAAM,IAAI,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/gemini.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare class GeminiProvider extends AIProvider {
|
|
|
12
12
|
/**
|
|
13
13
|
* Get available Gemini models
|
|
14
14
|
*/
|
|
15
|
-
static getAvailableModels(): string[]
|
|
15
|
+
static getAvailableModels(apiKey: string): Promise<string[]>;
|
|
16
16
|
/**
|
|
17
17
|
* Get recommended model for code analysis
|
|
18
18
|
*/
|
package/dist/ai/gemini.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AAyB7F;;;GAGG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC1C,OAAO,CAAC,OAAO,CAAkD;IAEjE,eAAe,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC;IAsE1F;;OAEG;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AAyB7F;;;GAGG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC1C,OAAO,CAAC,OAAO,CAAkD;IAEjE,eAAe,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC;IAsE1F;;OAEG;WACU,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgClE;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM;CAGvC"}
|
package/dist/ai/gemini.js
CHANGED
|
@@ -74,8 +74,28 @@ export class GeminiProvider extends AIProvider {
|
|
|
74
74
|
/**
|
|
75
75
|
* Get available Gemini models
|
|
76
76
|
*/
|
|
77
|
-
static getAvailableModels() {
|
|
78
|
-
|
|
77
|
+
static async getAvailableModels(apiKey) {
|
|
78
|
+
try {
|
|
79
|
+
const response = await fetch('https://generativelanguage.googleapis.com/v1/models', {
|
|
80
|
+
headers: {
|
|
81
|
+
'x-goog-api-key': apiKey,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
throw new Error(`Failed to fetch models: ${response.statusText}`);
|
|
86
|
+
}
|
|
87
|
+
const data = await response.json();
|
|
88
|
+
// Filter for models that support generateContent
|
|
89
|
+
const models = data.models
|
|
90
|
+
.filter((m) => m.supportedGenerationMethods?.includes('generateContent') &&
|
|
91
|
+
m.name.includes('gemini'))
|
|
92
|
+
.map((m) => m.name.replace('models/', ''));
|
|
93
|
+
return models.length > 0 ? models : ['gemini-2.5-pro', 'gemini-2.5-flash'];
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.error('Failed to fetch Gemini models:', error);
|
|
97
|
+
return ['gemini-2.5-pro', 'gemini-2.5-flash', 'gemini-2.5-flash-lite'];
|
|
98
|
+
}
|
|
79
99
|
}
|
|
80
100
|
/**
|
|
81
101
|
* Get recommended model for code analysis
|
package/dist/ai/gemini.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import type { CodeContext, Suggestion } from '../types/index.js';
|
|
3
|
+
export declare class OpenAIProvider extends AIProvider {
|
|
4
|
+
private baseUrl;
|
|
5
|
+
constructor(apiKey?: string, model?: string);
|
|
6
|
+
getDefaultModel(): string;
|
|
7
|
+
testConnection(): Promise<boolean>;
|
|
8
|
+
analyze(context: CodeContext): AsyncGenerator<Suggestion>;
|
|
9
|
+
static getAvailableModels(apiKey: string): Promise<string[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGjE,qBAAa,cAAe,SAAQ,UAAU;IAC1C,OAAO,CAAC,OAAO,CAA+B;gBAElC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAI3C,eAAe,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBjC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;WAqDnD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAqCrE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export class OpenAIProvider extends AIProvider {
|
|
4
|
+
baseUrl = 'https://api.openai.com/v1';
|
|
5
|
+
constructor(apiKey, model) {
|
|
6
|
+
super(apiKey, model);
|
|
7
|
+
}
|
|
8
|
+
getDefaultModel() {
|
|
9
|
+
return 'gpt-4-turbo';
|
|
10
|
+
}
|
|
11
|
+
async testConnection() {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${this.baseUrl}/models`, {
|
|
14
|
+
headers: {
|
|
15
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
logger.debug(`OpenAI connection test failed: ${response.status}`);
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.debug('OpenAI connection test error:', error);
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async *analyze(context) {
|
|
30
|
+
const prompt = this.buildUserPrompt(context);
|
|
31
|
+
try {
|
|
32
|
+
logger.verbose(`Analyzing with OpenAI (${this.model})...`);
|
|
33
|
+
const response = await fetch(`${this.baseUrl}/chat/completions`, {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
model: this.model,
|
|
41
|
+
messages: [
|
|
42
|
+
{
|
|
43
|
+
role: 'system',
|
|
44
|
+
content: this.getSystemPrompt(),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
role: 'user',
|
|
48
|
+
content: prompt,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
temperature: 0.3,
|
|
52
|
+
max_tokens: 8192,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const errorData = await response.json();
|
|
57
|
+
logger.error('OpenAI API error:', errorData);
|
|
58
|
+
throw new Error(`OpenAI API error: ${errorData.error?.message || response.statusText}`);
|
|
59
|
+
}
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
const content = data.choices[0]?.message?.content;
|
|
62
|
+
if (!content) {
|
|
63
|
+
throw new Error('No content in OpenAI response');
|
|
64
|
+
}
|
|
65
|
+
// Parse suggestions from response
|
|
66
|
+
const suggestions = this.parseSuggestions(content);
|
|
67
|
+
for (const suggestion of suggestions) {
|
|
68
|
+
yield suggestion;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('OpenAI analysis error:', error);
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
static async getAvailableModels(apiKey) {
|
|
77
|
+
try {
|
|
78
|
+
const response = await fetch('https://api.openai.com/v1/models', {
|
|
79
|
+
headers: {
|
|
80
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
throw new Error(`Failed to fetch models: ${response.statusText}`);
|
|
85
|
+
}
|
|
86
|
+
const data = await response.json();
|
|
87
|
+
// Filter for GPT models suitable for code analysis
|
|
88
|
+
const models = data.data
|
|
89
|
+
.filter((m) => m.id.includes('gpt') &&
|
|
90
|
+
!m.id.includes('instruct') &&
|
|
91
|
+
!m.id.includes('vision'))
|
|
92
|
+
.map((m) => m.id)
|
|
93
|
+
.sort((a, b) => {
|
|
94
|
+
// Sort by preference: gpt-4-turbo > gpt-4 > gpt-3.5
|
|
95
|
+
if (a.includes('4-turbo'))
|
|
96
|
+
return -1;
|
|
97
|
+
if (b.includes('4-turbo'))
|
|
98
|
+
return 1;
|
|
99
|
+
if (a.includes('gpt-4'))
|
|
100
|
+
return -1;
|
|
101
|
+
if (b.includes('gpt-4'))
|
|
102
|
+
return 1;
|
|
103
|
+
return 0;
|
|
104
|
+
});
|
|
105
|
+
return models;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
logger.error('Failed to fetch OpenAI models:', error);
|
|
109
|
+
return ['gpt-4-turbo', 'gpt-4', 'gpt-3.5-turbo']; // Fallback
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,YAAY,SAgCnB,CAAC"}
|