Releases: aronpc/ai-traffic-lights
Releases · aronpc/ai-traffic-lights
Release list
v0.7.1 — auto-download de atualizações (AppImage)
Changed
- Auto-download de atualizações (AppImage). O
electron-updateragora baixa a
nova versão automaticamente em segundo plano assim que a detecta
(autoDownload = true) — antes ficava aguardando o usuário clicar em "↓". O
indicador mostra o progresso (%) e, ao concluir, "↻ reiniciar" (1 clique para
instalar; ou instala sozinho no próximo encerramento, viaautoInstallOnAppQuit).
Fixed
- Log do erro quando o
electron-updaternão carrega. Ocatchsilencioso em
setupAutoUpdateragora registra o motivo ([auto-update] require electron-updater falhou: ...). Antes, o bug de empacotamento da v0.6.8 (módulo ausente do
app.asar) era invisível e a app caía no fallback "abrir release" sem nenhuma
pista. A v0.7.0+ já empacota o módulo corretamente.
v0.7.0 — macOS install support + Claude lazy fetch
Added
- Suporte a macOS (Apple Silicon). O app agora detecta sessões de agentes de IA
no macOS (sem/proc): usaps/osascriptpara listar processos e seus
argumentos/ambiente, e AppleScript (System Events) para focar a aba do
terminal. Lançamento de agentes em Terminal.app, Ghostty e Warp (URL
schemewarp://launch/...), com scan de launchers em/Applicationse
~/Applications. Tudo guardado porprocess.platform === 'darwin'— em Linux o
fluxo via/procexistente permanece idêntico. (PR #30, Brayann Barbosa) - Installer dedicado para macOS (
install_macos.sh), espelho doinstall.sh
Linux. Build publicadmg+zip(arm64) no electron-builder. - Terminais adicionais suportados e entrypoint padronizado de agentes de IA
na documentação — hooks de shell compatíveis com macOS e Linux, com parsing robusto
do nome do processo.
Changed
- Consumo do Claude agora é lazy (coleta sob demanda). O loop de fundo (60s)
deixou de bater na API/api/oauth/usagedo Claude — a chamada só acontece quando
você vai olhar o uso: ao abrir/expandir o overlay, ao revelar a janela
(tray/atalho), no botão ⟳ e no boot (1 chamada). Essa API divide um limite
agregado com o/statusdo próprio Claude Code, então consultá-la a cada 60 s
alimentava o 429 e a barra de % do Claude sumia. Agora o app fica fora desse
balde na maior parte do tempo; entre gatilhos, mostra o último % conhecido (ou o
plano-só, sem inventar número). O cache de 5 min evita repetir a chamada a cada
abrir/fechar. GLM/Codex/Antigravity seguem no loop normal (não sofrem esse limite).
(PR #29) - Idioma base da documentação/comentários: PT-BR → EN (PR #30).
Fixed
- Erro de sintaxe na configuração do build target do
package.jsoncorrigido
(PR #30). - Build Linux quebrava com o bloco
macadicionado no PR #30: oarch: ["arm64"]
dentro demacfazia o electron-builder 26.x rejeitar o schema
(configuration.mac should be one of these: null) e onpm run distfalhava — o
CI não pegava porque só rodanpm test, não o build. Removido oarchdo config;
o arch do build macOS passa a ser o do host (ou via CLI--arch arm64). saveBounds()não roda mais no macOS (bounds não se aplicam do mesmo modo).
v0.6.8 — consumo do Claude (Team/429/overage) + botão force ⟳
Destaques
O foco desta versão foi o consumo/uso do Claude no overlay, que havia parado de aparecer em contas Team, e novas funcionalidades ao redor disso.
✨ Novidades
- Botão "atualizar uso agora" (⟳) no header do overlay — força a recoleta na hora. Seguro: respeita o cooldown do rate limit (fica apagado com tooltip "aguarde Xmin" e não bate na API durante o 429).
- Tile "Extra" (overage) — para contas com crédito extra medido em dinheiro (
extra_usage), mostra o % e o valor gasto/limite (ex.:$50.4/$50.0), respeitando moeda e casas decimais.
🔧 Correções
- Consumo do Claude sumia do overlay em contas não-Max (Team, tier
default_raven): o plano não era reconhecido e o tile desaparecia. Agora o plano é resolvido pelas credenciais (tier realdefault_claude_max_5x), com fallback para Team/Pro/Enterprise. - Rate limit (429) travava o
%: o app rebatia na mesma janela e re-escalava a punição. Agora há cooldown persistido + backoff exponencial (Retry-After × 1.5^fails, teto 1 h) + cache de 5 min — o endpoint é compartilhado com o próprio Claude Code, então bater de volta só piorava. - GLM/z.ai mensal aparecia 2×: a mesma conta chegando por 2 credenciais com
resetAtdiferindo ~1 ms não colapsava. A dedup agora normaliza oresetAtpara segundos.
⚙️ Também
- Overlay caía para trás ao clicar fora no Mutter/XWayland — reafirma
alwaysOnTopnoblur(contribuição de @gabrielscordeiro, #28).
Testes: 188 passando. Instalação: veja o install.sh no README ou baixe a AppImage/.deb abaixo.
v0.6.7 — Wayland alwaysOnTop (XWayland) + ícone dock
🐛 Fixed
- Overlay ficava atrás das janelas no Wayland. O GNOME/Wayland nativo ignora
alwaysOnTop(restrição do protocolo). Agora o app roda em XWayland (--ozone-platform=x11): em X11 puro é no-op; em Wayland cai em XWayland, ondeabovefunciona. (em X11 validado que continua igual —ABOVEpresente, sem regressão) - Raise explícito no toggle/reveal (
win.moveTop()ao mostrar) — robustez ondealwaysOnToposcila. - Ícone no dock em alguns DEs — o
install.shagora instala o ícone hicolor em 256 e 512 (alguns procuram 256 antes).
AppImages já instaladas se auto-atualizam pra esta versão.
v0.6.6 — revelar overlay + install.sh
✨ Added
- "Trazer à frente quando oculto" (aba Notificações das Preferências) — checkboxes que fazem o overlay voltar à tela (sem roubar foco) quando oculto, disparado por: agente vermelho, cota resetada, ou nova versão disponível.
install.sh— instala o latest da AppImage numa linha:curl -fsSL https://raw.githubusercontent.com/aronpc/ai-traffic-lights/main/install.sh | bash(ícone +.desktop+--uninstall).
🔧 Changed
- Aba Notificações compactada (checkboxes em 2 colunas) + altura da janela 770px pra não rolar.
- READMEs: instalação AppImage agora usa o
install.sh; removido o hardcode de versão (v0.6.0).
AppImages já instaladas se auto-atualizam pra esta versão ("↓ vX" → "↻ reiniciar").
v0.6.5 — auto-update via AppImage (fix)
🐛 Fixed
- Auto-update via AppImage finalmente funciona. Nunca tinha chegado a funcionar por dois motivos:
electron-updaterestava emdevDependencies→ o electron-builder não o empacota →MODULE_NOT_FOUNDna AppImage → autoUpdater ficavanull→ sempre caía em "abrir release". Movido paradependencies.detectInstallMethodsó checavaprocess.env.APPIMAGE, que o Electron 43 perde no re-exec do sandbox → nunca detectava a AppImage. Agora detecta também peloexecPath(/tmp/.mount_<nome>) e recupera o caminho do.AppImage(cascata: env → execPath →Exec=do.desktop→ busca), re-exportando emprocess.env.APPIMAGE.
A partir desta versão, AppImages detectam updates no boot + a cada 1h, e o botão "↓ vX" aparece (baixa) → "↻ reiniciar" instala de verdade.
v0.6.4 — z.ai fix + app icon
🐛 Fixed
- GLM/z.ai aparecia duplicado. A mesma conta z.ai podia chegar canônica (1 conta →
glm-month, planGLM Pro) e sufixada (multi-conta →glm-month:hash, planGLM Pro (z.ai)) conforme o nº de contas oscilava entre ticks. Como o plan diferia, a chave de dedup não colapsava → coexistiam → "z.ai 2×" (até 4 linhas: 2× Mês + 2× 5h). Agora o label de provedor é normalizado na dedup → 1 linha por janela.
✨ Added
- Ícone do app. Overlay + Preferências agora definem
icon(build/icon.png, 512px) e o ícone passou a ser empacotado na AppImage/deb. Junto ao.desktop(Icon=+StartupWMClasscasando o WM_CLASS real), resolve o "app sem ícone" no dock/menu/alt-tab.
Atualização automática disponível via AppImage (electron-updater) — clique em "Verificar atualizações" no tray.
v0.6.3
Fixed
- Overlay and Preferences no longer render transparent (invisible) in the AppImage.
--disable-dev-shm-usagewas being added viaappendSwitchinmain.js, which runs AFTER Chromium already initialized its sandbox and shared-memory — too late. Without shared memory, compositing failed and the windows stayed fully transparent (only the tray showed). Moved tobuild.linux.executableArgs(andscripts.start) so it reaches Chromium on the command line before initialization, like--no-sandbox.
v0.6.2
Fixed
- Usage label now always shows "Provider(Plan) window". The 2nd line of the same plan (e.g. the GLM z.ai "Tokens" limit) used to appear without its provider, looking like a different agent. Each line is now autonomous and always renders
Provider(Plan)+ the clean window —Claude(Max 5×) 5h,z.ai(Pro) Mês,Codex(Plus) 7d.
v0.6.1
Fixed
- detectReset: falso-positivo ao estender o resetAt. Se a API avançava o
resetAtpara um horário futuro antes do tempo (extensão de janela) enquanto a cota seguia esgotada, o aviso de "cota resetou" disparava sem ter resetado de verdade. A transição agora exige que o relógio passe do reset anterior (now >= resetAt). - detectReset: duplicata de id não duplica o aviso. Duas entradas com o mesmo
idnuma coleta poderiam disparar duas notificações; agora há dedupe por id dentro do tick.