ownkey 0.6.0 → 0.8.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 +105 -151
- package/dist/ai/factory.d.ts.map +1 -1
- package/dist/ai/factory.js +5 -1
- package/dist/ai/factory.js.map +1 -1
- package/dist/ai/ollama.d.ts +30 -0
- package/dist/ai/ollama.d.ts.map +1 -0
- package/dist/ai/ollama.js +175 -0
- package/dist/ai/ollama.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 +4 -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/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 +14 -5
- 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,139 +10,72 @@
|
|
|
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 AI • Your code never leaves your machine*
|
|
14
14
|
|
|
15
|
-
[Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [
|
|
15
|
+
[Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [Commands](#-commands)
|
|
16
16
|
|
|
17
17
|
</div>
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
> ✨ **v0.
|
|
21
|
+
> ✨ **v0.8.0** - Now with Ollama! Run completely offline with local LLMs.
|
|
22
22
|
|
|
23
23
|
## 🚀 Quick Start
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
# Install
|
|
26
|
+
# Install
|
|
27
27
|
npm install -g ownkey
|
|
28
28
|
|
|
29
|
-
# Configure
|
|
30
|
-
ownkey config
|
|
31
|
-
# OR
|
|
32
|
-
ownkey config --provider openai --api-key YOUR_OPENAI_KEY
|
|
33
|
-
# OR
|
|
34
|
-
ownkey config --provider anthropic --api-key YOUR_ANTHROPIC_KEY
|
|
29
|
+
# Configure (choose your provider)
|
|
30
|
+
ownkey config
|
|
35
31
|
|
|
36
|
-
# Analyze your
|
|
32
|
+
# Analyze your code
|
|
37
33
|
ownkey suggest .
|
|
38
|
-
```
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- **Anthropic:** [Anthropic Console](https://console.anthropic.com/)
|
|
35
|
+
# Apply AI suggestions (auto-fix)
|
|
36
|
+
ownkey apply <suggestion-id>
|
|
37
|
+
```
|
|
44
38
|
|
|
45
39
|
## ✨ Features
|
|
46
40
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Your code never leaves your machine - all analysis is local
|
|
56
|
-
|
|
57
|
-
### 💾 Optional Cloud Sync
|
|
58
|
-
Store history in your own Supabase database
|
|
59
|
-
|
|
60
|
-
</td>
|
|
61
|
-
<td width="50%">
|
|
41
|
+
- 🤖 **4 AI Providers** - Google Gemini, OpenAI, Anthropic Claude, Ollama
|
|
42
|
+
- 🔒 **Privacy-First** - Your code never leaves your machine
|
|
43
|
+
- 🏠 **Offline Mode** - Use Ollama for 100% local analysis
|
|
44
|
+
- 🔧 **Auto-Fix** - Apply AI suggestions with automatic backups
|
|
45
|
+
- ↩️ **Rollback** - Undo any changes instantly
|
|
46
|
+
- 💾 **Optional Cloud Sync** - Store history in your own Supabase database
|
|
47
|
+
- 🔐 **Secure** - API keys stored in OS keychain or encrypted
|
|
48
|
+
- 📂 **Smart Scanning** - Respects .gitignore and custom patterns
|
|
62
49
|
|
|
63
|
-
|
|
64
|
-
API keys stored in OS keychain or encrypted
|
|
65
|
-
|
|
66
|
-
### 📂 Smart Scanning
|
|
67
|
-
Respects .gitignore and custom patterns
|
|
68
|
-
|
|
69
|
-
### 🎯 15+ AI Models
|
|
70
|
-
GPT-4, Claude Opus 4.5, Gemini 2.5, and more
|
|
71
|
-
|
|
72
|
-
</td>
|
|
73
|
-
</tr>
|
|
74
|
-
</table>
|
|
75
|
-
|
|
76
|
-
## ⚡ AI Provider Support
|
|
50
|
+
## ⚡ AI Providers
|
|
77
51
|
|
|
78
52
|
<div align="center">
|
|
79
53
|
|
|
80
|
-
| Provider | Status |
|
|
81
|
-
|
|
82
|
-
| **🟢 Google Gemini** | ✅
|
|
83
|
-
| **🔵 OpenAI** | ✅
|
|
84
|
-
| **🟣 Anthropic** | ✅
|
|
85
|
-
| **🟠 Ollama** |
|
|
86
|
-
|
|
87
|
-
**New in v0.6.0:** Multi-provider support with 15+ AI models!
|
|
54
|
+
| Provider | Status | Best For | API Key Required |
|
|
55
|
+
|:--------:|:------:|:--------:|:----------------:|
|
|
56
|
+
| **🟢 Google Gemini** | ✅ Available | Fast & accurate | [Get Key](https://aistudio.google.com/app/apikey) |
|
|
57
|
+
| **🔵 OpenAI** | ✅ Available | GPT models | [Get Key](https://platform.openai.com/api-keys) |
|
|
58
|
+
| **🟣 Anthropic Claude** | ✅ Available | Advanced reasoning | [Get Key](https://console.anthropic.com/) |
|
|
59
|
+
| **🟠 Ollama** | ✅ Available | Offline & free | [Install Ollama](https://ollama.ai) |
|
|
88
60
|
|
|
89
61
|
</div>
|
|
90
62
|
|
|
91
63
|
## 🛠 Installation
|
|
92
64
|
|
|
93
|
-
### Via npm (Recommended)
|
|
94
|
-
|
|
95
65
|
```bash
|
|
96
66
|
npm install -g ownkey
|
|
97
67
|
```
|
|
98
68
|
|
|
99
|
-
### From Source
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
git clone https://github.com/ArpitK24/OwnKey.git
|
|
103
|
-
cd ownkey-cli
|
|
104
|
-
npm install
|
|
105
|
-
npm run build
|
|
106
|
-
npm link
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## ⚙️ Configuration
|
|
110
|
-
|
|
111
|
-
### Interactive Setup
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
ownkey config
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Using Flags
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
# Configure Gemini
|
|
121
|
-
ownkey config --provider gemini --api-key YOUR_GEMINI_API_KEY
|
|
122
|
-
|
|
123
|
-
# Optional: Configure Supabase for history tracking
|
|
124
|
-
ownkey config --supabase-url https://xxx.supabase.co --supabase-key YOUR_KEY
|
|
125
|
-
|
|
126
|
-
# Use different Gemini model
|
|
127
|
-
ownkey config --provider gemini --model gemini-2.5-flash
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Getting a Gemini API Key
|
|
131
|
-
|
|
132
|
-
1. Visit [Google AI Studio](https://aistudio.google.com/app/apikey)
|
|
133
|
-
2. Create a new API key
|
|
134
|
-
3. Run `ownkey config --provider gemini --api-key YOUR_KEY`
|
|
135
|
-
|
|
136
69
|
## 📖 Commands
|
|
137
70
|
|
|
138
71
|
### `ownkey config`
|
|
139
72
|
|
|
140
|
-
Configure
|
|
73
|
+
Configure AI provider and database (optional).
|
|
141
74
|
|
|
142
75
|
```bash
|
|
143
76
|
ownkey config # Interactive wizard
|
|
77
|
+
ownkey config --provider gemini # Set provider
|
|
144
78
|
ownkey config --reset # Reset to defaults
|
|
145
|
-
ownkey config --provider gemini --api-key YOUR_KEY
|
|
146
79
|
```
|
|
147
80
|
|
|
148
81
|
### `ownkey scan [path]`
|
|
@@ -152,8 +85,6 @@ Scan a project directory.
|
|
|
152
85
|
```bash
|
|
153
86
|
ownkey scan . # Scan current directory
|
|
154
87
|
ownkey scan ./src # Scan specific folder
|
|
155
|
-
ownkey scan --max-file-size 1mb # Custom file size limit
|
|
156
|
-
ownkey scan --ignore "*.test.js" # Additional ignore patterns
|
|
157
88
|
```
|
|
158
89
|
|
|
159
90
|
### `ownkey suggest [path]`
|
|
@@ -162,93 +93,116 @@ Generate AI-powered code suggestions.
|
|
|
162
93
|
|
|
163
94
|
```bash
|
|
164
95
|
ownkey suggest . # Analyze current directory
|
|
165
|
-
ownkey suggest ./src # Analyze specific folder
|
|
166
|
-
ownkey suggest --max-files 20 # Limit files analyzed
|
|
167
96
|
ownkey suggest --local-only # Skip database storage
|
|
97
|
+
ownkey suggest --max-files 20 # Limit files analyzed
|
|
168
98
|
```
|
|
169
99
|
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
🔍 Analyzing code...
|
|
173
|
-
|
|
174
|
-
[1] bug (high) in src/auth.ts
|
|
175
|
-
Potential null pointer dereference
|
|
100
|
+
### `ownkey apply <suggestion-id>`
|
|
176
101
|
|
|
177
|
-
|
|
178
|
-
SQL injection vulnerability detected
|
|
102
|
+
Apply an AI-generated suggestion with automatic backup.
|
|
179
103
|
|
|
180
|
-
|
|
181
|
-
|
|
104
|
+
```bash
|
|
105
|
+
ownkey apply abc123 # Interactive mode
|
|
106
|
+
ownkey apply abc123 --auto # Auto-apply
|
|
107
|
+
ownkey apply abc123 --dry-run # Preview only
|
|
182
108
|
```
|
|
183
109
|
|
|
184
|
-
### `ownkey
|
|
110
|
+
### `ownkey undo [backup-id]`
|
|
185
111
|
|
|
186
|
-
|
|
112
|
+
Undo a previously applied suggestion.
|
|
187
113
|
|
|
188
114
|
```bash
|
|
189
|
-
ownkey
|
|
190
|
-
ownkey
|
|
115
|
+
ownkey undo # Interactive - choose from list
|
|
116
|
+
ownkey undo abc123 # Undo specific backup
|
|
117
|
+
ownkey undo --list # List recent applies
|
|
191
118
|
```
|
|
192
119
|
|
|
193
|
-
##
|
|
120
|
+
## 🟠 Using Ollama (Offline Mode)
|
|
194
121
|
|
|
195
|
-
|
|
196
|
-
- **Fallback**: Encrypted local storage if keychain unavailable
|
|
197
|
-
- **No Remote Storage**: Your source code is never uploaded to any server
|
|
198
|
-
- **Supabase**: Optional, user-controlled database for history only
|
|
122
|
+
Run OwnKey completely offline with local LLMs!
|
|
199
123
|
|
|
200
|
-
|
|
124
|
+
### Setup
|
|
201
125
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
└── logs/ # Log files
|
|
207
|
-
```
|
|
126
|
+
1. **Install Ollama**
|
|
127
|
+
- Windows: Download from [ollama.ai](https://ollama.ai)
|
|
128
|
+
- macOS: `brew install ollama`
|
|
129
|
+
- Linux: `curl https://ollama.ai/install.sh | sh`
|
|
208
130
|
|
|
209
|
-
|
|
131
|
+
2. **Pull a Model**
|
|
132
|
+
```bash
|
|
133
|
+
ollama pull deepseek-coder # Recommended for code
|
|
134
|
+
# OR
|
|
135
|
+
ollama pull codellama # Alternative
|
|
136
|
+
```
|
|
210
137
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
138
|
+
3. **Configure OwnKey**
|
|
139
|
+
```bash
|
|
140
|
+
ownkey config --provider ollama
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
4. **Use Offline**
|
|
144
|
+
```bash
|
|
145
|
+
ownkey suggest . # Works without internet!
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Recommended Models
|
|
214
149
|
|
|
215
|
-
|
|
216
|
-
|
|
150
|
+
- **deepseek-coder** - Best for code analysis
|
|
151
|
+
- **codellama** - Meta's code model
|
|
152
|
+
- **llama3** - General purpose
|
|
153
|
+
- **qwen-coder** - Alibaba's code model
|
|
217
154
|
|
|
218
|
-
|
|
219
|
-
npm run build
|
|
155
|
+
## 🔐 Security
|
|
220
156
|
|
|
221
|
-
|
|
222
|
-
|
|
157
|
+
- API keys stored in OS keychain (macOS/Linux) or encrypted (Windows)
|
|
158
|
+
- Code never sent to cloud (except when using cloud providers)
|
|
159
|
+
- Ollama runs 100% locally
|
|
160
|
+
- Optional database (your own Supabase instance)
|
|
161
|
+
|
|
162
|
+
## 📊 What OwnKey Detects
|
|
163
|
+
|
|
164
|
+
- 🐛 **Bugs** - Logic errors, off-by-one errors, null pointers
|
|
165
|
+
- 🔒 **Security** - SQL injection, XSS, insecure dependencies
|
|
166
|
+
- ⚡ **Performance** - Inefficient algorithms, memory leaks
|
|
167
|
+
- ✅ **Tests** - Missing test coverage
|
|
168
|
+
- 📝 **Documentation** - Missing comments, unclear code
|
|
169
|
+
- 🎨 **Style** - Code quality improvements
|
|
170
|
+
|
|
171
|
+
## 🌐 Database (Optional)
|
|
172
|
+
|
|
173
|
+
OwnKey can store analysis history in your own Supabase database.
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
ownkey config --supabase-url YOUR_URL --supabase-key YOUR_KEY
|
|
223
177
|
```
|
|
224
178
|
|
|
225
|
-
|
|
179
|
+
Or run in local-only mode:
|
|
226
180
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
- [x] **v0.5.0 - Gemini AI integration** ← Current
|
|
231
|
-
- [ ] v0.6.0 - OpenAI & Anthropic providers
|
|
232
|
-
- [ ] v0.7.0 - Apply/diff system
|
|
233
|
-
- [ ] v0.8.0 - Ollama (local LLM) support
|
|
234
|
-
- [ ] v0.9.0 - Testing & polish
|
|
235
|
-
- [ ] v1.0.0 - Stable release
|
|
181
|
+
```bash
|
|
182
|
+
ownkey suggest . --local-only
|
|
183
|
+
```
|
|
236
184
|
|
|
237
185
|
## 🤝 Contributing
|
|
238
186
|
|
|
239
|
-
Contributions
|
|
187
|
+
Contributions welcome! Please read our contributing guidelines.
|
|
240
188
|
|
|
241
189
|
## 📄 License
|
|
242
190
|
|
|
243
|
-
MIT
|
|
191
|
+
MIT License - see LICENSE file for details
|
|
244
192
|
|
|
245
193
|
## 🔗 Links
|
|
246
194
|
|
|
247
|
-
- [
|
|
248
|
-
- [
|
|
249
|
-
- [npm
|
|
250
|
-
- [
|
|
195
|
+
- [Documentation](https://ownkey.dev) *(coming soon)*
|
|
196
|
+
- [GitHub](https://github.com/ArpitK24/OwnKey)
|
|
197
|
+
- [npm](https://www.npmjs.com/package/ownkey)
|
|
198
|
+
- [Issues](https://github.com/ArpitK24/OwnKey/issues)
|
|
251
199
|
|
|
252
200
|
---
|
|
253
201
|
|
|
254
|
-
|
|
202
|
+
<div align="center">
|
|
203
|
+
|
|
204
|
+
Made with ❤️ by the OwnKey team
|
|
205
|
+
|
|
206
|
+
**Privacy-first • AI-powered • Developer-friendly**
|
|
207
|
+
|
|
208
|
+
</div>
|
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;AAS3C;;GAEG;AACH,qBAAa,iBAAiB;IAC1B;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IA6ClD;;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,6 +1,7 @@
|
|
|
1
1
|
import { GeminiProvider } from './gemini.js';
|
|
2
2
|
import { OpenAIProvider } from './openai.js';
|
|
3
3
|
import { AnthropicProvider } from './anthropic.js';
|
|
4
|
+
import { OllamaProvider } from './ollama.js';
|
|
4
5
|
import { ConfigError } from '../types/index.js';
|
|
5
6
|
import { configManager } from '../config/manager.js';
|
|
6
7
|
import { logger } from '../utils/logger.js';
|
|
@@ -39,7 +40,10 @@ export class AIProviderFactory {
|
|
|
39
40
|
const anthropicModel = config.providers.anthropic?.model || 'claude-opus-4-5-20251101';
|
|
40
41
|
return new AnthropicProvider(apiKey, anthropicModel);
|
|
41
42
|
case 'ollama':
|
|
42
|
-
|
|
43
|
+
// Ollama doesn't require API key - runs locally
|
|
44
|
+
const ollamaModel = config.providers.ollama?.model || 'deepseek-coder:latest';
|
|
45
|
+
const ollamaBaseUrl = config.providers.ollama?.endpoint || 'http://localhost:11434';
|
|
46
|
+
return new OllamaProvider(undefined, ollamaModel, ollamaBaseUrl);
|
|
43
47
|
default:
|
|
44
48
|
throw new ConfigError(`Unknown provider: ${provider}`);
|
|
45
49
|
}
|
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,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,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,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,aAAa,CAAC;gBACpE,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAEnD,KAAK,WAAW;gBACZ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,IAAI,WAAW,CAAC,iDAAiD,CAAC,CAAC;gBAC7E,CAAC;gBACD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,IAAI,0BAA0B,CAAC;gBACvF,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEzD,KAAK,QAAQ;gBACT,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import type { CodeContext, Suggestion } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ollama AI Provider
|
|
5
|
+
* Supports local LLMs via Ollama (DeepSeek Coder, CodeLlama, etc.)
|
|
6
|
+
* No API key required - runs completely offline
|
|
7
|
+
*/
|
|
8
|
+
export declare class OllamaProvider extends AIProvider {
|
|
9
|
+
private baseUrl;
|
|
10
|
+
constructor(apiKey?: string, model?: string, baseUrl?: string);
|
|
11
|
+
getDefaultModel(): string;
|
|
12
|
+
testConnection(): Promise<boolean>;
|
|
13
|
+
analyze(context: CodeContext): AsyncGenerator<Suggestion>;
|
|
14
|
+
private buildPrompt;
|
|
15
|
+
private parseResponse;
|
|
16
|
+
/**
|
|
17
|
+
* Get available Ollama models
|
|
18
|
+
* Lists models installed on the local Ollama instance
|
|
19
|
+
*/
|
|
20
|
+
static getAvailableModels(baseUrl?: string): Promise<string[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if Ollama is running
|
|
23
|
+
*/
|
|
24
|
+
static isOllamaRunning(baseUrl?: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a specific model is installed
|
|
27
|
+
*/
|
|
28
|
+
static isModelInstalled(model: string, baseUrl?: string): Promise<boolean>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/ai/ollama.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,cAAe,SAAQ,UAAU;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK7D,eAAe,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAYjC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;IAsChE,OAAO,CAAC,WAAW;IAsCnB,OAAO,CAAC,aAAa;IAyCrB;;;OAGG;WACU,kBAAkB,CAAC,OAAO,GAAE,MAAiC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe9F;;OAEG;WACU,eAAe,CAAC,OAAO,GAAE,MAAiC,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1F;;OAEG;WACU,gBAAgB,CACzB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAiC,GAC3C,OAAO,CAAC,OAAO,CAAC;CAItB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { AIProvider } from './provider.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ollama AI Provider
|
|
5
|
+
* Supports local LLMs via Ollama (DeepSeek Coder, CodeLlama, etc.)
|
|
6
|
+
* No API key required - runs completely offline
|
|
7
|
+
*/
|
|
8
|
+
export class OllamaProvider extends AIProvider {
|
|
9
|
+
baseUrl;
|
|
10
|
+
constructor(apiKey, model, baseUrl) {
|
|
11
|
+
super(apiKey, model);
|
|
12
|
+
this.baseUrl = baseUrl || 'http://localhost:11434';
|
|
13
|
+
}
|
|
14
|
+
getDefaultModel() {
|
|
15
|
+
return 'deepseek-coder:latest';
|
|
16
|
+
}
|
|
17
|
+
async testConnection() {
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch(`${this.baseUrl}/api/tags`, {
|
|
20
|
+
method: 'GET',
|
|
21
|
+
});
|
|
22
|
+
return response.ok;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.verbose(`Ollama connection test failed: ${error.message}`);
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async *analyze(context) {
|
|
30
|
+
const prompt = this.buildPrompt(context);
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(`${this.baseUrl}/api/generate`, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
model: this.model,
|
|
39
|
+
prompt: prompt,
|
|
40
|
+
stream: false,
|
|
41
|
+
}),
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
const suggestions = this.parseResponse(data.response, context);
|
|
48
|
+
for (const suggestion of suggestions) {
|
|
49
|
+
yield suggestion;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error.code === 'ECONNREFUSED') {
|
|
54
|
+
throw new Error('Cannot connect to Ollama. Please ensure Ollama is running:\n' +
|
|
55
|
+
' Start Ollama: ollama serve\n' +
|
|
56
|
+
' Or check if Ollama is installed: https://ollama.ai');
|
|
57
|
+
}
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
buildPrompt(context) {
|
|
62
|
+
const fileContents = context.files
|
|
63
|
+
.map((file) => `File: ${file.path}\n\`\`\`\n${file.content}\n\`\`\``)
|
|
64
|
+
.join('\n\n');
|
|
65
|
+
return `You are a code analysis expert. Analyze the following code and identify issues.
|
|
66
|
+
|
|
67
|
+
Project: ${context.projectInfo.name}
|
|
68
|
+
Files to analyze: ${context.projectInfo.fileCount}
|
|
69
|
+
|
|
70
|
+
${fileContents}
|
|
71
|
+
|
|
72
|
+
Please analyze this code and provide suggestions for:
|
|
73
|
+
- Bugs and potential errors
|
|
74
|
+
- Security vulnerabilities
|
|
75
|
+
- Performance issues
|
|
76
|
+
- Code quality improvements
|
|
77
|
+
- Missing tests
|
|
78
|
+
- Documentation gaps
|
|
79
|
+
|
|
80
|
+
For each issue found, provide:
|
|
81
|
+
1. Type (bug, security, performance, test, documentation, style)
|
|
82
|
+
2. Severity (critical, high, medium, low, info)
|
|
83
|
+
3. File path
|
|
84
|
+
4. Description of the issue
|
|
85
|
+
5. Suggested fix
|
|
86
|
+
|
|
87
|
+
Format your response as a JSON array of suggestions:
|
|
88
|
+
[
|
|
89
|
+
{
|
|
90
|
+
"type": "bug",
|
|
91
|
+
"severity": "high",
|
|
92
|
+
"filePath": "path/to/file.js",
|
|
93
|
+
"content": "Description of the issue and suggested fix"
|
|
94
|
+
}
|
|
95
|
+
]`;
|
|
96
|
+
}
|
|
97
|
+
parseResponse(response, context) {
|
|
98
|
+
try {
|
|
99
|
+
// Try to extract JSON from response
|
|
100
|
+
const jsonMatch = response.match(/\[[\s\S]*\]/);
|
|
101
|
+
if (!jsonMatch) {
|
|
102
|
+
// Fallback: create generic suggestion
|
|
103
|
+
return [
|
|
104
|
+
{
|
|
105
|
+
type: 'style',
|
|
106
|
+
severity: 'info',
|
|
107
|
+
filePath: context.files[0]?.path || 'unknown',
|
|
108
|
+
content: response.substring(0, 200),
|
|
109
|
+
diff: '',
|
|
110
|
+
rationale: 'AI response could not be parsed',
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
const suggestions = JSON.parse(jsonMatch[0]);
|
|
115
|
+
return suggestions.map((s) => ({
|
|
116
|
+
type: s.type || 'info',
|
|
117
|
+
severity: s.severity || 'info',
|
|
118
|
+
filePath: s.filePath || context.files[0]?.path || 'unknown',
|
|
119
|
+
content: s.content || s.description || 'No description provided',
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
logger.verbose(`Failed to parse Ollama response: ${error.message}`);
|
|
124
|
+
// Return generic suggestion if parsing fails
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
type: 'style',
|
|
128
|
+
severity: 'info',
|
|
129
|
+
filePath: context.files[0]?.path || 'unknown',
|
|
130
|
+
content: response.substring(0, 200),
|
|
131
|
+
diff: '',
|
|
132
|
+
rationale: 'AI response parsing failed',
|
|
133
|
+
},
|
|
134
|
+
];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get available Ollama models
|
|
139
|
+
* Lists models installed on the local Ollama instance
|
|
140
|
+
*/
|
|
141
|
+
static async getAvailableModels(baseUrl = 'http://localhost:11434') {
|
|
142
|
+
try {
|
|
143
|
+
const response = await fetch(`${baseUrl}/api/tags`);
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
const data = await response.json();
|
|
148
|
+
return data.models?.map((m) => m.name) || [];
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.verbose(`Failed to get Ollama models: ${error.message}`);
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if Ollama is running
|
|
157
|
+
*/
|
|
158
|
+
static async isOllamaRunning(baseUrl = 'http://localhost:11434') {
|
|
159
|
+
try {
|
|
160
|
+
const response = await fetch(`${baseUrl}/api/tags`);
|
|
161
|
+
return response.ok;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if a specific model is installed
|
|
169
|
+
*/
|
|
170
|
+
static async isModelInstalled(model, baseUrl = 'http://localhost:11434') {
|
|
171
|
+
const models = await this.getAvailableModels(baseUrl);
|
|
172
|
+
return models.includes(model);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/ai/ollama.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"}
|