import { Editor, Notice } from "obsidian"; import { AIService } from "../AIService"; import { resolveChatProvider } from "../ProviderResolver"; import NibbleAI from "main"; export class Proofreader { private plugin: NibbleAI; constructor(plugin: NibbleAI) { this.plugin = plugin; } async fixSelection(editor: Editor): Promise { const selection = editor.getSelection(); if (!selection || selection.trim().length === 0) { new Notice("No text selected."); return; } const config = resolveChatProvider( this.plugin.settings, this.plugin.settings.proofreadingProvider || "openrouter" ); if (!config) { new Notice( "⚠️ No API key for selected provider. Check Settings \u2192 NibbleAI \u2192 API Keys." ); return; } new Notice("🤖 Fixing punctuation and grammar..."); try { const systemPrompt = this.plugin.settings.proofreadingSystemPrompt || "You are a text proofreading tool. Fix punctuation and grammar in the text below. Return only the corrected text, nothing else."; const corrected = await AIService.callChatCompletion( selection, systemPrompt, { apiKey: config.apiKey, model: this.plugin.settings.proofreadingModel, endpoint: config.endpoint, provider: config.provider, temperature: this.plugin.settings.proofreadingTemperature, maxTokens: this.plugin.settings.proofreadingMaxTokens, } ); if (!corrected || corrected.trim().length === 0) { new Notice("⚠️ AI returned empty result. No changes made."); return; } editor.replaceSelection(corrected); new Notice("✅ Punctuation and grammar fixed."); } catch (error) { console.error("Proofreading error:", error); new Notice( `❌ Fix failed: ${error instanceof Error ? error.message : String(error)}` ); } } }