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