Skip to content

feat(providers): provider SuperGrok vía Grok CLI - #177

Merged
egdev6 merged 11 commits into
egdev6:mainfrom
barbatdev:feat/grok-provider-rebased
Oct 23, 2026
Merged

egdev6 merged 11 commits into
egdev6:mainfrom
barbatdev:feat/grok-provider-rebased

Conversation

@barbatdev

@barbatdev barbatdev commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Closes #173. Reemplaza a #174 (rebase limpio sobre main post-MiniMax #172, mismo contenido + compat Meter.id/CONFIG_KEY/dataKey).

Provider grok (Kind::Subscription) que monitorea el uso semanal de créditos de la suscripción SuperGrok reutilizando la sesión del Grok CLI oficial (~/.grok/auth.json, patrón de codex.rs).

  • Backend: providers/grok.rs (billing cli-chat-proxy.grok.com/v1/billing?format=credits, header x-xai-token-auth, parse tolerante de creditUsagePercent con fallback on-demand, reset por currentPeriod.end, plan opcional por /v1/settings), config grok + GROK_HOME, wiring en mod.rs/login.rs.
  • Frontend: pestaña Grok en Ajustes, CONFIG_KEY, logo (marca actual), SESSION_DIR, widget-refresh, enlace de uso.
  • Verificación: cargo 265 ok (fixtures deterministas sin red) · vitest 669 ok · tsc ok · revisión nativa aprobada y consumida (lineage review-8a852e8352035f29) · probado en vivo con una suscripción SuperGrok real (anillo 9%, plan "SuperGrok", toggle y logo).

Nota: endpoint no oficial; el provider degrada con mensaje claro si el formato cambia. Fuera de alcance: caps de chat de grok.com/X y créditos de developer platform (pools separados).

- providers/grok.rs: auth.json (OIDC entries, key field, GROK_HOME),
  billing endpoint /v1/billing?format=credits with creditUsagePercent,
  legacy on-demand ratio fallback, period window and resets_at parsing,
  optional plan via /v1/settings; defensive degradation (issue egdev6#173)
- config: grok SubscriptionConfig (disabled by default), sanitize,
  session env GROK_HOME and per-account auth.json
- wiring in providers/mod.rs: fetch_all, fetch_one, session_file,
  session_stamp, extra accounts
- deterministic tests with JSON fixtures (no network)
- Settings: pestaña grok (PROVIDER_TABS, mainState, sección OAuth con
  hint de auth.json y %GROK_HOME%), loginCommand por cuenta
- types/accounts/widget-refresh/order: campo grok, AccountProvider,
  SESSION_DIR GROK_HOME, refresco del widget y enlace de uso oficial
- login.rs: detección del CLI grok y login por cuenta
- test de session_file para cuenta adicional de grok (issue egdev6#173)
- settings-visibility: grok faltaba en CONFIG_KEY, el toggle «Mostrar en
  el widget» descartaba el cambio en silencio
- assets: logo de Grok (sin texto, currentColor) y fila en el catálogo
  de logos (issue egdev6#173)
Reemplaza el logo de 2023 (barra diagonal) por la marca vigente desde
feb 2025 (dos trazos curvos), extraída de Wikimedia Commons y adaptada
a currentColor (issue egdev6#173).
@egdev6

egdev6 commented Oct 23, 2026

Copy link
Copy Markdown
Owner

@barbatdev revisado el rebaso completo sobre main post-MiniMax — listo para merge, no queda ningún bloqueante de las dos reviews anteriores. 🎉

Lo que has arreglado en el camino

✅ Verificación reproducida (head 7bef5a6)

Check Resultado
cargo test --locked 265 passed — los 9 de grok en verde
cargo clippy --all-targets 0 avisos en grok
vitest run --dir src 669 passed
tsc --noEmit Limpio
i18n-inventory --check ✅

Y probado en vivo con suscripción SuperGrok real (anillo 9%, plan "SuperGrok"). El trabajo de prueba en vivo que hiciste en #174 (el bug de CONFIG_KEY, el logo desactualizado) es exactamente el tipo de verificación que hace buenos los providers.

Gracias por la paciencia con las dos rondas de review — el resultado quedó mucho mejor que el primer diff. Un besito, ¡buen trabajo! 😄

🟡 Menores (no bloquean — sin issue, quedan anotados aquí)

  1. Conteos de la descripción: «cargo 264» → 265, y «vitest 221» → 669 (parece typo). Conviene corregirlos para no confundir la auditoría futura.
  2. S5 de la spec (odd/tasks/grok-provider.md) dice degradar con Status::Error; el código usa Warning — alinear spec o código en la próxima pasada.
  3. Código muerto pequeño: Parsed.plan_hint siempre es None y parse recibe _now sin usar.
  4. Token caducado: se envía esperando 401 → NeedsLogin; funciona y está testeado, solo depende del comportamiento del endpoint.

Ninguno merece issue: si hace otro push, mete el 1 y el 2; el 3 y el 4 pueden esperar a una pasada de limpieza del módulo.

@egdev6
egdev6 merged commit a6eef22 into egdev6:main Oct 23, 2026
5 checks passed
@barbatdev
barbatdev deleted the feat/grok-provider-rebased branch October 23, 2026 19:25
egdev6 pushed a commit that referenced this pull request Oct 23, 2026
Review del maintainer en #177 señaló que la spec pedía Status::Error
pero la implementación degrada con Warning (como codex.rs). Se alinea
la spec con el código.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(providers): anillo de uso semanal de SuperGrok vía Grok CLI

2 participants