May 20th, 2026

AAP loop: эмиттер на turn_complete + main-router по kind

Что изменилось

Контракт AAP подключён к рантайму: server-core эмитит пакеты на каждом завершении сообщения, main-процесс маршрутизирует их по типу.

  • AgentAnswerEmitter: новый класс в packages/server-core/src/sessions/ — собирает AAP при каждом text_complete событии, валидирует через zod, диспатчит наружу.
  • Kind detection: plain text → 'text'; ответ начинается с Markdown-fence ``` → 'code' с извлечённым языком; ответы с дизайн-командами → 'design'.
  • AgentAnswerRouter (main): новый класс в apps/electron/src/main/agent-answer-router.ts; route(aap) диспатчит: text/code → passthrough в renderer; designdesign:openWithContext IPC; mixed → рекурсивный вызов по каждому part.
  • Validation errors: zod-ошибки логируются в main-log с полным path в схеме, не блокируют отображение ответа.
  • Backpressure-ready: асинхронный handler не блокирует SSE стриминг.

Где попробовать

В чате попросите ассистента создать дизайн-задачу — backend эмитит AAP, main распознаёт design kind и автоматически открывает контекст в Rox Design.

Связано

PR #345 — AgentAnswerEmitter. PR #341 — AgentAnswerRouter.