docs(help): bring the user guide back in line with the current app The help was written on 2026-10-14 and about forty user-visible changes merged since without touching it, so several pages described controls that no longer exist: Missions still listed four playbooks and a Save step for preferences that now save on each change, the depth editor kept its old names, notifications still had their former switches, and voice input pointed to a microphone button that is not in the composer. Every English page was re-checked claim by claim against the current labels (English UI messages) and behaviour, then the nine translations were updated to match, using each locale's own UI labels. Notable corrections: Missions (Compare two models, autosaving defaults with Apply to / Global / Reset, Subsession nesting depth, prepared hand-offs, retired-task interrupts, the named causes of "Mission Control is unavailable", standalone server support); conversations and history (reasoning/tool durations, token lines adding up the cleanup selection, presets including Nothing, timeline markers following Message content, in-place reveal of long text, Open in session, focus after send, Queue message / Steer now, Retrying); settings (notification routing table and defaults, Stats, Mode, info tips, Server setting badge, localized native menus); shortcuts (72 actions, Clear shortcut, Ctrl/Cmd+K); voice (More actions entries, Save status); files (live Workspace refresh, Show 200 more); OpenCode, install, server and updates (2.1.1 recommended, OpenCode 2 beside an older installation, version card first, private loopback listener for Missions, preview releases offered once all builds are published); providers, integrations, browser, SideCars, desktop and remote pages. Translations also repaired older drift, mainly the project-tab closing passages. The Chat settings table header (Default state, its title, item column, the thinking row and its accessible label) was still English in eight locales; it is now translated so the help can cite what users see. AGENTS.md now asks every PR changing user-visible behavior to update the affected help pages in the same PR, since CI validates structure and links but not whether the text still matches the UI; it also corrects the needs-input notification default. USER_HELP.md no longer claims native menus stay English. Validation: npm run test:help (all ten locales, 25 pages, heading ids unchanged), a full help build, and the i18n and transcript-visibility unit tests.
14 KiB
Удалённое управление
Удалённое управление позволяет сопряжённому браузеру или настольному клиенту использовать работающую серверную часть CodeNomad без открытия входящего сетевого порта. Не нужны пароль сервера, --host вне loopback или VPN. Это отдельный путь от прямых подключений.
Запуск и сопряжение
- На хосте откройте Настройки → Удалённый доступ.
- Выберите Запустить удалённое управление. Дождитесь Готово к удалённым подключениям; первое использование может занять время для подготовки идентичности туннеля и сертификата.
- В Подключить другое устройство отсканируйте QR-код или нажмите Копировать ссылку, затем откройте одноразовую ссылку на нужном устройстве.
- Сохраняйте данные сайта сопряжённого браузера. Снова откройте адрес туннеля для подключения, пока серверная часть работает.
Ссылка действует пять минут и срабатывает один раз. Считайте её учётными данными: любой использовавший её может стать сопряжённым устройством. Код находится во фрагменте URL, не в строке запроса. Создать новую ссылку сопряжения немедленно делает предыдущую неиспользованную ссылку недействительной. Остановка, завершение серверной части и сбой туннеля отменяют ожидающие ссылки сопряжения.
Для сопряжения другого настольного CodeNomad выберите Подключить сервер CodeNomad на его главной странице, вставьте ссылку в URL сервера и нажмите Подключиться. Ссылка сопряжения открывает своё окно даже по Сохранить, потому что её открытие использует код. В закладке сохраняется только origin туннеля; код не хранится. Проверка TLS для ссылок сопряжения остаётся включённой.
Управление сопряжёнными устройствами
- На хосте вернитесь в Настройки → Удалённый доступ → Удалённое управление.
- Проверьте Сопряжённые устройства и время Последняя активность. Каждое устройство названо по платформе и браузеру, с которых выполнено сопряжение, например
iPhone · Safari. - Нажмите Отозвать для устройства, которому больше нельзя подключаться.
Отзыв завершает текущие HTTP/SSE-подключения устройства и будущий доступ. Для восстановления выполните сопряжение по новой ссылке. Устройство истекает после 30 дней без использования. При лимите 32 устройства новое сопряжение заменяет устройство с самой давней активностью и закрывает его подключения.
Серверная часть хранит хэши, не исходные учётные данные устройств, в remote-control-devices.json в базе конфигурации. Клиент хранит cookie устройства с областью хоста и атрибутами Secure, HttpOnly, SameSite=Lax. Срок в браузере может превышать серверный 30-дневный лимит бездействия; достоверен реестр. Очистка данных сайта, смена профиля браузера или приватный режим могут потребовать нового сопряжения.
Изменение пароля прямого доступа не отзывает устройства. Остановить удалённое управление отключает туннель, но сохраняет список устройств; используйте Отозвать, чтобы убрать авторизацию.
Повторное сопряжение без потери места
- Если клиент показывает Повторно сопрягите это устройство, оставьте эту страницу открытой.
- На хосте выберите Создать новую ссылку сопряжения и откройте в том же браузере/профиле клиента. Для сохранённого настольного сервера переподключитесь по свежей ссылке, чтобы использовать существующее хранилище удалённого окна.
- Вернитесь на ожидающую страницу и нажмите Проверить соединение; проверка также повторяется, когда страница снова получает фокус.
Восстановление сохраняет открытую страницу и черновики; не повторяет неудачное действие. Перед повтором проверьте, сработала ли отправка, ответ или удаление. Пароль прямого доступа не восстанавливает сопряжение удалённого управления.
Доступность и время жизни
| Действие/состояние | Эффект |
|---|---|
| Запустить удалённое управление | Подключает эту серверную часть и запоминает выбор для будущих запусков. |
| Закрыть удалённый браузер | Не останавливает серверную часть хоста и не отзывает устройство. |
| Остановить удалённое управление | Отключает доступ и убирает автоматическое возобновление при запуске; сохраняет записи устройств. |
| Завершение серверной части / закрытие последнего настольного окна и выход из приложения | Удалённое управление становится недоступным. Общая служба OpenCode может продолжать работать, но не может предоставлять этот интерфейс через остановленную серверную часть. |
| Запуск после оставленного включённым удалённого управления | Переподключается в фоне без новой ссылки сопряжения. Установки, где его никогда не запускали, не включаются сами. |
| Неудачное возобновление или фатальный сбой туннеля | Сохранённый выбор остаётся, а хост показывает ошибку; значок обновления карточки удалённого управления перечитывает её состояние. Запустить удалённое управление повторяет попытку сейчас; Остановить удалённое управление очищает выбор. Иначе последующий запуск повторяет попытку. |
Автовозобновление ограничено одной серверной частью на каталог конфигурации. Не запускайте конкурирующие хосты с одной конфигурацией ради дополнительной ёмкости туннеля. Для доступности после выхода из настольного приложения разверните отдельно управляемый отдельный сервер; удалённое управление — не независимый демон.
Доступные и недоступные поверхности
Сопряжённые устройства могут использовать обычные API проектов/разговоров, отправлять запросы, просматривать файлы и отвечать на разрешения/формы с теми же проверками принадлежности. Сопряжение даёт мощный доступ, не ссылку просмотра. Оно никогда не предоставляет loopback-привилегии, хотя туннель перенаправляет трафик внутри хоста.
| Поверхность | Через удалённое управление |
|---|---|
| Обычный аутентифицированный интерфейс, рабочие пространства, разговоры и SSE | Доступны сопряжённому устройству. |
| Вход/выход по паролю, изменение пароля, локальная начальная настройка токеном | Недоступны; учётные данные устройства обязательны даже при отключённой прямой аутентификации. |
| Статус удалённого управления | Читается сопряжённым устройством; управление недоступно. Запуск/остановка, создание сопряжения, список устройств и отзыв остаются на пути доступа хоста. |
| Управление настольными удалёнными окнами/серверами и маршруты прокси | Недоступны (/api/remote-servers/, /api/remote-proxy/). |
| Прокси содержимого SideCar | Недоступен (/sidecars/). Это не означает блокировку всех API SideCar: сопряжённые клиенты всё ещё имеют доступ к API регистрации /api/sidecars. |
| Содержимое предпросмотра и мост автоматизации | Недоступны (/previews/, /api/opencode-plugin/). Нативные возможности рабочего стола не становятся возможностями браузера. |
| Обновления соединения до WebSocket | Недоступны на входе удалённого управления. |
Используйте должным образом защищённое прямое подключение, если нужны заблокированные поверхности прокси/WebSocket. Удалённое управление автоматически на этот путь не переключается.
Ретранслятор и конфиденциальность
CodeNomad использует OpenTunnel и занимает один случайный маршрут на общей идентичности туннеля компьютера по умолчанию. Остановка освобождает мост CodeNomad, не общую идентичность других приложений.
TLS завершается в серверной части CodeNomad. Ретранслятор передаёт шифротекст и не может читать содержимое приложения, но видит имена хостов, время соединений и объёмы трафика. Сертификат/закрытый ключ туннеля остаются на хосте. Защищайте хранилище туннеля хоста и конфигурацию CodeNomad как учётные данные; неугадываемый адрес — не авторизация.
CODENOMAD_REMOTE_CONTROL_API выбирает собственный API OpenTunnel; без значения используется размещённая служба. Это меняет развёртывание туннеля, не требования сопряжения и не заблокированные поверхности. Обращение с учётными данными и диагностикой см. в разделе Безопасность.