- Мульти-провайдер: PAPAYU_LLM_PROVIDERS — сбор планов от нескольких ИИ (Claude, OpenAI), агрегация - Тренды дизайна и иконок: вкладка в модалке, поиск по безопасным доменам (Tavily include_domains) - Snyk Code: PAPAYU_SNYK_SYNC, REST API issues → snyk_findings в agent-sync - Documatic: architecture_summary из .papa-yu/architecture.md в agent-sync - Личная автоматизация: capability personal-automation (терминал git/npm/cargo, открытие URL) - agent_sync расширен: snyk_findings, architecture_summary; analyze_project_cmd и run_batch пишут sync - Документация: SNYK_AND_DOCUMATIC_SYNC.md, SECURITY_AND_PERSONAL_AUTOMATION.md, обновлён CLAUDE_AND_AGENT_SYNC Co-authored-by: Cursor <cursoragent@cursor.com>
5.7 KiB
Практические рекомендации по улучшению papa-yu
Упорядочено по эффекту/риску. Привязано к стеку: Rust, Tauri, CI в GitHub Actions, cargo test + golden traces, частичные SSRF-защиты, нет формализованных инцидентов/метрик.
1) Самое важное: закрыть класс рисков SSRF / небезопасный fetch (Security, Critical/High)
Что сделать
-
Единая точка сетевого доступа — вынести все HTTP-запросы в один модуль (
net::client), запретить прямойreqwest::get()где попало. -
Политика allowlist + запрет приватных сетей
- разрешённые схемы:
https(иhttpтолько если надо) - запрет
file://,ftp://,gopher://,data:и т.п. - запрет IP: RFC1918, loopback, link-local
- защита от DNS-rebind (резолвить и проверять IP)
- разрешённые схемы:
-
Таймауты и лимиты — connect/read timeout, max size ответа, ограничение редиректов.
-
Тесты на SSRF — набор URL → ожидаемый "deny", golden traces для фиксации отказов.
2) Минимальная наблюдаемость и журнал инцидентов (Ops, High)
MVP за 1–2 дня
-
Единый структурированный лог — JSON, уровни error/warn/info/debug, корреляционный id, без секретов.
-
Метрики уровня приложения — latency ключевых операций, количество ошибок по типам.
-
INCIDENTS.md— шаблон: дата, версия, симптом, impact, причина, фикс, тест на повтор.
3) Усилить CI/CD как quality gate (DevEx/Quality, High)
Минимальный набор гейтов
cargo fmt --check,cargo clippy -- -D warningscargo test(включая golden traces)cargo deny,cargo audit— supply chain- (Опционально) SBOM для релизов
4) Архитектурные границы (Architecture/Tech debt, Medium/High)
- Чёткие слои:
domain(без IO) →services→adapters→tauri_api - ADR для 3–5 ключевых решений
5) Качество кода (Medium)
- Лимиты сложности,
thiserrorдля доменных ошибок, вычистка dead code.
6) Производительность (Medium)
- Выделить 3–5 «дорогих» операций, измерять время/память, микробенчи (
criterion).
Приоритизированный roadmap
| Фаза | Срок | Действия |
|---|---|---|
| Quick wins | 1–5 дней | SSRF: единая точка + denylist + таймауты; CI: fmt/clippy/test + cargo audit/deny; INCIDENTS.md + логи |
| Mid-term | 1–3 нед | Архитектурные границы; ADR; метрики по 3–5 операциям |
| Long-term | 1–2 мес | SBOM; property-based тесты; формализация SLO |
Выполнено (2025-01-31): см.
docs/IMPROVEMENT_REPORT.md
Приложение: ответы на запрос данных для точного плана
5–10 строк: функции fetch/скачивание/импорт и источник URL
| Функция / модуль | URL откуда | Защита |
|---|---|---|
online_research/fetch.rs → fetch_url_safe() |
URL из ответа Tavily Search API (результаты поиска) | ✅ SSRF: localhost, RFC1918, link-local, user:pass@, max 2048 символов |
online_research/search.rs |
POST https://api.tavily.com/search — фиксированный URL |
✅ Не извне |
llm_planner.rs, weekly_report.rs, domain_notes/distill.rs, online_research/llm.rs |
PAPAYU_LLM_API_URL из env (OpenAI/Ollama) |
⚠️ Конфиг, не от пользователя |
Единственный «внешний» URL-поток: Tavily возвращает URL в результатах поиска → fetch_url_safe() их скачивает. Уже есть is_url_allowed() и лимиты.
Хранение данных и синхронизация
- Файлы JSON, без БД:
store/:projects.json,project_profiles.json,sessions.jsonвapp_data_dir.papa-yu/notes/domain_notes.json— заметки по проекту.papa-yu/cache/online_search_cache.json— кеш Tavily.papa-yu/traces/*.json— трассировки.papa-yu/project.json— настройки проекта
- Синхронизации нет — только локальные файлы.
3 главные боли (по коду и статусу)
- llm_planner.rs — большой модуль, протоколы v1/v2/v3, fallback-логика, repair, memory patch. Сложно тестировать и менять.
- PATCH/EDIT apply — ERR_EDIT_AMBIGUOUS, ERR_EDIT_BEFORE_NOT_FOUND, base_sha256 mismatch; fallback v3→v2→v1 добавляет ветвления.
- Golden traces — при изменении JSON Schema нужно обновлять
schema_hashво всех фикстурах; легко забыть и сломать CI.