## Запрос

Хочу перенести всё это в Obsidian, сделав его плагином (для личного пользования). ПРи этом в средней колонке, где граф отображаетс яштатный обсидиана или замтеки  - тм будет react-flow граф с историей взаимдействия (деревом диалогов), где можно быстро будет попросить сгенерировать картинки и одновременно сразу нагенерить в разных ветках , например, локации и персонажей нескольких для НРИ (однорвременно запустить друг за другом запросы в разных ветках и пусть обрабатываются) впараллельно, я на графе всё увижу). А сам чат чтобы вёлся справа в колонк, гнде теги , бэклинки, проперти или Copilot помощник из известного плагина. сначала скажи можно ли перенести и чтобы бы ты посоветовал (пока без кода), может , предлоишь что-то улучшить? Да, граф в пространстве, где новые заметки открываются, он просто открывается там, в новом табе, где новые заметикти открываются ли графы обсидианы. Сделай перенос. Пусть бэкенд, как есть, а фронт перенеси полностью

# LLM Agent для Obsidian

Плагин Obsidian для работы с LLM агентом, включающий граф диалогов и интерфейс чата с поддержкой слеш-команд.

## Структура проекта

```
ttrpg-obsidian-vault/
├── .obsidian/
│   └── plugins/
│       └── llm-agent-plugin/
│           ├── main.js
│           ├── manifest.json
│           ├── styles.css
│           └── src/
│               ├── views/
│               │   ├── GraphView.js
│               │   └── ChatView.js
│               ├── components/
│               │   ├── ChatPanel.js
│               │   ├── CommandInput.js
│               │   ├── GraphPanel.js
│               │   └── HistoryPanel.js
│               └── utils/
│                   └── EventBus.js
├── llm-agent-backend/             # Backend на Python
│   ├── env/                       # Виртуальное окружение Python
│   ├── app/                       # Код приложения
│   │   ├── api.py
│   │   ├── workflows.py
│   │   └── ...
│   ├── requirements.txt
│   └── run.py                     # Точка входа
└── env/
```

## Установка и запуск

### 1. Настройка Backend

1. Перейдите в папку backend:
   ```bash
   cd llm-agent-backend
   ```

2. Активируйте виртуальное окружение:
   ```bash
   # Windows
   env\Scripts\activate
   
   # Linux/macOS
   source env/bin/activate
   ```

3. Установите зависимости:
   ```bash
   pip install -r requirements.txt
   ```

4. Запустите backend сервер:
   ```bash
   python run.py
   ```

   Backend будет доступен на `http://localhost:5000`

### 2. Установка плагина в Obsidian

1. **Автоматическая установка (если плагин уже находится в правильной папке):**
   - Откройте Obsidian с этим хранилищем
   - Перейдите в Настройки → Плагины сообщества
   - Включите "Небезопасные плагины" (если требуется)
   - Найдите "LLM Agent" в списке установленных плагинов
   - Включите плагин

2. **Ручная установка (если нужно скопировать файлы):**
   ```bash
   # Убедитесь, что файлы плагина находятся в:
   .obsidian/plugins/llm-agent-plugin/
   ├── main.js
   ├── manifest.json
   ├── styles.css
   └── src/
   ```

### 3. Использование

1. **Запуск интерфейса:**
   - Нажмите иконку 🧠 в левой панели Obsidian
   - Или используйте команду "Открыть граф диалогов LLM Agent" (Ctrl+P)

2. **Доступные слеш-команды:**
   - `/help` - Список доступных команд
   - `/imagine [промпт]` - Генерация изображений
   - `/analyze [url] [промпт]` - Анализ изображения
   - `/subtitles_meet` - Получение субтитров Google Meet
   - `/subtitles_teams` - Получение субтитров MS Teams
   - `/summarize` - Суммаризация истории диалога
   - `/chat` - Обычный диалог с LLM

3. **Работа с графом:**
   - Граф отображается в центральной области Obsidian
   - Чат и история - в правой боковой панели
   - Кликайте по узлам графа для навигации по веткам диалога
   - Используйте "Новый чат" для создания нового диалога

## Конфигурация

### Backend API URL

По умолчанию плагин использует `http://localhost:5000/api`. Для изменения:

