Major changes: - Add Go backend (backend/) with microservices architecture - Enhanced master-agents-svc: reranker, content-classifier, stealth-crawler, proxy-manager, media-search, fastClassifier, language detection - New web-svc widgets: KnowledgeCard, ProductCard, ProfileCard, VideoCard, UnifiedCard, CardGallery, InlineImageGallery, SourcesPanel, RelatedQuestions - Improved discover-svc with discover-db integration - Docker deployment improvements (Caddyfile, vendor.sh, BUILD.md) - Library-svc: project_id schema migration - Remove deprecated finance-svc and travel-svc - Localization improvements across services Made-with: Cursor
811 lines
42 KiB
Markdown
811 lines
42 KiB
Markdown
# Статус проекта — ВСЁ РАБОТАЕТ
|
||
|
||
## Последнее обновление: 27.02.2026
|
||
|
||
### Исправлена ошибка 500 в learning-svc (27.02.2026)
|
||
|
||
**Проблема:** При создании урока `POST /api/v1/learning/lesson` возвращалась ошибка 500.
|
||
|
||
**Причина:** `learning-svc` пытался использовать Timeweb JWT-токен (в переменной `OPENAI_API_KEY`) как ключ OpenAI API. Timeweb JWT имеет формат `eyJ...`, что не является валидным OpenAI ключом.
|
||
|
||
**Решение:**
|
||
|
||
1. **backend/cmd/learning-svc/main.go** — изменена логика инициализации LLM клиента:
|
||
- Приоритет 1: Timeweb Cloud AI (если `TIMEWEB_AGENT_ACCESS_ID` + `TIMEWEB_API_KEY` установлены)
|
||
- Приоритет 2: Anthropic (только если ключ не JWT)
|
||
- Приоритет 3: OpenAI (только если ключ не JWT)
|
||
- Добавлена функция `isJWT()` для детекции JWT-токенов
|
||
|
||
2. **backend/deploy/docker/docker-compose.yml** — добавлены env vars для learning-svc:
|
||
- `TIMEWEB_API_BASE_URL`
|
||
- `TIMEWEB_AGENT_ACCESS_ID`
|
||
- `TIMEWEB_API_KEY`
|
||
- `DEFAULT_LLM_MODEL`
|
||
|
||
**Результат:**
|
||
- `POST /api/v1/learning/lesson` → 200 (урок создаётся успешно)
|
||
- learning-svc использует Timeweb Cloud AI как LLM провайдер
|
||
|
||
---
|
||
|
||
### Исправлены API ошибки 503/404 (27.02.2026)
|
||
|
||
**Проблема:** Frontend получал ошибки:
|
||
- `api/v1/spaces` - 503 Service Unavailable
|
||
- `api/v1/computer/tasks` - 404 Not Found
|
||
- `api/v1/computer/execute` - 404 Not Found
|
||
|
||
**Причины:**
|
||
1. `api-gateway` не имел переменных окружения для новых сервисов (THREAD_SVC_URL, COMPUTER_SVC_URL и др.)
|
||
2. `computer-svc` падал при попытке использовать "anonymous" как UUID в PostgreSQL
|
||
|
||
**Решение:**
|
||
|
||
1. **docker-compose.yml** - добавлены env vars в api-gateway:
|
||
- THREAD_SVC_URL=http://thread-svc:3027
|
||
- COMPUTER_SVC_URL=http://computer-svc:3030
|
||
- DISCOVER_SVC_URL=http://discover-svc:3002
|
||
- FINANCE_HEATMAP_SVC_URL=http://finance-heatmap-svc:3033
|
||
- LEARNING_SVC_URL=http://learning-svc:3034
|
||
|
||
2. **computer-svc/main.go** - исправлена обработка anonymous пользователей:
|
||
- GET /tasks возвращает пустой список для anonymous
|
||
- POST /execute возвращает 401 для anonymous
|
||
|
||
**Результат:**
|
||
- `GET /api/v1/spaces` → 401 (требует auth, frontend обрабатывает)
|
||
- `GET /api/v1/computer/tasks` → 200 (пустой список для anonymous)
|
||
- `POST /api/v1/computer/execute` → 401 (требует auth)
|
||
|
||
---
|
||
|
||
### Исправлен баг с пустым ответом в Chat (27.02.2026)
|
||
|
||
**Проблема:** При отправке сообщения в UI приходил пустой ответ.
|
||
|
||
**Причина:** В `backend/cmd/api-gateway/main.go` функция `handleChat` использовала `defer resp.Body.Close()` до `SetBodyStreamWriter`. Поскольку `SetBodyStreamWriter` выполняется асинхронно, defer закрывал body сразу после return из функции, до того как данные успевали передаться клиенту.
|
||
|
||
**Решение:** Перенёс `resp.Body.Close()` внутрь callback `SetBodyStreamWriter`:
|
||
```go
|
||
c.Context().SetBodyStreamWriter(func(w *bufio.Writer) {
|
||
defer resp.Body.Close() // <-- теперь здесь
|
||
// ... streaming logic
|
||
})
|
||
```
|
||
|
||
**Файл:** `backend/cmd/api-gateway/main.go`
|
||
|
||
---
|
||
|
||
### Адаптивность и удаление модалок (27.02.2026)
|
||
|
||
**Задача:** Адаптировать под мобильные, убрать Dialog (модалки), сделать отдельные страницы.
|
||
|
||
**Сделано:**
|
||
|
||
1. **Мобильный Sidebar** (`layout.tsx`, `Sidebar.tsx`):
|
||
- На мобильных (<768px) sidebar скрыт, есть гамбургер-меню
|
||
- Появляется mobile header с кнопкой меню
|
||
- Sidebar открывается как overlay с анимацией
|
||
- Автозакрытие при навигации
|
||
|
||
2. **Удалены все Dialog/модальные окна:**
|
||
- `spaces/page.tsx` — убран Dialog для создания/редактирования
|
||
- `learning/page.tsx` — убран Dialog для создания урока
|
||
|
||
3. **Созданы отдельные страницы вместо модалок:**
|
||
- `/spaces/new` — создание пространства
|
||
- `/spaces/[id]/edit` — редактирование пространства
|
||
- `/learning/new` — создание урока
|
||
|
||
4. **Адаптивность всех страниц:**
|
||
- `/` — responsive grid для suggestions, адаптивные padding/размеры
|
||
- `/discover` — горизонтальный скролл табов, адаптивные карточки
|
||
- `/history` — адаптивные padding, видимые кнопки действий на мобильных
|
||
- `/spaces` — адаптивные карточки, dropdown всегда видим на мобильных
|
||
- `/finance` — адаптивный time range, компактные StockRow
|
||
- `/learning` — адаптивные stats cards, уроки
|
||
- `/settings` — компактные селекторы, toggle switches
|
||
- `/computer` — мобильная панель задач, адаптивные примеры
|
||
|
||
5. **Общие улучшения:**
|
||
- `h-[100dvh]` вместо `h-screen` для лучшей работы на iOS
|
||
- Overflow-x-auto для табов с горизонтальной прокруткой
|
||
- Адаптивные padding: `px-4 sm:px-6`, `py-6 sm:py-8`
|
||
- Адаптивные размеры текста: `text-xl sm:text-2xl`
|
||
- Видимость кнопок на мобильных (без hover-only)
|
||
|
||
---
|
||
|
||
### Редизайн WebUI в стиле Cursor IDE 2026 (27.02.2026)
|
||
|
||
**Задача:** Редизайн backend/webui в стиле Cursor IDE 2026 — современная тёмная тема с индиговыми акцентами.
|
||
|
||
**Сделано:**
|
||
|
||
1. **Глобальные стили** (`globals.css`):
|
||
- Новая цветовая палитра: base/elevated/surface/overlay для фонов
|
||
- Текст: primary/secondary/muted/faint (zinc-based)
|
||
- Акценты: indigo (accent) + cyan (accent-secondary)
|
||
- CSS переменные для всех цветов
|
||
- JetBrains Mono для кода
|
||
- Классы: .btn-primary, .btn-primary-solid, .btn-secondary, .btn-ghost, .btn-icon
|
||
- .nav-item, .nav-item-active, .card, .card-interactive, .glass-card, .surface-card
|
||
- .badge, .badge-accent, .badge-success, .badge-warning, .badge-error
|
||
- Анимации: fade-in, fade-in-up, slide-in-right, slide-in-left, scale-in, glow-pulse
|
||
|
||
2. **Tailwind Config** (`tailwind.config.ts`):
|
||
- Semantic colors: base, elevated, surface, overlay, primary, secondary, muted, faint
|
||
- accent с оттенками: DEFAULT, hover, muted, subtle
|
||
- border с оттенками: DEFAULT, hover, focus
|
||
- success, warning, error с muted вариантами
|
||
- Кастомные тени: glow-sm/md/lg, elevated, card, dropdown
|
||
- Расширенные анимации
|
||
|
||
3. **Компоненты** (Cursor-style):
|
||
- `Sidebar.tsx` — минималистичный с индиговыми акцентами, collapsible
|
||
- `ChatInput.tsx` — современный инпут с glow эффектом, ArrowUp кнопка отправки
|
||
- `ChatMessage.tsx` — чистый рендер, индиговые цитаты и код
|
||
- `DiscoverCard.tsx` — карточки с цветными иконками
|
||
|
||
4. **Страницы** (все обновлены и адаптированы):
|
||
- `/` — главная с suggestions grid
|
||
- `/discover` — лента новостей
|
||
- `/history` — история поиска
|
||
- `/spaces` — пространства (+ /new, /[id]/edit)
|
||
- `/finance` — котировки
|
||
- `/learning` — уроки (+ /new)
|
||
- `/settings` — настройки
|
||
- `/computer` — Computer page
|
||
|
||
**Цветовая схема (Cursor IDE 2026):**
|
||
- Background: base (#0a0a0c) → elevated (#121217) → surface (#1a1a1f)
|
||
- Text: primary (#e9e9eb) → secondary (#a8a8af) → muted (#6b6b75) → faint (#4a4a54)
|
||
- Accent: indigo (#818cf8) — основной акцент
|
||
- Accent Secondary: cyan (#22d3ee) — дополнительный
|
||
- Borders: #26262e → #32323d (hover)
|
||
- Success: green (#22c55e)
|
||
- Error: red (#ef4444)
|
||
- Warning: amber (#f59e0b)
|
||
|
||
---
|
||
|
||
### Интеграция Frontend с Backend (27.02.2026)
|
||
|
||
**Задача:** Подключить backend к frontend в `backend/webui/`, убрать моковые данные.
|
||
|
||
**Сделано:**
|
||
|
||
1. **API Gateway обновлён** (`backend/cmd/api-gateway/main.go`):
|
||
- Добавлен роутинг для threads, spaces, pages, share → thread-svc
|
||
- Добавлен роутинг для discover → discover-svc
|
||
- Добавлен роутинг для heatmap, movers, markets → finance-heatmap-svc
|
||
- Добавлен роутинг для learning → learning-svc
|
||
|
||
2. **Config обновлён** (`backend/pkg/config/config.go`):
|
||
- Добавлены FinanceHeatmapURL, LearningSvcURL
|
||
|
||
3. **Frontend Types** (`backend/webui/src/lib/types.ts`):
|
||
- Добавлены Thread, ThreadMessage, ThreadSource
|
||
- Добавлены FinanceStock, HeatmapData, HeatmapSector, TopMovers, FinanceMarket
|
||
- Добавлены Lesson, LessonProgress, LessonStep, CodeExample, QuizQuestion, PracticeExercise
|
||
|
||
4. **Frontend API** (`backend/webui/src/lib/api.ts`):
|
||
- `fetchThreads()`, `fetchThread()`, `createThread()`, `deleteThread()`, `shareThread()`
|
||
- `fetchSpaces()`, `fetchSpace()`, `createSpace()`, `updateSpace()`, `deleteSpace()`
|
||
- `fetchMarkets()`, `fetchHeatmap()`, `fetchTopMovers()`
|
||
- `fetchLessons()`, `fetchLesson()`, `createLesson()`, `completeStep()`, `submitQuizAnswer()`, `deleteLesson()`
|
||
- Добавлен `getAuthHeaders()` для JWT авторизации
|
||
|
||
5. **History Page** (`backend/webui/src/app/(main)/history/page.tsx`):
|
||
- Загрузка из threads API
|
||
- Удаление тредов
|
||
- Шаринг тредов
|
||
- Группировка по датам
|
||
- Поиск
|
||
|
||
6. **Spaces Page** (`backend/webui/src/app/(main)/spaces/page.tsx`):
|
||
- Загрузка из spaces API
|
||
- Создание/редактирование/удаление пространств
|
||
- Выбор focus mode
|
||
- Кастомные AI инструкции
|
||
|
||
7. **Finance Page** (`backend/webui/src/app/(main)/finance/page.tsx`):
|
||
- Загрузка рынков из API
|
||
- Heatmap данные по секторам
|
||
- Top movers (gainers/losers/most active)
|
||
- Переключение timeRange (1d/1w/1m/3m/1y)
|
||
|
||
8. **Learning Page** (`backend/webui/src/app/(main)/learning/page.tsx`):
|
||
- Загрузка уроков из API
|
||
- Создание уроков с выбором сложности и режима
|
||
- Отображение прогресса
|
||
- Удаление уроков
|
||
|
||
---
|
||
|
||
### Новые функции (добавлено в этой сессии):
|
||
|
||
#### 0. WebUI — Интерфейс бэкенда (Perplexity-style)
|
||
- **Папка**: `backend/webui/`
|
||
- **Технологии**: Next.js 14, React 18, Tailwind CSS, TypeScript
|
||
- **Цветовая схема**: Глубокий синий (#0a1929) + золотистые акценты (#d4a373)
|
||
- **Порт**: 3000
|
||
- **Страницы**:
|
||
- `/` — Главная страница с чатом и подсказками
|
||
- `/discover` — Лента новостей с AI-саммари
|
||
- `/spaces` — Пространства (workspaces) для организации исследований
|
||
- `/history` — История поисков
|
||
- `/finance` — Котировки MOEX, крипто, валюты
|
||
- `/learning` — Интерактивные курсы с AI-наставником
|
||
- `/settings` — Настройки (тема, язык, приватность)
|
||
- **Компоненты**:
|
||
- `Sidebar` — Навигация с коллапсом
|
||
- `ChatInput` — Ввод с режимами (speed/balanced/quality)
|
||
- `ChatMessage` — Рендер markdown + citations
|
||
- `Citation` — Hover preview источников
|
||
- `DiscoverCard` — Карточки новостей (large/medium/small)
|
||
- **Docker**: `backend/webui/Dockerfile`, добавлен в `docker-compose.yml`
|
||
- **Запуск**: `cd backend/webui && npm run dev` или через Docker
|
||
|
||
#### 1. Computer с долгосрочными задачами (Perplexity-style)
|
||
- **Файлы**: `backend/internal/computer/types.go`, `backend/internal/computer/computer.go`
|
||
- **Duration Modes**: Short (30 мин), Medium (4 часа), Long (24 часа), Extended (7 дней), Unlimited (365 дней)
|
||
- **Checkpoints**: автоматическое сохранение состояния для возобновления задач
|
||
- **Heartbeat**: периодические уведомления о статусе
|
||
- **Resource Limits**: контроль CPU, памяти, бюджета
|
||
|
||
#### 2. Browser Automation через Playwright
|
||
- **Файлы**: `backend/internal/computer/browser/browser.go`, `backend/internal/computer/browser/server.go`
|
||
- **Действия**: navigate, click, type, fill, screenshot, scroll, evaluate, PDF, extract text/HTML
|
||
- **Session management**: пул сессий, автоочистка, управление viewport
|
||
- **Сервис**: browser-svc (порт 3050)
|
||
|
||
#### 3. Персонализация Discover — "For You" feed
|
||
- **Файлы**: `backend/internal/discover/personalization.go`, `backend/internal/db/user_interests_repo.go`
|
||
- **User Interests**: topics, sources, keywords с decay-механизмом
|
||
- **Feed Algorithm**: relevance scoring, diversity, recency, trending boost
|
||
- **Blocking**: блокировка источников и тем
|
||
- **Custom Categories**: пользовательские категории с ключевыми словами
|
||
|
||
#### 4. Labs Service — интерактивные отчёты
|
||
- **Файлы**: `backend/internal/labs/types.go`, `backend/internal/labs/generator.go`, `backend/cmd/labs-svc/main.go`
|
||
- **Визуализации**: bar/line/pie/donut charts, tables, stat cards, KPI, heatmap, timeline, comparison
|
||
- **UI-элементы**: tabs, accordion, collapsible, stepper, code blocks, markdown
|
||
- **API**: генерация отчётов, экспорт в HTML/JSON
|
||
- **Сервис**: labs-svc (порт 3031)
|
||
|
||
#### 5. Finance Heatmaps
|
||
- **Файлы**: `backend/internal/finance/heatmap.go`, `backend/cmd/finance-heatmap-svc/main.go`
|
||
- **Markets**: S&P 500, NASDAQ, Dow Jones, MOEX, Crypto, Forex
|
||
- **Views**: treemap, grid
|
||
- **Data**: sectors, tickers, top movers (gainers/losers/most active)
|
||
- **Colorscale**: красно-зелёная шкала по изменению цены
|
||
- **Сервис**: finance-heatmap-svc (порт 3033)
|
||
|
||
#### 6. Step-by-step Learning Mode
|
||
- **Файлы**: `backend/internal/learning/stepper.go`, `backend/cmd/learning-svc/main.go`
|
||
- **Modes**: explain, guided, interactive, practice, quiz
|
||
- **Difficulty**: beginner, intermediate, advanced, expert
|
||
- **Content**: explanations, code, visualizations, quiz questions, practice exercises
|
||
- **Progress tracking**: step completion, score, time spent
|
||
- **Сервис**: learning-svc (порт 3034)
|
||
|
||
#### 7. Discover Daily Podcast Generation
|
||
- **Файлы**: `backend/internal/podcast/generator.go`, `backend/cmd/podcast-svc/main.go`
|
||
- **Types**: daily, weekly, topic_deep, breaking
|
||
- **Script Generation**: intro, news segments, analysis, outro
|
||
- **TTS Integration**: ElevenLabs API для генерации аудио
|
||
- **RSS Feed**: автоматическая генерация RSS для подкаст-платформ
|
||
- **Сервис**: podcast-svc (порт 3032)
|
||
|
||
### Все 21 сервис:
|
||
- postgres, redis, searxng, crawl4ai (инфраструктура)
|
||
- search-svc (3001) ✅
|
||
- discover-svc (3002) ✅
|
||
- chat-svc (3005) ✅
|
||
- api-gateway (3015) ✅
|
||
- agent-svc (3018) ✅
|
||
- llm-svc (3020) ✅
|
||
- scraper-svc (3021) ✅
|
||
- collection-svc (3025) ✅
|
||
- file-svc (3026) ✅
|
||
- thread-svc (3027) ✅
|
||
- computer-svc (3030) ✅
|
||
- **browser-svc (3050) ✅ NEW**
|
||
- **labs-svc (3031) ✅ NEW**
|
||
- **podcast-svc (3032) ✅ NEW**
|
||
- **finance-heatmap-svc (3033) ✅ NEW**
|
||
- **learning-svc (3034) ✅ NEW**
|
||
|
||
---
|
||
|
||
## Задача (исходный запрос)
|
||
Система виджетов в стиле Perplexity для российского рынка: карточки товаров/видео/профилей/промокодов, Knowledge Cards, улучшенные citations, sources panel, image/video gallery + интеграция с Яндекс, Рутуб, ВКонтакте.
|
||
|
||
## Сделано (ВСЁ ЗАВЕРШЕНО)
|
||
|
||
### 1. SearXNG — Российские engines
|
||
- **Файл**: `deploy/docker/searxng/settings.yml`
|
||
- Добавлены: yandex, yandex images, yandex videos, yandex news, yandex music
|
||
- Добавлены: vk (через xpath), rutube (через json_engine), dzen
|
||
- Добавлены: youtube, aliexpress
|
||
|
||
### 2. Типы данных виджетов (Backend)
|
||
- **Файл**: `services/master-agents-svc/src/lib/types/widgets.ts`
|
||
- ProductData, VideoData, ProfileData, PromoData
|
||
- ImageData, KnowledgeCardData (comparison_table, charts, timeline, quote, definition)
|
||
- SourceData, ClassifiedResult
|
||
- Вспомогательные функции: formatPrice, formatViews, formatDuration, formatFollowers
|
||
|
||
### 3. Content Classifier (Backend)
|
||
- **Файл**: `services/master-agents-svc/src/lib/content-classifier.ts`
|
||
- Определение типа по URL паттернам (товары, видео, профили, промокоды)
|
||
- Определение платформы (yandex, vk, rutube, ozon, wildberries и др.)
|
||
- Классификация по ключевым словам в запросе
|
||
- Функции: classifySearchResult, groupResultsByType, detectKnowledgeCardType
|
||
|
||
### 4. UI Компоненты (Frontend)
|
||
|
||
#### Улучшенный Citation
|
||
- **Файл**: `services/web-svc/src/components/MessageRenderer/Citation.tsx`
|
||
- Расширенный hover preview с заголовком, описанием, favicon
|
||
- Иконки платформ (Яндекс, VK, Rutube, YouTube и др.)
|
||
- Улучшенный дизайн badges
|
||
|
||
#### UnifiedCard (базовая карточка)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/UnifiedCard.tsx`
|
||
- Универсальный компонент для всех типов карточек
|
||
- Поддержка compact/horizontal режимов
|
||
- Badges, meta, actions
|
||
|
||
#### ProductCard (товары)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/ProductCard.tsx`
|
||
- Цена, скидка, старая цена
|
||
- Рейтинг со звёздами, отзывы
|
||
- Маркетплейс (Ozon, WB, AliExpress, Яндекс Маркет)
|
||
- Наличие, доставка, badges
|
||
|
||
#### VideoCard (видео)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/VideoCard.tsx`
|
||
- Thumbnail с длительностью
|
||
- Автор, views, likes
|
||
- Платформа (Rutube, VK, YouTube, Дзен)
|
||
- Horizontal и compact режимы
|
||
|
||
#### ProfileCard (профили)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/ProfileCard.tsx`
|
||
- Аватар, имя, username
|
||
- Verified badge, online статус
|
||
- Followers/following
|
||
- Платформа (VK, Telegram, YouTube, Дзен)
|
||
|
||
#### PromoCard (промокоды)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/PromoCard.tsx`
|
||
- Код с кнопкой копирования
|
||
- Скидка, магазин, логотип
|
||
- Срок действия, условия
|
||
- Verified badge
|
||
|
||
#### CardGallery (карусель)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/CardGallery.tsx`
|
||
- Горизонтальный скролл с навигацией
|
||
- Поддержка всех типов карточек
|
||
- Индикаторы, gradient fade
|
||
|
||
#### KnowledgeCard (Tako-style)
|
||
- **Файл**: `services/web-svc/src/components/Widgets/KnowledgeCard.tsx`
|
||
- Сравнительные таблицы
|
||
- Bar chart, Pie chart
|
||
- Stat cards с изменениями (+/-)
|
||
- Timeline
|
||
- Quote, Definition
|
||
|
||
#### InlineImageGallery
|
||
- **Файл**: `services/web-svc/src/components/Widgets/InlineImageGallery.tsx`
|
||
- Grid, carousel, masonry layouts
|
||
- Lightbox с навигацией
|
||
- Lazy loading, источники
|
||
|
||
#### VideoEmbed
|
||
- **Файл**: `services/web-svc/src/components/Widgets/VideoEmbed.tsx`
|
||
- Embed для YouTube, Rutube
|
||
- Play preview для VK, Дзен
|
||
- Метаданные: views, likes, автор
|
||
|
||
#### SourcesPanel
|
||
- **Файл**: `services/web-svc/src/components/SourcesPanel.tsx`
|
||
- Expand/collapse
|
||
- Группировка по домену
|
||
- Поиск по источникам
|
||
- Favicon, snippets
|
||
|
||
#### RelatedQuestions
|
||
- **Файл**: `services/web-svc/src/components/RelatedQuestions.tsx`
|
||
- 3 стиля: inline, panel, chips
|
||
- Expand/collapse
|
||
- Иконки, анимации
|
||
|
||
### 5. Renderer обновлён
|
||
- **Файл**: `services/web-svc/src/components/Widgets/Renderer.tsx`
|
||
- Все новые типы виджетов: products, videos, profiles, promos
|
||
- knowledge_card, image_gallery, video_embed
|
||
- Одиночные карточки: product, video, profile, promo
|
||
|
||
### 6. Синхронный медиа-поиск (images/videos)
|
||
- **Файл**: `services/master-agents-svc/src/lib/media-search.ts`
|
||
- Создан модуль синхронного поиска через SearXNG (без LLM)
|
||
- Функции `searchImages()`, `searchVideos()`, `searchMedia()`
|
||
- Автодетект платформы видео (YouTube, Rutube, VK, Дзен)
|
||
|
||
### 7. Интеграция медиа в searchOrchestrator
|
||
- **Файл**: `services/master-agents-svc/src/lib/agent/searchOrchestrator.ts`
|
||
- Добавлен `mediaPromise` параллельно с `widgetPromise` и `searchPromise`
|
||
- Эмит виджетов `image_gallery` (carousel) и `videos` (CardGallery)
|
||
- Медиа загружается одновременно с research
|
||
|
||
### 8. Backend: Интеграция парсинга и эмиссии виджетов (ГОТОВО)
|
||
- **Файл**: `services/master-agents-svc/src/lib/searxng.ts`
|
||
- Расширены типы SearxngSearchResult (thumbnail, views, price, duration, author)
|
||
- Добавлена функция categorizeResult для автоопределения типа контента
|
||
|
||
- **Файл**: `services/master-agents-svc/src/lib/agent/researcher.ts`
|
||
- Интегрирован ContentClassifier
|
||
- Классификация результатов по типам (products, videos, profiles, promos, images)
|
||
- Автоматическая эмиссия WidgetBlock для каждого типа контента
|
||
- Эвристика для KnowledgeCard (comparison_table, stat_card)
|
||
|
||
### 9. Frontend: Типы для Widget (ГОТОВО)
|
||
- **Файл**: `services/web-svc/src/lib/types.ts`
|
||
- Добавлен WidgetType union type со всеми типами виджетов
|
||
- Типизированы params
|
||
|
||
- **Файл**: `services/web-svc/src/components/ChatWindow.tsx`
|
||
- Расширен интерфейс Widget новыми типами
|
||
|
||
### 10. Улучшение ReasoningSteps (ГОТОВО)
|
||
- **Файл**: `services/web-svc/src/components/AssistantSteps.tsx`
|
||
- Progress bar с процентами
|
||
- Таймер времени выполнения
|
||
- CheckCircle2 при завершении
|
||
- Loader2 spinner во время работы
|
||
- Улучшенная визуализация состояний
|
||
|
||
## Осталось сделать
|
||
|
||
### Go Backend (НОВОЕ)
|
||
Создан бэкенд на Go в `backend/` — альтернатива TypeScript сервисам для продакшена.
|
||
|
||
**Структура:**
|
||
```
|
||
backend/
|
||
├── cmd/ # Точки входа (9 сервисов)
|
||
│ ├── api-gateway/ # HTTP proxy + routing (port 3015)
|
||
│ ├── chat-svc/ # Chat orchestration (port 3005)
|
||
│ ├── agent-svc/ # AI Agent / Search Orchestrator (port 3018)
|
||
│ ├── search-svc/ # SearXNG wrapper (port 3001)
|
||
│ ├── llm-svc/ # LLM providers (port 3020)
|
||
│ ├── scraper-svc/ # Web scraping (port 3021)
|
||
│ ├── discover-svc/ # Perplexity Discover (port 3002)
|
||
│ ├── collection-svc/ # Collections API (port 3025)
|
||
│ └── file-svc/ # File upload & analysis (port 3026)
|
||
├── internal/
|
||
│ ├── agent/ # Orchestrator, Classifier, Researcher, DeepResearch, FocusModes
|
||
│ ├── db/ # PostgreSQL repos (digest, article_summary, collection, file)
|
||
│ ├── files/ # File analyzer (PDF, images)
|
||
│ ├── llm/ # OpenAI, Anthropic, Gemini clients
|
||
│ ├── search/ # SearXNG, Media, BM25 Reranker
|
||
│ ├── session/ # Session manager + events
|
||
│ ├── prompts/ # LLM prompts
|
||
│ └── types/ # Blocks, Chunks, Widgets
|
||
├── pkg/
|
||
│ ├── config/ # Configuration
|
||
│ ├── ndjson/ # NDJSON streaming
|
||
│ ├── cache/ # Redis кэширование
|
||
│ └── middleware/ # Auth, RateLimit, Logging, JWT
|
||
└── deploy/
|
||
├── docker/ # Dockerfiles + docker-compose
|
||
└── k8s/ # Kubernetes manifests
|
||
```
|
||
|
||
**Для запуска:**
|
||
```bash
|
||
cd backend
|
||
make deps
|
||
make build
|
||
make dev # или docker-compose
|
||
```
|
||
|
||
**Добавлено (Perplexity-style Article Summary):**
|
||
- `fetchPreGeneratedDigest()` — проверка готового дайджеста из discover-svc
|
||
- `preScrapeArticleURL()` — параллельный скрейпинг через Crawl4AI
|
||
- Обработка `Summary: <url>` запросов как в Perplexity Discover
|
||
- Writer prompt для article digest (структура, follow-up вопросы)
|
||
- Researcher prompt для поиска related sources
|
||
|
||
**Добавлено (26.02.2026):**
|
||
- `discover-svc` на Go (port 3002) — полный функционал Perplexity Discover
|
||
- Redis кэширование article summaries (`pkg/cache/redis.go`)
|
||
- Сохранение саммари в discover-svc после генерации из chat-svc
|
||
- Article summary flow: chat-svc -> agent-svc -> discover-svc
|
||
|
||
**Добавлено (26.02.2026 - Perplexity Parity):**
|
||
- PostgreSQL персистентность (`internal/db/`) — digests, article_summaries, collections, files
|
||
- Redis-based rate limiting (`pkg/middleware/ratelimit_redis.go`)
|
||
- JWT валидация токенов (`pkg/middleware/jwt.go`)
|
||
- Focus Modes (`internal/agent/focus_modes.go`) — Academic, YouTube, Reddit, Code, News, Math, Finance
|
||
- Deep Research (`internal/agent/deep_research.go`) — multi-agent, 30+ searches, insights synthesis
|
||
- Collections service (`cmd/collection-svc/`) — saved research projects
|
||
- File service (`cmd/file-svc/`) — PDF/image upload & analysis
|
||
|
||
**Добавлено (26.02.2026 - Full Perplexity Feature Parity):**
|
||
- Thread service (`cmd/thread-svc/`) — Threads, Spaces, Memory, Pages (port 3027)
|
||
- **Threads** — сохранение истории чатов, sharing по публичной ссылке
|
||
- **Spaces** — workspaces с custom AI instructions, default focus mode
|
||
- **Pages** — генерация статей из threads (`internal/pages/generator.go`)
|
||
- **Memory** — персонализация (preferences, facts, instructions, interests)
|
||
- Clarifying Questions — уточняющие вопросы перед Pro Search (Quality mode)
|
||
- Related Questions — связанные вопросы после ответа
|
||
- Enhanced Context — buildEnhancedContext() объединяет User Memory + Collection + Files
|
||
- runDeepResearchMode() — интеграция Deep Research в orchestrator
|
||
- DB repositories: `internal/db/thread_repo.go`, `space_repo.go`, `memory_repo.go`, `page_repo.go`
|
||
|
||
**TODO для Go бэкенда:**
|
||
1. [ ] Тестирование интеграции с web-svc
|
||
2. [x] Добавить Redis кэширование ответов
|
||
3. [x] Добавить сохранение саммари в discover-svc после генерации
|
||
4. [ ] Unit тесты
|
||
5. [x] K8s манифесты для Go сервисов (`backend/deploy/k8s/`)
|
||
6. [x] PostgreSQL персистентность
|
||
7. [x] Focus Modes (Perplexity-style)
|
||
8. [x] Deep Research (multi-agent)
|
||
9. [x] Collections API
|
||
10. [x] File Analysis (PDF, images)
|
||
11. [x] Thread History (chat persistence)
|
||
12. [x] Spaces (workspaces)
|
||
13. [x] Pages (article generation)
|
||
14. [x] Memory (personalization)
|
||
15. [x] Clarifying Questions
|
||
16. [x] Related Questions
|
||
17. [x] Sharing (public links)
|
||
18. [x] **GooSeek Computer** (Perplexity Computer аналог)
|
||
|
||
### GooSeek Computer — Perplexity Computer Clone (26.02.2026)
|
||
|
||
**Новый сервис:** `cmd/computer-svc/main.go` (port 3030)
|
||
|
||
Автономная платформа для долгосрочных задач — аналог Perplexity Computer.
|
||
|
||
**Архитектура:**
|
||
```
|
||
backend/internal/computer/
|
||
├── types.go # ComputerTask, SubTask, Artifact, Schedule, Memory
|
||
├── computer.go # Главный оркестратор + EventBus
|
||
├── planner.go # AI планировщик задач
|
||
├── router.go # Роутинг на нужную модель
|
||
├── executor.go # Исполнение задач (research, code, deploy, report...)
|
||
├── sandbox.go # Docker sandbox для исполнения кода
|
||
├── scheduler.go # Планировщик (cron, interval, once, daily, weekly)
|
||
├── memory.go # Персистентная память пользователя
|
||
└── connectors/ # Внешние интеграции
|
||
├── connector.go # Интерфейс коннектора
|
||
├── email.go # SMTP отправка
|
||
├── telegram.go # Telegram Bot API
|
||
├── webhook.go # HTTP webhooks
|
||
└── storage.go # S3/MinIO хранилище
|
||
```
|
||
|
||
**Model Registry:** `internal/llm/registry.go`
|
||
- Capabilities: reasoning, coding, search, creative, fast, long_context, vision, math
|
||
- Роутинг задач на оптимальную модель (Claude для reasoning, Gemini для research, GPT для fast)
|
||
|
||
**DB Repositories:**
|
||
- `internal/db/computer_task_repo.go` — задачи
|
||
- `internal/db/computer_memory_repo.go` — память
|
||
- `internal/db/computer_artifact_repo.go` — артефакты (код, отчёты, файлы)
|
||
|
||
**API Endpoints:**
|
||
- `POST /api/v1/computer/execute` — запуск задачи
|
||
- `GET /api/v1/computer/tasks` — список задач пользователя
|
||
- `GET /api/v1/computer/tasks/:id` — статус задачи
|
||
- `GET /api/v1/computer/tasks/:id/stream` — SSE стрим событий
|
||
- `POST /api/v1/computer/tasks/:id/resume` — продолжить с user input
|
||
- `DELETE /api/v1/computer/tasks/:id` — отмена
|
||
- `GET /api/v1/computer/tasks/:id/artifacts` — артефакты
|
||
- `GET /api/v1/computer/models` — доступные модели
|
||
- `GET /api/v1/computer/connectors` — доступные интеграции
|
||
- `POST /api/v1/computer/connectors/:id/execute` — выполнить action
|
||
|
||
**Типы задач:**
|
||
- `research` — веб-исследование, сбор данных
|
||
- `code` — генерация кода
|
||
- `analysis` — анализ данных
|
||
- `design` — проектирование архитектуры
|
||
- `deploy` — запуск кода в sandbox
|
||
- `report` — генерация отчётов
|
||
- `communicate` — отправка email/telegram
|
||
- `transform` — преобразование данных
|
||
- `validate` — валидация результатов
|
||
|
||
**Планирование:**
|
||
- `cron` — cron-выражения
|
||
- `interval` — каждые N секунд
|
||
- `once` — одноразовый запуск
|
||
- `daily/hourly/weekly/monthly` — preset'ы
|
||
|
||
**Пример использования:**
|
||
```json
|
||
POST /api/v1/computer/execute
|
||
{
|
||
"userId": "user-123",
|
||
"query": "Мониторь курс доллара каждый час и отправляй мне в Telegram если изменение > 1%",
|
||
"options": {
|
||
"async": true,
|
||
"schedule": { "type": "hourly" }
|
||
}
|
||
}
|
||
```
|
||
|
||
Нет критичных задач - система работает стабильно.
|
||
|
||
### GooSeek Computer UI (27.02.2026)
|
||
|
||
**Задача:** Создать UI для Computer в стиле Perplexity Computer.
|
||
|
||
**Сделано:**
|
||
|
||
1. **Типы** (`backend/webui/src/lib/types.ts`):
|
||
- ComputerTask, ComputerTaskStatus, DurationMode, TaskPriority
|
||
- TaskPlan, SubTask, Artifact, Checkpoint
|
||
- ComputerSchedule, ResourceLimits
|
||
- ComputerTaskEvent, ComputerExecuteRequest
|
||
- ComputerModel, ComputerConnector
|
||
|
||
2. **API функции** (`backend/webui/src/lib/api.ts`):
|
||
- `executeComputerTask()` — запуск задачи
|
||
- `fetchComputerTasks()` — список задач
|
||
- `fetchComputerTask()` — статус задачи
|
||
- `streamComputerTask()` — SSE стрим событий
|
||
- `resumeComputerTask()` — продолжить с user input
|
||
- `cancelComputerTask()` — отменить
|
||
- `fetchComputerArtifacts()` — артефакты
|
||
- `downloadArtifact()` — скачать артефакт
|
||
- `fetchComputerModels()` — доступные модели
|
||
- `fetchComputerConnectors()` — коннекторы
|
||
- `executeConnectorAction()` — выполнить action
|
||
|
||
3. **UI страница** (`backend/webui/src/app/(main)/computer/page.tsx`):
|
||
- Ввод задачи (textarea с placeholder)
|
||
- Duration mode selector (short/medium/long/extended/unlimited)
|
||
- Примеры задач (4 карточки)
|
||
- Список задач (левая панель)
|
||
- Детальный просмотр задачи:
|
||
- Progress bar
|
||
- Статус с иконками
|
||
- Подзадачи с прогрессом
|
||
- События (real-time log)
|
||
- Артефакты с кнопкой скачивания
|
||
- Расширенные настройки (коннекторы)
|
||
|
||
4. **Навигация** (`backend/webui/src/components/Sidebar.tsx`):
|
||
- Добавлен Computer в раздел "Инструменты"
|
||
- Иконка Cpu
|
||
|
||
### Оптимизация Speed Mode 2.0 (26.02.2026):
|
||
|
||
**Проблема:** Запросы обрабатывались >2 минут из-за 5 последовательных LLM вызовов.
|
||
|
||
**Решение — Fast Path для Speed Mode:**
|
||
1. **Rule-based classifier** — без LLM вызова (`fastClassifier.ts`)
|
||
2. **Direct SearXNG search** — без researcher loop (без LLM)
|
||
3. **No scraping** — только сниппеты, без Crawl4AI
|
||
4. **Parallel execution** — search + media + widgets одновременно
|
||
5. **Single LLM call** — только Writer для финального ответа
|
||
|
||
**Новый файл:** `services/master-agents-svc/src/lib/agent/fastClassifier.ts`
|
||
|
||
**Изменённые файлы:**
|
||
- `services/master-agents-svc/src/lib/agent/searchOrchestrator.ts` — добавлен `runSpeedMode()`
|
||
- `services/master-agents-svc/src/lib/actions/scrape_url.ts` — отключен для speed mode
|
||
|
||
**Ожидаемое время ответа:**
|
||
- Speed mode: 8-15 сек (было >2 мин)
|
||
- Balanced mode: 20-40 сек
|
||
- Quality mode: 60-120 сек
|
||
|
||
### Исправлено 26.02.2026:
|
||
|
||
1. **SearXNG падал** (ambiguous shortcut errors):
|
||
- Файл: `deploy/docker/searxng/settings.yml`
|
||
- Убраны дублирующие shortcuts для yandex engines (ya, yai, yav, yan, yam)
|
||
- Убраны конфликтующие кастомные engines (vk, rutube, dzen, aliexpress)
|
||
|
||
2. **Ghost перезапускался каждые 2 минуты** (HTTP 503):
|
||
- Файл: `deploy/docker/docker-compose.yml`
|
||
- Исправлен healthcheck (wget --spider не следует за 301 redirect)
|
||
- Увеличены start_period (90s), retries (5), interval (30s)
|
||
|
||
## Контекст для продолжения
|
||
|
||
### Новые файлы (созданы):
|
||
- `backend/cmd/computer-svc/main.go` — GooSeek Computer service (port 3030)
|
||
- `backend/internal/computer/types.go` — Computer types (Task, SubTask, Artifact, etc.)
|
||
- `backend/internal/computer/computer.go` — Main orchestrator + EventBus
|
||
- `backend/internal/computer/planner.go` — AI task planner
|
||
- `backend/internal/computer/router.go` — Model routing
|
||
- `backend/internal/computer/executor.go` — Task execution
|
||
- `backend/internal/computer/sandbox.go` — Docker sandbox manager
|
||
- `backend/internal/computer/scheduler.go` — Cron/interval scheduler
|
||
- `backend/internal/computer/memory.go` — Persistent user memory
|
||
- `backend/internal/computer/connectors/connector.go` — Connector interface
|
||
- `backend/internal/computer/connectors/email.go` — SMTP connector
|
||
- `backend/internal/computer/connectors/telegram.go` — Telegram Bot connector
|
||
- `backend/internal/computer/connectors/webhook.go` — HTTP webhook connector
|
||
- `backend/internal/computer/connectors/storage.go` — S3/MinIO storage connector
|
||
- `backend/internal/llm/registry.go` — Model registry with capabilities
|
||
- `backend/internal/db/computer_task_repo.go` — Computer task repository
|
||
- `backend/internal/db/computer_memory_repo.go` — Computer memory repository
|
||
- `backend/internal/db/computer_artifact_repo.go` — Computer artifact repository
|
||
- `backend/deploy/k8s/computer-svc.yaml` — K8s manifest for computer-svc
|
||
- `backend/cmd/discover-svc/main.go` — Discover service на Go
|
||
- `backend/cmd/collection-svc/main.go` — Collections service
|
||
- `backend/cmd/file-svc/main.go` — File upload & analysis service
|
||
- `backend/internal/db/postgres.go` — PostgreSQL connection + migrations
|
||
- `backend/internal/db/digest_repo.go` — Digest repository
|
||
- `backend/internal/db/article_summary_repo.go` — Article summary repository
|
||
- `backend/internal/db/collection_repo.go` — Collection repository
|
||
- `backend/internal/db/file_repo.go` — Uploaded file repository
|
||
- `backend/internal/agent/focus_modes.go` — Perplexity Focus Modes
|
||
- `backend/internal/agent/deep_research.go` — Deep Research multi-agent
|
||
- `backend/internal/files/analyzer.go` — PDF/image analyzer
|
||
- `backend/pkg/cache/redis.go` — Redis кэш клиент
|
||
- `backend/pkg/middleware/ratelimit_redis.go` — Redis-based rate limiting
|
||
- `backend/pkg/middleware/jwt.go` — JWT validation middleware
|
||
- `backend/deploy/k8s/postgres.yaml` — PostgreSQL StatefulSet
|
||
- `backend/deploy/k8s/collection-svc.yaml` — Collection service K8s
|
||
- `backend/deploy/k8s/file-svc.yaml` — File service K8s
|
||
- `backend/deploy/k8s/thread-svc.yaml` — Thread service K8s
|
||
- `backend/cmd/thread-svc/main.go` — Thread/Spaces/Memory/Pages service
|
||
- `backend/internal/db/thread_repo.go` — Thread repository
|
||
- `backend/internal/db/space_repo.go` — Space repository
|
||
- `backend/internal/db/memory_repo.go` — Memory repository
|
||
- `backend/internal/db/page_repo.go` — Page repository
|
||
- `backend/internal/pages/generator.go` — Page generator (Markdown/HTML export)
|
||
- `services/master-agents-svc/src/lib/media-search.ts` — синхронный медиа-поиск
|
||
- `services/media-svc/DEPRECATED.md` — пометка устаревшего сервиса
|
||
- `services/master-agents-svc/src/lib/types/widgets.ts`
|
||
- `services/master-agents-svc/src/lib/content-classifier.ts`
|
||
- `services/web-svc/src/components/Widgets/UnifiedCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/ProductCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/VideoCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/ProfileCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/PromoCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/CardGallery.tsx`
|
||
- `services/web-svc/src/components/Widgets/KnowledgeCard.tsx`
|
||
- `services/web-svc/src/components/Widgets/InlineImageGallery.tsx`
|
||
- `services/web-svc/src/components/Widgets/VideoEmbed.tsx`
|
||
- `services/web-svc/src/components/SourcesPanel.tsx`
|
||
- `services/web-svc/src/components/RelatedQuestions.tsx`
|
||
|
||
### Изменённые файлы:
|
||
- `backend/internal/agent/orchestrator.go` — Clarifying/Related Questions, Deep Research mode, Enhanced Context
|
||
- `backend/pkg/config/config.go` — ThreadSvcURL, ComputerSvcURL
|
||
- `backend/go.mod` — добавлены minio-go, robfig/cron
|
||
- `backend/Makefile` — добавлен computer-svc
|
||
- `backend/deploy/docker/Dockerfile.all` — добавлен build computer-svc
|
||
- `backend/deploy/k8s/kustomization.yaml` — добавлен computer-svc
|
||
- `backend/Makefile` — thread-svc
|
||
- `backend/deploy/docker/docker-compose.yml` — thread-svc
|
||
- `backend/deploy/docker/Dockerfile.all` — thread-svc build
|
||
- `backend/deploy/k8s/kustomization.yaml` — thread-svc
|
||
- `backend/deploy/k8s/configmap.yaml` — THREAD_SVC_URL
|
||
- `services/master-agents-svc/src/lib/agent/searchOrchestrator.ts` — интеграция медиа-поиска
|
||
- `services/master-agents-svc/src/lib/searxng.ts` — расширенные типы и категоризация
|
||
- `services/master-agents-svc/src/lib/agent/researcher.ts` — интеграция classifier + эмиссия виджетов
|
||
- `deploy/docker/searxng/settings.yml` — российские engines
|
||
- `services/web-svc/src/components/MessageRenderer/Citation.tsx` — enhanced hover
|
||
- `services/web-svc/src/components/Widgets/Renderer.tsx` — новые типы виджетов
|
||
- `services/web-svc/src/lib/types.ts` — WidgetType
|
||
- `services/web-svc/src/components/ChatWindow.tsx` — Widget interface
|
||
- `services/web-svc/src/components/AssistantSteps.tsx` — progress bar, timer, icons
|