papayu/#U0410#U0423#U0414#U0418#U0422_#U041f#U0420#U041e#U0413#U0420#U0410#U041c#U041c#U042b.md
2026-02-11 22:00:43 +03:00

12 KiB
Raw Permalink Blame History

Аудит программы PAPA YU

Дата: 29 января 2026
Объект: приложение PAPA YU (Tauri 2 + React), репозиторий PAPA-YU.


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

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

Слой Технологии Расположение
Backend Tauri 2, Rust desktop/src-tauri/
Frontend React 19, Vite 7, TypeScript desktop/ui/
Конфигурация tauri.conf.json, capabilities desktop/src-tauri/
  • Одно окно приложения (title: «PAPA YU», 800×600, resizable).
  • Frontend загружается в dev с http://localhost:5173, в production из ../ui/dist.

1.2. Дерево каталогов (ключевое)

PAPA-YU/
├── desktop/
│   ├── src-tauri/           # Tauri (Rust)
│   │   ├── src/
│   │   │   ├── main.rs      # точка входа → app_lib::run()
│   │   │   ├── lib.rs       # Builder, плагины, invoke_handler
│   │   │   ├── types.rs     # Action, AnalyzeReport, DiffItem, …
│   │   │   └── commands/
│   │   │       ├── mod.rs
│   │   │       ├── analyze_project.rs
│   │   │       ├── preview_actions.rs
│   │   │       ├── apply_actions.rs
│   │   │       └── undo_last.rs
│   │   ├── capabilities/default.json
│   │   ├── icons/           # иконки приложения (в т.ч. icon_source.png)
│   │   ├── Cargo.toml
│   │   └── tauri.conf.json
│   └── ui/                  # React SPA
│       ├── src/
│       │   ├── App.tsx, main.tsx
│       │   ├── config/routes.ts
│       │   ├── store/app-store.ts
│       │   ├── lib/analyze.ts, event-bus.ts, anime-utils.ts
│       │   ├── components/layout/Layout.tsx, ErrorBoundary, ErrorDisplay
│       │   └── pages/       # Tasks, Dashboard, Reglamenty, …
│       ├── public/logo-papa-yu.png
│       ├── package.json
│       └── vite.config.ts
├── desktop-core/tools/project-auditor/   # index.ts (минимально/пусто)
├── index/manifest.json       # version, sources
├── PAPA YU.command           # скрипт запуска .app
├── СБОРКА_И_ОБНОВЛЕНИЯ.md
├── ОТЧЁТОРОГРАММЕ.md
└── СИНХРОНИЗАЦИЯ_ПАПОК.md

1.3. Backend (Rust)

  • Плагины: dialog, updater, process; в debug — log.
  • Команды (invoke): analyze_project, preview_actions, apply_actions, undo_last.
  • Типы: Action, ActionKind, AnalyzeReport, PreviewResult, ApplyResult, UndoResult, DiffItem и др. (см. types.rs).

1.4. Frontend (React)

  • Роутинг: HashRouter, маршруты в config/routes.ts и App.tsx.
  • Состояние: Zustand (store/app-store.ts): currentRoute, systemStatus, recentAuditEvents, error.
  • Связь с backend: вызовы invoke() из lib/analyze.ts (analyze_project) и из pages/Tasks.tsx (preview_actions, apply_actions, undo_last).
  • События: listen('analyze_progress') в Tasks; eventBus (NAVIGATE, ROUTE_CHANGED) в Layout.

2. Пути запуска

Способ Путь / команда Примечание
Разработка cd ~/PAPA-YU/desktop/src-tauricargo tauri dev Поднимает UI на порту 5173, открывает окно
Запуск .app (после сборки) ~/PAPA-YU/desktop/src-tauri/target/release/bundle/macos/PAPA YU.app Двойной клик или open "…/PAPA YU.app"
Скрипт в корне проекта ~/PAPA-YU/PAPA YU.command Запускает указанный .app; если его нет — предлагает собрать
DMG (установка) ~/PAPA-YU/desktop/src-tauri/target/release/bundle/dmg/ После cargo tauri build; пользователь открывает DMG и перетаскивает приложение в «Программы»
Сборка cd ~/PAPA-YU/desktop/src-tauricargo tauri build beforeBuildCommand: сборка UI из $HOME/PAPA-YU/desktop/ui

Жёстко заданные пути в конфиге:

  • tauri.conf.jsonbuild.beforeDevCommand и beforeBuildCommand: $HOME/PAPA-YU/desktop/ui.
  • build.frontendDist: ../ui/dist (относительно src-tauri).

3. Связи и ссылки

3.1. Внешние

Назначение URL / значение
Обновления (updater) https://github.com/yrippert-maker/papayu/releases/latest/download/latest.json
Репозиторий (по документации) https://github.com/yrippert-maker/papayu

3.2. Внутренние (Frontend ↔ Backend)

UI Команда Tauri Файл
Анализ проекта analyze_project(path) lib/analyze.tsinvoke('analyze_project', { path })
Предпросмотр изменений preview_actions(payload) Tasks.tsxinvoke('preview_actions', { payload })
Применить изменения apply_actions(payload) Tasks.tsxinvoke('apply_actions', { payload })
Откат undo_last(path) Tasks.tsxinvoke('undo_last', { path })

3.3. События (Backend → Frontend)

Событие Где эмитится Где слушается
analyze_progress analyze_project.rs, apply_actions.rs, preview_actions.rs, undo_last.rs Tasks.tsx

3.4. Права (capabilities)

  • core:default, dialog:allow-open, core:event:allow-listen, updater:default, process:allow-restart.

4. Маршруты UI

Путь Страница Доступ
/ Редирект на /tasks
/tasks Tasks (анализ проекта) Навбар
/control-panel Dashboard Навбар
/reglamenty Reglamenty Нет в навбаре (прямой URL)
/tmc-zakupki, /finances, /personnel TMCZakupki, Finances, Personnel Нет в навбаре
/chat Редирект на /tasks
/policies, /audit, /secrets PolicyEngine, AuditLogger, SecretsGuard Прямой URL / с Dashboard
* NotFound

5. Отчёт об ошибках

5.1. Ошибка в интерфейсе: «Could not fetch a valid…»

Симптом: Рядом с логотипом в шапке приложения отображается сообщение вида «Could not fetch a valid...» (обрезка полного текста).

Причина: Это результат нажатия кнопки «Проверить обновления» (иконка загрузки рядом с логотипом). Плагин updater вызывает check() по endpoint
https://github.com/yrippert-maker/papayu/releases/latest/download/latest.json.
Ошибка возникает, когда:

  1. На GitHub нет релиза с файлом latest.json, или
  2. В tauri.conf.json в plugins.updater.pubkey указана заглушка REPLACE_WITH_PUBLIC_KEY_AFTER_tauri_signer_generate, или
  3. Ответ сервера не прошёл проверку подписи/формата.

Рекомендации:

  • Для отключения проверки обновлений до настройки: не показывать текст ошибки в шапке постоянно; показывать только после нажатия кнопки и обрабатывать «нет обновлений» и сетевые ошибки отдельно (например, тост «Обновлений нет» / «Ошибка сети»).
  • Для включения обновлений: сгенерировать ключи (tauri signer generate), подставить публичный ключ в tauri.conf.json, публиковать подписанные артефакты и latest.json в GitHub Releases (см. СБОРКА_И_ОБНОВЛЕНИЯ.md).

5.2. Конфигурация updater

  • Проблема: pubkey в tauri.conf.json — строка-заглушка; проверка подписи обновлений не может пройти.
  • Действие: Заменить на реальный публичный ключ после tauri signer generate или временно не показывать пользователю сырое сообщение об ошибке updater.

5.3. Зависимость путей от $HOME

  • Проблема: Сборка и dev зависят от путей $HOME/PAPA-YU/desktop/ui. При переносе проекта или другом имени пользователя команды могут не найти каталог.
  • Действие: Либо сохранять единый стандарт размещения (например, всегда ~/PAPA-YU), либо вынести путь в переменную окружения и использовать её в конфиге/скриптах.

5.4. Скрипт PAPA YU.command

  • Проблема: Ищет .app в $ROOT/desktop/src-tauri/target/release/bundle/macos, где ROOT — каталог, откуда запущен скрипт. Если скрипт вызывается не из корня PAPA-YU, путь будет неверным.
  • Действие: Либо всегда запускать из корня проекта, либо задать ROOT явно (например, по фиксированному пути или по расположению скрипта с учётом известной структуры папок).

5.5. desktop-core и index

  • desktop-core/tools/project-auditor/index.ts — по сути пустой/минимальный; не используется из основного приложения.
  • index/manifest.json — только version и пустой sources; связь с Tauri/UI не прослеживается.

6. Сводка

Раздел Статус
Архитектура (Tauri + React, команды, плагины) Описана, связи учтены
Пути запуска (dev, .app, DMG, скрипт) Зафиксированы
Связи (invoke, события, endpoint обновлений) Перечислены
Ошибка «Could not fetch a valid…» Объяснена (updater + pubkey/релизы), даны рекомендации
Конфиг updater и пути $HOME Отмечены как зоны внимания

Рекомендуется: (1) скрыть или смягчить отображение ошибки updater до настройки подписи и релизов; (2) подставить реальный pubkey и настроить публикацию latest.json при желании использовать обновления; (3) зафиксировать в документации единый путь установки/запуска (например, ~/PAPA-YU и запуск через PAPA YU.command или установку из DMG).