AiOverviewControl

August 26, 2026 · View on GitHub

Banner do AiOverviewControl

AiOverviewControl

Todas as suas cotas de IA. Um dashboard. Zero achismo.

Widget autocontido do DankMaterialShell para cotas, billing, autenticação e telemetria local de uso de IA — direto na sua DankBar.

CI Release Licença Provedores Idiomas

Instalação · Screenshots · Provedores · Configuração · Changelog · English


Veja em ação

Demonstração do AiOverviewControl

🎬 Prefere mais qualidade? Assista ao demo em MP4.

A pílula fica na DankBar e mostra o uso ao vivo. Provedores com múltiplas janelas de cota (as de 5 horas e 7 dias do Claude, por exemplo) podem exibir qualquer janela na barra — escolha por provedor, ou deixe highest seguir a mais apertada. Passe o mouse sobre a pílula para ver de qual janela veio o número e quando ela reseta:

Pílula na DankBar

Por que AiOverviewControl?

Você paga por Claude, Codex, Copilot, OpenRouter — e cada um esconde a cota em um dashboard, CLI ou API diferente. O AiOverviewControl coleta cada provedor de forma independente e local, normaliza o resultado e renderiza uma visão única e honesta, sem nenhum serviço externo de agregação.

Honesto é a palavra-chave: ele reporta dados medidos quando existe uma fonte suportada e rotula claramente provedores apenas-autenticação ou informativos quando não existe. Sem scraping de dashboards. Sem percentuais inventados. Nunca.

Destaques

📊 Dashboard unificado37 provedores de IA e ferramentas de desenvolvimento em um só lugar.
🛰️ Visão geral da frotaRollup cross-provider no hero — carga média só de cotas mensuráveis, provedor mais quente, quantos estão perto do limite e o próximo reset.
⏱️ Janelas oficiais do CodexJanelas de rate-limit direto do codex app-server.
🤖 Analytics profundo do ClaudeCota mais analytics local de tokens, sessões, modelos, projetos e custo.
🐙 Cotas do CopilotSnapshots de Premium requests, Chat e Completions.
🗂️ Cartões ricosJanelas de uso, horários de reset, identidade, créditos, sparklines, tendências e links para o console.
🛡️ Falhas isoladasUm timeout ou credencial inválida nunca esconde provedores saudáveis.
🎛️ Layout flexívelDensidade compacta/confortável, filtros por status, provedores fixados, pílula auto/custom/top e escolha de janela de uso por provedor na DankBar.
🔔 Notificações de cotaAlertas do DMS com a marca do provedor, limiares globais/por provedor, um toast por janela de cota, atualizado no mesmo toast quando a cota esgota. Os alertas podem seguir a janela exibida na barra, todas as janelas ou apenas a primária.
📄 Exportação de históricoSalve o histórico local de uso em CSV ou JSONL pelas Configurações ou por providers/export-usage-history.
🌍 5 idiomas de UIEnglish, Português (BR), 简体中文, Español e Deutsch.
🔒 Privacidade em primeiro lugarAdaptadores locais, nenhuma chamada paga só para testar chave, segredos nunca exibidos.

Screenshots

Visão geral do dashboardCartão de provedor expandido
DashboardCartão expandido
📈 Telemetria local detalhada (exemplo do 9Router)

Seções de telemetria por provedor incluem gráficos diários de custo, totais de hoje/semana/mês, contadores de tokens in/out, top modelos e detalhamento por provedor roteado — tudo lido de dados locais pertencentes ao provedor.

Telemetria do 9Router

Modelo de cobertura

Os cartões usam um de seis níveis honestos de cobertura:

CoberturaSignificado
CotaRetorna janelas reais de limite ou gasto e o percentual usado (Codex, Copilot, Antigravity, OpenRouter, Z.ai, GLM, Command Code, OpenCode Go).
SaldoRetorna saldo pré-pago ou créditos restantes em moeda real (Kimi, DeepSeek).
AnalyticsLê contadores de consumo ou dados locais pertencentes ao provedor (Cloudflare GraphQL, 9Router, Claude, pi, Hermes).
AutenticaçãoVerifica credenciais via endpoint somente leitura sem dados estáveis de cota (Gemini, Mistral, MiniMax, Qwen, xAI e outros). Alguns cartões de status configurado, como NVIDIA, não conseguem validar a chave porque o catálogo do provedor é público.
Runtime localMostra estado local em vez de cota de conta (modelos do Ollama, autenticação do Vertex AI).
InformativoAponta para o uso oficial quando não existe API somente leitura (Kiro, Cursor, Warp e outros).

