papayu/ОТЧЁТ_ПО_ПРОГРАММЕ.md
2026-01-29 12:21:43 +03:00

15 KiB
Raw Permalink Blame History

Полный отчёт по программе PAPA YU (Tauri + React)

Дата: 23 января 2026
Объект анализа: приложение papa-yu (десктоп на Tauri 2 + React 19).
Задача: анализ архитектуры, связей, промптов и состояния программы в целом без внесения исправлений.


1. Архитектура программы

1.1. Общая схема

Приложение построено по схеме двух слоёв:

Слой Технологии Расположение
Backend (оболочка) Tauri 2, Rust desktop/src-tauri/
Frontend (UI) React 19, Vite 7, TypeScript desktop/ui/
  • Tauri обеспечивает нативное окно, загрузку веб-интерфейса (из ../ui/dist в production или с http://localhost:5173 в dev) и минимальную инициализацию (плагин логов в debug).
  • React-приложение — SPA с HashRouter: все экраны рендерятся на клиенте, отдельного сервера рендеринга нет.

1.2. Структура каталогов

papa-yu/
├── desktop/
│   ├── src-tauri/          # Tauri (Rust)
│   │   ├── src/
│   │   │   ├── main.rs     # точка входа, вызов app_lib::run()
│   │   │   └── lib.rs      # tauri::Builder, setup (log), run
│   │   ├── capabilities/
│   │   │   └── default.json # окно "main", core:default
│   │   ├── build.rs
│   │   ├── Cargo.toml
│   │   └── tauri.conf.json
│   └── ui/                 # Frontend (React)
│       ├── src/
│       │   ├── App.tsx
│       │   ├── main.tsx
│       │   ├── index.css
│       │   ├── config/routes.ts
│       │   ├── store/app-store.ts
│       │   ├── lib/event-bus.ts
│       │   ├── components/
│       │   │   ├── layout/Layout.tsx
│       │   │   ├── ErrorBoundary.tsx
│       │   │   └── ErrorDisplay.tsx
│       │   └── pages/
│       │       ├── Dashboard.tsx
│       │       ├── Tasks.tsx
│       │       ├── ChatAgent.tsx
│       │       ├── PolicyEngine.tsx
│       │       ├── AuditLogger.tsx
│       │       ├── SecretsGuard.tsx
│       │       ├── Reglamenty.tsx
│       │       ├── TMCZakupki.tsx
│       │       ├── Finances.tsx
│       │       ├── Personnel.tsx
│       │       ├── Documents.tsx
│       │       └── NotFound.tsx
│       ├── package.json
│       ├── vite.config.ts
│       └── tailwind.config.ts
├── desktop-core/
│   └── tools/project-auditor/
│       └── index.ts        # пустой файл
├── index/
│   └── manifest.json       # version, sources
├── СИНХРОНИЗАЦИЯ_ПАПОК.md
└── PAPA YU.command

1.3. Сборка и запуск

  • Конфиг Tauri (tauri.conf.json): productName «PAPA YU», identifier com.papa-yu, одно окно 800×600, resizable. beforeDevCommand и beforeBuildCommand обращаются к $HOME/papa-yu/desktop/ui (npm run dev / npm run build), frontend в dev — http://localhost:5173, в production — ../ui/dist.
  • UI: сборка — tsc -b && vite build, dev — vite (порт по умолчанию Vite, в конфиге Tauri указан 5173).
  • Единый запуск для пользователя: скрипт PAPA YU.command в корне; для разработки — cargo tauri dev из desktop/src-tauri.

2. Выстроенные связи

2.1. Роутинг

  • React Router: HashRouter, маршруты заданы в App.tsx и в config/routes.ts.
  • Маршруты: / (Dashboard), /tasks, /reglamenty, /tmc-zakupki, /finances, /personnel, /documents, /chat, /policies, /audit, /secrets, * (NotFound).
  • RouteTracker: при смене location.pathname вызывает useAppStore.getState().setCurrentRoute(location.pathname) — актуализация текущего маршрута в store.

2.2. Глобальное состояние (Zustand)

Store (store/app-store.ts):

  • currentRoute — текущий путь (обновляется RouteTracker).
  • systemStatus — три флага: policyEngine, auditLogger, secretsGuard (все по умолчанию 'active'); используются на Dashboard для отображения статусов карточек.
  • recentAuditEvents — массив событий аудита; пополняется при переходе с Dashboard по карточкам (addAuditEvent).
  • error / setError — глобальное сообщение об ошибке (показ через ErrorDisplay).

Никаких вызовов Tauri (invoke) или бэкенд-API из store нет — только клиентское состояние.

2.3. Event Bus

Файл: lib/event-bus.ts.

  • Синглтон с методами on(event, callback) и emit(event, data).
  • События: NAVIGATE, ROUTE_CHANGED.
  • Использование: в Layout.tsx при клике по пункту навбара вызываются eventBus.emit(Events.NAVIGATE, { path }) и eventBus.emit(Events.ROUTE_CHANGED, { path }). Подписчиков на эти события в коде нет — механизм заложен под будущее использование.

2.4. Layout и навигация

  • Layout оборачивает все страницы внутри HashRouter и рендерит навбар с 8 пунктами: Панель, Задачи, Регламенты, ТМЦ и закупки, Финансы, Персонал, Документы, Чат с агентом. Страницы Policy Engine, Audit, Secrets в навбар не выведены — доступ только через Dashboard.
  • Навбар строится по ROUTES из config/routes.ts; активный пункт — по location.pathname. Переход — через Link и дополнительный onClick с вызовом eventBus.

2.5. Dashboard → Policy / Audit / Secrets

  • На Dashboard три карточки: Движок политик, Журнал аудита, Защита секретов.
  • По клику: eventBus.emit(NAVIGATE), addAuditEvent(...) с типом navigation, затем navigate(path) на /policies, /audit или /secrets.
  • Текст и статус карточек берутся из useAppStoresystemStatus (всегда «Активен» в текущей реализации).

2.6. Обработка ошибок

  • ErrorBoundary (классовый компонент) оборачивает всё приложение в App.tsx. При ошибке в дереве React показывает экран «Произошла ошибка» с кнопками «Вернуться» (сброс состояния ошибки) и «Перезагрузить».
  • ErrorDisplay — глобальный тост: показывает error из store, автоскрытие через 10 с и кнопку закрытия. Чтобы сообщение появилось, кто-то должен вызвать setError(...); в текущем коде вызовов нет (задел под будущее).

2.7. Связь Frontend ↔ Backend (Tauri)

  • Нет кастомных Tauri-командlib.rs только tauri::Builder::default(), setup с плагином log и run()).
  • Нет вызовов invoke из UI — фронт не обращается к Rust-логике.
  • Capabilities: в default.json разрешено только окно main и core:default. Специальных разрешений (файловая система, shell и т.д.) не настроено.

