diff --git a/docs/TZ.md b/docs/TZ.md index d18ea3e..d72549d 100644 --- a/docs/TZ.md +++ b/docs/TZ.md @@ -4,7 +4,7 @@ | | | |---|---| -| Версия ТЗ | 0.6 | +| Версия ТЗ | 0.7 | | Дата | 2026-09-20 | | Статус | На обсуждении | @@ -57,7 +57,7 @@ 1. **«Да, всё верно»** — принять предложенные метаданные одним действием; 2. **отредактировать** — изменить предложенное вручную, затем утвердить. - Задача считается утверждённой (`approved`) только после явного действия пользователя. -- Механизм предсказания — см. 3.10 и раздел открытых вопросов. +- Механизм предсказания — см. 3.11 и раздел открытых вопросов. ### 3.3. Содержание и редактирование задачи @@ -106,13 +106,21 @@ «дерево» убрано (проба 0.5 показала, что оно мешает — возможен возврат позже). Связь подзадачи с родителем (`parent_task_id`) в модели данных сохраняется. -### 3.7. Проекты +### 3.7. Главная страница (дашборд + стек) + +- Главная совмещает два блока: **дашборд активного** сверху и **стек входящих** снизу. +- Дашборд: «В работе», «Просрочено», дедлайны на неделю, «Следующие» (to_do по + приоритету, топ-5); сайдбар — сводка по статусам и активные проекты с прогрессом. +- Пустые секции дашборда не показываются; при отсутствии и активных, и проектов — + нейтральное пустое состояние. + +### 3.8. Проекты - Статус **актуальности** проекта (активен / приостановлен / закрыт). - **Приоритет** проекта. - **Заметка к проекту**: Markdown-поле для ссылок на ресурсы проекта и прочего контекста. -### 3.8. Режим выбора («3 варианта») +### 3.9. Режим выбора («3 варианта») Анти-прокрастинационный режим: пользователь указывает доступное время (например, «3 часа»), система предлагает **3 варианта задач**, подходящих под это время; пользователь выбирает один и выполняет сразу. @@ -120,7 +128,7 @@ - Варианты должны быть осмысленно разными (не три дубликата). - После выбора — прямой переход к выполнению задачи (отметка начала, быстрый доступ к описанию). -### 3.9. MCP-интерфейс +### 3.10. MCP-интерфейс - Собственный **MCP-сервер** как часть backend. - Инструменты (первичный набор, расширяется): @@ -131,16 +139,16 @@ - Аутентификация агентов — через SSO-механизм (токен, выданный централизованной системой; детали после предоставления данных SSO). - Агент действует от имени пользователя; отдельной мультитенантности нет. -### 3.10. Локальные AI-функции +### 3.11. Локальные AI-функции - Автодетализация (3.2) выполняется **маленькой LLM, запущенной локально через Ollama**: - модель и параметры — **конфигурацией приложения**, без зашивки в код; - LLM классифицирует текст задачи: предлагает теги из справочника, проект/категорию, приоритет; - результат — черновые метаданные для утверждения (3.2), не окончательное решение. - Все вызовы LLM — на собственном сервере, данные не покидают VPS. -- Спекулярные LLM-сценарии вне метаданных — не в скоупе: большинство ИИ-задач выполняют внешние агенты через MCP (3.9). +- Спекулярные LLM-сценарии вне метаданных — не в скоупе: большинство ИИ-задач выполняют внешние агенты через MCP (3.10). -### 3.11. Мультиязычность +### 3.12. Мультиязычность - UI поддерживает три языка: **ru** (базовый/fallback), **en**, **uk**. - Язык по умолчанию берётся из gnexus auth (`profile.locale` из SSO-профиля, scope `profile`). diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 128b07e..643c70a 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -13,7 +13,7 @@ const accountUrl = ref('') const navItems = computed(() => [ - { id: 'stack', label: t('nav.stack'), icon: 'ph-tray', to: '/stack' }, + { id: 'home', label: t('nav.home'), icon: 'ph-house', to: '/stack' }, { id: 'list', label: t('nav.list'), icon: 'ph-list-bullets', to: '/list' }, { id: 'projects', label: t('nav.projects'), icon: 'ph-folders', to: '/projects' }, { id: 'options', label: t('nav.options'), icon: 'ph-shuffle', to: '/options' }, diff --git a/frontend/src/components/Dashboard.vue b/frontend/src/components/Dashboard.vue new file mode 100644 index 0000000..c19f3ce --- /dev/null +++ b/frontend/src/components/Dashboard.vue @@ -0,0 +1,279 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/locales/en.ts b/frontend/src/locales/en.ts index 1b1c9da..bd6fbd7 100644 --- a/frontend/src/locales/en.ts +++ b/frontend/src/locales/en.ts @@ -34,12 +34,26 @@ account: 'Account', signOut: 'Sign out', task: 'Task', + home: 'Home', stack: 'Inbox stack', list: 'Task list', projects: 'Projects', options: '3 options', settings: 'Settings', }, + home: { + title: 'Home', + stackCount: 'in stack: {n}', + activeCount: 'active: {n}', + inProgress: 'In progress', + overdue: 'Overdue', + deadlines: 'Deadlines this week', + next: 'Up next', + overview: 'Overview', + projects: 'Active projects', + clearTitle: 'All clear', + clearText: 'No active tasks — a good moment to work through the stack.', + }, stack: { title: 'Inbox stack', count: 'Tasks in stack: {n}', diff --git a/frontend/src/locales/ru.ts b/frontend/src/locales/ru.ts index 1f6694f..517a795 100644 --- a/frontend/src/locales/ru.ts +++ b/frontend/src/locales/ru.ts @@ -35,12 +35,26 @@ account: 'Аккаунт', signOut: 'Выйти', task: 'Задача', + home: 'Главная', stack: 'Стек входящих', list: 'Список задач', projects: 'Проекты', options: '3 варианта', settings: 'Настройки', }, + home: { + title: 'Главное', + stackCount: 'в стеке: {n}', + activeCount: 'активных: {n}', + inProgress: 'В работе', + overdue: 'Просрочено', + deadlines: 'Дедлайны на неделю', + next: 'Следующие', + overview: 'Обзор', + projects: 'Активные проекты', + clearTitle: 'Всё спокойно', + clearText: 'Нет активных задач — самое время закрыть что-то из стека.', + }, stack: { title: 'Стек входящих', count: 'Задач в стеке: {n}', diff --git a/frontend/src/locales/uk.ts b/frontend/src/locales/uk.ts index 2de6977..17eac1c 100644 --- a/frontend/src/locales/uk.ts +++ b/frontend/src/locales/uk.ts @@ -34,12 +34,26 @@ account: 'Акаунт', signOut: 'Вийти', task: 'Завдання', + home: 'Головна', stack: 'Вхідний стек', list: 'Список задач', projects: 'Проєкти', options: '3 варіанти', settings: 'Налаштування', }, + home: { + title: 'Головне', + stackCount: 'у стеці: {n}', + activeCount: 'активних: {n}', + inProgress: 'У роботі', + overdue: 'Прострочено', + deadlines: 'Дедлайни на тиждень', + next: 'Наступні', + overview: 'Огляд', + projects: 'Активні проєкти', + clearTitle: 'Усе спокійно', + clearText: 'Немає активних завдань — гарний момент розібрати стек.', + }, stack: { title: 'Вхідний стек', count: 'Завдань у стеці: {n}', diff --git a/frontend/src/views/StackView.vue b/frontend/src/views/StackView.vue index abbda31..b2a37d4 100644 --- a/frontend/src/views/StackView.vue +++ b/frontend/src/views/StackView.vue @@ -1,33 +1,40 @@