import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting, ItemView, WorkspaceLeaf } from 'obsidian'; import { EventBus } from './src/utils/EventBus'; import { GraphView, GRAPH_VIEW_TYPE } from './src/views/GraphView'; import { ChatView, CHAT_VIEW_TYPE } from './src/views/ChatView'; import 'src/css/styles.css'; // Путь к твоему новому CSS файлу // ----------------------------------------------- Settings --------------------------------------------------------------- interface LLMAgentSettings { apiBaseUrl: string; systemPrompt: string; } const DEFAULT_SETTINGS: LLMAgentSettings = { apiBaseUrl: 'http://localhost:5000/api', systemPrompt: 'Ты полезный ИИ ассистент.', }; // ----------------------------------------------- Main Plugin Class --------------------------------------------------------------- export default class LLMAgentPlugin extends Plugin { settings: LLMAgentSettings; eventBus: EventBus; async onload() { await this.loadSettings(); this.eventBus = new EventBus(); // Регистрируем кастомные views this.registerView(GRAPH_VIEW_TYPE, (leaf) => new GraphView(leaf, this)); this.registerView(CHAT_VIEW_TYPE, (leaf) => new ChatView(leaf, this)); // Добавляем команды this.addCommand({ id: 'open-llm-agent-graph', name: 'Открыть граф диалогов LLM Agent', callback: () => this.activateGraphView() }); this.addCommand({ id: 'open-llm-agent-chat', name: 'Открыть чат LLM Agent', callback: () => this.activateChatView() }); this.addCommand({ id: 'new-llm-agent-chat', name: 'Новый чат LLM Agent', callback: () => this.handleNewChat() }); // Добавляем иконку в ribbon this.addRibbonIcon('brain-circuit', 'LLM Agent', () => { this.activateGraphView(); this.activateChatView(); }); console.log('LLM Agent plugin загружен'); // This adds a settings tab so the user can configure various aspects of the plugin this.addSettingTab(new SampleSettingTab(this.app, this)); } onunload() { console.log('LLM Agent plugin выгружен'); } // ----------------------------------------------- Settings Management --------------------------------------------------------------- async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); } async saveSettings() { await this.saveData(this.settings); } // ----------------------------------------------- View Management --------------------------------------------------------------- async activateGraphView() { const existingLeaf = this.app.workspace.getLeavesOfType(GRAPH_VIEW_TYPE)[0]; if (existingLeaf) { this.app.workspace.revealLeaf(existingLeaf); } else { await this.app.workspace.getLeaf('tab').setViewState({ type: GRAPH_VIEW_TYPE, active: true }); } } async activateChatView() { const existingLeaf = this.app.workspace.getLeavesOfType(CHAT_VIEW_TYPE)[0]; if (existingLeaf) { this.app.workspace.revealLeaf(existingLeaf); } else { const rightLeaf = this.app.workspace.getRightLeaf(false); if (rightLeaf) { await rightLeaf.setViewState({ type: CHAT_VIEW_TYPE, active: true }); } } } // ----------------------------------------------- Event Handlers --------------------------------------------------------------- handleNewChat() { this.eventBus.emit('new-chat'); } } // ----------------------------------------------- Sample Setting Tab --------------------------------------------------------------- class SampleSettingTab extends PluginSettingTab { plugin: LLMAgentPlugin; constructor(app: App, plugin: LLMAgentPlugin) { super(app, plugin); this.plugin = plugin; } display(): void { const { containerEl } = this; containerEl.empty(); new Setting(containerEl) .setName('API Base URL') .setDesc('Базовый URL для API LLM Agent') .addText((text) => text .setPlaceholder('Введите URL') .setValue(this.plugin.settings.apiBaseUrl) .onChange(async (value) => { this.plugin.settings.apiBaseUrl = value; await this.plugin.saveSettings(); }) ); // Новое поле для системного промпта new Setting(containerEl) .setName('Системный промпт') .setDesc('Этот промпт будет отправляться LLM перед каждым диалогом.') .addTextArea((text) => text .setPlaceholder('Ты полезный ИИ ассистент.') .setValue(this.plugin.settings.systemPrompt) .onChange(async (value) => { this.plugin.settings.systemPrompt = value; await this.plugin.saveSettings(); }) ); } }