Commits
ai-usage, dia 2: les tres files funcionals i repo a punt per obrir
Codex, MiniMax i z.ai de punta a punta amb dades reals, layout adaptable, JSON normalitzat, mode --watch i auditoria de secrets abans de publicar.
Ahir va ser el dia de construir: vuit entrades al registre, i el widget va passar de ser una espec a tenir les tres files dels proveïdors funcionals amb dades reals. Vaig tancar el dia amb el repositori a punt per obrir al públic.
Purga del codi heretat
El repositori arrossegava el codi llavor de Claude, Gemini i Antigravity del projecte original, més la maquinària d'i18n que el widget nou no fa servir. Tall net: sense funcions sense fer servir, sense àlies ni reexportacions. La llista queda en Codex, MiniMax i z.ai, i el llinatge amb fuelcheck queda documentat al README i a la nota d'arquitectura — no en codi mort.
Les tres files, de punta a punta
Primera fila visible: el traductor de Codex converteix la seva resposta en finestres canòniques (curta i setmanal) i el renderitzador la pinta amb semàfor, consum, compte enrere i bolites. La prova és de cadena exacta contra el renderitzador, la costura principal de l'espec, i es va comprovar amb les credencials reals de la màquina.
MiniMax i z.ai van entrar per la mateixa costura. MiniMax entrega el percentatge restant per model: es normalitza a consumit i es col·lapsa a la finestra de pitjor consum amb el reinici més pròxim. z.ai codifica finestres amb parells unit/number i la clau sense el prefix Bearer; els reinicis arriben en mil·lisegons i es guarden com a instants UTC. Amb això, les tres files del widget es llegeixen amb el mateix idioma.
Layout, JSON i configuració
La línia horitzontal de tres proveïdors ronda els 96 caràcters: en un panell estret no hi cap. El layout ara tria vertical quan la línia completa no cap a l'amplada real del terminal — per encaix, no per proporcions — i un flag permet forçar qualsevol de les dues variants. El JSON també va canviar de filosofia: abans retornava els payloads crus de cada API i un script s'havia d'aprendre tres esquemes; ara hi ha un model de domini amb ok, windows i error, i de pas es van tancar dues fugues (missatges d'error que arrossegaven dades de la resposta, i un reinici de l'any 10000 que trencava la serialització). I la configuració: només es consulten els proveïdors declarats a ~/.config/ai-usage/config.json, amb prioritat de la clau escrita sobre l'autodetectada.
Mode watch i els revisors caiguts
--watch deixa el widget fix en un panell de tmux amb interval configurable, i surt net amb Ctrl-C: espera que acabi la consulta en curs per no tallar una renovació de credencials a mig escriure. Vaig posar-hi la prova del semàfor gris (error, sense quota i il·limitat, codi 90) i aquí va passar l'anècdota del dia: els dos revisors subagents van caure a l'instant amb usage_limit_reached. L'eina que vigila les quotes, tombada per una quota. La revisió la vaig fer jo en línia, i va valer la pena: del repàs va sortir renombrar la prova, que deia "ErrorAndNoQuota" però també cobria la fila il·limitada.
Abans d'obrir al públic
Vaig tancar el dia amb una auditoria de secrets sobre l'arbre i els 28 commits: les credencials viuen fora del repo i l'únic literal amb forma de token és un JWT fals de prova. Sí que hi havia un artefacte inapropiat: un binari compilat d'11 MB versionat a l'arrel, que vaig retirar del control de versions i vaig afegir al .gitignore. El binari segueix assolible en commits antics; si es vol una història neta del tot, quedaria reescriure-la amb git filter-repo abans de fer públic el repo.