Skip to content

feat(i18n): migrar los paneles de suscripción a los catálogos ES/EN — T2c slice 2 C1b (#66) - #217

Merged
egdev6 merged 2 commits into
egdev6:mainfrom
danielgap:feat/i18n-t2c-c1b-panels
Oct 30, 2026
Merged

egdev6 merged 2 commits into
egdev6:mainfrom
danielgap:feat/i18n-t2c-c1b-panels

Conversation

@danielgap

Copy link
Copy Markdown
Contributor

Related issue / Issue relacionada

Refs #66

ODD: fase T2c, slice 2, C1b. Sigue a #216 (C1a, CliConnect y editor de cuentas). Reparto de C1 aprobado en issues/66#issuecomment-6509608432 y tu OK en #66.

Scope / Alcance

Los paneles por proveedor de suscripción pasan por los catálogos. Con es todo se ve igual que hoy.

  • Paneles de Claude, Codex, Gemini, Grok, Cursor, Copilot, MiniMax, z.ai y OpenCode Go (lo que pediste en feat(providers): provider OpenCode Go con cuotas 5 h/semana/ciclo (#187) #201): kicker, nota, pasos, Mostrar en el widget, campos con sus ayudas, etiquetas de SecretInput, aria-label de los pasos y los desplegables «Avanzado» (settings.providers.panels.*, 44 claves).
  • Reuso: las compartidas de C1a (showInWidget, apiKey, planLabel) y las de accountEditor.* cuyo texto es idéntico (usuario y plan de Copilot, token de solo lectura, createIn, apiKeyOf), en vez de duplicarlas. Si prefieres moverlas a claves compartidas de settings.providers.*, es un renombrado mecánico.
  • Paneles extraídos verbatim para testear por SSR (mismo JSX, solo los literales pasan a t()): SubscriptionPanel (Claude/Codex/Gemini/Grok), CursorPanel, CopilotPanel, MiniMaxPanel, ZaiPanel y OpenCodeGoPanel. Settings() les pasa un panel compartido con estado y handlers.
  • Nota 3 de feat(i18n): migrar el armazón de la página de Proveedores a los catálogos ES/EN — T2c slice 2 PR-B (#66) #204: tests de que aria-current/aria-expanded siguen el estado. En ProvidersCard, solo la tarjeta seleccionada con el panel abierto; ninguna con el panel cerrado. En SettingsNav, aria-current="page" solo en la sección activa y aria-expanded según el plegado. Forzando los valores fallan los 5.
  • Nota 4 de feat(i18n): migrar el armazón de la página de Proveedores a los catálogos ES/EN — T2c slice 2 PR-B (#66) #204: ProviderDrawerHead usa (entry) => y ya no tapa a t().
  • Texto con elementos dentro: frases partidas alrededor de <code>, <Link> y <b>, como en C1a. TU_USUARIO dentro de la ruta WSL de Claude es clave (YOUR_USER en en), por ser una palabra en español dentro de la ruta.
  • Quedan literales: marcas con plan (Claude (Pro / Max), ChatGPT (Plus / Pro · Codex), Gemini (Google AI Pro / Code Assist), Grok (SuperGrok)), marcas, rutas y variables de entorno, grok login, rótulos de terceros o ya en inglés (Gemini CLI, Subscription Key, API key PAYG, Base URL, z.ai › API Keys, OpenCode › Console) y los planes de Copilot con cifra.

Una errata del original: el paygHint de MiniMax dice «su fallo no lo degrade» y debería ser «degrada». La dejé verbatim por la regla de es idéntico; en en va bien. Si quieres, la corrijo aquí mismo.

Fuera de alcance:

Nota 2 de #204: con C1b, los placeholders en inglés de SecretInput ya no quedan dentro de paneles en español en los proveedores de suscripción. Quedan los de C2.

Tamaño: +993/−279. 434 líneas son el test nuevo (src/Settings-panels-i18n.test.tsx) y unas 200 son inventario y claves. Para revisar, el foco está en src/Settings.tsx: la extracción de los 6 paneles y el panel compartido de Settings().

Commits: 594eec0 (feat) y 4e7f3a5 (inventario regenerado), sobre main 2bd3e78.

Coordination / Coordinación

Contribuidor: @danielgap
Evidencia: asignación en #66 y anuncio de C1a/C1b.

Acceptance and validation / Aceptación y validación

  • Criterios cumplidos: paneles de suscripción, OpenCode Go incluido, por catálogo; es idéntico a hoy; en completo en esos paneles; notas 3 y 4 de feat(i18n): migrar el armazón de la página de Proveedores a los catálogos ES/EN — T2c slice 2 PR-B (#66) #204.
  • Comprobaciones ejecutadas (RED→GREEN):
    • npx vitest run --dir src: 785/785. 15 tests nuevos: 10 de paneles y 5 de aria-*. Con el código de main fallaban los 10 de paneles. Tras extraer los componentes sin migrar, los 5 de es ya pasaban (extracción verbatim) y fallaban los 5 de en.
    • npx tsc --noEmit: OK.
    • Suite completa node --test scripts/*.test.mjs scripts/security/*.test.mjs: 250 pasan.
    • node scripts/i18n-inventory.mjs --check: OK sobre 4e7f3a5.
  • Comprobaciones con fallos ambientales: 4 fallos EPERM de symlink en Windows (3 en setup-signing, 1 en provision-tools). Los mismos fallan en main.
  • Comprobaciones no ejecutadas: cargo test, porque la rama no toca Rust. El panel de Codex con el CLI ausente no se testea por SSR: pinta CodexInstall (C2), que usa useSyncExternalStore sin getServerSnapshot.
  • Prueba manual EN: hecha por el contribuidor en Windows sobre la rama (4e7f3a5, tauri dev), con OK. Siguen en español por plan los paneles de C2 y los textos de Rust (slice 3).
  • Bloqueos pendientes: ninguno.

… T2c slice 2 C1b (egdev6#66)

Claude, Codex, Gemini, Grok, Cursor, Copilot, MiniMax, z.ai y OpenCode Go pasan
sus textos a settings.providers.panels.* (44 claves; reusa las compartidas de
C1a). Paneles extraídos verbatim para SSR: SubscriptionPanel, CursorPanel,
CopilotPanel, MiniMaxPanel, ZaiPanel y OpenCodeGoPanel; con es todo se ve igual.
Tests de aria-current/aria-expanded en ProvidersCard y SettingsNav (nota 3 de
egdev6#204) y ProviderDrawerHead deja de tapar t() (nota 4).
Copilot AI balanced review requested due to automatic review settings October 29, 2026 23:14

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

@egdev6 egdev6 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@danielgap revisado: aprobada, sin bloqueos.

Contrastado:

  • es idéntico a main. Extraje mecánicamente los literales eliminados de Settings.tsx: los textos de interfaz están verbatim en es.ts, incluidos kickerOAuth, credentialsFile, authJsonFile y wsl/wslUser, con el punto de «. Para WSL:» fuera de la clave para que se vea igual. Lo demás queda literal, como dice el alcance: marcas con plan, rutas y variables de entorno, grok login, rótulos de terceros y los planes de Copilot con cifra.
  • Notas de #204:
    • Nota 3: los tests de aria-current y aria-expanded siguen el estado en ProvidersCard y SettingsNav.
    • Nota 4: ProviderDrawerHead usa (entry) =>.
  • OpenCode Go incluido, como pedí en #201. Antigravity se resolverá al rebasear #207, según lo acordado en #66.
  • En local, sobre 4e7f3a5: 785/785 en Vitest (10 casos nuevos de paneles), typecheck limpio e inventario en verde. Los cinco checks pasan en CI.

Sobre lo que preguntas:

  1. Errata de MiniMax: sí, corrígela en esta PR. «su fallo no lo degrada» es un error real y vale la excepción a la regla de es idéntico. Solo cambia es.ts y la aserción que lo cite. Regenera el inventario si hace falta.
  2. Claves reutilizadas de accountEditor.*: opcional y no bloquea. Prefiero moverlas a settings.providers.*, donde ya están las compartidas de C1a, para que cambiar un texto del editor de cuentas no cambie los paneles sin querer. Puede ir aquí o en C2, como te resulte más cómodo.

Adelante con C2 cuando quieras.

@egdev6
egdev6 merged commit e6fe8ae into egdev6:main Oct 30, 2026
5 checks passed
eichhorn-micaela added a commit to eichhorn-micaela/quorb that referenced this pull request Oct 30, 2026
…aneles

Mismo patrón que el resto de paneles migrados en C1b (egdev6#217): español verbatim con locale es e inglés sin restos de español con locale en.

Refs: coordinación C1b / egdev6#207
egdev6 pushed a commit that referenced this pull request Oct 30, 2026
…207)

* feat(providers): proveedor Antigravity con cuota por modelo del IDE

Antigravity no deja una sesión reutilizable en disco y su cuota es un
grupo propio, distinto del de Gemini CLI. El proveedor consulta el
servidor de lenguaje local que arranca el IDE (GetUserStatus, no
oficial): token CSRF desde la línea de comandos del proceso lanzado con
--app_data_dir antigravity y puerto HTTP desde language_server.log del
arranque actual (mismo pid). La petición va solo a 127.0.0.1 y el token
no se guarda.

Un medidor por modelo agrupando las variantes de esfuerzo (High/Medium/
Low), el más gastado primero; plan desde userTier.description. La
ventana (5 h o semanal) se deduce del tiempo hasta el reinicio. Con el
IDE cerrado el informe queda en Warning con instrucciones.

Config AntigravityConfig { enabled } (sin cuentas adicionales), pestaña
en Ajustes, tipos TS, visibilidad, dataKey, i18n, monograma AG y filas
en los README.

* chore(i18n): regenerar inventario con los textos de Antigravity

* fix(providers): deducir la ventana de Antigravity sin depender de un instante

Una cuota semanal a la que le quedan menos de 5 h para el reinicio se
clasificaba como ventana de 5 h, con ventana y ritmo incorrectos en sus
últimas horas.

Ahora la ventana sale de señales fiables: más de 5 h hasta el reinicio
solo puede ser semanal; un reinicio ya visto conserva la ventana deducida
entonces (memoria en proceso por medidor); un reinicio que cambió y cae
dentro de 5 h es una ventana de 5 h; y los modelos con el mismo
resetTime exacto comparten ventana. Sin ninguna señal, window_seconds
queda en None.

Tests del borde semanal con menos de 5 h, del aprendizaje de 5 h por
reinicio cambiado, del grupo y de reinicios lejanos o pasados.

Refs: feedback de review en #207

* docs(providers): Antigravity solo verificado en Windows y endpoint no documentado

Indica en los README y en la pestaña de Ajustes que por ahora solo se verificó en Windows, y añade Antigravity (GetUserStatus interno) al aviso de endpoints no documentados.

Refs: feedback de review en #207

* chore(i18n): regenerar inventario tras la nota de Windows de Antigravity

* chore(i18n): regenerar inventario tras integrar main

* test(settings): cubrir el panel de Antigravity en los tests i18n de paneles

Mismo patrón que el resto de paneles migrados en C1b (#217): español verbatim con locale es e inglés sin restos de español con locale en.

Refs: coordinación C1b / #207

* chore(i18n): regenerar inventario tras los tests del panel de Antigravity

* fix(providers): no deducir 5 h de Antigravity tras una pausa entre consultas

Un reinicio que cambia y cae dentro de 5 h solo demuestra una ventana de
5 h si la consulta anterior es reciente. Si el reinicio cambió, la
ventana nueva empezó después de esa consulta; una semanal acabaría al
menos 7 días después de ella y no podría quedarle ≤ 5 h antes de
7 días − 5 h. Ahora se guarda cuándo se vio cada reinicio y, tras una
pausa mayor (Antigravity cerrado), la transición es ambigua y queda en
None en vez de aprender 5 h.

Tests: el salto semanal tras una pausa (27 oct → 5 nov) del review y la
cota del intervalo a ambos lados del límite.

Refs: feedback de review en #207

* chore(i18n): regenerar inventario tras el ajuste de ventanas de Antigravity

* fix(providers): aislar la consulta local de Antigravity de proxies y del log de otros procesos

P1: la consulta usaba el cliente HTTP compartido, que respeta
HTTP_PROXY/ALL_PROXY; sin un NO_PROXY que excluya loopback, el token
X-Codeium-Csrf-Token llegaba al proxy aunque la URL fuese 127.0.0.1.
Ahora va con un cliente dedicado (local_client) con no_proxy(), sin
seguir redirecciones y con timeout propio.

P2: http_port buscaba «pid N» como subcadena (pid 123 coincidía con
pid 1234) y, si el bloque de ese pid no tenía puerto HTTP, seguía por
los arranques posteriores. Ahora compara el pid completo del marcador
de arranque y solo mira su bloque, hasta el siguiente «Starting…».

Regresiones (RED observado antes del arreglo): pid exacto, bloque
delimitado, proxy configurado que no recibe la consulta y redirección
que no se sigue, con servidores de prueba en loopback.

Refs: feedback de review en #207

* chore(i18n): regenerar inventario tras aislar la consulta de Antigravity
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.

3 participants