Newer
Older
gnexus-tasks / docs / TZ.md

Техническое задание: gntodo

Персональный менеджер задач для повседневных дел и личных проектов.

Версия ТЗ 0.3 (черновик)
Дата 2026-09-19
Статус На обсуждении

1. Общие сведения

1.1. Назначение

Продвинутый личный таск-менеджер. Ключевая идея — минимальный трением ввод: задача закидывается в систему в одну строку, без выбора проекта, тегов и приоритета. Система сама делает предварительную детализацию, а пользователь позже утверждает или правит её при разборе.

1.2. Пользователи

  • Один пользователь (владелец).
  • Авторизация — через централизованный SSO-сервер auth.gnexus.space с клиентской библиотекой gnexus-gauth (см. 6.4).
  • Косвенные «пользователи» — ИИ-агенты, действующие от имени владельца через MCP.

1.3. Развёртывание

  • Собственный сервер (VPS), доступ из интернета.
  • HTTPS, реальный домен.
  • Данные хранятся только на своём сервере.

2. Сценарии использования

Сценарий А — веб-интерфейс (основной). Разбор стека входящих, детализация и утверждение задач, работа с проектами, планирование, просмотр дерева задач.

Сценарий Б — ИИ-агент через MCP. Агент от имени пользователя добавляет задачи (например, из переписки или диалога с LLM). Большинство AI-задач выполняется на стороне агента; сервер предоставляет MCP-интерфейс к данным.

3. Функциональные требования

3.1. Быстрый захват задач (стек входящих)

  • Задача создаётся одним текстом (заголовок). Выбор проекта, тегов, приоритета — не обязателен и не предлагается принудительно при вводе.
  • Такие «сырые» задачи попадают в стек входящих (raw) и ожидают детализации.
  • Стек — отдельное представление с количеством входящих, видимое с главного экрана.

3.2. Автоматическая предварительная детализация

При попадании задачи в стек система самостоятельно предлагает черновые метаданные:

  • теги — выбираются из существующего справочника тегов;
  • проект или категорию;
  • возможно, приоритет.

Требования:

  • Это не окончательная детализация — промахи ожидаемы и нормальны.
  • При разборе задачи в стеке доступны варианты:
    1. «Да, всё верно» — принять предложенные метаданные одним действием;
    2. отредактировать — изменить предложенное вручную, затем утвердить.
  • Задача считается утверждённой (approved) только после явного действия пользователя.
  • Механизм предсказания — см. 3.10 и раздел открытых вопросов.

3.3. Содержание и редактирование задачи

  • Описание задачи — Markdown (редактирование с форматированием).
  • Вложения — изображения, в том числе вставка из буфера обмена (Ctrl+V прямо в редактор).
  • Отображение Markdown в описании (просмотр и редактирование).

3.4. Статусы, дедлайны, прогнозы, бюджет

Тип задачи: каждая задача имеет тип — разовая или регулярная (повторяющаяся; см. 3.5).

Статусы выполнения:

Статус Смысл
to_do — К выполнению Принята в работу, ожидает выполнения
in_progress — В работе Выполняется сейчас
done — Завершено (закрыто) Выполнена
cancelled — Отменено Была актуальной, затем перестала быть актуальной. Не равно удалению — задача сохраняется, т.к. может снова стать актуальной
deferred — Отложено На текущий момент не нужна или не в приоритете; возможно, позже это изменится
  • Статус cancelled и deferred — обратимы: задача может быть возвращена в to_do.
  • Удаление — отдельное явное действие, не статус.
  • Детализационный жизненный цикл (rawapproved) — отдельная плоскость, не статус выполнения: «сырая» задача из стека получает статус только после утверждения.

Дедлайны — двух видов:

  • строгий: «сделать до конкретной даты»;
  • нестрогий: «сделать в течение недели / месяца / года» — не привязан к конкретному дню, задаётся периодом.

Прогнозирование времени выполнения — система оценивает длительность задачи (на основе истории завершённых задач; алгоритм уточняется).

