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.
Files changed (62) hide show
  1. package/README.md +105 -151
  2. package/dist/ai/factory.d.ts.map +1 -1
  3. package/dist/ai/factory.js +5 -1
  4. package/dist/ai/factory.js.map +1 -1
  5. package/dist/ai/ollama.d.ts +30 -0
  6. package/dist/ai/ollama.d.ts.map +1 -0
  7. package/dist/ai/ollama.js +175 -0
  8. package/dist/ai/ollama.js.map +1 -0
  9. package/dist/commands/apply.d.ts.map +1 -1
  10. package/dist/commands/apply.js +63 -14
  11. package/dist/commands/apply.js.map +1 -1
  12. package/dist/commands/suggest.d.ts.map +1 -1
  13. package/dist/commands/suggest.js +4 -0
  14. package/dist/commands/suggest.js.map +1 -1
  15. package/dist/commands/undo.d.ts +3 -0
  16. package/dist/commands/undo.d.ts.map +1 -0
  17. package/dist/commands/undo.js +197 -0
  18. package/dist/commands/undo.js.map +1 -0
  19. package/dist/core/apply/engine.d.ts +36 -0
  20. package/dist/core/apply/engine.d.ts.map +1 -0
  21. package/dist/core/apply/engine.js +179 -0
  22. package/dist/core/apply/engine.js.map +1 -0
  23. package/dist/core/apply/index.d.ts +3 -0
  24. package/dist/core/apply/index.d.ts.map +1 -0
  25. package/dist/core/apply/index.js +3 -0
  26. package/dist/core/apply/index.js.map +1 -0
  27. package/dist/core/apply/interactive.d.ts +53 -0
  28. package/dist/core/apply/interactive.d.ts.map +1 -0
  29. package/dist/core/apply/interactive.js +188 -0
  30. package/dist/core/apply/interactive.js.map +1 -0
  31. package/dist/core/backup/index.d.ts +2 -0
  32. package/dist/core/backup/index.d.ts.map +1 -0
  33. package/dist/core/backup/index.js +2 -0
  34. package/dist/core/backup/index.js.map +1 -0
  35. package/dist/core/backup/manager.d.ts +49 -0
  36. package/dist/core/backup/manager.d.ts.map +1 -0
  37. package/dist/core/backup/manager.js +133 -0
  38. package/dist/core/backup/manager.js.map +1 -0
  39. package/dist/core/diff/applier.d.ts +22 -0
  40. package/dist/core/diff/applier.d.ts.map +1 -0
  41. package/dist/core/diff/applier.js +98 -0
  42. package/dist/core/diff/applier.js.map +1 -0
  43. package/dist/core/diff/index.d.ts +4 -0
  44. package/dist/core/diff/index.d.ts.map +1 -0
  45. package/dist/core/diff/index.js +4 -0
  46. package/dist/core/diff/index.js.map +1 -0
  47. package/dist/core/diff/parser.d.ts +32 -0
  48. package/dist/core/diff/parser.d.ts.map +1 -0
  49. package/dist/core/diff/parser.js +108 -0
  50. package/dist/core/diff/parser.js.map +1 -0
  51. package/dist/core/diff/validator.d.ts +21 -0
  52. package/dist/core/diff/validator.d.ts.map +1 -0
  53. package/dist/core/diff/validator.js +86 -0
  54. package/dist/core/diff/validator.js.map +1 -0
  55. package/dist/db/client.d.ts +2 -0
  56. package/dist/db/client.d.ts.map +1 -1
  57. package/dist/db/client.js +14 -5
  58. package/dist/db/client.js.map +1 -1
  59. package/dist/db/migrations/002_applies.sql +32 -0
  60. package/dist/index.js +3 -1
  61. package/dist/index.js.map +1 -1
  62. package/package.json +2 -2
