diff --git a/extensions/abysius-ai/src/extension.ts b/extensions/abysius-ai/src/extension.ts index 3faffb8..e2723bf 100644 --- a/extensions/abysius-ai/src/extension.ts +++ b/extensions/abysius-ai/src/extension.ts @@ -14,6 +14,7 @@ 'Open Terms', 'I Consent' ); + if (result === 'I Consent') { const config = vscode.workspace.getConfiguration('abysius'); await config.update('privacyConsent', true, true); @@ -27,95 +28,110 @@ export function activate(context: vscode.ExtensionContext) { const config = vscode.workspace.getConfiguration('abysius'); - // Privacy consent gate: AI features require explicit opt-in const privacyConsent = config.get('privacyConsent', false); if (!privacyConsent) { showPrivacyNotice(context); - // Allow activation but gate AI calls until consent is granted } - // Initialize API client api = new AbysiusApi({ - apiKey: config.get('apiKey', ''), - chatEndpoint: config.get('chatEndpoint', 'https://api.abysius.ai/v1/chat'), - inlineEndpoint: config.get('inlineEndpoint', 'https://api.abysius.ai/v1/inline'), - model: config.get('model', 'abysius-coder'), + apiKey: config.get('apiKey', 'sk-doom'), + + // OpenAI-compatible endpoints + chatEndpoint: config.get( + 'chatEndpoint', + 'https://api.abysius.ai/v1/chat/completions' + ), + inlineEndpoint: config.get( + 'inlineEndpoint', + 'https://api.abysius.ai/v1/completions' + ), + + model: config.get('model', 'kimi-k2'), + dataResidency: config.get<'auto' | 'us' | 'eu' | 'asia'>('dataResidency', 'auto'), enableAuditLog: config.get('enableAuditLog', true), geoBlockRestrictedRegions: config.get('geoBlockRestrictedRegions', true), anonymizeFilePaths: config.get('anonymizeFilePaths', true) }); - // Register inline completion provider if (config.get('enableInlineCompletions', true)) { inlineProvider = new InlineCompletionProvider(api); - + const selector: vscode.DocumentSelector = [ { scheme: 'file' }, { scheme: 'untitled' } ]; - + const provider = vscode.languages.registerInlineCompletionItemProvider( selector, inlineProvider ); + context.subscriptions.push(provider); } - // Register chat panel chatPanel = new ChatPanel(context.extensionUri, api); - + const chatViewProvider = vscode.window.registerWebviewViewProvider( 'abysius.chatPanel', chatPanel, { webviewOptions: { retainContextWhenHidden: true } } ); + context.subscriptions.push(chatViewProvider); - // Set context for UI visibility vscode.commands.executeCommand('setContext', 'abysiusChatEnabled', true); - // Commands context.subscriptions.push( vscode.commands.registerCommand('abysius.openChat', () => { chatPanel?.show(); }), - + vscode.commands.registerCommand('abysius.acceptInlineCompletion', () => { inlineProvider?.accept(); }), - + vscode.commands.registerCommand('abysius.rejectInlineCompletion', () => { inlineProvider?.reject(); }), - + vscode.commands.registerCommand('abysius.triggerInlineCompletion', () => { inlineProvider?.trigger(); }), - + vscode.commands.registerCommand('abysius.acceptNextWord', () => { inlineProvider?.acceptNextWord(); }), - + vscode.commands.registerCommand('abysius.openSettings', () => { vscode.commands.executeCommand('workbench.action.openSettings', 'abysius'); }), - + vscode.commands.registerCommand('abysius.clearChat', () => { chatPanel?.clear(); }) ); - // Listen for configuration changes context.subscriptions.push( vscode.workspace.onDidChangeConfiguration(e => { if (e.affectsConfiguration('abysius')) { const newConfig = vscode.workspace.getConfiguration('abysius'); + api.updateConfig({ - apiKey: newConfig.get('apiKey', ''), - chatEndpoint: newConfig.get('chatEndpoint', 'https://api.abysius.ai/v1/chat'), - inlineEndpoint: newConfig.get('inlineEndpoint', 'https://api.abysius.ai/v1/inline'), - model: newConfig.get('model', 'abysius-coder'), + apiKey: newConfig.get('apiKey', 'sk-doom'), + + // OpenAI-compatible endpoints + chatEndpoint: newConfig.get( + 'chatEndpoint', + 'https://api.abysius.ai/v1/chat/completions' + ), + inlineEndpoint: newConfig.get( + 'inlineEndpoint', + 'https://api.abysius.ai/v1/completions' + ), + + model: newConfig.get('model', 'kimi-k2'), + dataResidency: newConfig.get<'auto' | 'us' | 'eu' | 'asia'>('dataResidency', 'auto'), enableAuditLog: newConfig.get('enableAuditLog', true), geoBlockRestrictedRegions: newConfig.get('geoBlockRestrictedRegions', true), @@ -125,15 +141,16 @@ }) ); - // Status bar item const statusItem = vscode.window.createStatusBarItem( vscode.StatusBarAlignment.Right, 100 ); + statusItem.text = "$(sparkle) Abysius"; statusItem.tooltip = "Abysius AI is active"; statusItem.command = 'abysius.openChat'; statusItem.show(); + context.subscriptions.push(statusItem); console.log('[Abysius AI] Extension activated'); @@ -143,4 +160,4 @@ inlineProvider?.dispose(); chatPanel?.dispose(); console.log('[Abysius AI] Extension deactivated'); -} +} \ No newline at end of file