Bundle
dsh-on-phone
让手机成为 DeepSeek Harness 的第二块屏:手机浏览器打开你自己 tailnet 里的地址,就能直接用电脑上的 DSH。默认走 Tailscale Serve,无需配对、不经第三方中继。
- Source
- JauLukNgai
- stars
- 1 stars
- License
- Apache-2.0
- Updated
- Updated 2 days ago
Readme
<h1 align="center">dsh-on-phone</h1> <p align="center"><b>在手机上使用电脑里的 DeepSeek Harness。</b></p> <p align="center">电脑和手机都装好 Tailscale、登录同一个账号,用手机浏览器打开电脑的地址即可。除了 Tailscale,两边不用再装任何东西 —— 没有专用 App、没有二维码、没有登录页。</p> <p align="center"> <a href="https://github.com/JauLukNgai/dsh-on-phone"><img src="https://img.shields.io/badge/github-JauLukNgai%2Fdsh--on--phone-181717?logo=github" alt="GitHub"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-0F172A" alt="Apache-2.0"></a> <a href="package.json"><img src="https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24-339933?logo=nodedotjs&logoColor=white" alt="Node"></a> <a href="#支持哪些-dsh-版本"><img src="https://img.shields.io/badge/DSH-0.1.0--rc.5%20…%200.2.0--rc.2-4B5563" alt="DSH"></a> <a href="#快速开始"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-0F172A" alt="Platform"></a> </p> <p align="center"> <a href="#特性">特性</a> · <a href="#快速开始">快速开始</a> · <a href="#什么时候不适合用这个">不适合谁</a> · <a href="#安全">安全</a> · <a href="TROUBLESHOOTING.md">排障</a> · <a href="CHANGELOG.md">更新记录</a> · <a href="README.en.md">English</a> </p> <p align="center"> <img src="assets/screenshots/left.PNG" width="26%" alt="手机上的会话与工作区抽屉"> <img src="assets/screenshots/main.PNG" width="26%" alt="手机上的 DSH 首页与输入框"> <img src="assets/screenshots/right.PNG" width="26%" alt="手机上的右侧工具面板"> </p> ## 特性 - **同一个 DSH,两个屏幕** — 会话列表、工作区、消息记录、你选的模型,两台设备上是同一份;一边发出的消息,另一边立刻可见。界面就是电脑上那个界面本身,只是按钮、抽屉和输入框被改成了适合手指的尺寸。 - **数据留在你自己的链路里** — 两台设备之间直连点对点,插件不设账号体系、不引入任何中转服务,也不上传任何内容。访问权由你自己的 Tailscale 私有网络决定。 - **电脑不限系统,手机不限机型** — 电脑端支持 macOS、Windows 与 Linux;手机端 iOS 与 Android 一致,只需要一个能打开网页的浏览器。 - **启用即用,手机端零配置** — 在 DSH 面板点一下启用,把地址复制到手机浏览器即可。不需要配对、不需要在手机上登录任何账号,也不需要在手机上安装第二个应用。 ## 快速开始 ### 1 · 让电脑和手机进入同一张 tailnet 这一步装的是 [Tailscale](https://tailscale.com/download) 官方的连网工具,和本插件不是一回事。 - **电脑** —— 装桌面版并登录。 - **手机** —— 从 App Store 或 [Google Play](https://play.google.com/store/apps/details?id=com.tailscale.ipn) 安装,用**同一个账号**登录,然后打开开关把连接连上:iOS 首次会弹「Tailscale 想要添加 VPN 配置」,要允许;Android 首次会请求允许建立 VPN 连接。手机上显示已连接,才算准备好。 手机上如果配过自定义 DNS(NextDNS、AdGuard 这类),要把它改回「自动」,否则后面打不开插件的地址。改法见 [排障手册](TROUBLESHOOTING.md#4-远程通道显示-ready-但不可达)。 两台设备都连上后,设备列表里应该能互相看到。用不同账号的话,在 [Machines](https://login.tailscale.com/admin/machines) 里把电脑节点 Share 给对方。 ### 2 · 打开 tailnet 上的两个开关 管理后台的 [DNS 页面](https://login.tailscale.com/admin/dns),两个都要开: | 开关 | 不开会怎样 | | --- | --- | | **MagicDNS** | 手机解析不了电脑的地址,页面打不开。 | | **HTTPS Certificates** | 拿不到 HTTPS 证书,**启用远程访问会失败**。失败时面板只给一句笼统提示,不会告诉你是这项没开 —— 遇到莫名其妙的启用失败,先回来看它。 | ### 3 · 在电脑上安装插件 两种装法,选一种: **1. npm 安装**(推荐) ```bash dsh plugin --profile web add dsh-on-phone@latest ``` Desktop 用不上命令,在 **添加插件** 里填包名 `dsh-on-phone` 即可。 **2. 源码安装**(想改代码或锁定某个提交时用;需要 Node `^22.19.0 || >=24.0.0`) ```bash git clone https://github.com/JauLukNgai/dsh-on-phone.git && cd dsh-on-phone npm ci && npm run build && npm pack ``` 最后一条命令会打印出 `dsh-on-phone-<版本>.tgz` 的完整路径。 不管你选哪种,接着按你用的是哪个 DSH 走: **DSH Desktop** —— 侧栏打开 **插件** → **添加插件**:npm 安装填包名 `dsh-on-phone`,源码安装填上面那个 tgz 的完整路径。点 **安装**,装完点 **立即启用**。Desktop 的插件由它自己管,命令行装不了 —— `dsh plugin --profile desktop` 会被直接拒绝。 **DSH CLI** —— npm 安装用第一条命令;源码安装就先 `cd dsh-on-phone`,然后: ```bash dsh plugin --profile web add "$PWD/$(ls -1 dsh-on-phone-*.tgz | sort -V | tail -1)" ``` `web` 是 `dsh web` 用的 profile;你如果跑的是别的 profile,把名字换掉。 <details> <summary>想换新版本?</summary> 插件不会自动更新,得先卸再装:Desktop 在插件面板里打开 **dsh-on-phone**、点 **卸载**,再按上面选的那种装法装一次(npm 装法填包名,源码装法添新版本的 tgz);CLI 用 `dsh plugin --profile web remove dsh-on-phone` 再 `add`。 同一个版本重复安装会被跳过,卸载后再装一次即可。 装完如果面板里没出现,**完全退出再打开** DSH —— 插件运行在宿主里,不能热替换。 </details> ### 4 · 在电脑上启用远程访问 在 DSH 左下角打开 **移动访问** 面板,点 **启用远程访问**。面板上会出现一个专属网址(一串以 `.ts.net` 结尾的地址)—— 点 **复制地址** 把它发到手机上。 ### 5 · 在手机上打开 用手机浏览器打开那个地址,就是你电脑上这个 DSH。 电脑上的 DSH 要一直开着:手机连的是电脑上正在运行的那个它。以后每次用,手机上保持 Tailscale 已连接即可。 面板上的 **诊断** 会跑一遍自检并给出可复制的报告,**重新连接** 用于连接出问题时重来一次。这两个按钮只在电脑上能用,手机上碰不到。 ## 什么时候不适合用这个 - **手机装不了 Tailscale** —— 手机和电脑必须在同一张 tailnet 里。 - **要的是随时随地公网访问** —— 它走的是私有网络,不是公网隧道;`Funnel` 和端口转发都被明确禁止 —— 那会让访问控制失效。 - **想让别人用手机访问你的电脑** —— 能打开地址的设备被视为完全可信的操作者,可以读配置、跑工具;所以它只适合你自己的设备。 - **无法常开电脑** —— 手机连的是电脑上正在运行的那个 DSH。 - **用 DSH Web 的会话分享把链接发给别人** —— 那个链接在手机上也打得开,但这条通道只服务你 tailnet 里的设备。 ## 安全 - **只有你 tailnet 里的设备能访问。** 请只把可信设备加入 tailnet。 - **不要开 Tailscale Funnel**,也不要用端口转发把它暴露到公网 —— 那会让访问控制失效。不用时关掉面板上的开关。 - 已知限制:DSH 自身的页面安全策略允许内联脚本。这个风险不由本插件引入,也无法在这一层消除。 完整威胁模型见 [SECURITY.md](SECURITY.md)。 ## 排障 完整的排障手册在 [TROUBLESHOOTING.md](TROUBLESHOOTING.md)。最常见的三种: - **手机打不开地址** — 确认手机 Tailscale 在运行、和电脑同一账号,且打开的是面板上那个地址(不是 `localhost`);再回[快速开始](#快速开始)第 2 步检查那两个开关。Tailscale 明明连着、用 IP 也通,只有域名打不开的话,是手机上的 DNS 设置,见手册 [§4](TROUBLESHOOTING.md#4-远程通道显示-ready-但不可达)。 - **面板显示就绪但地址打不开** — 先点 **重新连接**;若提示端口被占用,说明电脑上 443 已被别的服务(例如你自己配的另一个 `tailscale serve`)占着,见手册 [§4](TROUBLESHOOTING.md#4-远程通道显示-ready-但不可达)。 - **页面排版乱了** — 地址后临时加 `?frontend=stock` 可加载 DSH 原生页面,用来判断问题出在哪一层。 ## 支持哪些 DSH 版本 已验证 `0.1.0-rc.5` 到 `0.2.1-rc.2` 这一段的预发布版本,完整清单见 [package.json](package.json) 的 peerDependencies。安装成功却「没有任何反应」,通常就是撞上了版本门禁,见[排障](#排障)。 ## 参与贡献 欢迎 [Issue](https://github.com/JauLukNgai/dsh-on-phone/issues) 与 PR,见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 卸载 Desktop 用户在插件面板里打开 **dsh-on-phone** 点 **卸载**;命令行用户: ```bash dsh plugin --profile web remove dsh-on-phone # 只卸载插件 dsh plugin --profile web exec dsh-on-phone purge --yes # 连同 $DSH_HOME/mobile-access/ 一起清理 ``` `purge` 会把 `$DSH_HOME/mobile-access/` 整个删掉(配置、自定义 CSS/JS、扩展都在里面)。Desktop 上卸载后想一并清干净,手动删掉这个目录即可。 ## 许可与致谢 Apache-2.0,详见 [LICENSE](LICENSE)。项目最初 fork 自 [dsh-mobile](https://github.com/saya-ch/dsh-mobile),此后宿主与客户端实现已重写;远程通道建立在 [Tailscale Serve](https://tailscale.com/kb/1242/tailscale-serve) 之上。
Install
dsh plugin --profile web add github:JauLukNgai/dsh-on-phone
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-on-phone from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.