6.3 KiB
Mover as variantes do provider Vercel AI Gateway para a config global do opencode
Status: rascunho Atualizado em: 2026-08-24 Issue: #836 Priority: P2 Impeccable: A — N/A sem UI Rascunho UI: N/A — sem UI Appetite: ~0,25–0,5 dia, config-only Responsável: —
Intenção
O opencode.json do repo expõe as variantes low/high/max dos dois models DeepSeek V4 Flash (deepseek-v4-flash e -0731) no Vercel AI Gateway. Essas variantes são preferência de máquina: não carregam secret (a auth vive em ~/.local/share/opencode/auth.json), e configs do opencode são merged — global e projeto somam, não substituem. O próprio repo já decidiu isso no OPS82: o global é o dono natural das variantes (removeu o twin local cheapest-inference com "edit the owner, don't twin"), e o anti-goal original do OPS78 era não commitar config de opencode no repo. A pergunta do humano — "é possível mudar para global?" — tem resposta sim, sem nada quebrar: o preset de launch referencia o MODEL ID (vercel/deepseek/deepseek-v4-flash-0731), não o bloco de config. Resultado: repo mínimo (só mcp.penpot), variantes donas no global, textos do repo que localizam as variantes atualizados para não mentir.
Persona e fluxo
- Persona / contexto: dono do repo (fsolla) configurando o opencode local; editou o
~/.config/opencode/opencode.jsoncà mão e quer consistência entre a máquina e o repo. - Job principal: ter as variantes low/high/max do Vercel disponíveis no opencode sem depender de config commitada no repo.
- Fluxo desejado: o repo
opencode.jsonfica só com$schema+mcp.penpot; o global ganhaprovider.vercelcom os dois model keys e as variants (espelhando o bloco atual, comentário explicativo no estilo JSONC do arquivo);opencode debug configcontinua resolvendo vercel com variants; o TUI cicla variantes (Ctrl+T) eopencode run --variant maxresponde;pnpm worktree nextsegue emitindo o--model vercel/deepseek/deepseek-v4-flash-0731. - Anti-goals de produto: não mover o preset de launch para o repo (fica no script — model ID, não bloco de config); não mexer em auth/gateway (a rota Vercel e suas chaves permanecem como estão); não editar docs históricos congelados.
Objetivo e aceite
- Repo
opencode.jsonsemprovider.vercel(fica$schema+mcp.penpot). - Global
~/.config/opencode/opencode.jsonccomprovider.vercele os 2 model keys × variants low/high/max, no estilo JSONC do arquivo (comentário explicativo). - Textos vivos do repo que localizam as variantes ("exposed by the
provider.verceloverride inopencode.json" no docblock deOPENCODE_PRESET_MODELe a prosa doworktree-next-issue/SKILL.md) apontando para a config global. opencode debug configmostra vercel com variants (antes/depois equivalentes);opencode run --model vercel/deepseek/deepseek-v4-flash-0731 --variant maxresponde; TUI mostra as variantes.pnpm worktree next(branch descartável) continua emitindo o--modelsem erro; teste unitário deworktree.unit.spec.tssegue verde.
Dados (intenção)
- Vou apresentar dados? Não — item de tooling/config, sem dados de negócio.
- Decisões desbloqueadas: dono + onde vive a preferência de variantes (global vs repo) — resolvida nesta entrega.
Direção no codebase (hipótese)
- Áreas prováveis:
opencode.json(raiz),scripts/lib/worktree.mjs(docblock da constante, ~linha 26-29),.agents/skills/worktree-next-issue/SKILL.md(prosa do launch, ~linha 34). Fora do repo:~/.config/opencode/opencode.jsonc(aplicado manualmente pelo dono — não é commitado). - Precedente a olhar: OPS78 (
docs/plans/worktree-launch-default-llm-max-gateway.md— anti-goal "não commitar config de opencode no repo"), OPS82 (remoção do twincheapest-inferencedo repo), globalcheapestinception(padrão de variants já existente noopencode.jsoncglobal). - Risco de acoplamento: nenhum gate/lint/CI lê
opencode.jsonestruturalmente (achado do explorador — zero referências fora doscripts/worktree.mjsque só usamcp.penpot); removermcpquebraria o launch, removerprovidernão.
Dependências
- Nenhuma dura. A parte global é manual (arquivo fora do repo) — aceite condicionado à edição pelo dono.
Fora de escopo
- Preset de launch do repo (
OPENCODE_PRESET_MODEL— model ID, fica como está). - Cardápio de execução de Issues e docs históricos (
docs/plans/*,docs/CHANGELOG-AGENTS.md,docs/changelog/*— congelados). AGENTS-infra.md(mencionaopencode.jsonsó pelomcp.penpot— não muda).- Auth/mudança de rota do gateway Vercel.
Rabbit holes de produto
- "Já que vou mexer no global, aproveito e reorganizo o arquivo inteiro." Se alguém "só completar": refactor cosmético do
opencode.jsoncglobal fora do escopo do repo. Corte neste item: tocar apenas no que diz respeito a vercel/variantes; o resto do global fica intacto. - "Sem o bloco no repo, o launch pode quebrar." Se alguém "só completar": manter o bloco por medo — twin. Corte neste item: a verificação de aceite cobre o launch (
worktree next+debug config); se algo quebrar, o-impl.mdvolta ao repo com evidência.
Questões em aberto (produto)
- As variantes devem continuar também no repo para reprodutibilidade por outros devs? Opções: A) mover tudo para o global | B) manter cópia no repo | C) global + nota no repo (doc-only). Recomendação: A — config de opencode é preferência de máquina; repo fica mínimo; precedente OPS82 e anti-goal OPS78. (assumido — validar com produto)
- Os textos vivos que citam onde as variants vivem devem ser atualizados nesta entrega? Opções: A) sim, junto | B) só o docblock, adiar a skill. Recomendação: A — senão os textos mentem para o próximo dev que ler a skill. (assumido — validar com produto)
Referências
- GitHub Issue #784 (OPS78) e #817 (OPS82) — precedentes do bloco e da remoção do twin
opencode.json(raiz),scripts/lib/worktree.mjs:22-29,.agents/skills/worktree-next-issue/SKILL.md:34~/.config/opencode/opencode.jsonc(global, fora do repo),~/.local/share/opencode/auth.json(authvercel)- Docs oficiais opencode: https://opencode.ai/docs/config (merge e precedência), https://opencode.ai/docs/models (variants)