- 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>
71 lines
3.9 KiB
Markdown
71 lines
3.9 KiB
Markdown
# Контракт поведения агента (оркестратор)
|
||
|
||
Это не 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 оркестратор должен:
|
||
|
||
1. Выполнять вызовы инструментов (list_files, read_file, search_in_repo, run_tests, apply_patch и т.д.) в приложении.
|
||
2. Передавать результаты обратно в модель (tool output с привязкой к call_id).
|
||
3. Не считать задачу «выполненной» (тесты прошли, патч применён), пока соответствующий инструмент не вернул успех и результат не передан агенту.
|
||
|
||
Схема 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).
|