Integrações medidas notáveis:

ProvedorFonte de dados
CodexMétodos oficiais de conta e rate-limit do codex app-server.
Claude CodeCota OAuth mais analytics local de ~/.claude/projects (ou $CLAUDE_CONFIG_DIR/projects quando essa variável de ambiente estiver definida).
GitHub CopilotSnapshot autenticado de cota GitHub/Copilot.
AntigravityFamílias de cota Gemini e Claude/OpenAI com resets do Cloud Code Assist; diagnósticos opcionais por modelo e separação automática de múltiplas contas.
9RouterDados locais de uso em SQLite ou JSON, incluindo telemetria por modelo roteado.
piTelemetria JSONL local de sessões (~/.pi/agent/sessions) — custo, tokens, top modelos, top projetos; não há API de cota (o pi não tem rate limits).
HermesEntrada de natureza dupla: telemetria do harness de agente via ~/.hermes/state.db (sessões, tokens por modelo/projeto, origens, chamadas de API) mais identidade de provider (cobrança ativa, modelo padrão) de ~/.hermes/config.yaml / auth.json. O faturamento do lado provider permanece no Nous Portal.
OpenRouterLimites de chave, gasto, saldo e atividade de modelos em 30 dias.
Kimi (Moonshot)Saldo da Open Platform (GET /v1/users/me/balance, USD/CNY) — ou cota da assinatura Kimi Code (GET /coding/v1/usages, janelas semanal e de 5h) quando uma chave sk-kimi- / KIMI_CODING_API_KEY está definida.
DeepSeekAPI oficial de saldo da conta.
TogetherValidação somente leitura da chave; uso e billing permanecem no console da Together.
CloudflareVerificação de token e analytics opcional do Workers AI via GraphQL.
Z.ai, GLMGET /api/monitor/usage/quota/limit — uso real por janela, timestamps de reset e plano da assinatura. Faz fallback para verificação apenas de autenticação via /models.
Command CodeUso ao vivo das janelas de 5h/semanal/mensal via /alpha/billing/credits; usa COMMAND_CODE_API_KEY ou o apiKey protegido salvo por cmd login em ~/.commandcode/auth.json.
OpenCode GoUso ao vivo das janelas de 5h/semanal/mensal em /zen/go/v1/usage; usa OPENCODE_API_KEY ou a credencial do CLI em ${XDG_DATA_HOME:-$HOME/.local/share}/opencode/auth.json. Quando o fallback de saldo do plano Go está ativo, o cartão o informa sem declarar um valor de saldo.
xAI, MiniMax, Qwen, MistralValidação somente leitura via /models (ou /api-key) — consumo zero de tokens.
NVIDIAApenas status da chave configurada; o catálogo público de modelos não permite validar a chave.
OllamaModelos instalados e em execução via /api/tags e /api/ps.

A matriz completa, credenciais e referências upstream estão documentadas em Provedores e Verificação de provedores.

Requisitos

  • DankMaterialShell rodando sobre Quickshell.
  • bash, jq e curl.
  • CLIs ou credenciais específicas apenas para os provedores habilitados. O Antigravity precisa de secret-tool para sessões do keyring ou sqlite3 para bancos de estado da IDE; Hermes e 9Router precisam de sqlite3 para seus bancos locais de uso.
  • As notificações de cota também precisam de notify-send e flock.

Linha de base recomendada para o conjunto padrão de provedores:

command -v bash jq curl codex claude gh
codex login
claude auth status
gh auth status

Instalação

Arquivo de release

Baixe o .tar.gz ou .zip da release mais recente, extraia como AiOverviewControl e coloque no diretório de plugins do DMS:

~/.config/DankMaterialShell/plugins/AiOverviewControl

Depois restaure as permissões de execução e reinicie o DMS:

chmod +x ~/.config/DankMaterialShell/plugins/AiOverviewControl/providers/get-*
dms restart

Clone via Git

git clone https://github.com/bernardopg/AiOverviewControl.git \
  ~/.config/DankMaterialShell/plugins/AiOverviewControl
