Skip to content

Batuta: manter PTY do worker externo vivo entre delegações sucessivas #109

Description

@alltomatos

Parent

#57

What to build

Decisão registrada em #57: adotar supervisão com DAG explícito (não "entregar e esquecer"). Pré-requisito para isso: hoje (pós #52) cada delegação a um worker externo é isolada — spawn → prompt → waitIdle → kill — sem estado entre chamadas.

Mudar packages/opencode/src/tool/task.ts (ou onde a delegação a worker externo acontece) para reutilizar o mesmo handle de ExternalAgent.Service entre delegações sucessivas ao mesmo worker dentro de uma atividade, em vez de matar o PTY após cada waitIdle. O kill() só acontece quando a atividade termina ou o worker é explicitamente removido.

Sessões precisam de um timeout de ociosidade próprio (distinto do waitIdle por turno) para não vazar PTYs órfãos caso a atividade nunca seja finalizada explicitamente — reaproveitar idleTimeoutMs do schema de worker já existente como teto.

Acceptance criteria

  • Duas delegações sucessivas ao mesmo worker externo dentro da mesma atividade reutilizam o mesmo PTY (não spawna um novo processo)
  • O PTY só é morto quando a atividade termina ou o worker é removido explicitamente
  • Um worker inativo por mais que idleTimeoutMs é encerrado automaticamente (sem vazar processo)
  • Comportamento de uma atividade com um único worker/uma única delegação continua idêntico ao atual
  • bun run typecheck limpo

Blocked by

(nenhuma — decisão de design já tomada em #57)

Verification

Teste de integração confirmando que duas chamadas sucessivas de delegação ao mesmo worker id reusam o handle (mesmo PID), e que o worker é encerrado sozinho após idleTimeoutMs sem nova delegação.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    batutaFeature: orquestração de subagentes (Batuta)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions