usage-panel-opencode 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -2
- package/dist/tui.js +960 -0
- package/package.json +59 -4
- package/src/config.ts +62 -0
- package/src/core/account.ts +74 -0
- package/src/core/backoff.ts +32 -0
- package/src/core/claims.ts +49 -0
- package/src/core/redact.ts +151 -0
- package/src/core/snapshot.ts +276 -0
- package/src/core/state.ts +42 -0
- package/src/core/usage-client.ts +168 -0
- package/src/core/usage-headers.ts +32 -0
- package/src/core/windows.ts +102 -0
- package/src/index.ts +761 -0
- package/src/rpc.ts +313 -0
- package/src/tui.tsx +158 -0
- package/src/ui/detail.tsx +253 -0
- package/src/ui/format.ts +13 -0
- package/src/ui/sidebar.tsx +228 -0
- package/src/ui/theme.ts +20 -0
package/README.md
CHANGED
|
@@ -1,3 +1,71 @@
|
|
|
1
|
-
#
|
|
1
|
+
# usage-panel-opencode
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Plugin para OpenCode v2 que muestra el consumo de las ventanas de cuota de una suscripción ChatGPT. Requiere Bun ≥ 1.2 y OpenCode v2; una cuenta con suscripción conectada mediante `/connect` → OpenAI → **Sign in with ChatGPT**.
|
|
4
|
+
|
|
5
|
+
## Instalación y carga
|
|
6
|
+
|
|
7
|
+
Instala las dependencias (`bun install`). Para una instalación publicada, añade el paquete y sus opciones a `opencode.jsonc` del proyecto o a la configuración de usuario:
|
|
8
|
+
|
|
9
|
+
```jsonc
|
|
10
|
+
{
|
|
11
|
+
"$schema": "https://opencode.ai/config.json",
|
|
12
|
+
"plugins": [
|
|
13
|
+
{
|
|
14
|
+
"package": "usage-panel-opencode",
|
|
15
|
+
"options": {
|
|
16
|
+
"enabled": true,
|
|
17
|
+
"intervalSeconds": 60,
|
|
18
|
+
"visible": true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Para desarrollo en este repositorio, ejecuta `bun run build` y usa `"plugins": ["./"]`; vuelve a ejecutar el build tras cambiar el TUI. El paquete incluye piezas separadas de servidor y TUI. `prepack` compila el TUI con el transform de Solid antes de publicar, sin depender del `bunfig.toml` de la aplicación consumidora.
|
|
26
|
+
|
|
27
|
+
## Preferencias
|
|
28
|
+
|
|
29
|
+
- `enabled` (`true`): desactiva consultas, eventos e indicador al establecerlo en `false`.
|
|
30
|
+
- `intervalSeconds` (`60`): intervalo de sondeo; los valores menores se normalizan a 60 segundos.
|
|
31
|
+
- `visible` (`true`): oculta el indicador sin desactivar las lecturas.
|
|
32
|
+
|
|
33
|
+
Las preferencias se guardan en el almacenamiento del plugin. El consumo no se persiste. El RPC `openai-usage` ofrece `snapshot`, `refresh`, `setPreferences`, `start` y `stop`; `start`, `stop`, `snapshot` y `refresh` reciben el identificador de la instancia TUI. El indicador abre el detalle; la paleta ofrece detalle y actualización, con comandos `/usage-detail` (alias `/openai-usage-detail`) y `/usage-refresh` (alias `/openai-usage-refresh`).
|
|
34
|
+
|
|
35
|
+
Las opciones del bloque `options` son valores iniciales; una preferencia guardada por `setPreferences` tiene precedencia y sobrevive al reinicio. No hay un comando de ajustes integrado en la paleta. Para cambiar preferencias en ejecución, un plugin TUI auxiliar puede invocar el RPC compartido:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { Usage } from 'usage-panel-opencode/rpc'
|
|
39
|
+
|
|
40
|
+
const usage = context.client.rpc(Usage)
|
|
41
|
+
const location = context.location ?? context.data.location.default()
|
|
42
|
+
const rpcOptions = { location }
|
|
43
|
+
|
|
44
|
+
// Cambiar intervalo y ocultar el indicador; las consultas siguen activas.
|
|
45
|
+
await usage.setPreferences({ intervalSeconds: 180, visible: false }, rpcOptions)
|
|
46
|
+
|
|
47
|
+
// Reactivarlo después, incluso si la preferencia enabled quedó en false.
|
|
48
|
+
await usage.setPreferences({ enabled: true, visible: true }, rpcOptions)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Después de la llamada, el servidor devuelve y emite el estado actualizado. Para verificar la instalación, reinicia OpenCode, confirma que `/usage-detail` aparece en la paleta, abre el detalle y revisa que las preferencias indicadas se reflejen en el estado RPC. Si se cambia la configuración estática, elimina o actualiza primero las preferencias guardadas desde el RPC; estas prevalecen deliberadamente sobre `options`.
|
|
52
|
+
|
|
53
|
+
## Privacidad y fuentes
|
|
54
|
+
|
|
55
|
+
El servidor consulta únicamente `https://chatgpt.com/backend-api/wham/usage` con el OAuth activo, o utiliza porcentajes de cabeceras `x-codex-*` de respuestas OpenAI solo cuando puede correlacionarlas con la misma petición y cuenta activa. Si no puede demostrar esa asociación, las descarta. No lee la cabecera Authorization, no registra credenciales y enmascara identificadores. No se recopilan conversaciones, créditos ni límites por modelo. No se hacen peticiones de sondeo cuando el plugin está desactivado.
|
|
56
|
+
|
|
57
|
+
El alcance de los porcentajes (entre clientes o personal frente a organizativo) no está verificado para cada fuente y cuenta; el detalle lo declara como desconocido. Las cabeceras no proporcionan hora de reinicio, por lo que se muestra «no disponible». El servicio puede informar resets, pero su formato y disponibilidad dependen del proveedor. La respuesta del endpoint es un contrato observado, no una API pública garantizada.
|
|
58
|
+
|
|
59
|
+
## Resolución de problemas
|
|
60
|
+
|
|
61
|
+
- **Sin datos / conexión de API key:** se muestran cuotas de suscripción solo para OAuth de ChatGPT; una API key no equivale a una suscripción.
|
|
62
|
+
- **Requiere autenticación:** vuelve a conectar OpenAI desde `/connect`.
|
|
63
|
+
- **Error temporal o límite 429:** se conserva la última lectura si existe y se aplica espera; los intentos respetan un mínimo de 60 segundos.
|
|
64
|
+
- **Datos parciales:** comprueba el origen en detalle. La fuente de cabeceras puede carecer de plan, alguna ventana o reset.
|
|
65
|
+
- **Desactivar:** establece `enabled: false` o quita el plugin de la configuración.
|
|
66
|
+
|
|
67
|
+
El slot público de la barra lateral no informa de sus dimensiones. Para evitar expandirlo o desplazar contenido, el indicador usa un presupuesto conservador de hasta 28 columnas y reserva espacio para el contenido existente. Se oculta si no cabe el bloque completo: el estado normal requiere al menos 12 filas y un fallo inicial con acción y reintento puede requerir hasta 18; el ancho mínimo efectivo es 78 columnas. La vista compacta solo muestra 5 h y semanal; otras ventanas siguen disponibles en el detalle.
|
|
68
|
+
|
|
69
|
+
## Desarrollo y dependencias
|
|
70
|
+
|
|
71
|
+
Ejecuta `bun test`, `bunx tsc --noEmit`, `bunx biome check .` y `bun audit`. `bunfig.toml` carga el transform Solid de OpenTUI tanto en ejecución como en pruebas; la suite de aceptación renderiza el componente real con el renderer de prueba de OpenTUI. Actualiza dependencias deliberadamente: revisa cambios mayores, ejecuta todas las verificaciones y confirma compatibilidad con OpenCode v2 antes de integrar.
|