Бюджет — опциональный, на задачу; есть не у каждой задачи:

  • задаётся пользователем вручную (деньги и/или время);
  • рядом с бюджетом отображается оценка затрат по задаче, чтобы сразу видеть: задачу можно взять в работу или на неё не хватает денег.

3.5. Регулярные задачи

  • Отдельный тип задачи — регулярная (повторяющаяся) в противовес разовой.
  • Повторение создаёт новую задачу по правилу после выполнения/истечения предыдущей.
  • Точный набор правил повторения (ежедневно/еженедельно/интервалы) — уточняется.

3.6. Представления задач

  • Дерево задач: подзадачи — ветви дерева, произвольная вложенность.
  • Классический вид: список с фильтрами (проект, тег, статус, приоритет).
  • Переключение представлений; дерево — основной, список — опциональный.

3.7. Проекты

  • Статус актуальности проекта (активен / приостановлен / закрыт).
  • Приоритет проекта.
  • Заметка к проекту: Markdown-поле для ссылок на ресурсы проекта и прочего контекста.

3.8. Режим выбора («3 варианта»)

Анти-прокрастинационный режим: пользователь указывает доступное время (например, «3 часа»), система предлагает 3 варианта задач, подходящих под это время; пользователь выбирает один и выполняет сразу.

  • Выбор кандидатов учитывает: прогнозируемую длительность ≤ доступного времени, приоритеты, статус актуальности проектов.
  • Варианты должны быть осмысленно разными (не три дубликата).
  • После выбора — прямой переход к выполнению задачи (отметка начала, быстрый доступ к описанию).

3.9. MCP-интерфейс

  • Собственный MCP-сервер как часть backend.
  • Инструменты (первичный набор, расширяется):
    • create_task — добавить задачу (достаточно текста; метаданные опциональны);
    • update_task, complete_task;
    • list_tasks / search_tasks — фильтры по проекту, тегу, статусу;
    • get_task — полное описание с вложениями.
  • Аутентификация агентов — через SSO-механизм (токен, выданный централизованной системой; детали после предоставления данных SSO).
  • Агент действует от имени пользователя; отдельной мультитенантности нет.

3.10. Локальные AI-функции

  • Автодетализация (3.2) выполняется маленькой LLM, запущенной локально через Ollama:
    • модель и параметры — конфигурацией приложения, без зашивки в код;
    • LLM классифицирует текст задачи: предлагает теги из справочника, проект/категорию, приоритет;
    • результат — черновые метаданные для утверждения (3.2), не окончательное решение.
  • Все вызовы LLM — на собственном сервере, данные не покидают VPS.
  • Спекулярные LLM-сценарии вне метаданных — не в скоупе: большинство ИИ-задач выполняют внешние агенты через MCP (3.9).

4. Нефункциональные требования

