dsh-coding-remote-kit
September 2, 2026 · View on GitHub
dsh-coding-remote-kit
v0.5.2 · DeepSeek Harness 0.1.1-rc.2 · GitHub dsh-coding-remote-kit
Удалённый доступ с телефона к DeepSeek Harness. Сопрягите телефон с компьютером, где уже работает dsh web, наблюдайте сессии и выполняйте узкий набор записей — не открывая полный Web API.
English · 中文版 · 日本語 · 한국어 · Português (BR) · Español · Français · Deutsch · Русский
Upgrade / 升级: Follow the versioned steps in
INSTALL.md. Install into the existingwebprofile, keep profile/config/credential files, and restart one existing DSH Web process after all packages are updated. When Hub and Subscription are both used,dsh-coding-oauth-core@0.1.0is their shared npm dependency, not a separate DSH plugin.
Сообщественный плагин. Не связан с DeepSeek и не одобрен DeepSeek. Замысел продукта ближе к Orca Mobile Companion, чем ко второй копии настольной IDE.
Перед правками в этом репозитории прочитайте AGENTS.md: не перезапускайте производственный dsh-web самостоятельно. Подготовьте tarball; перезапуск делает оператор.
Имена
Сначала разрабатывался как GitHub dsh-mobile-remote. npm-имя dsh-mobile-remote — другой проект (плагин удалённого управления WeChat). Этот плагин публикуется как dsh-coding-remote-kit.
| Используйте это | Примечания | |
|---|---|---|
| npm | dsh-coding-remote-kit@0.5.2 | dsh plugin --profile web add dsh-coding-remote-kit@0.5.2 |
| GitHub | lninghaha/dsh-coding-remote-kit | прежнее имя checkout dsh-mobile-remote |
| id плагина Cordis | mobile-remote | без изменений |
| HTTP страницы настроек | /api/mobile-remote/* | без изменений |
| Хранилище | $DSH_HOME/storages/mobile-remote/ | без изменений |
Не выполняйте dsh plugin add dsh-mobile-remote — это установит чужой WeChat-плагин.
Статус
| Этап | Статус |
|---|---|
| Исследование (Orca / экосистема DSH) | готово — docs/research/ |
| M1 скелет плагина + ADR / модель угроз | готово |
| M2 сопряжение / LAN-плоскость данных | готово |
| M3 узкий RPC / согласования | готово |
| M4 подписанный HTTPS / нативное приложение | не начато |
| M5 самостоятельно размещённый rendezvous Worker | готово — docs/05-cloud-relay.md |
Возможности
- Двуязычный UI — китайский и английский в настройках рабочего стола и companion на телефоне (
?lang=/ переключатель в приложении; по умолчаниюnavigator.language). - Сопряжение один раз — рабочий стол показывает QR-код или 8-значный PIN; телефон закрепляет X25519-открытый ключ стола и хранит
deviceToken(сервер сохраняет только SHA-256). - Две плоскости — маршруты управления остаются на loopback
dsh web; мобильная плоскость данных — отдельный порт (по умолчанию6879) с allowlist RPC. - E2EE после рукопожатия — tweetnacl secretbox на
/m/ws; неаутентифицированные сокеты никогда не видят содержимое сессии. - Узкие записи — наблюдение сессий, ответы на согласования/вопросы, короткие реплики; тяжёлое редактирование остаётся на столе.
- Сначала частная сеть — предпочтительны LAN / Tailscale. Необязательный Cloudflare Quick Tunnel открывает только плоскость данных, никогда порт
3080. Необязательный самостоятельно размещённый rendezvous Worker: стол и телефон оба исходящие; деловые кадры остаются E2EE. - Стандартная форма плагина — один серверный плагин Cordis + страница настроек classic-script.
dsh plugin --profile web addс file tarball, никогда с рабочим деревомlink:.
Скриншоты
Рабочий стол Settings → Mobile Remote: создать предложение сопряжения (слева) · статус канала и устройства (справа)
Companion на телефоне: ввести PIN / сканировать (слева) · список сессий после сопряжения (справа)
Проблемы, которые решает этот плагин
| Искали / увидели | Что на самом деле было сломано | Что делает этот плагин |
|---|---|---|
| «телефонный companion в стиле Orca для DSH» | У официального DSH нет первоклассного сопряжённого мобильного приложения | Семантический companion: сопряжение + E2EE + allowlist RPC |
dsh-pocket / dsh-web-remote на телефоне | Полная поверхность dsh web в LAN/публичной сети | Две плоскости; неизвестные RPC-методы — forbidden |
| Телефон в сотовой сети, стол в LAN | Сырая LAN HTTP-страница может быть MITM | Предпочитайте Tailscale; необязательный Quick Tunnel (TLS на крае, origin localhost) |
import плагина упал и порт 3080 умер | DSH делает fail-fast всего дерева плагинов | Песочница-шлюз + tarball скопирован вне репозитория; без link: |
Быстрый старт
dsh plugin --profile web add dsh-coding-remote-kit@0.5.2
Затем оператор перезапускает существующий процесс dsh web в своём окне. Откройте Settings → 移動远程, создайте предложение сопряжения, отсканируйте QR (или введите PIN) на телефоне.
Из checkout исходников (разработка):
pnpm test:sandbox
pnpm pack
mkdir -p "$HOME/.dsh/packages"
cp dsh-coding-remote-kit-0.5.2.tgz "$HOME/.dsh/packages/"
dsh plugin --profile web add "$HOME/.dsh/packages/dsh-coding-remote-kit-0.5.2.tgz"
Не выполняйте dsh plugin add ./ из этого рабочего дерева. pnpm 11 воспринимает некоторые пути file: tarball как источник link:, и сбой входного import валит весь GUI.
Содержание
- Имена
- Статус
- Возможности
- Скриншоты
- Проблемы, которые решает этот плагин
- Быстрый старт
- Установка
- Как это работает
- Страница настроек
- Мобильный RPC
- Публичный туннель
- Безопасность
- Архитектура
- Документация
- Связанные проекты
- Участие
- Лицензия
Установка
Нужны DeepSeek Harness 0.1.1-rc.2 (закреплён) и Node.js 22.19+. Полные шаги, сопряжение и заметки о туннеле: INSTALL.md.
Разработка:
pnpm install && pnpm build && pnpm test # inside the Docker sandbox, not on a live GUI host
pnpm test:sandbox # Dockerfile targets check / isolated-install / verify
Результаты сборки:
lib/server/index.js— вход Cordis (name/inject/Config/apply)lib/client.js— classic-script страницы настроекlib/mobile/— телефонная страница на/m
Как это работает
Settings (loopback) Phone browser
│ │
│ QR / PIN ────────────────┤
▼ ▼
/api/mobile-remote/* GET /m + WS /m/ws
(dsh web, :3080) (data plane, :6879, E2EE)
Управление остаётся за loopback-оградой хостового Web. Плоскость данных — отдельный сервер node:http + ws. Сопряжение может перепривязать его с 127.0.0.1 на 0.0.0.0 для LAN-клиентов; активный Quick Tunnel объявляет свой HTTPS origin вместо расширения bind.
Страница настроек
Откройте Settings → 移動远程:
- статус (bind, порт, прослушивание, активные устройства, туннель, rendezvous)
- каналы LAN / Quick Tunnel / rendezvous
- создать предложение → QR + 8-значный PIN
- список устройств и отзыв
- необязательная установка официального
cloudflared(никогда не запускается приapply()плагина) - диагностика подключения (очищенные кандидаты, pin/verify cloudflared, версия отказа от ответственности)
- флажок отказа для Quick Tunnel (обязателен перед Start)
Мобильный RPC
Методы allowlist (всё остальное — forbidden):
status.get · session.list · session.history · session.subscribe · session.unsubscribe · host.subscribe · session.prompt · session.cancel · session.create · respond · device.name
Пуши включают события сессии плюс approval.requested / question.requested (с rpcId для respond). Формат провода: docs/03-protocol.md.
Публичный туннель
По умолчанию выключен. Запускайте из настроек только после принятия отказа (disclaimerAccepted: true). cloudflared Quick Tunnel указывает только на 127.0.0.1:<data-plane-port>. /m становится доступен по URL https://<random>.trycloudflare.com; сопряжению по-прежнему нужны fragment-токен (или PIN) и E2EE. Дочерний процесс убивается при unload / Stop плагина.
Никогда не туннелируйте порт 3080 / dsh web. Самостоятельно размещённый rendezvous Worker (стол и телефон оба исходящие, деловые кадры по-прежнему E2EE) необязателен; см. docs/05-cloud-relay.md. Нужен план Cloudflare Workers Paid; это не публичное реле данного проекта.
Безопасность
Инварианты (полная модель: docs/04-threat-model.md):
- Неаутентифицированные соединения обрабатывают только рукопожатие.
deviceTokenхранится как SHA-256; ключи и файлы реестра —0600.- Allowlist RPC, отказ по умолчанию; записи аудируются к
deviceId. - Плоскость управления — loopback + Host + CSRF.
- Плагин не ослабляет
/apiуdsh webи не перехватывает провайдерыapi-proxy.
Честная граница v0: первая HTTP-загрузка /m в сырой LAN может быть MITM. Предпочитайте overlay VPN.
Запреты:
- Не делитесь чужими учётными данными.
- Не наблюдайте аккаунты без полномочий.
- Не привязывайте порт плоскости данных на
0.0.0.0к публичному Интернету (явно запущенный пользователем Quick Tunnel — исключение). - Не намекайте на официальное одобрение DeepSeek.
Примеры в документации используют только example.com, 127.0.0.1 и YOUR_TOKEN.
Архитектура
Две плоскости, карта модулей, хранилище и рукопожатие: docs/02-architecture.md · 中文.
Решение MVP (маршрут B): docs/01-mvp-scope.md.
Документация
| Документ | Назначение |
|---|---|
| INSTALL.md | Установка, сопряжение, туннель |
| CHANGELOG.md | История выпусков |
| docs/00-project-rules.md | Версии, публичное vs только локальное, граница хостового DSH |
| docs/01-mvp-scope.md | ADR: объём MVP (китайский) |
| docs/02-architecture.md | Внутренняя архитектура · 中文 |
| docs/03-protocol.md | Allowlist RPC и конверты push (китайский) |
| docs/04-threat-model.md | Активы, атакующие, инварианты (китайский) |
| docs/05-cloud-relay.md | Самостоятельно размещённый rendezvous Worker (M5) |
| CONTRIBUTING.md | Руководство по участию |
| AGENTS.md | Правила агента/оператора (без производственного перезапуска) |
Связанные проекты
- dsh-coding-subscription-oauth — родственный плагин; вёрстка документации с него срисована.
- GitHub:
lninghaha/dsh-coding-remote-kit. - Этот плагин независим от плагина центра использования
dsh-hub-oauth-gateway. - Он не заменяет
@deepseek-ai/dsh.
Участие
Issues и PR приветствуются. См. CONTRIBUTING.md про Docker-песочницу, соглашения о коммитах и слои документов.
Лицензия
MIT.