Архитектура (карта)

Как устроен проект: кто с кем общается, какие инструменты используются и где ответственность каждого блока.

100%
UIAPIИнструментыБизнес-блокиДанныеВнешние сервисы
Запрос пользователяОтвет моделиВызовы инструментов

Пользователь и интерфейс

`/` чат, `/health`, `/calendar`, `/finance`

Ветки, поиск, избранное, вложения

Ввод запроса и показ ответа

Слой инструментов

Набор функций для модели

Поиск в интернете (webSearch)
Чтение страницы (webFetchPage)
Быстрое исследование (webResearch)
Прогноз погоды (getWeatherForecast)
Список документов (listDocuments)
Текст документа (getDocumentContent)
Анализ таблицы (analyzeTableDocument)
Анализ изображения (analyzeImageDocument)
Анализ текста (analyzeTextDocument)

Провайдеры LLM

OpenAI / Gemini

Формирует итоговый ответ

При необходимости вызывает инструменты

Оркестратор чата (API)

`src/app/api/chat/route.ts`

Склеивает контекст, выбирает инструменты и управляет потоком запроса.

Документы

Функциональный блок

  • Загрузка файлов
  • Модуль `chatDocuments.ts`
  • Индекс `.chat_uploads/index.json`

Финансы

Функциональный блок

  • Операции по доходам/расходам
  • Аналитика
  • Категории и суммы

Календарь и вход через Google

Функциональный блок

  • Календари и события
  • Вход через Google (OAuth)
  • Устаревшая сессия -> 401

Спорт и питание

Функциональный блок

  • Тренировки, дневник, приемы пищи
  • Недельный план и аналитика
  • Синхронизация с Google

Слой хранения данных

Prisma + Postgres + файлы

Основная БД: PostgreSQL

Доступ к данным: `@/generated/prisma`

Файлы чата: `.chat_uploads` и `index.json`

Внешние сервисы

Google / веб-поиск / погода

Google OAuth и Calendar API

Провайдеры веб-поиска (с fallback)

Open-Meteo для прогноза