Pular para o conteúdo
OpencodeView

Visão geral

O que o OpencodeView é, o que ele deliberadamente não é, e como se relaciona com o OpenCode.

O OpencodeView é um companheiro local e somente leitura do OpenCode. Ele não implementa agentes, não escreve no banco do OpenCode e não hospeda analytics multi-tenant. Ele lê o histórico de sessões que já está no seu disco, deriva agregados para um cache próprio e serve um dashboard preso ao loopback.

Fonte canônica ↗

Onde ele se encaixa

O OpencodeView fica a jusante de dois projetos que não são dele. Um é obrigatório, o outro é opcional, e ele não tem vínculo com nenhum dos dois.

  • OpenCode

    Obrigatório

    O OpenCode é dono do runtime dos agentes e do banco em disco que o OpencodeView lê. A evolução do schema pertence a eles, então o adaptador SQLite daqui é best-effort e pode ficar atrás de migrações upstream. Quando o dado de origem parece errado, é lá que se investiga — as sinalizações deste lado são heurísticas locais do operador, não afirmações sobre o OpenCode.

  • oh-my-openagent

    Opcional

    Um harness de agentes para o OpenCode, também chamado de omo. Quando o log de atividade dele está legível, o servidor sobrepõe telemetria de polling por sessão na lente Ao vivo: o estado de saúde suspeita e eventos terminais como poll_timeout, max_turns, aborted_by_user e terminal_error. A sinalização omo_metadata_bug também nasce aí. Todo o resto funciona sem ele.

Ambos são projetos de terceiros. O OpencodeView não tem vínculo, endosso ou manutenção compartilhada com nenhum dos dois.

Cinco invariantes, garantidas em código

Não é página de política. São afirmações que o processo faz no startup e em cada requisição.

  • Local-first

    O bind padrão é loopback. A aplicação não abre socket de saída e não envia telemetria. Seu histórico de sessões nunca sai da máquina que o produziu.

    OPENCODEVIEW_HOST=127.0.0.1
  • Fonte somente leitura

    O banco do OpenCode é aberto em modo somente leitura no nível do engine e fixado com o pragma query_only. O OpencodeView é estruturalmente incapaz de escrever nele.

    readonly: true · PRAGMA query_only = 1
  • Cache separado

    Toda métrica derivada vai para um arquivo SQLite próprio. O caminho do cache é verificado para nunca ser o mesmo arquivo, symlink ou hardlink da fonte.

    .cache/analytics.sqlite
  • Redigir antes de sair

    Payloads de transcrição e ao vivo passam por redação server-side antes de o JSON deixar o processo: chaves com cara de segredo, tokens bearer, prefixos de provedores, userinfo de URL e caminhos absolutos do home.

    sk-… ghp-… → [REDACTED]
  • Falha fechada

    Fazer bind fora do loopback sem token de autenticação não gera aviso — o servidor se recusa a iniciar. Exposição é sempre decisão deliberada do operador.

    sem token + bind público → exit

Não-objetivos

Coisas que este projeto decidiu não ser.

  • Substituir o OpenCode ou entregar uma UI oficial do OpenCode
  • Alegar vínculo com ou endosso do time do OpenCode
  • Analytics hospedado em nuvem ou multi-tenant
  • Distribuição em npm/registries ou instalador — só execução via código-fonte
  • Um contrato de integração estável e versionado contra o opencode.db antes do 1.0.0

Limitações conhecidas

Documentadas de cara, porque você vai esbarrar nelas.

  • opencode.db é detalhe interno de implementação do OpenCode — o adaptador é best-effort e pode ficar atrás de mudanças de schema upstream
  • cost só é comparável dentro do mesmo regime de cobrança; alguns modos de autenticação reportam zero
  • Sessões de 2026-06 e 2026-07 têm cobertura incompleta de summary_additions e recebem a sinalização data_quality_gap
  • Sessões que usaram as ferramentas legadas edit/write em vez de apply_patch não populam os contadores de apply_patch
  • Espere mudanças incompatíveis no schema do cache, na API e na CLI antes do 1.0.0