- 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>
8.7 KiB
Рекомендации по улучшению 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. Следующие фичи (по приоритету)
-
v2.4.4 — Profile-driven limits
Жёстко ограничивать вapply_actions_txиrun_batchчисло действий и таймаут проверок изProjectProfile. -
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. -
Контекст прикреплённых файлов (реализовано в v2.4.4)
В бэкенд передаётся список прикреплённых файлов (attached_filesвBatchPayloadиAnalyzeReport); он пробрасывается вrun_batch→analyze_project. В отчёте полеattached_filesдоступно для дальнейшего использования (например, пометка затронутых файлов в превью). -
Экспорт/импорт настроек
Сохранение и загрузкаProjectSettings(и при желании списка папок) в файл для переноса между машинами. -
Тёмная тема
Переменные CSS или контекст темы и переключатель в шапке.
7. Краткий чек-лист
- Вынести типы и разбить
Tasks.tsxна компоненты и хуки (v2.4.3) - Единый API-слой для
invokeвsrc/lib/(v2.4.3) - Лимиты профиля в
apply_actions_txиrun_batch+ таймаут вverify_project(v2.4.4) - История сессий и отображение профиля в UI (v2.4.4)
- Фильтр расширений в диалоге «Прикрепить файл» (v2.4.4)
- Юнит-тесты для guard и эвристик (v2.4.4, 18 тестов)
- Обновить README и добавить CHANGELOG (v2.4.4)
- Контекст прикреплённых файлов (v2.4.4)
- LLM-планировщик (v2.4.4, env: PAPAYU_LLM_API_URL / API_KEY / MODEL)
- Тёмная тема с переключателем (v2.4.4)
- Экспорт/импорт настроек (v2.4.4)
- Расширенный allowlist команд verify в конфиге (v2.4.4)
- Тестовые фикстуры для E2E (v2.4.4)
- Git-репозиторий инициализирован (v2.4.4)