Newer
Older
gnexus-tasks / README.md

gntodo (gnexus-tasks)

Персональный менеджер задач: быстрый захват без метаданных, автодетализация через локальную LLM (Ollama), дерево задач, MCP-интерфейс для ИИ-агентов.

Техническое задание: docs/TZ.md.

Стек

  • Frontend: Vue 3 SPA + gnexus-ui-kit (Vite, TypeScript)
  • Backend: Python 3.12, FastAPI, SQLAlchemy/PostgreSQL
  • SSO: auth.gnexus.space через gnexus-gauth
  • AI: Ollama (модель из конфига) — автодетализация метаданных
  • MCP: MCP-сервер в составе backend (M5)
  • Деплой: Docker Compose на VPS

Структура

docs/          — техническое задание и прочая документация
backend/       — FastAPI API + MCP (Python, uv)
frontend/      — Vue 3 SPA (Vite, TypeScript)

Разработка

Dev-БД (docker, порт 15432 — 5432/5433/5434 на машине заняты):

docker run -d --name gntodo-postgres -p 15432:5432 \
  -e POSTGRES_USER=gntodo -e POSTGRES_PASSWORD=gntodo -e POSTGRES_DB=gntodo \
  postgres:17-alpine

Миграции: cd backend && uv run alembic upgrade head.

Backend:

cd backend
uv sync                  # создаст .venv, установит зависимости
uv run uvicorn app.main:app --reload --port 8134

Frontend:

cd frontend
npm install
npm run dev              # http://localhost:15134, /api и /auth проксируются на :8134

Деплой (Docker Compose)

Пошаговая инструкция для разворачивания на VPS — docs/deploy.md (состав стека, настройка .env, SSO, внешний TLS-прокси, чеклист проверки, MCP, обновление, бэкапы, диагностика). Кратко:

Состав стека: db (PostgreSQL 17) + api (FastAPI, миграции применяются при старте контейнера) + web (nginx: SPA-статика, прокси /api/, /auth/, /mcp/ на api). TLS терминирует внешний reverse-proxy на VPS — контейнер web слушает :80.

  1. На сервере: cp .env.example .env и заполнить:
    • SSO-креды (GAUTH_CLIENT_ID/SECRET), GAUTH_REDIRECT_URI=https://<домен>/auth/callback — адрес callback регистрируется в auth.gnexus.space;
    • SESSION_SECRET (произвольная длинная строка) и MCP_TOKEN (пусто — /mcp закрыт);
    • OLLAMA_BASE_URL внешнего сервера Ollama (контейнера ollama в compose нет) и OLLAMA_MODEL (по умолчанию qwen3.5:2b-q4_K_M).
  2. Запуск: docker compose up -d --build.
  3. На внешнем reverse-proxy, который пробрасывает на WEB_PORT (по умолчанию 8135):
    • client_max_body_size 12m или больше (вложения до 10 МБ);
    • /api/ и /mcp/ — без буферизации (backend шлёт X-Accel-Buffering: no, nginx его уважает; на других прокси отключить буферизацию явно) — иначе SSE-реактивность и MCP-агенты застрянут.

Заметка: API работает в 1 воркер uvicorn — это осознанно (PKCE/state у gnexus-gauth хранятся в памяти процесса; несколько воркеров сломают OAuth-флоу).

Вехи

M0 — каркас (репо, скелеты, SSO, деплой) → M1 MVP задач → M2 автодетализация → M3 структура → M4 прогнозы/бюджет/«3 варианта» → M5 MCP → M6 PWA → M7 Docker-упаковка.