# dsh-coding-remote-kit **v0.7.1** · DeepSeek Harness `0.1.1-rc.2` / `0.1.5-rc.2` · GitHub `dsh-coding-remote-kit` **[DeepSeek Harness](https://github.com/deepseek-ai/dsh) 向けのリモートスマホアクセス。** すでに `dsh web` が動いているデスクトップにスマホをペアリングし、セッションを観察して限定された書き込みだけを行う——フル Web API は公開しません。 [![npm](https://img.shields.io/npm/v/dsh-coding-remote-kit.svg)](https://www.npmjs.com/package/dsh-coding-remote-kit) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) *[English](README.md) · [中文版](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Português (BR)](README.pt-BR.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)*
--- > **Upgrade / 升级:** Follow the versioned steps in [`INSTALL.md`](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.2` is their shared npm dependency, not a separate DSH plugin. --- コミュニティプラグインです。**DeepSeek とは無関係であり、公式の後援もありません。** 製品意図はデスクトップ IDE の複製ではなく、[Orca Mobile Companion](https://www.onorca.dev/docs/mobile) に近いです。 このリポジトリを変更する前に [`AGENTS.md`](AGENTS.md) を読んでください:**本番の `dsh-web` を自分で再起動しないでください。** tarball を用意し、再起動はオペレーターが行います。 ## 名称 当初の GitHub リポジトリ名は `dsh-mobile-remote` でした。npm 上の **`dsh-mobile-remote` は別プロジェクト**(WeChat リモコンプラグイン)です。本プラグインの公開名は `dsh-coding-remote-kit` です。 | | これを使う | 説明 | |---|---|---| | npm | `dsh-coding-remote-kit@0.7.1` | `dsh plugin --profile web add dsh-coding-remote-kit@0.7.1` | | GitHub | [`lninghaha/dsh-coding-remote-kit`](https://github.com/lninghaha/dsh-coding-remote-kit) | 旧 checkout 名 `dsh-mobile-remote` | | Cordis プラグイン id | `mobile-remote` | 変更なし | | 設定ページ HTTP | `/api/mobile-remote/*` | 変更なし | | ストレージ | `$DSH_HOME/storages/mobile-remote/` | 変更なし | **`dsh plugin add dsh-mobile-remote` は実行しないでください** — 無関係な WeChat プラグインが入ります。 ## 状態 | マイルストーン | 状態 | | --- | --- | | 調査(Orca / DSH エコシステム) | 完了 — [`docs/research/`](docs/research/) | | M1 プラグイン骨格 + ADR / 脅威モデル | 完了 | | M2 ペアリング / LAN データプレーン | 完了 | | M3 狭い RPC / 承認 | 完了 | | M4 署名付き HTTPS / ネイティブアプリ | 未着手 | | M5 自前ランデブー Worker | 完了 — [`docs/05-cloud-relay.md`](docs/05-cloud-relay.md) | ## 特徴 - **二言語 UI** — デスクトップ設定とスマホ companion は中国語 / English(`?lang=` またはアプリ内切替;既定は `navigator.language`)。 - **一度ペアリング** — デスクトップが QR コードまたは 8 桁 PIN を表示。スマホはデスクトップの X25519 公開鍵をピン留めし、`deviceToken` を保持します(サーバーは SHA-256 のみ保存)。 - **デュアルプレーン** — 管理ルートはループバックの `dsh web` に残し、モバイルデータプレーンは専用ポート(既定 `6879`)上の RPC 許可リストです。 - **ハンドシェイク後の E2EE** — `/m/ws` は tweetnacl secretbox。未認証ソケットはセッション内容を見ません。 - **狭い書き込み** — セッション観察、承認/質問への応答、短い返信。重い編集はデスクトップに残します。 - **プライベートネットワーク優先** — LAN / Tailscale を推奨。任意の Cloudflare Quick Tunnel は **データプレーンのみ** を公開し、ポート `3080` は決して公開しません。任意の自前ランデブー Worker:デスクトップとスマホはどちらも出向き、業務フレームは E2EE のままです。 - **標準プラグイン形** — Cordis サーバープラグイン 1 つ + classic-script 設定ページ。`dsh plugin --profile web add` には **file tarball** を使い、`link:` 作業ツリーは使いません。 ## スクリーンショット

デスクトップ設定 — QR と PIN のペアリング   デスクトップ設定 — チャネル状態とペア済みデバイス

デスクトップ Settings → Mobile Remote:ペアリング offer(左)· チャネル状態とデバイス(右)

スマホのペアリング画面    スマホのセッション一覧

スマホ:PIN 入力 / スキャン(左)· ペアリング後のセッション一覧(右)

## このプラグインが解決する問題 | 検索 / 見たもの | 実際に壊れていたこと | このプラグインの対応 | |---|---|---| | 「DSH 向け Orca 風スマホ companion」 | 公式 DSH に一等のペアリングモバイルアプリがない | セマンティック companion:ペアリング + E2EE + 許可リスト RPC | | スマホ上の `dsh-pocket` / `dsh-web-remote` | LAN/公開網上のフル `dsh web` 面 | デュアルプレーン。未知の RPC メソッドは `forbidden` | | スマホはセルラー、デスクトップは LAN | 生の LAN HTTP ページは MITM され得る | Tailscale を優先。任意の Quick Tunnel(エッジで TLS、オリジンは localhost) | | プラグイン `import` 失敗でポート 3080 が落ちた | DSH はプラグインツリー全体を fail-fast する | サンドボックス門禁 + リポジトリ外へコピーした tarball。`link:` 禁止 | ## クイックスタート ```bash dsh plugin --profile web add dsh-coding-remote-kit@0.7.1 ``` その後、**オペレーター** が自分の時間枠で既存の `dsh web` を再起動します。**Settings → 移動远程** を開き、ペアリング offer を作成し、スマホで QR をスキャン(または PIN を入力)します。 ソース checkout(開発)から: ```bash pnpm test:sandbox pnpm pack mkdir -p "$HOME/.dsh/packages" cp dsh-coding-remote-kit-0.7.1.tgz "$HOME/.dsh/packages/" dsh plugin --profile web add "$HOME/.dsh/packages/dsh-coding-remote-kit-0.7.1.tgz" ``` この作業ツリーに対して `dsh plugin add ./` を実行しないでください。pnpm 11 は一部の `file:` tarball パスを `link:` ソースとして扱い、入口 import が失敗すると GUI 全体が落ちます。 ## 目次 - [名称](#名称) - [状態](#状態) - [特徴](#特徴) - [スクリーンショット](#スクリーンショット) - [このプラグインが解決する問題](#このプラグインが解決する問題) - [クイックスタート](#クイックスタート) - [インストール](#インストール) - [仕組み](#仕組み) - [設定ページ](#設定ページ) - [モバイル RPC](#モバイル-rpc) - [公開トンネル](#公開トンネル) - [セキュリティ](#セキュリティ) - [アーキテクチャ](#アーキテクチャ) - [ドキュメント](#ドキュメント) - [関連プロジェクト](#関連プロジェクト) - [コントリビュート](#コントリビュート) - [ライセンス](#ライセンス) ## インストール DeepSeek Harness `0.1.1-rc.2`(ピン留め)と Node.js 22.19+ が必要です。手順、ペアリング、トンネルの詳細は [INSTALL.md](INSTALL.md) を参照してください。 開発: ```bash 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` で提供されるスマホページ ## 仕組み ```text Settings (loopback) Phone browser │ │ │ QR / PIN ────────────────┤ ▼ ▼ /api/mobile-remote/* GET /m + WS /m/ws (dsh web, :3080) (data plane, :6879, E2EE) ``` 管理面はホスト Web のループバック囲いの内側に残します。データプレーンは独立した `node:http` + `ws` サーバーです。ペアリング時に `127.0.0.1` から `0.0.0.0` へ再バインドして LAN クライアントが接続できるようにする場合があります。稼働中の Quick Tunnel があるときは HTTPS origin を広告し、バインドを広げません。 ## 設定ページ **Settings → 移動远程** を開きます: - 状態(bind、ポート、リスン中か、アクティブ端末、トンネル、ランデブー) - **LAN** / **Quick Tunnel** / **rendezvous** チャネル - offer 作成 → QR + 8 桁 PIN - 端末一覧と取り消し - 任意の公式 `cloudflared` インストール(プラグイン `apply()` 時には決して実行しません) - 接続診断(マスク済み候補、cloudflared ピン/検証、免責バージョン) - Quick Tunnel 免責チェックボックス(Start 前に必須) ## モバイル RPC 許可リストのメソッド(それ以外はすべて `forbidden`): `status.get` · `session.list` · `session.history` · `session.subscribe` · `session.unsubscribe` · `host.subscribe` · `session.prompt` · `session.cancel` · `session.create` · `respond` · `device.name` プッシュにはセッションイベントに加え、`respond` 用の `rpcId` 付き `approval.requested` / `question.requested` が含まれます。ワイヤ形式: [docs/03-protocol.md](docs/03-protocol.md)。 ## 公開トンネル 既定は **オフ**。設定ページで免責に同意(`disclaimerAccepted: true`)してから Start。`cloudflared` Quick Tunnel は **`127.0.0.1:` だけ** を指します。`/m` は `https://.trycloudflare.com` URL で到達可能になります。ペアリングには引き続きフラグメントトークン(または PIN)と E2EE が必要です。子プロセスはプラグイン unload / Stop 時に kill されます。 ポート `3080` / `dsh web` をトンネルしてはいけません。自前ランデブー Worker(デスクトップとスマホはどちらも出向き、業務フレームは E2EE のまま)は任意です。[docs/05-cloud-relay.md](docs/05-cloud-relay.md) を参照。Cloudflare Workers Paid プランが必要で、**本プロジェクトが運用する公開リレーではありません**。 ## セキュリティ 不変条件(完全なモデル: [docs/04-threat-model.md](docs/04-threat-model.md)): 1. 未認証接続はハンドシェイクのみ処理します。 2. `deviceToken` は SHA-256 として保存。鍵と登録ファイルは `0600`。 3. RPC 許可リスト、既定拒否。書き込みは `deviceId` に監査されます。 4. 管理プレーンはループバック + Host + CSRF。 5. プラグインは `dsh web` `/api` を弱めず、`api-proxy` プロバイダーを奪いません。 **v0 の正直な境界:** 生の LAN 上での `/m` の初回 HTTP ダウンロードは MITM され得ます。overlay VPN を優先してください。 禁止事項: - 他人の資格情報を共有しない。 - 権限のないアカウントを監視しない。 - データプレーンポートを `0.0.0.0` で公衆インターネットにバインドしない(ユーザーが明示的に開始した Quick Tunnel は例外)。 - DeepSeek 公式の後援を暗示しない。 ドキュメントの例は `example.com`、`127.0.0.1`、`YOUR_TOKEN` のみを使います。 ## アーキテクチャ デュアルプレーン、モジュールマップ、ストレージ、ハンドシェイク: [docs/02-architecture.md](docs/02-architecture.md) · [中文](docs/02-architecture.zh-CN.md)。 MVP 決定(ルート B): [docs/01-mvp-scope.md](docs/01-mvp-scope.md)。 ## ドキュメント | ドキュメント | 用途 | |---|---| | [INSTALL.md](INSTALL.md) | インストール、ペアリング、トンネル | | [CHANGELOG.md](CHANGELOG.md) | リリース履歴 | | [docs/00-project-rules.md](docs/00-project-rules.md) | バージョニング、公開 vs ローカル専用、ホスト DSH 境界 | | [docs/01-mvp-scope.md](docs/01-mvp-scope.md) | ADR: MVP 範囲(中国語) | | [docs/02-architecture.md](docs/02-architecture.md) | 内部アーキテクチャ · [中文](docs/02-architecture.zh-CN.md) | | [docs/03-protocol.md](docs/03-protocol.md) | RPC 許可リストとプッシュエンベロープ(中国語) | | [docs/04-threat-model.md](docs/04-threat-model.md) | 資産、攻撃者、不変条件(中国語) | | [docs/05-cloud-relay.md](docs/05-cloud-relay.md) | 自前ランデブー Worker(M5) | | [CONTRIBUTING.md](CONTRIBUTING.md) | 貢献ガイド | | [AGENTS.md](AGENTS.md) | Agent / オペレーター規則(本番再起動禁止) | ## 関連プロジェクト - [dsh-coding-subscription-oauth](https://github.com/lninghaha/dsh-coding-subscription-oauth) — 兄弟プラグイン。ドキュメント構成の手本。 - GitHub: [`lninghaha/dsh-coding-remote-kit`](https://github.com/lninghaha/dsh-coding-remote-kit)。 - 本プラグインは利用量センタープラグイン `dsh-hub-oauth-gateway` とは独立です。 - `@deepseek-ai/dsh` の代替ではありません。 ## コントリビュート Issue と PR を歓迎します。Docker サンドボックス、コミット規約、ドキュメント層は [CONTRIBUTING.md](CONTRIBUTING.md) を参照してください。 ## ライセンス [MIT](LICENSE)。