15 KiB
Полный отчёт по программе 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», identifiercom.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. - Текст и статус карточек берутся из
useAppStore→systemStatus(всегда «Активен» в текущей реализации).
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. Краткие выводы
- Архитектура: двухслойная — Tauri 2 (оболочка + лог в debug) и SPA на React 19 (Vite 7, HashRouter, Zustand, свой event-bus).
- Связи: роутинг и store синхронизированы (currentRoute); навбар и Dashboard ведут на все заявленные страницы; event-bus и ErrorDisplay заложены, но мало задействованы; обмена с Rust нет — кастомных команд и invoke нет.
- Разделы: все перечисленные в ТЗ маршруты присутствуют; часть страниц — заглушки или минимальный UI; задачи и чат работают только на клиенте (чат — с фиксированным ответом).
- Backend: только запуск Tauri и плагин логов; desktop-core/project-auditor пустой.
- Промпты: в проекте papa-yu промптов и интеграции с ИИ нет; чат — заглушка с текстом про будущее подключение к backend.
Документ подготовлен как отчёт по текущему состоянию программы без предложений по исправлению кода.