Detalhes

Voltar para Adopt AI

Parte de

Adopt AI

ia / profissional

Tabby

Ajudei a desenhar e desenvolver o Tabby com a equipe Adopt AI: sessões de navegador para handoff de login humano, pods de worker por sessão, execução autenticada de API e automação no navegador.

Arquitetura 3D ao vivo

Use a navegação para alternar entre diagramas e trabalhos relacionados, depois role o painel para ler os detalhes.

Login por VNC cria um BrowserContext autenticado que pode apoiar automação de API e navegador.

  • Papel

    Ajudei a desenhar e desenvolver o Tabby com colegas da Adopt AI.

  • Problema

    O ABCD podia ingerir APIs web internas, mas a autenticação ainda exigia participação humana em alguns sistemas. Login, MFA, fluxos de renovação e telas antigas não podiam ser reduzidos a uma simples entrega de credencial de API, e alguns fluxos ainda precisavam de interação real com a página.

  • Implementação

    O Tabby é um monorepo TypeScript usando Nx, NestJS, workers Playwright e um controller Kubernetes. Cada sessão é reconciliada em um pod de worker com contexto de tenant, app e sessão. O worker inicia um navegador e cria um BrowserContext que ações autenticadas de API e navegador podem reutilizar depois do login.

  • Execução autenticada

    Depois que uma pessoa conclui o login, caminhos autorizados de fetch e execução no navegador podem reutilizar o BrowserContext autenticado. A execução no navegador cobre fluxos de apontar e clicar quando APIs não bastam. Eventos de auditoria são registrados para os caminhos de execução sem copiar headers, corpos de requisição ou valores digitados para o evento.

  • Ciclo de vida e recuperação

    O controller reconcilia quantidades desejadas de sessões entre réplicas e usa bloqueio de banco com FOR UPDATE SKIP LOCKED para distribuir trabalho. O modelo de estado separa saúde da sessão do baton entre humano e automação, incluindo estados starting, healthy, unhealthy, login-needed, login-in-progress, failed e terminated, além de recuperação de baton, retentativas e timeouts.

  • Artefatos capturados

    O worker pode exportar estado finito de autenticação do navegador: cookies, headers configurados, valores CSRF, storage do navegador e extrações customizadas. O worker criptografa artefatos com AES-256-GCM usando nonce, armazena blobs no MinIO, registra metadados e expiração no banco, e publica um evento NATS. Os artefatos capturam valores selecionados de autenticação e não restauram o processo Chrome. A configuração propaga TENANT_ENCRYPTION_KEY, sem estabelecer uma chave exclusiva por tenant.

  • Sessões de gravação preparadas

    Um pool aquecido inicia sessões saudáveis em about:blank sob um tenant de sistema. Uma transação reserva uma sessão e reatribui aplicação, tenant e proprietário. Assim, a inicialização do navegador acontece antes da solicitação de gravação. Depois de gravar, a sessão é encerrada em vez de voltar ao pool; reservas de proxy são gerenciadas separadamente.

  • Acesso por CDP e VNC

    Sessões CDP sem interface usam um relay restrito à página, que filtra eventos e comandos para um alvo fixo e rejeita comandos Target.*. Sessões VNC com interface usam Xvfb e um sidecar noVNC para interação humana. Os dois modos oferecem caminhos distintos para inspeção do navegador e login humano.

Stack e domínios

  • TypeScript
  • NestJS
  • Nx
  • Playwright
  • Kubernetes
  • PostgreSQL
  • Redis
  • NATS
  • MinIO