package/README.md CHANGED
@@ -10,139 +10,72 @@
10
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
11
11
  [![Downloads](https://img.shields.io/npm/dm/ownkey.svg)](https://www.npmjs.com/package/ownkey)
12
12
 
13
- *Intelligent code analysis powered by OpenAI, Anthropic Claude 4.5, and Google Gemini • Your code never leaves your machine*
13
+ *Intelligent code analysis powered by AI • Your code never leaves your machine*
14
14
 
15
- [Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [Documentation](#-commands)
15
+ [Quick Start](#-quick-start) • [Features](#-features) • [Installation](#-installation) • [Commands](#-commands)
16
16
 
17
17
  </div>
18
18
 
19
19
  ---
20
20
 
21
- > ✨ **v0.6.0** - Multi-provider support! Choose between OpenAI, Anthropic Claude 4.5, and Google Gemini.
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 globally
26
+ # Install
27
27
  npm install -g ownkey
28
28
 
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
29
+ # Configure (choose your provider)
30
+ ownkey config
35
31
 
36
- # Analyze your codebase
32
+ # Analyze your code
37
33
  ownkey suggest .
38
- ```
39
34
 
40
- **Get API Keys:**
41
- - **Gemini:** [Google AI Studio](https://aistudio.google.com/app/apikey) (Free tier available)
42
- - **OpenAI:** [OpenAI Platform](https://platform.openai.com/api-keys)
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
- <table>
48
- <tr>
49
- <td width="50%">
50
-
51
- ### 🤖 Multi-Provider AI
52
- Choose between OpenAI, Claude 4.5, or Gemini
53
-
54
- ### 🔒 Privacy-First
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
- ### 🔐 Secure Storage
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 | Models | Get API Key |
81
- |:--------:|:------:|:------:|:-----------:|
82
- | **🟢 Google Gemini** | ✅ **Available** | Gemini 2.5 Pro, Flash, 2.0 | [Get Key](https://aistudio.google.com/app/apikey) |
83
- | **🔵 OpenAI** | ✅ **Available** | GPT-4 Turbo, GPT-4, GPT-3.5 | [Get Key](https://platform.openai.com/api-keys) |
84
- | **🟣 Anthropic** | ✅ **Available** | Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 | [Get Key](https://console.anthropic.com/) |
85
- | **🟠 Ollama** | 🔜 Coming Soon | Any local model | v0.7.0 |
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 Supabase database and AI providers.
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
- **Output:**
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
- [2] security (critical) in db/query.ts
178
- SQL injection vulnerability detected
102
+ Apply an AI-generated suggestion with automatic backup.
179
103
 
180
- ✨ Analysis Complete!
181
- Total suggestions: 12
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 apply <id>` *(Coming in v0.7.0)*
110
+ ### `ownkey undo [backup-id]`
185
111
 
186
- Apply a suggestion to your code.
112
+ Undo a previously applied suggestion.
187
113
 
188
114
  ```bash
189
- ownkey apply abc123
190
- ownkey apply abc123 --no-backup
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
- ## 🔒 Security
120
+ ## 🟠 Using Ollama (Offline Mode)
194
121
 
195
- - **API Keys**: Stored in OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
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
- ## 🗂 Project Structure
124
+ ### Setup
201
125
 
202
- ```
203
- ~/.ownkey/
204
- ├── config.json # Configuration file
205
- ├── keys.enc # Encrypted API keys (fallback)
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
- ## 🧪 Development
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
- ```bash
212
- # Install dependencies
213
- npm install
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
- # Run in development mode
216
- npm run dev
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
- # Build
219
- npm run build
155
+ ## 🔐 Security
220
156
 
221
- # Run tests
222
- npm test
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
- ## 📝 Roadmap
179
+ Or run in local-only mode:
226
180
 
227
- - [x] v0.2.0 - CLI skeleton & configuration
228
- - [x] v0.3.0 - Config system with keychain
229
- - [x] v0.4.0 - File scanner
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 are welcome! Please feel free to submit a Pull Request.
187
+ Contributions welcome! Please read our contributing guidelines.
240
188
 
241
189
  ## 📄 License
242
190
 
243
- MIT © 2026 OwnKey
191
+ MIT License - see LICENSE file for details
244
192
 
245
193
  ## 🔗 Links
246
194
 
247
- - [GitHub Repository](https://github.com/ArpitK24/OwnKey)
248
- - [Issue Tracker](https://github.com/ArpitK24/OwnKey/issues)
249
- - [npm Package](https://www.npmjs.com/package/ownkey)
250
- - [Get Gemini API Key](https://aistudio.google.com/app/apikey)
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
- **Built with ❤️ for developers who value privacy and AI-powered productivity**
202
+ <div align="center">
203
+
204
+ Made with ❤️ by the OwnKey team
205
+
206
+ **Privacy-first • AI-powered • Developer-friendly**
207
+
208
+ </div>
@@ -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;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"}
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"}
@@ -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
- throw new ConfigError('Ollama provider not yet implemented (coming in v0.7.0)');
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"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"}
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;AAIpC,eAAO,MAAM,YAAY,SAsBnB,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"}