Требование Значение
Архитектура Клиент-серверное; SPA + REST API + MCP
Фронтенд SPA на Vue 3 с gnexus-ui-kit (npm: gnexus-ui-kit@^0.4.0, peer: Vue ^3.4)
Бэкенд Python (FastAPI — предположительно), клиент SSO — gnexus-gauth
СУБД PostgreSQL (рекомендация для VPS)
Авторизация SSO через auth.gnexus.space, библиотека gnexus-gauth (https://git.gnexus.space/git/root/gnexus-auth-client-py.git)
Хостинг VPS, HTTPS
AI Ollama на сервере; модель задана конфигом
Упаковка В итоге всё пакуется в Docker (docker-compose: API, PostgreSQL, фронт, Ollama + модель)
Мобильность На старте — только PWA; Android-приложение — вне скоупа стартовой версии (вернуться к нему позже)
Приватность Все данные и LLM-вызовы — на собственном сервере

Внешние зависимости проекта (не форкать, обновлять через пакетный менеджер):

  • gnexus-ui-kit — часто обновляется, использовать только публичный API кита;
  • gnexus-gauth — клиентская библиотека SSO.

5. Модель данных (черновик)

Task
  id, title, description (markdown)
  task_type         one_time | recurring          — тип задачи: разовая / регулярная
  status            to_do | in_progress | done | cancelled | deferred
  detail_state      raw | approved                — плоскость детализации (стека)
  parent_task_id    nullable  — дерево подзадач
  project_id        nullable
  tag_ids           []
  priority          nullable  (заполняется автодетализацией / вручную)
  deadline          nullable  — дедлайн:
                        strict  { date }                  — «до конкретной даты»
                        soft    { period: week|month|year } — «в течение периода»
  recurrence        nullable  — правило повторения (для task_type = recurring)
  time_estimate     nullable  — прогноз времени (система)
  budget            nullable  — ручной бюджет (деньги и/или время), опционален
  estimated_cost    nullable  — оценка затрат по задаче (сравнивается с бюджетом)
  actual_time       nullable  — фактические затраты (для обучения прогноза)
  created_at, approved_at, done_at

Project
  id, name
  relevance_status  active | paused | archived   — статус актуальности
  priority
  note              markdown — ссылки на ресурсы, контекст

Tag           — справочник тегов
Attachment    — файлы задач (изображения), task_id, mime

История завершённых задач (фактическое время) — источник для прогнозирования длительности.

6. Архитектура (черновик)

┌─────────────┐     ┌────────────────────── VPS (docker-compose) ─────────────┐
│  Web SPA    │────▶│  API (FastAPI) ──▶ PostgreSQL                           │
│  Vue 3 +    │     │       │                                                 │
│  gnexus-    │     │       ├──▶ Сервис автодетализации ──▶ Ollama (модель    │
│  ui-kit     │     │       │      — LLM, модель из конфига)                  │
└─────────────┘     │       ├──▶ Хранилище вложений (файлы)                   │
                    │       └──▶ MCP-сервер (для ИИ-агентов)                  │
                    └─────────────────────────────────────────────────────────┘
                                     ▲ SSO auth.gnexus.space (клиент gnexus-gauth)
  • API и MCP-сервер — одно Python-приложение (общая бизнес-логика).
  • Вложения — файлы на диске VPS + метаданные в БД.

7. Этапы разработки (предложение)

Этап Содержание
M0 — каркас Репозиторий, скелет backend + frontend, SSO-интеграция (gnexus-gauth), деплой на VPS
M1 — MVP задач CRUD задач, быстрый ввод, стек входящих, теги, проекты (базово), ручная детализация
M2 — детализация Интеграция Ollama + модель из конфига, автопредзаполнение метаданных, подтверждение/редактирование, Markdown-редактор, вложения из буфера
M3 — структура Дерево подзадач, классический список с фильтрами, заметки проектов
M4 — умность Прогнозирование времени, бюджет, режим «3 варианта»
M5 — MCP MCP-сервер, инструменты для агентов
M6 — мобильность PWA (Android-приложение — позже, вне стартового скоупа)
M7 — упаковка Docker (docker-compose: API, PostgreSQL, фронт, Ollama + модель)

Порядок M4/M5 может меняться — MCP можно поднять раньше ради ИИ-сценария.

8. Открытые вопросы

  1. Правила повторения: минимальный набор (ежедневно / еженедельно / N дней / месяц) — уточнить при проектировании.
  2. Прогнозирование времени: только по истории похожих задач, или с учётом явных факторов (теги, тип)?
  3. Оценка затрат к бюджету: откуда берётся оценка затрат — из прогноза времени, вручную, или нужен учёт «доступных средств»?
  4. Оффлайн-режим в PWA: нужен ли, или всегда онлайн?
  5. Модель для Ollama: какая конкретно модель и параметры (в конфиг, но нужно выбрать для проверки M2).
  6. Практическое различие cancelled / deferred: определения зафиксированы (3.4), но поведение в интерфейсе почти одинаковое — скрыть из активных списков и оставить доступным для возврата. Уточнить при проектировании представлений, нужны ли оба статуса или их поведение сольётся.