Camadas de permissão (stLayer)
Como o motor de IA aplica escopo, repertório de ações e estilo de resposta conforme a credencial da chamada
O Sequential Thinking reutiliza um único motor; o comportamento visível muda com quem invoca a API. Em termos técnicos, a camada (stLayer) é derivada do contexto de autenticação e identidade (claims do token, resolução de host / domínio, tipo de sessão) — não do texto da instrução. Cada camada define o que pode ser visto, o repertório de ações e como a resposta final é composta.
Referência de implementação e enumeração das invariantes de isolamento: app/v4/sequentialThinking/docs/ST_LAYERS_SURVEY.md no repositório da aplicação (ficheiro não incluído neste repositório de documentação).
Relação com a API pública
runWithAgentsé o endpoint de produção com ações reais. ExigeAuthorization: Bearer. Em produção, ohostIdvem do headerX-Host-Id(injetado pelo KrakenD); o gateway também injetaX-Domain-Idquando aplicável. Em ambiente local,hostId(ouhostSlug) pode ir no body quando os headers do gateway não existem.- O bloco
conversational(comconversationId,avatarId, etc.) controla persistência na conversa e aplicação doprompt_envelopdo avatar na resposta. Isto não substitui a definição da camada: um token de gestão (Host / Tenant) pode, em tese, incluirconversationalpara escrever na conversa, sem ser “Conversational” no sentido de utilizador final. listActionserunsão públicas e sem autenticação (validação e sandbox). Aí o modelo de confiança e de camada não replica o derunWithAgentsem produção; use as páginas desses endpoints para o comportamento concreto.
As quatro camadas
Da mais ampla à mais restrita:
| Camada | Quem usa | Capacidade típica | Exemplo de contexto |
|---|---|---|---|
| Admin | Operação e engenharia interna Tolky | Acesso global, sem limite de tenant | Suporte, troubleshooting, operações cross-tenant |
| Tenant | Gestor de um domínio (white-label) com vários hosts | Vê e gere todos os hosts daquele tenant, nada fora dele | Multi-marca / multi-unidade sob o mesmo guarda-chuva |
| Host | Gestor de um host (marca, unidade, empresa) | Tudo o que diga respeito àquele host: leads, conversas, conteúdos, métricas | Backoffice de uma loja, central de atendimento |
| Conversational | Utilizador final (widget, voz, WhatsApp) | Apenas o subconjunto seguro para conversa de cliente; sem ações administrativas | Widget, voz, canal WhatsApp |
Isolamento por desenho: outro gestor não acede aos dados de um host cujo token não lhe dá escopo, mesmo com o mesmo motor de IA.
O que varia por camada
Escopo de dados
- Admin: todos os dados (uso interno)
- Tenant: apenas dados dos hosts desse tenant
- Host: apenas dados desse host
- Conversational: a conversa em curso, desse utilizador final, nesse host
Repertório de ações
No motor, as ações do catálogo estão classificadas com as stLayer em que podem entrar no plano. O GET /listActions expõe a definição do catálogo; a filtragem ao subset permitido na camada corrente ocorre na preparação e no planejamento (pré-filtro de ações, etc.). O integrador não define stLayer no corpo do pedido; isso resulta do contexto de autenticação, não de um parâmetro explícito.
- Admin / Tenant / Host: acesso ao subconjunto adequado a gestão, configuração e operações de dados nesse âmbito (global, domínio ou host).
- Conversational: apenas o subconjunto seguro para conversa; pedidos em linguagem natural a ações administrativas não entram no plano porque a ação não está entre as permitidas nessa camada.
Estilo de resposta
- Admin / Tenant / Host: respostas ferramentais, orientadas a tarefa; em geral sem envelope de avatar conversacional.
- Conversational: modo conversacional, com a camada extra de personagem e tom de marca. Na API, o
conversational.avatarIdno body derunWithAgentsaplica oprompt_envelopdo avatar na composição da resposta final (ver Executar com agentes).
Como a camada é determinada
A camada não é um campo que o integrador preenche no body. É obtida a partir do contexto de autenticação e identidade (e, no gateway, dos headers de âmbito). A instrução em linguagem natural não promove a camada: não dá, por si, acesso de Admin ou de outro host.
| Sinal (resumo) | Camada resultante (típica) |
|---|---|
| Token / contexto de operação interna Tolky (master) | Admin |
Token ou âmbito de domínio / white-label (vários hosts sob o mesmo domínio; alinhado a X-Domain-Id no tráfego via KrakenD) | Tenant |
Token ou âmbito de um host (alinhado a X-Host-Id no tráfego via KrakenD) | Host |
| Sessão de canal de utilizador final (widget, voz, WhatsApp, etc.): credenciais e ciclo de vida pensados para o cliente do cliente, não para backoffice | Conversational |
Ter conversationId (por exemplo no bloco conversational de runWithAgents) não define sozinho a camada: indica onde escrever e compor, não quem é o chamador (ver Relação com a API pública no início desta página).
Garantias de isolamento (resumo)
O documento técnico ST_LAYERS_SURVEY.md descreve as invariantes em pormenor. Abaixo ficam as linhas gerais, alinhadas ao que a documentação de produto costuma resumir:
- Consultas a dados filtram por host (ou pela lista de hosts do tenant, conforme a credencial); dados de outro cliente não entram no resultado.
- Identidade do host (e, quando relevante, do domínio) é resolvida antes de planear e executar passos com efeitos; sem isso, o motor não segue com operações que toquem dados.
- Conversas e leads estão amarrados ao host correto; ações que referenciam uma conversa revalidam que ela pertence ao mesmo âmbito do token / headers.
- Efeitos colaterais (criar lead, atualizar conversa, campanhas, etc.) só ocorrem com host e conversa coerentes com o contexto de segurança da chamada.
- O canal de voz segue as mesmas regras de escopo e planejamento que o texto: não é um caminho com menos validação.
- Áudio e transcrições persistem com o mesmo modelo de escopo que as mensagens de texto, quando a stack os grava.
Perguntas frequentes
O utilizador final pode obter dados de outro host só reformulando o pedido?
Não. A camada vem da credencial; ações fora do escopo nem chegam ao planeador.
Um gestor de um host vê outro host no mesmo tenant?
Apenas se a credencial for de Tenant (e o tenant agrupar esses hosts). Um token Host restringe a esse host.
O motor é partilhado; um bug afeta todos?
O mesmo binário reutiliza-se, o que concentra correções de segurança. As regras de escopo aplicam-se em várias fases (credencial, planejamento, execução, persistência), o que reduz o risco de um único ponto falhar em silêncio.
Voz e WhatsApp têm o mesmo isolamento?
Sim. As mesmas regras aplicam-se a texto, voz e WhatsApp.
Glossário
- Host — marca, empresa ou unidade (uma “instância” cliente)
- Tenant — agrupamento de hosts sob a mesma operação (ex.: rede com várias marcas)
- Avatar — persona do canal conversacional de um host
stLayer— camada de privilégio da chamada: Admin, Tenant, Host ou Conversational- Repertório — conjunto de ações que o motor pode planear e executar naquela camada