Skip to content

[P1][Gateway] Trocar OpenRouter direto por gateway Simplicio com streaming, tools e cancelamento #323

Description

@wesleysimplicio

Parent: #315
Follow-up novo de #4, fechada enquanto docs/ARCHITECTURE.md ainda descreve o gateway como próxima fatia.

Problema

O cliente beta expõe dependência direta de OpenRouter/model slug. Isso impede identidade única do produto, rotação de segredo sem release, entitlement central, budgets, observabilidade coerente e isolamento de provider.

Objetivo

Fazer o Code falar apenas com endpoints Simplicio, preservando streaming, tool calls, cancelamento, backpressure e receipts, sem revelar provider/credencial upstream.

Ownership

  • Gateway: roteamento, segredo, rate limit, circuit breaker e auditoria.
  • Code: UX/stream/cancel e contrato público Simplicio.
  • Runtime: execução de tools/effects.
  • Agent: raciocínio/coordinator; não recebe segredo upstream.

Caminho mais rápido

  1. Implementar endpoint Responses mínimo compatível com fluxo atual.
  2. Usar mock upstream e golden streams.
  3. Trocar uma única camada de provider no Code.
  4. Colocar atrás de feature flag com rollback temporário controlado.
  5. Remover cliente direto após E2E staging.

Passo a passo

  1. Congelar GET /v1/code/models, POST /v1/code/responses e usage/limits.
  2. Definir envelopes de erro estáveis, request id, idempotency e causal ids.
  3. Implementar SSE/streaming com cancelamento e backpressure.
  4. Suportar tool-call deltas sem executar tools no gateway.
  5. Resolver upstream secret somente no servidor.
  6. Mapear nome público Simplicio-1 para rota interna.
  7. Aplicar auth/entitlement, budgets, rate limit e tenant isolation.
  8. Implementar timeout e retry apenas antes de efeito/stream observável.
  9. Adicionar circuit breaker e fallback controlado por policy.
  10. Redigir prompts/código/respostas dos logs por padrão.
  11. Publicar OpenAPI e golden fixtures.
  12. Integrar cliente Code nas três superfícies.
  13. Fazer network capture provar zero hostname upstream.
  14. Rodar staging E2E incluindo cancel e tool.
  15. Remover config/SDK OpenRouter do modo produtivo e atualizar docs.

Testes obrigatórios

  • stream normal/parcial/malformado;
  • cancel antes/depois do primeiro token;
  • tool calls fragmentadas;
  • 401/403/429/5xx/timeout;
  • retry e duplicate request;
  • circuit open/half-open;
  • tenant A/B;
  • orçamento esgotado;
  • provider fallback;
  • header injection/SSRF;
  • redaction;
  • TUI/headless/ACP parity.

Evidência para fechar

OpenAPI, fixtures, network capture, load/security tests, staging receipts, métricas de stream/cancel e scan do binário/config.

Execução

  • Implementar o objetivo descrito.
  • Fazer a implantação aplicável.
  • Executar e registrar os testes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions