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

3.9 KiB
Raw Blame History

Контракт поведения агента (оркестратор)

Это не 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).