Monitor de CPU, RAM e assinaturas para o DeepSeek Harness
Plugin local dsh-plugin-system-monitor, versão 1.3.0. Mantém CPU e RAM na sidebar e adiciona as cotas das assinaturas à barra superior da conversa. Não modifica os pacotes internos do Harness e não abre outro servidor. É empacotado como bundle do Harness, então é instalável em qualquer perfil — inclusive o desktop, usado pelo app DeepSeek Harness Desktop.
Instalação
O pacote declara dsh.bundle.patch → cordis.patch.yml, e a camada referencia o plugin pelo nome (dsh-plugin-system-monitor), nunca por caminho de máquina. Instale no perfil que for usar:
- Na interface do Harness: sidebar → Plugins → Add plugin → caminho absoluto desta pasta.
- Pela linha de comando, no perfil escolhido:
dsh plugin --profile desktop add ~/Desktop/dsh-plugins/system-monitor.
Bundle é membro de composição, não camada de patch: incluir, remover ou atualizar bundle só passa a valer depois de reiniciar o perfil. Já edições no cordis.patch.yml do perfil entram por hot reload.
Para desenvolver sem instalar nada, insira o caminho absoluto do host half no cordis.patch.yml do perfil — sem pnpm, com recarga imediata, ao custo de embutir um caminho de máquina:
- insert:
- id: system-monitor
name: /Users/julioakamine/Desktop/dsh-plugins/system-monitor/lib/index.js
CPU e RAM na sidebar
- CPU: percentual médio de utilização de todos os núcleos lógicos, calculado pela diferença entre amostras dos contadores do sistema operacional.
- RAM: percentual ocupado e quantidade usada/total em GiB.
- Atualização a cada 3 segundos enquanto a aba estiver visível.
- Versão compacta com percentuais quando a sidebar estiver recolhida.
As métricas são da máquina que executa o Harness, não somente do navegador, do processo Node ou da sessão atual. A primeira leitura da CPU precisa de duas amostras e pode levar cerca de três segundos.
No macOS, a RAM ocupada segue a “Memória usada” do Monitor de Atividade: páginas anônimas dos apps, menos as purgeable, mais a memória presa no kernel e a ocupada pelo compressor. O cache de arquivos fica de fora. Se a leitura do vm_stat falhar, cai para os.totalmem() - os.freemem(). A conta também aparece na dica ao passar o mouse sobre o painel. GiB utiliza unidades de 1024³ bytes.
Assinaturas na barra superior
À direita do título da conversa, antes dos controles existentes, cada conta conectada ganha um botão com apenas o logo do provedor e o percentual usado. Contas diferentes do mesmo provedor têm botões separados: a identidade aparece ao passar o mouse e ao abrir os detalhes.
Ao clicar, um painel mostra:
- provedor, conta e plano, quando disponível;
- barra de consumo e percentual;
- janela selecionada: 5h, ou semanal se não houver a de 5h;
- tempo até a renovação e data/hora informadas pelo provedor;
- indicação de leitura antiga ou cota indisponível, quando aplicável.
Clique fora, pressione Esc ou use o botão de fechar para dispensar o painel. Os botões e o painel também funcionam por teclado. Em espaços estreitos, a lista de logos permite rolagem horizontal sem expandir a barra superior.
O cabeçalho de conversa do Harness fica oculto em sessões totalmente vazias; os indicadores aparecem junto com esse cabeçalho. CPU e RAM permanecem disponíveis na sidebar.
Regra de seleção e atualização
A integração reutiliza dsh-plugin-subscriptions 0.9.2, já instalado: chama os endpoints autenticados subscriptions-auth.status e subscriptions-auth.usage pela conexão do Harness. Não há novo login, leitura direta de tokens nem cópia dos adaptadores dos provedores.
- Usa uma janela normalizada
kind: session (5h), independentemente da ordem na resposta.
- Se não existir nenhuma, usa
kind: other como a faixa de 5h. É o caso do Antigravity, cuja cota rotativa é por modelo: o próprio badge do plugin Subscriptions trata essa faixa como a janela comum do provedor.
- Se também não houver, usa
kind: weekly.
- Prioriza a janela global da conta. Quando só existem limites por modelo, mostra o mais consumido e identifica esse modelo nos detalhes; não soma nem calcula a média de cotas independentes.
- Se não houver nenhuma janela compatível, o logo aparece com —, e o clique explica a indisponibilidade.
As cotas são consultadas a cada 30 segundos, reutilizando o cache e a proteção contra excesso de requisições do Subscriptions. Isso não força uma nova chamada aos provedores: a versão instalada usa um cache de aproximadamente 5 minutos, podendo manter a última leitura durante falhas ou períodos de espera. Por isso a tela pode repetir o mesmo percentual entre consultas — o dado não muda a cada 30 segundos como CPU/RAM, cuja amostragem é local.
Um único coletor atende todos os cabeçalhos da página, inclusive conversas lado a lado. As consultas param quando não há cabeçalho montado, a aba está oculta ou o navegador está offline.
Instalação nesta máquina
O plugin está registrado em /Users/julioakamine/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: system-monitor
name: /Users/julioakamine/Desktop/dsh-plugins/system-monitor/lib/index.js
Atualize a página já aberta em http://127.0.0.1:3080 para carregar a interface atualizada. Os arquivos em lib/ já são os artefatos prontos para o Harness; não há etapa de compilação nem dependências npm extras para instalar.
Não foi feita verificação da atualização no navegador. Se o processo mantiver um bundle antigo, reinicie a mesma instância do Harness quando for conveniente; não inicie outra instância na mesma porta.
O registro aponta para esta pasta: se mover ou excluir o plugin, atualize ou remova a entrada do perfil também. O plugin de assinaturas deve permanecer instalado e habilitado para fornecer as cotas; sua ausência não impede as leituras de CPU e RAM.
Arquivos
package.json: metadados e declaração do plugin Web.
lib/index.js: coleta de CPU/RAM e rota protegida GET /api/system-monitor.
lib/client.js: sidebar, indicadores no cabeçalho e painel de detalhes; React é compartilhado com o Harness.
THIRD-PARTY-NOTICES.md: licença e origem dos logos vetoriais de LobeHub Icons, incorporados localmente, sem chamadas a CDNs durante o uso.
Usa Node.js 22+ e os contratos de plugins presentes na instalação local do Harness 0.1.5.
Segurança e ciclo de vida
- As rotas reutilizam autenticação e verificações de Host/Origin do Harness.
- Este plugin não acessa credenciais nem consulta os provedores diretamente: o Subscriptions existente faz a consulta e mantém seu cache.
- Não há requisições de imagens a serviços externos; os logos são SVGs locais no bundle.
- Uma amostragem de CPU/RAM a cada 3 s no backend é compartilhada por todas as abas; as cotas são lidas a cada 30 s.
- Consultas não se sobrepõem; timers, requisições, estilos e registros são descartados ao remover o plugin.
- A exibição não anuncia cada atualização numérica aos leitores de tela e respeita a preferência de movimento reduzido.
Remover
Instalado como bundle: desligue na página Plugins ou rode dsh plugin --profile <perfil> remove dsh-plugin-system-monitor, e reinicie o perfil.
Inserido por patch (sem instalar): remova a entrada system-monitor do patch do perfil e atualize a página. Se ela for a única entrada, restaure o conteúdo do patch para [] (comentários podem permanecer). O plugin Subscriptions original não é alterado por esta integração.
Validação
Empacotamento validado no perfil desktop com DSH_HOME isolado: dsh plugin add ligou o pacote e acrescentou dsh-plugin-system-monitor à lista dsh.profile.bundles, e dsh --dump-config mostrou a camada # == dsh-plugin-system-monitor com a row system-monitor resolvida.
O comportamento do plugin (leitura, sidebar, cabeçalho, painel de cotas) não foi re-testado no navegador depois do empacotamento: o único arquivo de comportamento alterado seria lib/, que não mudou nesta revisão.