chmod +x ~/.config/DankMaterialShell/plugins/AiOverviewControl/providers/get-*
dms restart

Ative AiOverviewControl nas configurações do DMS e adicione-o a uma seção da DankBar. Orientações detalhadas de instalação e upgrade estão em docs/installation.md.

Configuração

As configurações são armazenadas pelo DMS e sobrevivem a upgrades do plugin.

ConfiguraçãoValoresPadrão
Idiomaauto, en_US, pt_BR, zh_CN, es_ES, de_DEauto
Provedores monitoradosIDs separados por vírgulacodex,claude,copilot
Densidade do dashboardcomfortable, compactcomfortable
Modo da pílulaauto, custom, topauto
Provedores da pílula customizadaIDs de provedores monitorados separados por vírgulaprovedores monitorados
Janela de uso no DankBarpares provedor:janela, com janela primary, secondary, tertiary ou highest (ex.: claude:secondary)janela primária
Tooltip da pílula no DankBarativado ou desativadoativado
Provedores fixadosIDs separados por vírgulavazio
Cor dos logosqualquer string de cor aceita pelo QMLcor primária atual do DMS
Intervalo de atualização1, 2, 5, 15 ou 30 minutos2 minutos
Mostrar erros de provedorhabilitado ou desabilitadohabilitado
Detalhamento de projetos do Claudehabilitado ou desabilitadohabilitado
Modelos individuais do Antigravityhabilitado ou desabilitadodesabilitado
Notificações de cotahabilitado ou desabilitadohabilitado
Limiar global de notificação75%, 85% ou 95%85%
Limiares por provedorpares provedor:percentual separados por vírgula (ex.: claude:90,codex:75), validados na horavazio
Janelas que geram alertasdisplayed (segue a janela do DankBar), all ou primarydisplayed
Intervalo de repetiçãouma vez por janela, 1h, 6h ou 24h (atualiza o alerta existente)uma vez por janela
Retenção de histórico500, 2.000 ou 10.000 snapshots2.000

As Configurações também oferecem Exportar histórico de uso (CSV ou JSONL) e um Redefinir configurações do plugin em dois passos, que restaura todas as opções acima sem tocar no histórico registrado.

A seleção padrão de provedores é:

codex,claude,copilot

Provedores com API leem credenciais do ambiente do processo do DMS. Um export disponível apenas em shell interativo pode não chegar a uma sessão gráfica do DMS. Veja Configuração para a matriz de variáveis de ambiente e o comportamento do health-check.

Comportamento do dashboard

  • O hero mostra uma visão geral da frota quando dois ou mais provedores resolvem: a carga média nas janelas de cota mensuráveis, o provedor mais quente, quantos estão em ou acima de 80% e o reset mais próximo da frota. Cartões de saldo, analytics, runtime local e informativos ficam intencionalmente fora do denominador da média, para que seus placeholders honestos de 0% não diluam a pressão real de cota. Pico, contagem em risco e reset ainda varrem todos os cartões vivos.
  • A visão geral é navegável: clique no provedor de pico do rollup da frota, ou nas barras de uso do hero, para expandir e rolar direto até o cartão daquele provedor.
  • Cartões são ordenados com fixados primeiro, depois por maior uso mensurável, com provedores em falha por último.
  • Cartões suportam foco por teclado, além de Enter/Espaço (expandir), Delete (remover), P (fixar) e R (tentar novamente).
  • Dados ficam obsoletos após o dobro do intervalo de atualização configurado.
  • Cartões em falha expõem uma ação de retry específica do provedor.
  • Cartões expandidos mostram janelas disponíveis, créditos, fonte, identidade e horário de atualização, sem inventar campos indisponíveis.
  • Snapshots de uso são armazenados localmente em ~/.cache/AiOverviewControl/usage-history.jsonl e podados conforme a retenção configurada. O escritor de histórico registra apenas pressão real não-zero de cota/gasto; placeholders 0% informativos, de runtime local, somente-saldo e somente-analytics são ignorados para que as sparklines permaneçam significativas. Suítes de teste baseadas em fixtures exportam um XDG_CACHE_HOME isolado antes de invocar o dispatcher real, então nunca gravam snapshots de fixture no seu histórico real. Como o arquivo é podado, providers/export-usage-history csv|jsonl (também um botão nas Configurações) é a forma de guardar dados de longo prazo.
  • O analytics do Claude roda separadamente, para que falhas de histórico local ou de OAuth não bloqueiem a coleta principal.

