# Refactor Plan ## Objetivo Fazer um refactor incremental da camada de runtime de voz sem quebrar: - contrato do bridge websocket - integracao com LiveKit - pipeline atual de negocio - comportamento de interrupcao, idle nudge e finalizacao ## Problema atual Hoje o arquivo `app/livekit/main.py` concentra responsabilidades demais: - wiring do AgentSession - timers - politica de interrupcao - idle nudge - finalizacao - chamada da pipeline - speak / wait_for_playout - notificacao ao bridge Isso dificulta manutencao, teste e evolucao para alternativas futuras como: - `llm_node` - agente remoto via API - politica de chamada mais previsivel ## Direcao arquitetural Separar o runtime em camadas: - adapters: wrappers dos componentes atuais (pipeline, speech, bridge, export) - runtime: coordenacao da chamada - domain: estado, eventos e comandos - policies: regras puras de interrupcao, idle e finalizacao - engine: reducer e scheduler ## Principios - preservar comportamento antes de trocar mecanismo - extrair boundaries antes de mudar a orquestracao - isolar side effects - tornar finalizacao idempotente - introduzir estado explicito da chamada ## Fases sugeridas ### Fase 1: Boundaries Extrair sem mudar comportamento: - `PipelineAdapter` - `SpeechService` - `BridgeGateway` - `ExportService` Saida esperada: - `app/livekit/main.py` menor - regras ainda iguais as de hoje ### Fase 2: Runtime explicito Introduzir: - `CallState` - `CallRuntime` - comandos e eventos Saida esperada: - menor uso de `nonlocal` - caminhos de execucao mais faceis de seguir ### Fase 3: Policies e scheduler Migrar: - interrupcao - idle nudge - idle close - finalize once Saida esperada: - regras de chamada isoladas e testaveis ### Fase 4: Evolucao de IA Avaliar depois da estabilizacao: - `llm_node` - agente remoto via API - SSE / websocket para agente externo Saida esperada: - STT / IA / TTS com fronteiras mais limpas ## Fora de escopo inicial - reescrever bridge - substituir pipeline de negocio - trocar protocolo websocket externo - mudar contrato de audio ## Definition of done por fase ### Fase 1 - sem mudanca de contrato externo - sem mudanca de fluxo de audio - classes novas usadas pelo `main.py` ### Fase 2 - estado da chamada centralizado - menos logica de coordenacao inline ### Fase 3 - timers centralizados - finalizacao unica e previsivel - regras de interrupcao sem duplicacao ### Fase 4 - nova integracao de IA desacoplada do fluxo manual atual - comparacao controlada com comportamento anterior