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.
Files changed (73) hide show
  1. package/README.md +61 -14
  2. package/dist/ai/anthropic.d.ts +22 -0
  3. package/dist/ai/anthropic.d.ts.map +1 -0
  4. package/dist/ai/anthropic.js +119 -0
  5. package/dist/ai/anthropic.js.map +1 -0
  6. package/dist/ai/factory.d.ts +1 -1
  7. package/dist/ai/factory.d.ts.map +1 -1
  8. package/dist/ai/factory.js +32 -20
  9. package/dist/ai/factory.js.map +1 -1
  10. package/dist/ai/gemini.d.ts +1 -1
  11. package/dist/ai/gemini.d.ts.map +1 -1
  12. package/dist/ai/gemini.js +22 -2
  13. package/dist/ai/gemini.js.map +1 -1
  14. package/dist/ai/openai.d.ts +11 -0
  15. package/dist/ai/openai.d.ts.map +1 -0
  16. package/dist/ai/openai.js +113 -0
  17. package/dist/ai/openai.js.map +1 -0
  18. package/dist/commands/apply.d.ts.map +1 -1
  19. package/dist/commands/apply.js +63 -14
  20. package/dist/commands/apply.js.map +1 -1
  21. package/dist/commands/suggest.d.ts.map +1 -1
  22. package/dist/commands/suggest.js +6 -0
  23. package/dist/commands/suggest.js.map +1 -1
  24. package/dist/commands/undo.d.ts +3 -0
  25. package/dist/commands/undo.d.ts.map +1 -0
  26. package/dist/commands/undo.js +197 -0
  27. package/dist/commands/undo.js.map +1 -0
  28. package/dist/config/defaults.js +1 -1
  29. package/dist/config/defaults.js.map +1 -1
  30. package/dist/core/apply/engine.d.ts +36 -0
  31. package/dist/core/apply/engine.d.ts.map +1 -0
  32. package/dist/core/apply/engine.js +179 -0
  33. package/dist/core/apply/engine.js.map +1 -0
  34. package/dist/core/apply/index.d.ts +3 -0
  35. package/dist/core/apply/index.d.ts.map +1 -0
  36. package/dist/core/apply/index.js +3 -0
  37. package/dist/core/apply/index.js.map +1 -0
  38. package/dist/core/apply/interactive.d.ts +53 -0
  39. package/dist/core/apply/interactive.d.ts.map +1 -0
  40. package/dist/core/apply/interactive.js +188 -0
  41. package/dist/core/apply/interactive.js.map +1 -0
  42. package/dist/core/backup/index.d.ts +2 -0
  43. package/dist/core/backup/index.d.ts.map +1 -0
  44. package/dist/core/backup/index.js +2 -0
  45. package/dist/core/backup/index.js.map +1 -0
  46. package/dist/core/backup/manager.d.ts +49 -0
  47. package/dist/core/backup/manager.d.ts.map +1 -0
  48. package/dist/core/backup/manager.js +133 -0
  49. package/dist/core/backup/manager.js.map +1 -0
  50. package/dist/core/diff/applier.d.ts +22 -0
  51. package/dist/core/diff/applier.d.ts.map +1 -0
  52. package/dist/core/diff/applier.js +98 -0
  53. package/dist/core/diff/applier.js.map +1 -0
  54. package/dist/core/diff/index.d.ts +4 -0
  55. package/dist/core/diff/index.d.ts.map +1 -0
  56. package/dist/core/diff/index.js +4 -0
  57. package/dist/core/diff/index.js.map +1 -0
  58. package/dist/core/diff/parser.d.ts +32 -0
  59. package/dist/core/diff/parser.d.ts.map +1 -0
  60. package/dist/core/diff/parser.js +108 -0
  61. package/dist/core/diff/parser.js.map +1 -0
  62. package/dist/core/diff/validator.d.ts +21 -0
  63. package/dist/core/diff/validator.d.ts.map +1 -0
  64. package/dist/core/diff/validator.js +86 -0
  65. package/dist/core/diff/validator.js.map +1 -0
  66. package/dist/db/client.d.ts +2 -0
  67. package/dist/db/client.d.ts.map +1 -1
  68. package/dist/db/client.js +3 -0
  69. package/dist/db/client.js.map +1 -1
  70. package/dist/db/migrations/002_applies.sql +32 -0
  71. package/dist/index.js +3 -1
  72. package/dist/index.js.map +1 -1
  73. package/package.json +2 -2
