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

8.7 KiB
Raw Blame History

Рекомендации по улучшению 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_batchanalyze_project. В отчёте поле attached_files доступно для дальнейшего использования (например, пометка затронутых файлов в превью).

  4. Экспорт/импорт настроек
    Сохранение и загрузка ProjectSettings (и при желании списка папок) в файл для переноса между машинами.

  5. Тёмная тема
    Переменные 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)