Итог: связь между фронтом и бэкендом ограничена тем, что Tauri загружает и отображает веб-интерфейс; обмена данными или командами между React и Rust нет.


3. Разделы и страницы

Маршрут Страница Назначение по коду
/ Dashboard Панель с тремя карточками (Policy Engine, Audit Logger, Secrets Guard) и переходом на соответствующие страницы; блок «Система безопасности».
/tasks Tasks Задачи: пример списка задач, теги, категория (Аудит/Рефакторинг/Анализ/Другое), «пути к папкам» (folder links). Всё в локальном state, без сохранения и без отправки на backend.
/reglamenty Reglamenty Раздел «Регламенты» (АРМАК, ФАА, ЕАСА, Mura Menasa) — заглушка/контент по ТЗ.
/tmc-zakupki TMCZakupki ТМЦ и закупки — заглушка.
/finances Finances Финансы — заглушка.
/personnel Personnel Персонал — заглушка.
/documents Documents Документы — заглушка.
/chat ChatAgent Чат с агентом: ввод сообщений, кнопки «Очистка чата» и «Откат» (откат последнего сообщения). Ответ — захардкоженная строка (имитация через setTimeout).
/policies PolicyEngine Движок политик — страница по маршруту, доступ с Dashboard.
/audit AuditLogger Журнал аудита — страница по маршруту, доступ с Dashboard.
/secrets SecretsGuard Защита секретов — страница по маршруту, доступ с Dashboard.
* NotFound Страница «не найдено».

