Pular para o conteúdo principal
Referência completa do escopo do Outposts: a CLI do worker, a fleet API, a distribuição do binário devin-remote e o contrato de spawn para orquestradores personalizados.

Autenticação

Workers e orquestradores se autenticam com um token de API v3 pertencente a um usuário de serviço. A função atribuída ao usuário de serviço concede ao token os escopos do Outposts: Os Outposts têm escopo no nível da sua conta e são compartilhados entre todas as organizações dela.

CLI

devin worker start

Consulta a fila de um outpost, reivindica sessões, baixa o binário devin-remote correto e executa as sessões. Execute-o a partir do diretório que contém os repositórios da sessão já clonados.
O ambiente do worker também pode incluir DEVIN_CHROME_PATH para apontar as sessões para um binário do Chrome/Chromium para recursos do navegador.

devin worker outpost create

Cria um outpost — uma fila nomeada de sessões operada pela sua infraestrutura. Requer o escopo de orquestrador.
Exibe o ID do novo outpost (outpost_env-...). Você também pode criar outposts no app web em Configurações → Ambiente → Outposts.

devin worker outpost delete

Exclui um outpost. Requer o escopo do orquestrador.

Fleet API

Todos os endpoints estão em https://api.devin.ai/opbeta/outposts/ e usam um token Bearer:
Os recursos seguem uma estrutura no estilo do Kubernetes de metadata / spec / status, e a fila segue a semântica list-then-watch do Kubernetes, com entrega de pelo menos uma vez.

Objetos

Entrada da fila (devins)

Cada sessão enfileirada é representada por uma entrada da fila: spec.network_policy informa se o acesso de rede da sessão está restrito (enabled) e quais são os destinos permitidos (allow): padrões de hostname ({"hostname": ...}), endereços/CIDRs IPv4 ({"ipv4": ...}) ou endereços/CIDRs IPv6 ({"ipv6": ...}).

Outpost

Listar sessões enfileiradas

Exemplo de resposta:
Paginação e semântica de entrega:
  • Passe o cursor de cada resposta para a próxima requisição enquanto has_next_page for true.
  • A entrega segue a semântica at-least-once: uma sessão na fronteira entre páginas pode aparecer em ambas, então faça upsert das entradas por metadata.session_id em vez de tratar cada item como novo (o reivindicar CAS torna duplicatas inofensivas).
  • Quando has_next_page se tornar false, salve o cursor retornado como posição inicial de um watch.

Monitorar alterações

Transmite Server-Sent Events. Eventos MODIFIED são emitidos quando a entrada da fila de uma sessão é alterada (sessões recém-enfileiradas também são recebidas como MODIFIED); eventos DELETED são emitidos quando ela é removida. Cada campo data de SSE contém:
Semântica do watch:
  • Persista o cursor de nível superior de cada evento após processá-lo; reconecte-se com o último cursor persistido para receber novamente as alterações que ocorreram enquanto a conexão estava interrompida.
  • A entrega ocorre pelo menos uma vez — tolere eventos duplicados.
  • Os fluxos se encerram em, no máximo, cinco minutos; espera-se um loop de watch com reconexão.
  • Os filtros phase e acceptor_id são ignorados quando watch=true; filtre os eventos monitorados usando os campos do object de cada evento.
  • Omitir o cursor faz com que o processo comece do início, portanto use list seguido de watch para a reconciliação normal.

Buscar uma entrada da fila

Retorna a entrada da fila de uma sessão.

Reivindicar uma sessão

Reivindica a sessão de forma atômica para a identidade de worker fornecida. Se outro worker a reivindicou primeiro, a requisição falha com 409. Uma resposta de reivindicação bem-sucedida inclui status.connect_token e status.gateway_url — as credenciais de que o devin-remote precisa para se conectar (consulte o contrato de spawn). Ao reivindicar a sessão, o worker se compromete a ficar pronto dentro do prazo de reivindicação atribuído pelo servidor (status.claim_deadline); reivindicações expiradas retornam à fila automaticamente.

Remover uma reivindicação

Libera a reivindicação do worker para que a sessão volte imediatamente para a fila (por exemplo, em caso de falha no provisionamento).

Outposts

Corpo da requisição para criação:
Create, get e delete exigem o escopo de orquestrador; cada resposta de outpost informa status.queue_depth e status.active_claims em tempo real.

Distribuição remota de binários

O comando devin worker start baixa automaticamente o binário devin-remote correto. Orquestradores personalizados que não usam o Devin CLI podem baixá-lo diretamente de:
Identifique a versão mais recente:
Baixar e verificar:
Plataformas disponíveis: Se a entrada na fila da sessão incluir um spec.remote_binary_sha, use esse SHA em vez de latest — isso mantém a sessão fixada em uma versão específica testada.

Contrato de spawn

Se o seu orquestrador iniciar o devin-remote por conta própria em vez de usar devin worker start, inicie-o assim:
com as seguintes variáveis de ambiente: Forneça ao remoto um ambiente limpo contendo apenas as variáveis acima, além das variáveis básicas do sistema (PATH, HOME, USER, LOGNAME, TMPDIR, LANG, TZ e — para a captura de tela do stream de desktop no Linux/X11 — DISPLAY, WAYLAND_DISPLAY, XAUTHORITY). Não exponha ao remoto nada que o agente não deva conseguir ver: esse ambiente é herdado pelo shell do agente. Expectativas adicionais do ciclo de vida:
  • Diretório de trabalho: inicie o remoto a partir do diretório que contém os repositórios da sessão (a mesma regra de devin worker start).
  • Fim da sessão: quando a sessão termina (entra em suspensão ou é encerrada), o Devin notifica o remoto e ele encerra por conta própria com status 0. Trate um encerramento limpo como o fim da sessão: confirme que status.session_status do item da fila é suspended ou terminated (a atualização de status pode demorar alguns segundos para refletir o encerramento, então consulte novamente algumas vezes) e, em seguida, libere a reivindicação. Como fallback, também consulte status.session_status enquanto o remoto estiver em execução e encerre você mesmo o processo assim que ele atingir terminated (ou o item da fila desaparecer).