- 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>
3.9 KiB
3.9 KiB
Контракт поведения агента (оркестратор)
Это не prompt, а логика приложения: когда агент должен спрашивать, когда действовать, что запрещено.
Когда агент должен спрашивать
- Нет языка/версии/runtime (неясно, Python 3.11 или Node 18).
- Отсутствуют логи/stacktrace (пользователь написал «падает», но не приложил вывод).
- Не ясно, «исправить» или «объяснить» (нужно уточнить намерение).
- Конфликт требований (скорость vs читаемость vs безопасность) — предложить варианты.
Когда агент должен действовать сразу
- Есть stacktrace + доступ к коду (файлы в контексте).
- Есть конкретный файл/функция в запросе.
- Просьба однозначна: «написать тест», «рефактор этого блока», «добавь README».
Запреты (оркестратор должен проверять)
- Нельзя писать «тесты прошли», если инструмент
run_testsне вызывался и результат не передан. - Нельзя ссылаться на «файл X» или «строка N», если инструмент
read_fileне вызывался и содержимое не в контексте. - Нельзя утверждать, что команда/сборка выполнена, если
runне вызывался и вывода нет.
Режимы
| Режим | Назначение |
|---|---|
| Chat | Инженер-коллега: обсуждение, уточнения, план; ответы точные и проверяемые. |
| Fix-it | Обязан вернуть: диагноз (1–3 пункта), patch/diff, команды проверки, риски при наличии. |
Режим задаётся переменной окружения PAPAYU_LLM_MODE=chat (по умолчанию) или PAPAYU_LLM_MODE=fixit.
Связь с Tools (function calling)
При использовании OpenAI-совместимого API с tool calling оркестратор должен:
- Выполнять вызовы инструментов (list_files, read_file, search_in_repo, run_tests, apply_patch и т.д.) в приложении.
- Передавать результаты обратно в модель (tool output с привязкой к call_id).
- Не считать задачу «выполненной» (тесты прошли, патч применён), пока соответствующий инструмент не вернул успех и результат не передан агенту.
Схема tools: см. docs/openai_tools_schema.json.
Стиль ответа (опционально)
- verbosity: 0..2 — 0 ультракоротко, 2 с объяснениями (runtime-настройка).
- ask_budget: 0..2 — сколько уточняющих вопросов допустимо за один оборот.
- Формат ответа по умолчанию: 3–7 буллетов; код/патч — отдельным блоком; в конце: «Что сделать сейчас: …».
Безопасность apply_patch
При реализации инструмента apply_patch:
- dry-run валидация diff перед применением;
- запрет изменений вне repo-root;
- лимит размера патча;
- обязательный backup/undo (например, через tx в papa-yu).