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;design→design:openWithContextIPC;mixed→ рекурсивный вызов по каждомуpart. - Validation errors: zod-ошибки логируются в main-log с полным path в схеме, не блокируют отображение ответа.
- Backpressure-ready: асинхронный handler не блокирует SSE стриминг.
Где попробовать
В чате попросите ассистента создать дизайн-задачу — backend эмитит AAP, main распознаёт design kind и автоматически открывает контекст в Rox Design.