Privacidade e resiliência

  • Credenciais são lidas de CLIs dos provedores, dados locais pertencentes ao provedor ou variáveis de ambiente; a UI nunca exibe valores secretos.
  • O plugin não faz scraping de dashboards web autenticados.
  • Não chama endpoints pagos de inferência apenas para testar uma chave.
  • Arquivos temporários são isolados por execução e removidos ao fim da coleta.
  • Erros de provedor retornam como dados estruturados em vez de encerrar todo o refresh.
  • Cartões informativos usam texto explícito e links oficiais em vez de percentuais sintéticos.

Validação

Execute as mesmas verificações principais usadas pelo CI

O lint de QML é um gate obrigatório no CI (qmllint do Qt5, verificação de sintaxe — sem ruído de resolução de import qs.* para filtrar). Um arquivo QML malformado derruba o build.

jq -e . plugin.json >/dev/null
for file in i18n/*.json; do jq -e . "$file" >/dev/null; done
find providers -maxdepth 1 -type f -print0 | xargs -0 bash -n
for test in tests/*.sh; do bash -n "$test"; done
bash -n scripts/package-release
for test in tests/*.sh; do bash "$test"; done
shellcheck -S warning providers/* tests/*.sh scripts/package-release
qmllint \
  AiOverviewControlWidget.qml \
  AiOverviewControlSettings.qml \
  AiOverviewControlI18n.qml \
  ProviderLogo.qml
./providers/get-provider-health "codex,claude,copilot,pi" | jq .
./providers/get-provider-usage \
  "codex,claude,copilot,pi" \
  ./providers/get-copilot-usage | jq .
./providers/get-usage-history | jq .
./providers/export-usage-history csv /tmp

O GitHub Actions também valida sintaxe dos workflows, paridade de chaves de locale, permissões dos scripts de provedor, contratos de integração, configuração do Crowdin e empacotamento de release.

Arquitetura

AiOverviewControlWidget.qml       Orquestração de runtime e dashboard
AiOverviewControlSettings.qml     Configurações, seleção de provedores e UI de saúde
AiOverviewControlI18n.qml         Carregamento de locales e interpolação
ProviderLogo.qml                  Resolução e fallback dos logos locais de provedores
providers/get-provider-usage      Dispatcher multi-provedor e escritor de histórico
providers/get-provider-health     Verificações locais de pré-requisitos
providers/export-usage-history    Exportação do histórico de uso em CSV ou JSONL
providers/get-codex-usage         Ponte do protocolo codex app-server
providers/get-claude-usage        Ponte de cota e analytics local do Claude
providers/get-copilot-usage       Ponte de cota do GitHub Copilot
providers/get-antigravity-usage   Ponte de cota do Cloud Code Assist do Antigravity
providers/get-9router-analytics   Telemetria local detalhada do 9Router
providers/get-pi-analytics        Telemetria local detalhada de sessões do pi
providers/get-hermes-analytics    Telemetria local do estado do Hermes
providers/get-*-usage             Entrypoints canônicos de provedor único
scripts/package-release           Build e validação dos arquivos de release

Veja Arquitetura para o fluxo de runtime e o contrato normalizado de provedores.

Documentação

TópicoLink
Instalação e upgradesinstallation.md
Configuração e credenciaisconfiguration.md
Matriz de cobertura de provedoresproviders.md
Política de verificação de provedoresprovider-verification.md
Arquitetura e contrato de adaptadoresarchitecture.md
Solução de problemastroubleshooting.md
Internacionalização e Crowdini18n-crowdin.md
Checklist de releaserelease-checklist.md
ChangelogCHANGELOG.md

Colaboradores

Agradecemos a todos que melhoraram o plugin:

  • @emmsixx — corrigiu os comandos de diagnóstico em Settings que codificavam o casing do nome de exibição (AiOverviewControl) em vez do id de manifesto da loja de plugins do DMS (aiOverviewControl), de modo que os comandos copiados resolvam corretamente em sistemas de arquivos sensíveis a maiúsculas/minúsculas (#13).

Contribuições são bem-vindas — veja CONTRIBUTING.md.


Distribuído sob a Licença MIT.

Feito com ❤️ para a comunidade DankMaterialShell.