Files
gooseek/CONTINUE.md
home 06fe57c765 feat: Go backend, enhanced search, new widgets, Docker deploy
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
2026-02-27 04:15:32 +03:00

811 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Статус проекта — ВСЁ РАБОТАЕТ
## Последнее обновление: 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