papayu/docs/IMPROVEMENTS.md
Yuriy e76236dc55 Initial commit: papa-yu v2.4.4
- Schema version (x_schema_version, schema_hash) в prompt/trace
- Кеш read/search/logs/env (ContextCache) в plan-цикле
- Контекст-диета: MAX_FILES=8, MAX_FILE_CHARS=20k, MAX_TOTAL_CHARS=120k
- Plan→Apply двухфазность, NO_CHANGES, path sanitization
- Protected paths, content validation, EOL normalization
- Trace (PAPAYU_TRACE), redaction (PAPAYU_TRACE_RAW)
- Preview diff, undo/redo, transactional apply

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 11:33:19 +03:00

110 lines
8.7 KiB
Markdown
Raw 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.

# Рекомендации по улучшению 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)