docs: add localized documentation pages

Adds translated docs for Spanish, Korean, Polish, Portuguese, Ukrainian, and Chinese
Covers install, quickstart, themes, troubleshooting, tunnels, and reverse proxy guides
Updates docs workflow, sidebar, and contributor documentation
This commit is contained in:
Bohdan Triapitsyn
2026-05-23 00:33:39 +03:00
parent 82633d97f5
commit 6f4e0068c1
47 changed files with 3638 additions and 17 deletions
+25
View File
@@ -0,0 +1,25 @@
---
title: Documentación de OpenChamber
description: Guía de configuración y uso de OpenChamber en web, escritorio y VS Code.
---
# Documentación de OpenChamber
OpenChamber es el espacio de trabajo visual en torno a OpenCode.
Usa esta documentación para:
- instalar la plataforma adecuada para tu flujo de trabajo
- exponer OpenChamber de forma segura para uso remoto
- personalizar la apariencia y resolver problemas comunes
## Lee esto primero
- [Instalación](/es/install/)
- [Inicio rápido](/es/quickstart/)
- [Túneles](/es/tunnels/)
- [Resolución de problemas](/es/troubleshooting/)
## Para qué sirve OpenChamber
OpenChamber está pensado para las partes de la programación con IA que se benefician de un centro de control: ramificar sesiones, revisar diffs, gestionar terminales, observar el progreso de las herramientas, ejecutar acciones de proyecto y mantener todo el panel a la vista mientras el agente trabaja.
+33
View File
@@ -0,0 +1,33 @@
---
title: Instalación
description: Instala OpenChamber para escritorio, web o VS Code.
---
# Instalación
OpenChamber tiene tres plataformas principales:
- app de escritorio para macOS
- app web alojada por la CLI con PWA instalable
- extensión para VS Code
## Requisito previo
Instala [OpenCode](https://opencode.ai) primero.
## Web + PWA
```bash
curl -fsSL https://raw.githubusercontent.com/openchamber/openchamber/main/scripts/install.sh | bash
openchamber --ui-password be-creative-here
```
Luego abre la URL que imprime la CLI (normalmente `http://localhost:3000`).
## Escritorio
Descarga la última compilación de escritorio desde la página de releases de GitHub o la página de descargas de OpenChamber.
## VS Code
Instálala desde el VS Code Marketplace e inicia sesión con tu flujo de trabajo habitual de OpenCode.
@@ -0,0 +1,22 @@
---
title: Inicio rápido
description: Inicia OpenChamber rápidamente y elige la plataforma adecuada para la tarea.
---
# Inicio rápido
## La vía más rápida
1. Instala OpenCode.
2. Instala la CLI de OpenChamber.
3. Ejecuta `openchamber --ui-password be-creative-here`.
4. Abre la UI web en tu máquina.
5. Si lo necesitas, inicia un túnel y escanea el código QR desde tu teléfono.
Usa una contraseña de UI fuerte, sobre todo si piensas exponer la instancia de forma remota.
## ¿Qué plataforma debería usar?
- usa **escritorio** para el día a día en flujos de trabajo centrados en macOS
- usa **web** para acceso remoto y revisión desde el móvil
- usa **VS Code** para sesiones nativas del editor, junto al código
@@ -0,0 +1,347 @@
---
title: Proxy inverso
description: Configura OpenChamber correctamente detrás de Nginx, Nginx Proxy Manager u otro proxy inverso.
---
# Proxy inverso
Usa esta página si ejecutas OpenChamber detrás de Nginx, Nginx Proxy Manager, Caddy, Cloudflare u otro proxy inverso.
## Antes de ponerle un proxy
1. Confirma primero que OpenChamber funciona directamente.
2. Abre `http://<server-ip>:3000` o tu puerto personalizado desde la misma red.
3. Añade el proxy inverso solo después de que la conexión directa funcione.
## Qué debe admitir el proxy
- WebSockets para el transporte de mensajes en vivo:
- `/api/event/ws`
- `/api/global/event/ws`
- `/api/terminal/ws`
- SSE sin búfer:
- `/api/event`
- `/api/global/event`
- `/api/notifications/stream`
- `/api/openchamber/events`
- `/api/terminal/:sessionId/stream`
- Cuerpos de solicitud grandes para adjuntos y operaciones de archivos
- Tiempos de espera de lectura prolongados para streams en vivo y sesiones de terminal
## Reglas que importan
- Habilita el proxy de WebSockets.
- Desactiva el búfer en las rutas SSE.
- Desactiva gzip en el proxy si OpenChamber ya comprime las respuestas.
- Mantén la compresión activada en una sola capa.
- Reenvía las cabeceras de proxy habituales como `Host`, `X-Forwarded-For` y `X-Forwarded-Proto`.
- Aumenta los límites de tamaño del cuerpo si los usuarios suben archivos.
## Lista de comprobación rápida
- OpenChamber accesible directamente en la LAN
- WebSockets habilitados en el proxy
- las rutas SSE tienen el búfer desactivado
- `gzip off` en el host del proxy, o compresión del proxy desactivada de otro modo
- `client_max_body_size` suficientemente grande para los adjuntos
- `proxy_read_timeout` suficientemente largo para los streams
## Ejemplo: Nginx
<details>
<summary>Mostrar configuración de ejemplo</summary>
```nginx
client_max_body_size 50M;
client_body_buffer_size 50M;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
gzip off;
location = /api/terminal/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location = /api/global/event/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location = /api/event/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location ~ ^/api/(event|global/event|notifications/stream|openchamber/events)$ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location ~ ^/api/terminal/.+/stream$ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location / {
proxy_pass http://127.0.0.1:3000;
}
```
</details>
## Ejemplo: Nginx Proxy Manager
<details>
<summary>Mostrar ejemplo de la pestaña Advanced</summary>
```nginx
client_max_body_size 50M;
client_body_buffer_size 50M;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
gzip off;
location = /api/terminal/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/global/event/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/event/ws {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/event {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/global/event {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/notifications/stream {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location = /api/openchamber/events {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location ~ ^/api/terminal/.+/stream$ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Accept "text/event-stream";
proxy_set_header Cache-Control "no-cache";
proxy_buffering off;
proxy_cache off;
gzip off;
add_header X-Accel-Buffering "no" always;
add_header Cache-Control "no-cache, no-transform" always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 30s;
}
location / {
proxy_pass http://127.0.0.1:3000;
}
```
</details>
Habilita también `Websockets Support` en Nginx Proxy Manager para este host.
## Señales habituales de fallo
### La página carga, pero el envío de mensajes falla
- los WebSockets no están habilitados en el proxy
- `/api/event/ws` o `/api/global/event/ws` no pasa correctamente
### Las notificaciones o el estado en vivo no se actualizan
- una de las rutas SSE está en búfer o en caché
- falta `X-Accel-Buffering "no"`
### Las subidas de archivos fallan
- `client_max_body_size` es demasiado pequeño
### Todo funciona en local, pero solo falla detrás del proxy
- el proxy está comprimiendo y almacenando en búfer el tráfico en vivo
- al proxy le falta soporte de WebSockets
## Ejemplo: Caddy
<details>
<summary>Mostrar configuración de ejemplo</summary>
```caddy
reverse_proxy 127.0.0.1:3000 {
# WebSocket support is automatic in Caddy
# Flush SSE responses immediately
flush_interval -1
# Pass through Host and proxy headers
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
# Increase timeouts for long-lived streams
transport http {
read_timeout 3600s
write_timeout 3600s
}
}
```
</details>
Caddy gestiona las actualizaciones de WebSocket automáticamente: no hace falta configuración adicional. La directiva `flush_interval -1` garantiza que los fragmentos SSE se reenvíen de inmediato sin búfer.
## Advertencia sobre CDN y doble compresión
Si colocas una CDN (como Cloudflare) delante de tu proxy inverso, ten en cuenta la doble compresión:
- OpenChamber comprime las respuestas HTTP con gzip (umbral de 1 KB).
- Cloudflare y otras CDN también comprimen las respuestas por defecto.
- Esto puede provocar respuestas con doble compresión o cabeceras `Content-Encoding` incorrectas.
Para evitarlo, desactiva la compresión en **una** capa:
- **Cloudflare:** Rules → Compression → disable (o usa el modo "Passthrough").
- **Nginx:** `gzip off` (ya mostrado en los ejemplos anteriores).
- **Caddy:** Caddy no recomprime por defecto si el upstream ya envía contenido comprimido.
Las rutas de streaming SSE están excluidas de la compresión por OpenChamber, pero la CDN aún puede almacenarlas en búfer. Consulta la documentación de tu CDN para saber cómo desactivar el búfer en las rutas SSE.
## Relacionado
- [Túneles](/es/tunnels/)
- [Resolución de problemas](/es/troubleshooting/)
+30
View File
@@ -0,0 +1,30 @@
---
title: Temas
description: Personaliza OpenChamber con temas integrados y definidos por el usuario.
---
# Temas
OpenChamber admite temas integrados y archivos JSON de tema personalizados.
## Añadir un tema personalizado
1. Crea el directorio de temas:
```bash
mkdir -p ~/.config/openchamber/themes
```
2. Añade tu archivo JSON a ese directorio (por ejemplo, `my-theme.json`).
3. Abre OpenChamber y ve a **Settings -> Theme -> Reload themes**.
4. Elige tu tema en el desplegable.
## Ubicación de los temas
- macOS/Linux: `~/.config/openchamber/themes/`
## Referencia completa del formato JSON
Usa la guía completa del formato en la documentación del repositorio principal:
- [`docs/CUSTOM_THEMES.md`](https://github.com/openchamber/openchamber/blob/main/docs/CUSTOM_THEMES.md)
@@ -0,0 +1,30 @@
---
title: Resolución de problemas
description: Problemas comunes de configuración y ejecución con soluciones rápidas.
---
# Resolución de problemas
## El comando OpenChamber se cierra o no arranca
- confirma que Node.js es `>=20`
- ejecuta `openchamber --version`
- reinstala la última CLI si hace falta
## No se puede acceder a la UI web
- revisa los logs del servidor con `openchamber logs`
- verifica el puerto activo (por defecto `3000`)
- abre primero `http://localhost:3000` directamente antes de probar enlaces de túnel
## El enlace remoto/de túnel no funciona
- ejecuta `openchamber tunnel status --all`
- reinicia el túnel desde la misma instancia/puerto
- regenera el enlace de conexión si el token anterior ya se usó
## La extensión de VS Code no se conecta
- confirma que el servidor de OpenChamber está en marcha
- verifica que la extensión está actualizada
- recarga la ventana de VS Code y reintenta la conexión
+77
View File
@@ -0,0 +1,77 @@
---
title: Túneles
description: Expón OpenChamber de forma segura para acceso remoto y móvil.
---
# Túneles
Usa `openchamber tunnel` para exponer una instancia de OpenChamber en marcha.
## Inicio rápido (modo rápido de Cloudflare)
1. Inicia OpenChamber:
```bash
openchamber
```
2. Inicia un túnel:
```bash
openchamber tunnel start --provider cloudflare --mode quick
```
3. Comprueba el estado:
```bash
openchamber tunnel status
```
Por defecto, OpenChamber imprime un código QR en sesiones TTY interactivas. Usa `--qr` para forzar la salida del QR, o `--no-qr` para desactivarla.
## Modos gestionados
### Gestionado remoto
Usa un token + nombre de host gestionados por Cloudflare:
```bash
openchamber tunnel start --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com
```
### Gestionado local
Usa una configuración local de `cloudflared`:
```bash
openchamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml
```
## Perfiles (managed-remote)
Guarda un perfil reutilizable:
```bash
openchamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token-file ~/.secrets/cf-token
```
Inicia usando el perfil guardado:
```bash
openchamber tunnel start --profile prod-main
```
## Comandos útiles
```bash
openchamber tunnel providers
openchamber tunnel ready --provider cloudflare
openchamber tunnel doctor --provider cloudflare
openchamber tunnel stop --port 3000
```
## Notas de comportamiento
- un único túnel activo por instancia de OpenChamber (puerto)
- iniciar un nuevo modo/proveedor en la misma instancia reemplaza el túnel anterior
- generar un nuevo enlace de conexión revoca el anterior sin usar