ownkey 0.5.1 → 0.6.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 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.6.0** - Multi-provider support! Choose between OpenAI, Anthropic Claude 4.5, and Google Gemini.
22
22
 
23
23
  ## 🚀 Quick Start
24
24
 
@@ -26,14 +26,21 @@
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 .
34
38
  ```
35
39
 
36
- **Get your free Gemini API key:** [Google AI Studio](https://aistudio.google.com/app/apikey)
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/)
37
44
 
38
45
  ## ✨ Features
39
46
 
@@ -41,8 +48,8 @@ ownkey suggest .
41
48
  <tr>
42
49
  <td width="50%">
43
50
 
44
- ### 🤖 AI-Powered Analysis
45
- Intelligent code review using Google Gemini 2.5 Pro
51
+ ### 🤖 Multi-Provider AI
52
+ Choose between OpenAI, Claude 4.5, or Gemini
46
53
 
47
54
  ### 🔒 Privacy-First
48
55
  Your code never leaves your machine - all analysis is local
@@ -59,8 +66,8 @@ API keys stored in OS keychain or encrypted
59
66
  ### 📂 Smart Scanning
60
67
  Respects .gitignore and custom patterns
61
68
 
62
- ### 🎯 Multi-Model Support
63
- Use any Gemini model (pro, flash, flash-lite)
69
+ ### 🎯 15+ AI Models
70
+ GPT-4, Claude Opus 4.5, Gemini 2.5, and more
64
71
 
65
72
  </td>
66
73
  </tr>
@@ -70,12 +77,14 @@ Use any Gemini model (pro, flash, flash-lite)
70
77
 
71
78
  <div align="center">
72
79
 
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 |
78
- | **🟠 Ollama** | 🔜 Coming Soon | Any local model | v0.8.0 |
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!
79
88
 
80
89
  </div>
81
90
 
@@ -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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"}
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAA2C,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwB5C;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAU;IAClC,OAAO,GAAG,8CAA8C,CAAC;IAEjE,eAAe;QACX,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,2DAA2D;QAC3D,MAAM,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CAAC,OAAoB,EAAE,OAAwB;QACzD,IAAI,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;YAE3D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAkB;gBAC3B,QAAQ,EAAE;oBACN;wBACI,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE;4BACH,EAAE,IAAI,EAAE,YAAY,EAAE;4BACtB,EAAE,IAAI,EAAE,UAAU,EAAE;yBACvB;qBACJ;iBACJ;gBACD,gBAAgB,EAAE;oBACd,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,GAAG;oBACxC,eAAe,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;iBAC9C;aACJ,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,KAAK,kBAAkB,EACtD;gBACI,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;iBACtC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChC,CACJ,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;gBAC/C,MAAM,IAAI,eAAe,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;YAEvD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEzE,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAElE,kCAAkC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,OAAO,CAAC,aAAa,WAAW,CAAC,MAAM,cAAc,CAAC,CAAC;YAE9D,sDAAsD;YACtD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,UAAU,CAAC;YACrB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACnC,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB;QACrB,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB;QACtB,OAAO,gBAAgB,CAAC;IAC5B,CAAC;CACJ"}
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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"}
@@ -4,7 +4,7 @@ export const DEFAULT_CONFIG = {
4
4
  model: 'gpt-4-turbo',
5
5
  },
6
6
  anthropic: {
7
- model: 'claude-3-5-sonnet-20241022',
7
+ model: 'claude-opus-4-5-20251101',
8
8
  },
9
9
  gemini: {
10
10
  model: 'gemini-2.5-pro',
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAW;IAClC,SAAS,EAAE;QACP,MAAM,EAAE;YACJ,KAAK,EAAE,aAAa;SACvB;QACD,SAAS,EAAE;YACP,KAAK,EAAE,4BAA4B;SACtC;QACD,MAAM,EAAE;YACJ,KAAK,EAAE,gBAAgB;SAC1B;QACD,MAAM,EAAE;YACJ,QAAQ,EAAE,wBAAwB;YAClC,KAAK,EAAE,uBAAuB;SACjC;KACJ;IACD,QAAQ,EAAE;QACN,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,QAAoB;KACjC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,MAAM;IACN,cAAc;IACd,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,QAAQ;IACR,UAAU;IACV,WAAW;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAW;IAClC,SAAS,EAAE;QACP,MAAM,EAAE;YACJ,KAAK,EAAE,aAAa;SACvB;QACD,SAAS,EAAE;YACP,KAAK,EAAE,0BAA0B;SACpC;QACD,MAAM,EAAE;YACJ,KAAK,EAAE,gBAAgB;SAC1B;QACD,MAAM,EAAE;YACJ,QAAQ,EAAE,wBAAwB;YAClC,KAAK,EAAE,uBAAuB;SACjC;KACJ;IACD,QAAQ,EAAE;QACN,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,QAAoB;KACjC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,MAAM;IACN,cAAc;IACd,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,QAAQ;IACR,UAAU;IACV,WAAW;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ownkey",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "Local-first AI coding agent with Google Gemini integration for intelligent codebase analysis",
5
5
  "main": "dist/index.js",
6
6
  "bin": {