Sobre o projeto

opencode2api é um gateway em Go para OpenCode Zen e Zen Go. Ele expõe endpoints Chat Completions, Responses e Anthropic Messages, traduzindo entre seus protocolos nativos enquanto gerencia chaves e proxies upstream. O executável inclui uma WebUI e não requer runtime Node.js nem banco de dados. As capacidades incluem respostas JSON e SSE nos três protocolos de inferência, suporte a texto, imagens, raciocínio, ferramentas de função, chamadas de ferramentas e resultados de ferramentas, pools separados de chaves Zen e Go com preferência de camada configurável, retentativas e afinidade de sessão, acesso anônimo opcional ao Zen, suporte a proxy direto/HTTP/HTTPS/SOCKS5/SOCKS5H, descoberta dinâmica de modelos com caches em disco, uma porta de gerenciamento separada com edição de configuração, um Playground, diagnósticos, estatísticas de tokens e logs ao vivo, além de recarga a quente da configuração com validação. Início rápido: baixe um binário do GitHub Releases ou compile com Go 1.24+. Edite config.json para definir server_keys, chaves Zen/Go (ou habilitar anônimo) e a senha da WebUI. Execute com `./opencode2api -config config.json`. Imagens Docker estão disponíveis via ghcr.io/jasonxu114514/opencode2api com suporte a docker compose. Os endpoints da API incluem GET /v1/models, POST /v1/chat/completions, POST /v1/responses, POST /v1/messages e GET /healthz. A autenticação usa server_keys locais via cabeçalhos Bearer ou x-api-key. Streaming é suportado com `stream: true`. O gateway não implementa embeddings, uploads de arquivos, geração de imagens ou recuperação/cancelamento de Responses, e não armazena histórico de conversas. O roteamento usa descoberta de modelos a partir do /v1/models upstream e do catálogo de capacidades do OpenCode, com substituições de protocolo disponíveis. O acesso anônimo é habilitado para modelos com 'free' no ID ou modelos não obsoletos de custo zero. A sequência de roteamento tenta primeiro proxies anônimos, depois camadas autenticadas em ordem de preferência, com retentativas por camada. A afinidade de sessão usa um hash estável baseado em IDs de sessão explícitos ou na primeira mensagem do usuário. A configuração abrange chaves, listeners, preferências de roteamento, esforço de raciocínio (com substituições por modelo), proxies (lista inline e proxyfile), timeouts, pools de conexão, logging e configurações da WebUI. A WebUI fornece um Centro de Configuração, Playground, diagnósticos, monitoramento e logs ao vivo. As rotas da API de gerenciamento lidam com autenticação, recuperação/atualização de configuração, recarga, revelação de segredos, atualizações de conta, estatísticas de monitoramento, diagnósticos de modelos, testes de inferência e logs. O monitoramento acompanha resultados de requisições, tentativas upstream, uso de tokens e estatísticas de recursos. A persistência de dados inclui arquivos de configuração, backups e caches de modelos; sessões e métricas ficam em memória. As verificações de saúde relatam prontidão com base na disponibilidade do catálogo e na saúde do proxy. O desenvolvimento requer Go 1.24+ e usa ferramentas padrão do Go.