# Рекомендации по улучшению PAPAYU ## 1. Архитектура и код - **Вынести типы UI в один модуль** Сейчас интерфейсы (`Action`, `AnalyzeReport`, `AgenticRunResult` и т.д.) объявлены в `Tasks.tsx`. Имеет смысл вынести их в `src/types/` или `src/lib/types.ts` и импортировать в страницах — так проще переиспользовать и тестировать. - **Разбить Tasks.tsx** Файл очень большой (1200+ строк). Имеет смысл вынести: - блок выбора папок/файлов — в `components/PathSelector.tsx`; - ленту сообщений — в `components/ChatFeed.tsx`; - блок результата agentic run — в `components/AgenticResult.tsx`; - хуки (`useAgenticRun`, `useBatch`, `useUndoRedo`) — в отдельные файлы в `hooks/`. - **Единый слой вызова бэкенда** Сделать один модуль `src/lib/tauri.ts` (или `api.ts`) с функциями `analyze()`, `runBatch()`, `agenticRun()`, `getProjectProfile()` и т.д., которые внутри вызывают `invoke`. В компонентах использовать только этот слой — проще менять контракты и добавлять логирование/обработку ошибок. --- ## 2. Безопасность и надёжность - **Жёсткие лимиты из профиля (v2.4.4)** Сейчас `profile.limits.max_actions_per_tx` и `timeout_sec` используются в agentic_run, но не в `apply_actions_tx` и `run_batch`. Имеет смысл передавать лимиты в эти команды и на Rust отклонять запросы, превышающие `max_actions_per_tx`, и ограничивать время выполнения проверок (например, 60 с на `verify`). - **Таймаут в verify_project** В `verify.rs` команды (`cargo check`, `npm run build` и т.д.) запускаются без таймаута. Стоит добавить таймаут (например, 60 с) через `std::process::Command` + отдельный поток или `tokio::process` с `kill_on_drop`, чтобы зависшая сборка не блокировала приложение. - **Расширить allowlist в verify** Сейчас список разрешённых команд жёстко задан в коде. Имеет смысл вынести его в конфиг (например, в `tauri.conf.json` или отдельный JSON) и проверять только команды из allowlist с фиксированными аргументами. --- ## 3. UX и интерфейс - **История сессий в UI** На бэкенде уже есть `list_sessions`, `append_session_event`. В интерфейсе можно добавить боковую панель или выпадающий список «Последние сессии» по проекту и показывать историю сообщений/запусков. - **Использование профиля при запуске** Показывать в форме выбранный тип проекта (React/Vite, Rust, Python и т.д.) и лимиты (max_attempts, max_actions). Для agentic run можно подставлять `goal_template` из профиля в поле «Цель» или показывать подсказку. - **Фильтр типов файлов при «Прикрепить файл»** В диалоге выбора файлов задать `filters` (например, `.ts`, `.tsx`, `.rs`, `.py`, `.json`, `.toml`), чтобы по умолчанию предлагать только исходники и конфиги. - **Клавиатурные сокращения** Например: Ctrl+Enter — отправить сообщение/запустить анализ, Escape — сбросить превью. --- ## 4. Тестирование - **Юнит-тесты для эвристик** Покрыть тестами `build_plan` в `agentic_run.rs`, `generate_actions_from_report`, `detect_project_type` и `is_protected_file` / `is_text_allowed` — на них легко писать тесты с временными директориями. - **Интеграционные тесты** Один-два E2E сценария (например, через `tauri test` или Playwright): выбор папки → анализ → применение безопасных правок → проверка, что файлы созданы и undo работает. - **Тестовые фикстуры** В `docs/` уже есть JSON для auto-rollback. Имеет смысл добавить фикстуры «минимальный проект» (папка с `package.json` или `Cargo.toml` без README) и использовать их в тестах и вручную. --- ## 5. Документация и конфиг - **Обновить README** Привести версию к 2.4.3, описать: профиль по пути, agentic run, прикрепление файлов, кнопку «Прикрепить файл», guard опасных изменений и подтверждение Apply. - **CHANGELOG** Ведение краткого CHANGELOG (по версиям) упростит онбординг и откат изменений. - **Команда запуска в одном месте** В README указать одну команду, например: `cd src-tauri && cargo tauri dev` (или `npm run tauri dev` из корня), чтобы не было расхождений. --- ## 6. Следующие фичи (по приоритету) 1. **v2.4.4 — Profile-driven limits** Жёстко ограничивать в `apply_actions_tx` и `run_batch` число действий и таймаут проверок из `ProjectProfile`. 2. **LLM-планировщик (v2.4.1)** *(реализовано в v2.4.4)* В `propose_actions`: при заданном `PAPAYU_LLM_API_URL` вызывается OpenAI-совместимый API; ответ (JSON-массив действий) парсится в `AgentPlan`. Контур выполнения без изменений: preview → apply_tx → verify → rollback. Переменные: `PAPAYU_LLM_API_URL`, `PAPAYU_LLM_API_KEY`, `PAPAYU_LLM_MODEL`. См. README. 3. **Контекст прикреплённых файлов** *(реализовано в v2.4.4)* В бэкенд передаётся список прикреплённых файлов (`attached_files` в `BatchPayload` и `AnalyzeReport`); он пробрасывается в `run_batch` → `analyze_project`. В отчёте поле `attached_files` доступно для дальнейшего использования (например, пометка затронутых файлов в превью). 4. **Экспорт/импорт настроек** Сохранение и загрузка `ProjectSettings` (и при желании списка папок) в файл для переноса между машинами. 5. **Тёмная тема** Переменные CSS или контекст темы и переключатель в шапке. --- ## 7. Краткий чек-лист - [x] Вынести типы и разбить `Tasks.tsx` на компоненты и хуки (v2.4.3) - [x] Единый API-слой для `invoke` в `src/lib/` (v2.4.3) - [x] Лимиты профиля в `apply_actions_tx` и `run_batch` + таймаут в `verify_project` (v2.4.4) - [x] История сессий и отображение профиля в UI (v2.4.4) - [x] Фильтр расширений в диалоге «Прикрепить файл» (v2.4.4) - [x] Юнит-тесты для guard и эвристик (v2.4.4, 18 тестов) - [x] Обновить README и добавить CHANGELOG (v2.4.4) - [x] Контекст прикреплённых файлов (v2.4.4) - [x] LLM-планировщик (v2.4.4, env: PAPAYU_LLM_API_URL / API_KEY / MODEL) - [x] Тёмная тема с переключателем (v2.4.4) - [x] Экспорт/импорт настроек (v2.4.4) - [x] Расширенный allowlist команд verify в конфиге (v2.4.4) - [x] Тестовые фикстуры для E2E (v2.4.4) - [x] Git-репозиторий инициализирован (v2.4.4)