package/README.md CHANGED
@@ -10,7 +10,7 @@
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 Google Gemini 2.5 • Your code never leaves your machine*
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
- > ⚠️ **v0.5.0** - Currently supports Google Gemini. OpenAI, Anthropic, and Ollama coming soon!
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 Gemini API key
30
- ownkey config --provider gemini --api-key YOUR_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 your free Gemini API key:** [Google AI Studio](https://aistudio.google.com/app/apikey)
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
- ### 🤖 AI-Powered Analysis
45
- Intelligent code review using Google Gemini 2.5 Pro
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
- ### 🎯 Multi-Model Support
63
- Use any Gemini model (pro, flash, flash-lite)
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 | ETA |
74
- |:--------:|:------:|:------:|:---:|
75
- | **🟢 Google Gemini** | ✅ **Available Now** | gemini-2.5-pro, gemini-2.5-flash | - |
76
- | **🔵 OpenAI** | 🔜 Coming Soon | GPT-4, GPT-4 Turbo | v0.6.0 |
77
- | **🟣 Anthropic** | 🔜 Coming Soon | Claude 3.5 Sonnet | v0.7.0 |
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IACrC,OAAO,GAAG,8BAA8B,CAAC;IACzC,UAAU,GAAG,YAAY,CAAC;IAElC,YAAY,MAAe,EAAE,KAAc;QACvC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,eAAe;QACX,OAAO,0BAA0B,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,IAAI,CAAC;YACD,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;oBAC9B,mBAAmB,EAAE,IAAI,CAAC,UAAU;iBAChC;gBACR,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE;wBACN;4BACI,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,MAAM;yBAClB;qBACJ;iBACJ,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrE,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CAAC,OAAoB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,6BAA6B,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;oBAC9B,mBAAmB,EAAE,IAAI,CAAC,UAAU;iBAChC;gBACR,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU,EAAE,IAAI;oBAChB,WAAW,EAAE,GAAG;oBAChB,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;oBAC9B,QAAQ,EAAE;wBACN;4BACI,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,MAAM;yBAClB;qBACJ;iBACJ,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,SAAkB,CAAC,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC/F,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACxD,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACnD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,UAAU,CAAC;YACrB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAc,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAe;QAC3C,qCAAqC;QACrC,mEAAmE;QACnE,OAAO;YACH,iCAAiC;YACjC,0BAA0B,EAAQ,2CAA2C;YAC7E,4BAA4B,EAAM,wBAAwB;YAC1D,2BAA2B,EAAO,mBAAmB;YAErD,sBAAsB;YACtB,4BAA4B,EAAM,aAAa;YAC/C,4BAA4B,EAAM,qBAAqB;YAEvD,oBAAoB;YACpB,wBAAwB,EAAU,SAAS;YAC3C,0BAA0B,EAAQ,WAAW;YAC7C,yBAAyB,EAAS,UAAU;YAE5C,yDAAyD;YACzD,sDAAsD;SACzD,CAAC;IACN,CAAC;CACJ"}
@@ -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
@@ -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;AAM3C;;GAEG;AACH,qBAAa,iBAAiB;IAC1B;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IAkClD;;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;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAkBxD"}
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,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
- throw new ConfigError('OpenAI provider not yet implemented (coming soon)');
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
- throw new ConfigError('Anthropic provider not yet implemented (coming soon)');
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 soon)');
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-3-5-sonnet-20241022';
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
- switch (provider) {
79
- case 'gemini':
80
- return GeminiProvider.getAvailableModels();
81
- case 'openai':
82
- return ['gpt-4-turbo', 'gpt-4', 'gpt-3.5-turbo'];
83
- case 'anthropic':
84
- return [
85
- 'claude-3-5-sonnet-20241022',
86
- 'claude-3-opus-20240229',
87
- 'claude-3-haiku-20240307',
88
- ];
89
- case 'ollama':
90
- return ['deepseek-coder:latest', 'codellama:latest', 'llama2:latest'];
91
- default:
92
- return [];
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
  }
@@ -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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"}
@@ -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
  */
@@ -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;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAIrC;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM;CAGvC"}
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
- return ['gemini-2.5-pro', 'gemini-2.5-flash', 'gemini-2.5-flash-lite'];
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
@@ -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;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"}