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:
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Документація OpenChamber
|
||||
description: Посібник з налаштування та роботи з OpenChamber на вебі, десктопі та у VS Code.
|
||||
---
|
||||
|
||||
# Документація OpenChamber
|
||||
|
||||
OpenChamber — це візуальний робочий простір навколо OpenCode.
|
||||
|
||||
Використовуйте ці доки, щоб:
|
||||
|
||||
- встановити платформу, що пасує вашому робочому процесу
|
||||
- безпечно відкрити OpenChamber для віддаленого використання
|
||||
- налаштувати вигляд і усувати типові проблеми
|
||||
|
||||
## Прочитайте спершу
|
||||
|
||||
- [Встановлення](/uk/install/)
|
||||
- [Швидкий старт](/uk/quickstart/)
|
||||
- [Тунелі](/uk/tunnels/)
|
||||
- [Усунення несправностей](/uk/troubleshooting/)
|
||||
|
||||
## Для чого OpenChamber
|
||||
|
||||
OpenChamber створений для тих частин AI-кодингу, яким потрібен командний центр: розгалуження сесій, перегляд діфів, керування терміналами, спостереження за прогресом інструментів, запуск дій проєкту та збереження всієї картини перед очима, поки агент працює.
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: Встановлення
|
||||
description: Встановіть OpenChamber для десктопа, вебу або VS Code.
|
||||
---
|
||||
|
||||
# Встановлення
|
||||
|
||||
OpenChamber має три основні платформи:
|
||||
|
||||
- десктоп-застосунок для macOS
|
||||
- вебзастосунок на базі CLI зі встановлюваним PWA
|
||||
- розширення для VS Code
|
||||
|
||||
## Передумова
|
||||
|
||||
Спершу встановіть [OpenCode](https://opencode.ai).
|
||||
|
||||
## Веб + PWA
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/openchamber/openchamber/main/scripts/install.sh | bash
|
||||
openchamber --ui-password be-creative-here
|
||||
```
|
||||
|
||||
Потім відкрийте URL, який вивів CLI (зазвичай `http://localhost:3000`).
|
||||
|
||||
## Десктоп
|
||||
|
||||
Завантажте найновішу десктопну збірку зі сторінки релізів на GitHub або зі сторінки завантаження OpenChamber.
|
||||
|
||||
## VS Code
|
||||
|
||||
Встановіть із VS Code Marketplace і увійдіть у свій звичний робочий процес OpenCode.
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Швидкий старт
|
||||
description: Швидко запустіть OpenChamber і оберіть платформу під задачу.
|
||||
---
|
||||
|
||||
# Швидкий старт
|
||||
|
||||
## Найшвидший шлях
|
||||
|
||||
1. Встановіть OpenCode.
|
||||
2. Встановіть CLI OpenChamber.
|
||||
3. Виконайте `openchamber --ui-password be-creative-here`.
|
||||
4. Відкрийте веб-UI на своїй машині.
|
||||
5. За потреби запустіть тунель і відскануйте QR-код із телефона.
|
||||
|
||||
Використовуйте надійний пароль UI, особливо якщо плануєте відкривати інстанс віддалено.
|
||||
|
||||
## Яку платформу обрати?
|
||||
|
||||
- обирайте **десктоп** для щоденної роботи переважно на macOS
|
||||
- обирайте **веб** для віддаленого доступу та перегляду з мобільного
|
||||
- обирайте **VS Code** для сесій усередині редактора, поруч із кодом
|
||||
@@ -0,0 +1,347 @@
|
||||
---
|
||||
title: Зворотний проксі
|
||||
description: Налаштуйте OpenChamber коректно за Nginx, Nginx Proxy Manager або іншим зворотним проксі.
|
||||
---
|
||||
|
||||
# Зворотний проксі
|
||||
|
||||
Скористайтеся цією сторінкою, якщо запускаєте OpenChamber за Nginx, Nginx Proxy Manager, Caddy, Cloudflare або іншим зворотним проксі.
|
||||
|
||||
## Перш ніж проксувати
|
||||
|
||||
1. Спершу переконайтеся, що OpenChamber працює напряму.
|
||||
2. Відкрийте `http://<server-ip>:3000` або свій власний порт із тієї самої мережі.
|
||||
3. Додавайте зворотний проксі лише після того, як пряме підключення працює.
|
||||
|
||||
## Що має підтримувати проксі
|
||||
|
||||
- WebSocket для живого транспорту повідомлень:
|
||||
- `/api/event/ws`
|
||||
- `/api/global/event/ws`
|
||||
- `/api/terminal/ws`
|
||||
- SSE без буферизації:
|
||||
- `/api/event`
|
||||
- `/api/global/event`
|
||||
- `/api/notifications/stream`
|
||||
- `/api/openchamber/events`
|
||||
- `/api/terminal/:sessionId/stream`
|
||||
- Великі тіла запитів для вкладень і файлових операцій
|
||||
- Довгі таймаути читання для живих потоків і термінальних сесій
|
||||
|
||||
## Правила, що мають значення
|
||||
|
||||
- Увімкніть проксування WebSocket.
|
||||
- Вимкніть буферизацію на SSE-маршрутах.
|
||||
- Вимкніть gzip на проксі, якщо OpenChamber уже стискає відповіді.
|
||||
- Тримайте стиснення увімкненим лише в одному шарі.
|
||||
- Передавайте звичайні проксі-заголовки, як-от `Host`, `X-Forwarded-For` та `X-Forwarded-Proto`.
|
||||
- Збільшіть ліміти розміру тіла, якщо користувачі завантажують файли.
|
||||
|
||||
## Швидкий чеклист
|
||||
|
||||
- OpenChamber доступний напряму в LAN
|
||||
- WebSocket увімкнено в проксі
|
||||
- На SSE-маршрутах вимкнено буферизацію
|
||||
- `gzip off` на хості проксі, або стиснення проксі вимкнено інакше
|
||||
- `client_max_body_size` достатньо великий для вкладень
|
||||
- `proxy_read_timeout` достатньо довгий для потоків
|
||||
|
||||
## Приклад: Nginx
|
||||
|
||||
<details>
|
||||
<summary>Показати приклад конфігу</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>
|
||||
|
||||
## Приклад: Nginx Proxy Manager
|
||||
|
||||
<details>
|
||||
<summary>Показати приклад вкладки 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>
|
||||
|
||||
Також увімкніть `Websockets Support` у Nginx Proxy Manager для цього хоста.
|
||||
|
||||
## Типові ознаки проблем
|
||||
|
||||
### Сторінка завантажується, але надсилання повідомлень не працює
|
||||
|
||||
- WebSocket не увімкнено в проксі
|
||||
- `/api/event/ws` або `/api/global/event/ws` проходить некоректно
|
||||
|
||||
### Сповіщення або живий статус не оновлюються
|
||||
|
||||
- один із SSE-маршрутів буферизується або кешується
|
||||
- відсутній `X-Accel-Buffering "no"`
|
||||
|
||||
### Завантаження файлів не вдається
|
||||
|
||||
- `client_max_body_size` замалий
|
||||
|
||||
### Усе працює локально, але ламається лише за проксі
|
||||
|
||||
- проксі стискає й буферизує живий трафік
|
||||
- у проксі відсутня підтримка WebSocket
|
||||
|
||||
## Приклад: Caddy
|
||||
|
||||
<details>
|
||||
<summary>Показати приклад конфігу</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 обробляє WebSocket-апгрейди автоматично — додаткове налаштування не потрібне. Директива `flush_interval -1` гарантує, що SSE-фрагменти пересилаються негайно, без буферизації.
|
||||
|
||||
## CDN і подвійне стиснення — попередження
|
||||
|
||||
Якщо ви ставите CDN (наприклад, Cloudflare) перед своїм зворотним проксі, памʼятайте про подвійне стиснення:
|
||||
|
||||
- OpenChamber стискає HTTP-відповіді через gzip (поріг 1 КБ).
|
||||
- Cloudflare та інші CDN теж стискають відповіді типово.
|
||||
- Це може призвести до подвійно стиснутих відповідей або некоректних заголовків `Content-Encoding`.
|
||||
|
||||
Щоб цього уникнути, вимкніть стиснення на **одному** шарі:
|
||||
|
||||
- **Cloudflare:** Rules → Compression → disable (або режим "Passthrough").
|
||||
- **Nginx:** `gzip off` (уже показано в прикладах вище).
|
||||
- **Caddy:** Caddy не перестискає типово, якщо джерело вже надсилає стиснутий контент.
|
||||
|
||||
SSE-маршрути потоків виключені зі стиснення в OpenChamber, але CDN усе одно може їх буферизувати. Перевірте документацію свого CDN щодо вимкнення буферизації на SSE-шляхах.
|
||||
|
||||
## Повʼязане
|
||||
|
||||
- [Тунелі](/uk/tunnels/)
|
||||
- [Усунення несправностей](/uk/troubleshooting/)
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Теми
|
||||
description: Налаштуйте OpenChamber за допомогою вбудованих і власних тем.
|
||||
---
|
||||
|
||||
# Теми
|
||||
|
||||
OpenChamber підтримує вбудовані теми та власні JSON-файли тем.
|
||||
|
||||
## Додати власну тему
|
||||
|
||||
1. Створіть директорію тем:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/openchamber/themes
|
||||
```
|
||||
|
||||
2. Додайте свій JSON-файл у цю директорію (наприклад, `my-theme.json`).
|
||||
3. Відкрийте OpenChamber, потім перейдіть до **Settings -> Theme -> Reload themes**.
|
||||
4. Оберіть свою тему зі спадного списку.
|
||||
|
||||
## Розташування тем
|
||||
|
||||
- macOS/Linux: `~/.config/openchamber/themes/`
|
||||
|
||||
## Повний довідник формату JSON
|
||||
|
||||
Скористайтеся повним посібником із формату в доках основного репозиторію:
|
||||
|
||||
- [`docs/CUSTOM_THEMES.md`](https://github.com/openchamber/openchamber/blob/main/docs/CUSTOM_THEMES.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Усунення несправностей
|
||||
description: Типові проблеми з налаштуванням і запуском та швидкі рішення.
|
||||
---
|
||||
|
||||
# Усунення несправностей
|
||||
|
||||
## Команда OpenChamber завершується або не запускається
|
||||
|
||||
- переконайтеся, що Node.js `>=20`
|
||||
- виконайте `openchamber --version`
|
||||
- за потреби перевстановіть найновіший CLI
|
||||
|
||||
## Веб-UI недоступний
|
||||
|
||||
- перегляньте логи сервера командою `openchamber logs`
|
||||
- перевірте активний порт (типово `3000`)
|
||||
- спершу відкрийте `http://localhost:3000` напряму, перш ніж тестувати посилання-тунелі
|
||||
|
||||
## Віддалене посилання / тунель не працює
|
||||
|
||||
- виконайте `openchamber tunnel status --all`
|
||||
- перезапустіть тунель із того самого інстансу/порту
|
||||
- згенеруйте нове посилання для підключення, якщо попередній токен уже було використано
|
||||
|
||||
## Розширення VS Code не підключається
|
||||
|
||||
- переконайтеся, що сервер OpenChamber запущено
|
||||
- перевірте, що розширення оновлено
|
||||
- перезавантажте вікно VS Code і повторіть підключення
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: Тунелі
|
||||
description: Безпечно відкрийте OpenChamber для віддаленого та мобільного доступу.
|
||||
---
|
||||
|
||||
# Тунелі
|
||||
|
||||
Використовуйте `openchamber tunnel`, щоб відкрити запущений інстанс OpenChamber.
|
||||
|
||||
## Швидкий старт (швидкий режим Cloudflare)
|
||||
|
||||
1. Запустіть OpenChamber:
|
||||
|
||||
```bash
|
||||
openchamber
|
||||
```
|
||||
|
||||
2. Запустіть тунель:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode quick
|
||||
```
|
||||
|
||||
3. Перевірте статус:
|
||||
|
||||
```bash
|
||||
openchamber tunnel status
|
||||
```
|
||||
|
||||
Типово OpenChamber виводить QR-код в інтерактивних TTY-сесіях. Використовуйте `--qr`, щоб примусово вивести QR, або `--no-qr`, щоб вимкнути його.
|
||||
|
||||
## Керовані режими
|
||||
|
||||
### Кероване віддалене
|
||||
|
||||
Використовуйте токен + хостнейм, керовані Cloudflare:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com
|
||||
```
|
||||
|
||||
### Кероване локальне
|
||||
|
||||
Використовуйте локальний конфіг `cloudflared`:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml
|
||||
```
|
||||
|
||||
## Профілі (managed-remote)
|
||||
|
||||
Збережіть багаторазовий профіль:
|
||||
|
||||
```bash
|
||||
openchamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token-file ~/.secrets/cf-token
|
||||
```
|
||||
|
||||
Запуск зі збереженим профілем:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --profile prod-main
|
||||
```
|
||||
|
||||
## Корисні команди
|
||||
|
||||
```bash
|
||||
openchamber tunnel providers
|
||||
openchamber tunnel ready --provider cloudflare
|
||||
openchamber tunnel doctor --provider cloudflare
|
||||
openchamber tunnel stop --port 3000
|
||||
```
|
||||
|
||||
## Нотатки щодо поведінки
|
||||
|
||||
- один активний тунель на інстанс OpenChamber (порт)
|
||||
- запуск нового режиму/провайдера на тому самому інстансі замінює попередній тунель
|
||||
- генерація нового посилання для підключення відкликає попереднє невикористане
|
||||
Reference in New Issue
Block a user