Skip to content

Добавить Pi как альтернативный агентный backend #45

Description

@dapi

Контекст

code-converge сейчас поддерживает только Codex и его boundary в internal/codex: schema-constrained review через codex exec, stateless remediation и CI recovery. Требуется научить CLI использовать Pi как альтернативный agent runtime, не ослабляя существующие гарантии review snapshot, fail-closed classification, host-owned publication и CI.

Pi предоставляет JSONL event stream (--mode json), но не имеет прямого аналога Codex --output-schema / --output-last-message. Интеграция должна поэтому извлекать только финальное assistant message и валидировать его существующей строгой схемой findings.

Результат

Пользователь может явно выбрать Pi как agent backend. При этом Code-Converge:

  • выполняет review в одноразовой изолированной Pi-сессии;
  • получает findings только из финального сообщения Pi и fail-closed валидирует exact JSON schema;
  • запускает отдельные Pi-сессии для Fix findings и Fix CI;
  • сохраняет Code-Converge владельцем checkpoint, commit/push, PR discovery/creation и CI polling;
  • сохраняет Codex backend и его существующее поведение без регрессий.

Границы и инварианты

  • Не заменять Codex: Pi — второй поддерживаемый backend.
  • Не делегировать Pi публикацию, GitHub PR или CI polling.
  • Review должен продолжать работать с существующим private merge-base-to-worktree Git snapshot, включая committed, staged, unstaged и untracked изменения.
  • В Pi review не разрешать generic bash. Поставляемый с Code-Converge контролируемый extension/tool предоставляет только allowlisted read-only Git операции против scoped snapshot.
  • Не загружать project-local Pi extensions, skills, prompts или settings в non-interactive запуске review/fix без явного доверия. Запуск должен быть stateless (--no-session) и изолирован от пользовательских Pi resources настолько, насколько позволяет Pi CLI.
  • Raw Pi stdout/stderr и JSONL events не являются review result и не попадают в public workflow stdout; они могут попадать только в существующий redacted diagnostic session log и interactive output view.
  • Любой malformed, incomplete, prose-only, empty, trailing или неуспешно завершённый Pi review result — operational failure (exit 2), а не clean review.
  • Точный публичный CLI/config contract, поддерживаемая минимальная версия Pi и mapping mode/model/thinking должны быть приняты в feature design, а не предполагаться из этой issue.

Предлагаемая реализация

  1. Выделить agent-neutral contract и перенести общую review-result validation туда, где он не принадлежит Codex.
  2. Оставить internal/codex реализацией этого контракта; добавить internal/pi adapter.
  3. Добавить backend selection и Pi-specific executable/provider/model/thinking configuration с тем же precedence contract, что у существующих settings.
  4. Запускать Pi review через pi --mode json --no-session с allowlist инструментов и поставляемым read-only review Git extension.
  5. После agent_settled брать только финальный message_end assistant text, затем применять exact JSON validation существующего review report contract.
  6. Запускать Fix findings и Fix CI в свежих Pi-процессах с необходимыми edit/write/shell tools; дальнейшие lifecycle decisions остаются в Code-Converge.
  7. Добавить capability/startup validation с actionable diagnostic, если установленный Pi не поддерживает требуемые CLI flags/JSON protocol.

Acceptance criteria

  • Выбор Pi backend задокументирован и доступен через принятый CLI/config contract; Codex сохраняется default backend.
  • Pi review запускается в отдельной stateless session и использует только контролируемую read-only review surface, а не generic bash.
  • Pi review видит тот же private merge-base-to-worktree snapshot, который уже готовит internal/repository.
  • Только final assistant message после завершения Pi может быть классифицировано как review report; terminal streams и промежуточные JSONL events не классифицируются.
  • Clean и findings reports Pi проходят тот же strict validation contract, что и Codex; malformed/missing/unknown/duplicate/trailing/prose output fail closed с exit 2.
  • Pi Fix findings получает полный classified report, работает в новой session и участвует в существующем checkpoint/review loop.
  • Pi Fix CI работает в новой session; budget, restart from Review и exit semantics не меняются.
  • Commit, direct-ref push, change request и exact-SHA CI polling по-прежнему выполняет host Code-Converge.
  • kv и human workflow contracts не получают raw Pi protocol data; diagnostic logging redacts Pi invocation content как и Codex invocation content.
  • Имеются deterministic fake-Pi tests для arguments, JSONL parsing, cancellation, clean/findings/malformed outcomes, fix stages и backend configuration precedence.
  • Существующие Codex tests и public Codex behavior остаются зелёными.
  • README и relevant Memory Bank artifacts описывают итоговый contract, security boundary и verification evidence.

Routing

Feature Flow, validation profile standard.

Изменение вводит новый agent runtime, меняет публичные CLI/configuration contract и затрагивает доверенную process/security boundary. Поэтому Small Change не применим. Для feature требуется design.md: предстоит принять решения о backend abstraction, Pi JSONL protocol, review-tool isolation, model/config mapping и минимальной поддерживаемой версии Pi. Возможное reusable architectural решение оформляется отдельным ADR.

Verification baseline

Минимальная evidence должна включать unit/fake-runner tests, fake executable integration tests для Pi JSONL protocol и process cancellation, configuration precedence tests, go test ./..., go vet ./..., make docs-lint, git diff --check и required CI. Реальная Pi-сессия и remote mutation не используются в automated tests.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions