Skip to content

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

Closed
barbatdev wants to merge 7 commits into
egdev6:mainfrom
barbatdev:feat/grok-provider
Closed

barbatdev wants to merge 7 commits into
egdev6:mainfrom
barbatdev:feat/grok-provider

Conversation

@barbatdev

Copy link
Copy Markdown
Contributor

Closes #173

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. Sigue el patrón de codex.rs/claude.rs (credenciales de sesión CLI, no API keys).

Backend

  • providers/grok.rs: lee ~/.grok/auth.json (entradas OIDC https://auth.x.ai::<id> con campo key, fallback al legado, respeta GROK_HOME y credentials_path) y consulta cli-chat-proxy.grok.com/v1/billing?format=credits con el header x-xai-token-auth: xai-grok-cli.
  • Parseo tolerante: config.creditUsagePercent (porcentaje usado), fallback al ratio on-demand; reset desde config.currentPeriod.end y luego billingPeriodEnd; ventana desde start/end, con semanal por defecto. Período activo sin porcentaje = uso desconocido, no 0%.
  • Plan opcional por /v1/settings → subscription_tier_display. Errores 401/403 → NeedsLogin.
  • config.rs: grok: SubscriptionConfig (desactivado por defecto), sanitize, GROK_HOME, auth.json por cuenta adicional.
  • Wiring en providers/mod.rs (fetch_all, fetch_one, session_file, session_stamp) y login.rs (detección y login del CLI).

Frontend

  • Pestaña "Grok" en Ajustes (grupo suscripciones) con hint de auth.json y %GROK_HOME%.
  • Logo: marca actual de Grok (feb 2025+) en src/assets/logos/grok.svg, currentColor.
  • settings-visibility: grok en CONFIG_KEY (sin esto, el toggle «Mostrar en el widget» descartaba el cambio en silencio).
  • types, accounts, widget-refresh, order.

Verificación

  • cargo test 236 ok (9 nuevos, fixtures deterministas sin red) · vitest 604 ok · tsc limpio · vite build ok · clippy sin avisos.
  • Probado en vivo contra una suscripción SuperGrok real: billing HTTP 200 (creditUsagePercent: 9.0, ventana semanal) y settings HTTP 200 ("SuperGrok").

Notas

  • Superficie no oficial: si xAI cambia el formato, el provider degrada con mensaje claro (no rompe).
  • Fuera de alcance (pools separados): caps de chat de grok.com/X y créditos de developer platform (Management API).

Point macOS users to a Developer ID-signed, notarized community build
hosted in a contributor fork (built from upstream source). Explicitly
non-official: not produced or endorsed by this repository. Official
macOS policy remains unchanged.
- 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 22, 2026

Copy link
Copy Markdown
Owner

@barbatdev he revisado la PR completa y reproducido la verificación en local. En general muy buen trabajo — hay un cambio requerido antes del merge.

✅ Verificación reproducida

Check Resultado
cargo test 234 passed, 0 failed — los 9 tests nuevos de grok pasan
vitest run --dir src 604 passed (con el comando real del proyecto)
tsc --noEmit Limpio
vite build OK
cargo clippy Sin avisos en código de grok (los avisos existentes son pre-existentes en otros módulos)

🔴 Bloqueante: borrado no relacionado de .agents/skills/odd-contribute/

El commit 72c7e85 (frontend) elimina 3 ficheros de la skill (.agents/skills/odd-contribute/{SKILL.md, references/validation-cases.md, references/workflow.md}, −119 líneas), que no tienen nada que ver con Grok. Además:

  • CONTRIBUTING.md (líneas 66–68 y 207–209, en inglés y español) sigue enlazando a esos ficheros → enlaces rotos en la documentación.
  • El propio log ODD (L4) dice "se sacó del commit el directorio .agents/ no relacionado (amend)" — pero el borrado sigue en el PR, así que el amend no llegó a aplicarse o se reintrodujo.

Petición: restaura esos 3 ficheros (revert del borrado) antes del merge.

🟡 Menores (no bloquean)

  1. Desviación de S5: la spec en odd/tasks/grok-provider.md dice degradar con Status::Error; el código usa Status::Warning para "uso desconocido". Warning es razonable, pero conviene alinear spec o código.
  2. Código muerto pequeño: Parsed.plan_hint siempre es None (el plan real viene de plan() directamente) y parse recibe un _now sin usar.
  3. Conteo de tests: la descripción dice 236; observo 234 + 1 ignored. Trivial.
  4. Token caducado: si todas las entradas están caducadas, se envía igualmente esperando un 401 → NeedsLogin. Funciona y está documentado en test, pero depende de que el endpoint responda 401 y no otra cosa. Aceptable.

👍 Puntos fuertes

  • Patrón seguido al completo: wiring en fetch_all, fetch_one, session_file, session_stamp y fetch_account + test de cuenta adicional — nada olvidado.
  • Migración de config segura: AppConfig tiene #[serde(default)], así que configs antiguas sin grok cargan con el provider desactivado.
  • Parseo tolerante bien pensado: período activo sin porcentaje → uso desconocido (no 0%); fallbacks en cascada.
  • Bug real detectado y corregido: grok faltaba en CONFIG_KEY de settings-visibility.ts — buen trabajo de prueba en vivo.
  • Logo actual con currentColor y resolución por id funciona sin cambios en ProviderLogo.tsx.

Veredicto: apruébalo con el cambio requerido — restaurar .agents/skills/odd-contribute/. El resto son nits.

@barbatdev

Copy link
Copy Markdown
Contributor Author

Sustituido por #177: rama rebased limpiamente sobre main (sin el commit docs(macos) arrastrado) con la compatibilidad post-MiniMax. Cerrado en favor de #177.

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