Страницы PolicyEngine, AuditLogger, SecretsGuard, Reglamenty, TMCZakupki, Finances, Personnel, Documents в отчёте не разбирались построчно — констатируются как реализованные экраны с навигацией; бизнес-логика (правила, логи, секреты, регламенты и т.д.) может быть минимальной или заглушками.


4. Backend (Rust / Tauri) и desktop-core

4.1. Что есть

  • main.rs: точка входа, windows_subsystem = "windows" в release, вызов app_lib::run().
  • lib.rs: сборка приложения Tauri, в setup при cfg!(debug_assertions) подключается tauri_plugin_log (LevelFilter::Info), затем run(tauri::generate_context!()).
  • tauri.conf.json: конфигурация окна, сборки, путей к UI (см. выше).
  • capabilities/default.json: одно окно main, права core:default.
  • Cargo.toml: зависимости — tauri 2.9.5, tauri-plugin-log 2, serde, serde_json, log; сборка — tauri-build 2.5.3.

Кастомных команд, обработчиков событий Tauri, доступа к файлам/сети из Rust — нет.

4.2. desktop-core

  • В репозитории есть каталог desktop-core/tools/project-auditor/ с файлом index.ts. Файл пустой — логика аудитора проекта в Tauri-приложении не реализована и из приложения не вызывается.

5. Промпты и ИИ

  • В кодовой базе papa-yu (Tauri + UI) нет ни одного промпта к внешним ИИ/LLM и нет интеграции с API языковых моделей.
  • Чат с агентом (ChatAgent.tsx): ответ агента — фиксированная строка: «Ответ ИИ агента будет отображаться здесь. Результаты действий агента подключаются к backend.» — выводится через setTimeout через 500 ms после отправки сообщения пользователем. То есть реализована только заглушка диалога; реальный диалог с ИИ и промпты планируются к подключению позже.

6. Связь с другими папками (по документации)

По файлу СИНХРОНИЗАЦИЯ_ПАПОК.md:

  • ~/Desktop/папа-ю — документация и ТЗ (спеки, планы). Кода нет; используется как ориентир.
  • ~/PAPA/PAPA-YU — полная версия на Electron + React (Dashboard, Tasks, Policy Engine, Chat и др.). Запуск: npm run dev:electron / npm run build:electron. Рассматривается как источник фич для переноса в Tauri-версию.
  • ~/papa-yu — основное десктоп-приложение на Tauri + React; единая точка запуска и текущая разработка.

Текущий отчёт относится только к коду в ~/papa-yu (и при необходимости к упомянутому в нём desktop-core и index/manifest.json).


7. Краткие выводы

  1. Архитектура: двухслойная — Tauri 2 (оболочка + лог в debug) и SPA на React 19 (Vite 7, HashRouter, Zustand, свой event-bus).
  2. Связи: роутинг и store синхронизированы (currentRoute); навбар и Dashboard ведут на все заявленные страницы; event-bus и ErrorDisplay заложены, но мало задействованы; обмена с Rust нет — кастомных команд и invoke нет.
  3. Разделы: все перечисленные в ТЗ маршруты присутствуют; часть страниц — заглушки или минимальный UI; задачи и чат работают только на клиенте (чат — с фиксированным ответом).
  4. Backend: только запуск Tauri и плагин логов; desktop-core/project-auditor пустой.
  5. Промпты: в проекте papa-yu промптов и интеграции с ИИ нет; чат — заглушка с текстом про будущее подключение к backend.

Документ подготовлен как отчёт по текущему состоянию программы без предложений по исправлению кода.