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.

npm License PRs Welcome

English · 中文版 · 日本語 · 한국어 · Português (BR) · Español · Français · Deutsch · Русский


Upgrade / 升级: Follow the versioned steps in INSTALL.md. Install into the existing web profile, 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.0 is 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.

Используйте этоПримечания
npmdsh-coding-remote-kit@0.5.2dsh plugin --profile web add dsh-coding-remote-kit@0.5.2
GitHublninghaha/dsh-coding-remote-kitпрежнее имя checkout dsh-mobile-remote
id плагина Cordismobile-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:.

Скриншоты

Настройки рабочего стола — предложение сопряжения с QR и PIN   Настройки рабочего стола — статус канала и сопряжённые устройства

Рабочий стол 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.

Содержание

Установка

Нужны 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.requestedrpcId для 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):

  1. Неаутентифицированные соединения обрабатывают только рукопожатие.
  2. deviceToken хранится как SHA-256; ключи и файлы реестра — 0600.
  3. Allowlist RPC, отказ по умолчанию; записи аудируются к deviceId.
  4. Плоскость управления — loopback + Host + CSRF.
  5. Плагин не ослабляет /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.mdADR: объём MVP (китайский)
docs/02-architecture.mdВнутренняя архитектура · 中文
docs/03-protocol.mdAllowlist 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.