# Полный отчёт по программе 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`. - Текст и статус карточек берутся из `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. Краткие выводы 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. Документ подготовлен как отчёт по текущему состоянию программы **без предложений по исправлению кода**.