mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
7 KiB
7 KiB
Flags de modelo no launch do worktree CLI (--cheap / --pro / --zen / --go / --alibaba)
Status: rascunho Atualizado em: 2026-08-24 Issue: #859 Priority: P2 Impeccable: A — N/A sem UI Rascunho UI: N/A — sem UI Appetite: ~0,5–1 dia eng; um outcome verificável Responsável: —
Intenção
Hoje, "trocar de modelo no worktree" = editar uma constante no código (OPS26). O dev quer escolher o modelo na hora de abrir a sessão, como argumento do comando: pnpm worktree next --cheap deve abrir o TUI do opencode já com DeepSeek V4 Flash (Cheapest Inference) em effort max, sem editar nada e sem depender da config da máquina. Cinco cardápios fixos: --cheap, --pro, --zen, --go, --alibaba. O --go histórico (no-op do OPS24) ganha significado real sem quebrar o hábito.
Persona e fluxo
- Persona / contexto: dev no terminal, abrindo worktrees de Issue; quer trocar de modelo conforme o custo/qualidade do momento, sem lembrar de config global nem editar arquivo.
- Job principal: abrir a próxima sessão no modelo certo com um flag, no mesmo fluxo que já usa.
- Fluxo desejado:
pnpm worktree next --cheap(ouplan/new) no terminal → claim + worktree provisionado como hoje → diretivalaunch opencode <dir> --model <mapa> --variant max --auto --prompt …→ TUI abre na Issue já claimada, footer confirma modelo/provider/effort. - Anti-goals de produto: não vira seletor genérico de modelos (tipo
/models); não muda o cardápio de execução de Issues (/work-issue,/plan-issue); não persiste preferência; não toca a config global do humano via repo; sem flag, nada muda.
Objetivo e aceite
- Rodar
pnpm worktree next --cheap | --pro | --zen | --go | --alibabano terminal abre o TUI com o modelo correspondente do mapa e o footer indicando effortmax— nas cinco flags. - Guardrail: a sessão abre em effort max sempre; se o modelo não expuser variante max, falha alto — nunca abrir silenciosamente em effort errado.
- Guardrail: fora do terminal interativo (comando
/worktree, semTEQO_WORKTREE_TERMINAL=1), as flags são irrelevantes e não quebram nada. - Guardrail: sem flag, o comportamento atual permanece intacto (preset
deepseek/deepseek-v4-flash, effort max, no-op de--stay).
Dados (intenção)
- Vou apresentar dados? Não — tooling de dev, sem métrica de produto.
- Decisões desbloqueadas: dev escolhe modelo por invocação (antes: escolha só na edição da constante).
- Forma: adiada ao plano de implementação — aqui só a restrição "cardápio fixo de 5 flags nomeadas".
Direção no codebase (hipótese)
- Áreas prováveis:
scripts/lib/worktree.mjs(mapa flag→{model, variant}+ emissão de--model/--variantemopencodeLaunchDirective);scripts/worktree.mjs(parseArgs/help/docblock);.agents/shell/worktree.she.opencode/commands/worktree.md(contrato do--go, docs);tests/unit/worktree.unit.spec.tsetests/unit/opencodeCommands.unit.spec.ts(pins das 5 flags); skills que citam o preset. - Precedente a olhar: OPS78 (
worktree-launch-default-llm-max-gateway.md— variante max + gateway), OPS33 (worktree-next-claima-issue-deterministicamente.md), OPS24 #569 (worktree-go-*.md— no-op documentado em 5 superfícies), OPS26 (troca de modelo = constante). - Risco de acoplamento:
scripts/worktree.mjsestá em HIGH_RISK_EXACT → e2e curado no PR; o contrato--goestá documentado em 5 superfícies (docblock/help do script,worktree.sh,worktree.md, 2 skills) e todas precisam sair da mesma entrega.
Dependências
- Nenhuma dura. Soft: validação empírica do
--variant maxnos alvos sem variante configurada (ver Questões em aberto) — pode exigir ajuste de config de máquina, que fica fora do repo.
Fora de escopo
- Mudar prompts/cardápio de execução (
/work-issue,/plan-issue) — intactos. - Aceitar modelo/provider arbitrário (cardápio aberto) — vira o
/modelsdo opencode; destino: upstream. - Persistir preferência por usuário/worktree —
OPENCODE_WORKTREE_MODELjá cobre default fixo manual. - Mudar o default sem flag — reabriria OPS26/OPS78 sem evidência nova; destino: outro item.
- Editar config global de variantes da máquina via repo — se necessário, vira runbook, não commit.
Rabbit holes de produto
- Cardápio aberto. Se alguém "só completar": aceitar qualquer
provider/modelcomo flag. Corte neste item: mapa fixo commitado com as 5 flags nomeadas. - Persistência de preferência. "Guarda o último
--cheappra sempre" → estado e sobrescrita confusa do TUI (histórico OPS78). Corte: flags são por invocação; env continua sendo o escape de default. - Laboratório de variantes. Verificar
--variant maxnos alvos semvariantspode virar caça de configs experimentais. Corte: verificação pontual + falha alta; sem inventar config no repo.
Questões em aberto (produto)
- Mapeamento do
--zen? O "Ox Alpha Free (Unlimited)" existe só comoopencode-go/ox-alpha-free; o provider "OpenCode Zen" não tem ox-alpha-free. Opções: A)--zen→opencode-go/ox-alpha-free(nome de exibição bate com o pedido; a atribuição de provider no pedido foi engano); B)--zen→ um modelo free do Zen (hy3-free etc.). Recomendação: A — o nome de exibição casa com a intenção verbatim; correção do provider é documentada no plano. (confirmado no gate —--zen→opencode-go/ox-alpha-free) - Escopo das flags: só
nextou tambémplan/new? Opções: A) sónext; B) os três, mesmo caminho de diretiva. Recomendação: B — a diretiva é compartilhada; separar criaria handoff inútil. (confirmado no gate — os três) --variant maxem modelo sem variante configurada? Opções: A) abrir mesmo assim e aceitar o que vier; B) falhar alto se a variante não aplicar. Recomendação: B — effort max é guardrail; impl verifica empiricamente cada alvo e documenta no impl-plan. (confirmado no gate — humano afirma que os 5 alvos expõem a variante max; guardrail defensivo permanece)- Convivência do novo
--gocom o no-op histórico? Opções: A) manter no-op e criar flag diferente; B) remapear--gopara o provider OpenCode Go. Recomendação: B — o no-op só reproduzia o default (transição suave), mas o contrato documentado nas 5 superfícies sai atualizado nesta mesma entrega. (confirmado no gate — remapear)
Referências
- Issue OPS93 (ID reservado, ainda não registrado)
docs/plans/worktree-launch-default-llm-max-gateway.md(OPS78 — variante max, gateway sem créditos)docs/plans/worktree-next-claima-issue-deterministicamente.md(OPS33) edocs/plans/worktree-go-*.md(OPS24 — no-op--go, histórico congelado)scripts/lib/worktree.mjs(preset L32-33,opencodeLaunchDirectiveL150-162, skill commands L47-51),scripts/worktree.mjs(parseArgs L762, help L769-800),.agents/shell/worktree.sh,.opencode/commands/worktree.md,tests/unit/worktree.unit.spec.tsL145-206,tests/unit/opencodeCommands.unit.spec.tsL36-38