1. Откройте файл `.obsidian/plugins/llm-agent-plugin/main.js`
2. Найдите строку:
   ```javascript
   const DEFAULT_SETTINGS = {
       apiBaseUrl: 'http://localhost:5000/api'
   };
   ```
3. Измените URL на нужный

### LLM модели

Конфигурация моделей находится в `backend/llm-agent-backend/app/llm_client.py`:

```python
MODELS = {
    "gemini-2.5-flash": {
        "apiBase": "https://your-api-endpoint.com",
        "apiKey": "your-api-key",
        # ...
    }
}
```

## Устранение неполадок

### Backend не запускается

1. Проверьте, что виртуальное окружение активировано
2. Убедитесь, что все зависимости установлены:
   ```bash
   pip install flask flask-cors langgraph langchain-core requests
   ```
3. Проверьте порт 5000 - он должен быть свободен

### Плагин не появляется в Obsidian

1. Убедитесь, что файлы находятся в правильной папке:
   ```
   .obsidian/plugins/llm-agent-plugin/main.js
   ```
2. Проверьте, что включены "Плагины сообщества" в настройках
3. Перезапустите Obsidian

### Ошибки подключения к API

1. Убедитесь, что backend запущен на порту 5000
2. Проверьте консоль разработчика в Obsidian (Ctrl+Shift+I)
3. Проверьте настройки CORS в `backend/llm-agent-backend/app/api.py`

### Граф не отображается

1. Текущая версия использует упрощенную визуализацию
2. Для полноценного React Flow потребуется дополнительная настройка bundler'а

## Разработка

### Структура кода плагина

- `main.js` - Основной класс плагина
- `src/views/` - Views для Obsidian (GraphView, ChatView)
- `src/components/` - React-like компоненты
- `src/utils/` - Утилиты (EventBus)

### Отладка

1. Откройте консоль разработчика в Obsidian (Ctrl+Shift+I)
2. Логи плагина доступны в консоли
3. Backend логи выводятся в терминал где запущен сервер

### Добавление новых команд

1. Добавьте команду в `backend/llm-agent-backend/app/nodes.py` в `CommandManager`
2. Создайте соответствующий узел обработки
3. Обновите маршрутизацию в `workflows.py`

## API Documentation

### Основные эндпоинты

- `POST /api/chat` - Отправка сообщения
- `GET /api/graphs` - Список всех графов
- `GET /api/graphs/{id}` - Данные конкретного графа
- `DELETE /api/graphs/{id}` - Удаление графа
- `GET /api/messages/{graph_id}/{node_id}` - Сообщения от корня до узла

## Лицензия

Для личного использования.
```

**`backend/llm-agent-backend/requirements.txt`:**
```txt
flask==2.3.3
flask-cors==4.0.0
langgraph==0.0.40
langchain-core==0.1.45
requests==2.31.0
sqlite3
openai==1.3.0
```

**`backend/llm-agent-backend/run.py`:**
```python
"""
Точка входа для запуска LLM Agent backend сервера.
Запускает Flask приложение с настройками для разработки.
"""

import os
import sys

# Добавляем папку app в Python path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'app'))

from api import app2

if __name__ == "__main__":
    print("🚀 Запуск LLM Agent Backend сервера...")
    print("📍 API будет доступно на: http://localhost:5000/api")
    print("📊 Список графов: http://localhost:5000/api/graphs")
    print("💬 Чат эндпоинт: http://localhost:5000/api/chat")
    print("\n⚠️  Для остановки нажмите Ctrl+C\n")
    
    app2.run(
        debug=True, 
        port=5000,
        host='localhost'
    )
```

**`backend/llm-agent-backend/app/__init__.py`:**
```python
# Пустой файл для создания Python пакета
```

## Быстрый старт:

1. **Запуск backend:**
   ```bash
   cd backend/llm-agent-backend
   env\Scripts\activate  # Windows
   python run.py
   ```

2. **Запуск Obsidian:**
   - Откройте хранилище в Obsidian
   - Включите плагин "LLM Agent" в настройках
   - Нажмите иконку 🧠 в левой панели

3. **Проверка работы:**
   - В правой панели должна появиться история диалогов
   - В центре - область для графа
   - Отправьте сообщение `/help` для проверки

**Важно:** Backend должен быть запущен перед использованием плагина. При первом запуске может потребоваться установка дополнительных зависимостей.