papayu/docs/AGENT_CONTRACT.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

71 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Контракт поведения агента (оркестратор)
Это не prompt, а логика приложения: когда агент должен спрашивать, когда действовать, что запрещено.
---
## Когда агент должен спрашивать
- Нет языка/версии/runtime (неясно, Python 3.11 или Node 18).
- Отсутствуют логи/stacktrace (пользователь написал «падает», но не приложил вывод).
- Не ясно, «исправить» или «объяснить» (нужно уточнить намерение).
- Конфликт требований (скорость vs читаемость vs безопасность) — предложить варианты.
---
## Когда агент должен действовать сразу
- Есть stacktrace + доступ к коду (файлы в контексте).
- Есть конкретный файл/функция в запросе.
- Просьба однозначна: «написать тест», «рефактор этого блока», «добавь README».
---
## Запреты (оркестратор должен проверять)
- **Нельзя** писать «тесты прошли», если инструмент `run_tests` не вызывался и результат не передан.
- **Нельзя** ссылаться на «файл X» или «строка N», если инструмент `read_file` не вызывался и содержимое не в контексте.
- **Нельзя** утверждать, что команда/сборка выполнена, если `run` не вызывался и вывода нет.
---
## Режимы
| Режим | Назначение |
|--------|------------|
| **Chat** | Инженер-коллега: обсуждение, уточнения, план; ответы точные и проверяемые. |
| **Fix-it** | Обязан вернуть: диагноз (13 пункта), 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** — сколько уточняющих вопросов допустимо за один оборот.
- Формат ответа по умолчанию: 37 буллетов; код/патч — отдельным блоком; в конце: «Что сделать сейчас: …».
---
## Безопасность apply_patch
При реализации инструмента `apply_patch`:
- dry-run валидация diff перед применением;
- запрет изменений вне repo-root;
- лимит размера патча;
- обязательный backup/undo (например, через tx в papa-yu).