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
Fernzugriff per Smartphone für DeepSeek Harness. Koppeln Sie ein Telefon mit dem Desktop, auf dem bereits dsh web läuft, beobachten Sie Sitzungen und führen Sie eine enge Menge von Schreibvorgängen aus — ohne die vollständige Web-API offenzulegen.
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.
Community-Plugin. Nicht mit DeepSeek verbunden und nicht von DeepSeek unterstützt. Die Produktabsicht liegt näher bei Orca Mobile Companion als bei einer zweiten Kopie der Desktop-IDE.
Lesen Sie AGENTS.md, bevor Sie dieses Repository ändern: starten Sie das Produktions-dsh-web nicht selbst neu. Bereiten Sie das Tarball vor; der Operator startet neu.
Namen
Zuerst als GitHub dsh-mobile-remote entwickelt. Der npm-Name dsh-mobile-remote ist ein anderes Projekt (WeChat-Fernsteuerungs-Plugin). Dieses Plugin erscheint als dsh-coding-remote-kit.
| Das verwenden | Hinweise | |
|---|---|---|
| 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 | früherer Checkout-Name dsh-mobile-remote |
| Cordis-Plugin-id | mobile-remote | unverändert |
| HTTP der Einstellungsseite | /api/mobile-remote/* | unverändert |
| Speicher | $DSH_HOME/storages/mobile-remote/ | unverändert |
Führen Sie nicht dsh plugin add dsh-mobile-remote aus — das installiert das fremde WeChat-Plugin.
Status
| Meilenstein | Status |
|---|---|
| Recherche (Orca / DSH-Ökosystem) | erledigt — docs/research/ |
| M1 Plugin-Skelett + ADR / Bedrohungsmodell | erledigt |
| M2 Kopplung / LAN-Datenebene | erledigt |
| M3 enges RPC / Freigaben | erledigt |
| M4 signiertes HTTPS / native App | nicht begonnen |
| M5 selbst gehosteter Rendezvous-Worker | erledigt — docs/05-cloud-relay.md |
Funktionen
- Zweisprachige UI — Chinesisch und Englisch für Desktop-Einstellungen und Telefon-Companion (
?lang=/ Umschalter in der App; Standardnavigator.language). - Einmal koppeln — der Desktop zeigt einen QR-Code oder eine 8-stellige PIN; das Telefon merkt sich fest den öffentlichen X25519-Schlüssel des Desktops und hält ein
deviceToken(der Server speichert nur SHA-256). - Zwei Ebenen — Verwaltungsrouten bleiben auf dem Loopback-
dsh web; die mobile Datenebene ist ein eigener Port (Standard6879) mit RPC-Allowlist. - E2EE nach dem Handshake — tweetnacl secretbox auf
/m/ws; unauthentifizierte Sockets sehen niemals Sitzungsinhalt. - Enge Schreibvorgänge — Sitzungen beobachten, Freigaben/Fragen beantworten, kurze Antworten; schwere Bearbeitung bleibt auf dem Desktop.
- Privates Netz zuerst — LAN / Tailscale bevorzugt. Optionaler Cloudflare Quick Tunnel legt nur die Datenebene offen, niemals Port
3080. Optionaler selbst gehosteter Rendezvous-Worker: Desktop und Telefon beide outbound; Geschäftsframes bleiben E2EE. - Standard-Plugin-Form — ein Cordis-Server-Plugin + classic-script-Einstellungsseite.
dsh plugin --profile web addmit einem file tarball, niemals einemlink:-Arbeitsbaum.
Screenshots
Desktop Settings → Mobile Remote: Kopplungsangebot erstellen (links) · Kanalstatus & Geräte (rechts)
Telefon-Companion: PIN eingeben / scannen (links) · Sitzungsliste nach der Kopplung (rechts)
Probleme, die dieses Plugin löst
| Gesucht / gesehen | Was wirklich kaputt war | Was dieses Plugin tut |
|---|---|---|
| „Orca-artiges Telefon-Companion für DSH“ | Offizielles DSH hat keine erstklassige gekoppelte Mobile-App | Semantisches Companion: Kopplung + E2EE + Allowlist-RPC |
dsh-pocket / dsh-web-remote auf einem Telefon | Volle dsh-web-Oberfläche im LAN/öffentlich | Zwei Ebenen; unbekannte RPC-Methoden sind forbidden |
| Telefon im Mobilfunk, Desktop im LAN | Rohe LAN-HTTP-Seite kann MITM werden | Tailscale bevorzugen; optionaler Quick Tunnel (TLS am Rand, Origin localhost) |
Plugin-import fehlgeschlagen und Port 3080 tot | DSH fail-fastet den ganzen Plugin-Baum | Sandbox-Tor + Tarball außerhalb des Repos kopiert; kein link: |
Schnellstart
dsh plugin --profile web add dsh-coding-remote-kit@0.5.2
Danach startet der Operator den bestehenden dsh-web-Prozess in seinem eigenen Fenster neu. Öffnen Sie Settings → 移動远程, erstellen Sie ein Kopplungsangebot, scannen Sie den QR (oder tippen Sie die PIN) auf dem Telefon.
Aus einem Quell-Checkout (Entwicklung):
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"
Führen Sie nicht dsh plugin add ./ aus diesem Arbeitsbaum aus. pnpm 11 behandelt manche file:-Tarball-Pfade als link:-Quelle, und ein fehlgeschlagener Entry-Import legt die ganze GUI lahm.
Inhaltsverzeichnis
- Namen
- Status
- Funktionen
- Screenshots
- Probleme, die dieses Plugin löst
- Schnellstart
- Installation
- Funktionsweise
- Einstellungsseite
- Mobile RPC
- Öffentlicher Tunnel
- Sicherheit
- Architektur
- Dokumentation
- Verwandt
- Mitwirken
- Lizenz
Installation
Erfordert DeepSeek Harness 0.1.1-rc.2 (gepinnt) und Node.js 22.19+. Vollständige Schritte, Kopplung und Tunnel-Hinweise: INSTALL.md.
Entwicklung:
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
Build-Ausgaben:
lib/server/index.js— Cordis-Einstieg (name/inject/Config/apply)lib/client.js— Einstellungs-classic-scriptlib/mobile/— Telefonseite unter/m
Funktionsweise
Settings (loopback) Phone browser
│ │
│ QR / PIN ────────────────┤
▼ ▼
/api/mobile-remote/* GET /m + WS /m/ws
(dsh web, :3080) (data plane, :6879, E2EE)
Die Verwaltung bleibt hinter dem Loopback-Zaun des Host-Web. Die Datenebene ist ein eigener node:http + ws-Server. Die Kopplung kann ihn von 127.0.0.1 auf 0.0.0.0 umbinden, damit LAN-Clients verbinden können; ein aktiver Quick Tunnel wirbt seinen HTTPS-Origin, statt den Bind zu erweitern.
Einstellungsseite
Öffnen Sie Settings → 移動远程:
- Status (Bind, Port, Listening, aktive Geräte, Tunnel, Rendezvous)
- Kanäle LAN / Quick Tunnel / rendezvous
- Angebot erstellen → QR + 8-stellige PIN
- Geräteliste und Widerruf
- optionale offizielle
cloudflared-Installation (läuft nie beim Plugin-apply()) - Verbindungsdiagnose (bereinigte Kandidaten, cloudflared-Pin/Verify, Disclaimer-Version)
- Quick-Tunnel-Disclaimer-Checkbox (vor Start erforderlich)
Mobile RPC
Allowlist-Methoden (alles andere ist forbidden):
status.get · session.list · session.history · session.subscribe · session.unsubscribe · host.subscribe · session.prompt · session.cancel · session.create · respond · device.name
Pushes umfassen Sitzungsereignisse plus approval.requested / question.requested (mit rpcId für respond). Drahtformat: docs/03-protocol.md.
Öffentlicher Tunnel
Standard aus. Start aus den Einstellungen erst nach Akzeptieren des Disclaimers (disclaimerAccepted: true). Der cloudflared-Quick-Tunnel zeigt nur auf 127.0.0.1:<data-plane-port>. /m wird unter einer https://<random>.trycloudflare.com-URL erreichbar; die Kopplung braucht weiterhin das Fragment-Token (oder die PIN) und E2EE. Der Kindprozess wird beim Plugin-Unload / Stop beendet.
Tunneln Sie niemals Port 3080 / dsh web. Ein selbst gehosteter Rendezvous-Worker (Desktop und Telefon beide outbound, Geschäftsframes weiterhin E2EE) ist optional; siehe docs/05-cloud-relay.md. Er braucht einen Cloudflare-Workers-Paid-Plan und ist kein öffentliches Relay dieses Projekts.
Sicherheit
Invarianten (vollständiges Modell: docs/04-threat-model.md):
- Unauthentifizierte Verbindungen behandeln nur den Handshake.
deviceTokenwird als SHA-256 gespeichert; Schlüssel und Registry-Dateien sind0600.- RPC-Allowlist, Standard ablehnen; Schreibvorgänge werden auf
deviceIdauditiert. - Die Verwaltungsebene ist Loopback + Host + CSRF.
- Das Plugin schwächt
dsh web/apinicht und übernimmt keineapi-proxy-Provider.
Ehrliche v0-Grenze: der erste HTTP-Download von /m in einem rohen LAN kann MITM werden. Bevorzugen Sie ein Overlay-VPN.
Verbote:
- Teilen Sie keine fremden Zugangsdaten.
- Überwachen Sie keine Konten ohne Berechtigung.
- Binden Sie den Datenebenen-Port nicht auf
0.0.0.0ans öffentliche Internet (ein vom Benutzer explizit gestarteter Quick Tunnel ist die Ausnahme). - Unterstellen Sie keine offizielle DeepSeek-Unterstützung.
Beispiele in der Doku verwenden nur example.com, 127.0.0.1 und YOUR_TOKEN.
Architektur
Zwei Ebenen, Modulkarte, Speicher und Handshake: docs/02-architecture.md · 中文.
MVP-Entscheidung (Route B): docs/01-mvp-scope.md.
Dokumentation
| Doc | Zweck |
|---|---|
| INSTALL.md | Installieren, koppeln, Tunnel |
| CHANGELOG.md | Release-Historie |
| docs/00-project-rules.md | Versionierung, öffentlich vs. nur lokal, Host-DSH-Grenze |
| docs/01-mvp-scope.md | ADR: MVP-Umfang (Chinesisch) |
| docs/02-architecture.md | Interne Architektur · 中文 |
| docs/03-protocol.md | RPC-Allowlist und Push-Umschläge (Chinesisch) |
| docs/04-threat-model.md | Assets, Angreifer, Invarianten (Chinesisch) |
| docs/05-cloud-relay.md | Selbst gehosteter Rendezvous-Worker (M5) |
| CONTRIBUTING.md | Beitragsleitfaden |
| AGENTS.md | Agent-/Operator-Regeln (kein Produktions-Neustart) |
Verwandt
- dsh-coding-subscription-oauth — Schwester-Plugin; das Dokumentationslayout ist daran angelehnt.
- GitHub:
lninghaha/dsh-coding-remote-kit. - Dieses Plugin ist unabhängig vom Nutzungszentrum-Plugin
dsh-hub-oauth-gateway. - Es ersetzt nicht
@deepseek-ai/dsh.
Mitwirken
Issues und PRs sind willkommen. Siehe CONTRIBUTING.md für die Docker-Sandbox, Commit-Konventionen und Dokumentenschichten.
Lizenz
MIT.