GBR: ADR-0005 Controle de Sessão e UX de Terminal via Máquina de Estados Finita (FSM) | Wiki
Documentação de engenharia e especificações técnicas da Gleam-BR.
GBR: ADR-0005 Controle de Sessão e UX de Terminal via Máquina de Estados Finita (FSM)
- *Status:* Aceito
- *Data:* 2026-05-01
*Contexto:*
A aplicação de interface de linha de comandos (gleambrctl), concebida para atuar como o "Oráculo de Bolso" da comunidade Gleam, necessitava de controles de sessão rigorosos (/reset, /exit, /persona) e suporte para a inserção massiva de código ("multi-line paste") a partir de editores externos. Modelos imperativos tradicionais (ex: scripts Python que lidam com buffers de stdin manipulando variáveis globais) tendem a apresentar condições de corrida ou corrupção de estado interno quando submetidos a entradas caóticas ou comandos não lineares.
*Decisão:*
-
**Interceptor Estrito na FSM (
AgentLoop):** Comandos de sistema que alteram o "estado da mente" da IA foram mapeados exclusivamente como transições explícitas na Máquina de Estados. A deteção do caractere de escape/é analisada matematicamente no passoUserQuery, interceptando o ciclo antes de qualquer delegação ao provedor externo (LLM) ou ao banco de dados vetorial (gbr_graph). -
*Troca de Máscara (Dynamic Prompting):* O comando
/personaaltera a variável predefinidasystem_promptdentro doAgentContext. A reinjeção deste contexto modificado nas chamadas subsequentes do provedor LLM garante que a IA obedeça à nova diretiva comportamental sem destruir a fita de eventos históricos processados peloSessionActor. -
*Buffer "Drafting" para Colagem Extensa:* Instituição do estado não-operacional
Drafting(buffer: String). Quando ativado via comando/multiline, o Agente interrompe interações cognitivas (busca semântica / chamadas HTTP) e assume uma postura estritamente acumulativa para as diretivas dostdin. O fechamento explícito do buffer (/end) força o reingresso seguro do bloco concatenado no motor LSH/LLM.
*Consequências:*
-
*Positivas:* Previsibilidade UX absoluta: é matematicamente garantido que comandos de gestão não vazarão para prompts do LLM consumindo tokens (faturação); prevenção de quebras de formatação no terminal causadas pelas chaves de linha (
\n) simuladas como eventoENTERna maioria dos sistemas de janelas (Unix/Win). -
*Negativas/Riscos:* A necessidade do usuário informar manualmente os comandos demarcadores (
/multilinee/end) introduz atrito tático no UX face a ferramentas IDE nativas (onde a colagem é gerida via clipboard bindings automáticos no GUI).