const { Plugin, ItemView, WorkspaceLeaf } = require('obsidian'); const { GraphView, GRAPH_VIEW_TYPE } = require('/src/views/GraphView.js'); const { ChatView, CHAT_VIEW_TYPE } = require('./src/views/ChatView.js'); const { EventBus } = require('./src/utils/EventBus.js'); // ----------------------------------------------- Settings --------------------------------------------------------------- const DEFAULT_SETTINGS = { apiBaseUrl: 'http://localhost:5000/api' }; // ----------------------------------------------- Main Plugin Class --------------------------------------------------------------- class LLMAgentPlugin extends Plugin { constructor() { super(); this.eventBus = new EventBus(); this.settings = DEFAULT_SETTINGS; } async onload() { await this.loadSettings(); // Регистрируем кастомные 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 загружен'); } 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 { await this.app.workspace.getRightLeaf(false).setViewState({ type: CHAT_VIEW_TYPE, active: true, }); } } // ----------------------------------------------- Event Handlers --------------------------------------------------------------- handleNewChat() { this.eventBus.emit('new-chat'); } } module.exports = LLMAgentPlugin;