papayu/#U041e#U0422#U0427#U0401#U0422_#U041f#U041e_#U041f#U0420#U041e#U0413#U0420#U0410#U041c#U041c#U0415.md
2026-02-11 22:00:43 +03:00

202 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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