DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

longsiqi-123 /

longsiqi-123/dsh-pad-kit

Verified

Run DeepSeek Harness on an Android tablet via Termux: LAN installer page, SSH setup, Termux:Boot autostart.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@3005e653

dsh-pad-kit

在安卓平板上本地运行 DeepSeek Harness(DSH),用平板自己的浏览器打开。

它操作的是平板自己的文件、应用和命令 —— 不是在平板上远程操控电脑上的文件。

装这个插件

DSH 里 插件 → 添加插件,输入框里填下面任意一种,点「安装」,装完点「立即启用」:

来源 填什么
npm 包 dsh-pad-kit
GitHub github:longsiqi-123/dsh-pad-kit
GitHub(完整地址) https://github.com/longsiqi-123/dsh-pad-kit
本地压缩包 …\dist\dsh-pad-kit.zip 的绝对路径
本地目录 解压后那个文件夹的绝对路径

命令行等价:

dsh plugin add dsh-pad-kit
dsh plugin add github:longsiqi-123/dsh-pad-kit

装完需要重启一次 DSH,tablet_* 这 7 个工具才会出现在工具列表里(新增插件行不热加载)。

一、它是什么

谁 得到什么
平板 平板浏览器里的 Web 网页,打开就是 DSH 本体,重启后照样能用
电脑 DSH 里多出 7 个 tablet_* 工具,负责安装与状态检查
安装方式 局域网私有部署,安装页形如 http://<电脑IP>:8090/(同一 Wi-Fi 内有效,不是公网网址)

全程不用 adb、不用 root、不用数据线。电脑只是安装工,装完关掉也不影响平板使用。

二、平板上怎么用

  1. 平板浏览器打开那个 Web 网页,收藏书签或加到桌面
  2. 就是完整的 DSH Web 界面:新会话、插件、工作区都跑在平板本地
  3. 平板重启后入口不变,自动跳到当次有效地址,不用重新找

打不开就是平板上的服务没起来,电脑侧跑一次 tablet_kit_setup。


三、为什么需要它(三个硬问题)

DSH 官方没有 Android 版,唯一能在平板本地跑的是 CLI + Web GUI(npm i -g @deepseek-ai/dsh)。 但直接装上有三处硬伤,本套件逐一补掉:

# 坑 直接装会看到 这里的处理
1 原生绑定没有 android-arm64 预编译包 dsh: host preparation failed: No usable native binding found for node-addon-require-builtin-android-arm64 (auto) 在平板现场用 node-gyp 编译 require_builtin.node(narb_product=require-builtin),包装成可选包塞进 dsh 的 node_modules
2 Android 没有 flock 每轮对话报 本轮运行失败 flock is not supported on android-arm64 给 @deepseek-ai/node-addon-system/lib/flock.js 放行 android,单实例运行直接跳过加锁
3 Android 禁硬链接 EACCES: permission denied, link '...jsonl.zstd.tmp' -> '...jsonl.zstd' 会话持久化里的 link() 改成「失败就 copyFile」,保留原有的不覆盖语义

三个补丁都是锚点匹配 + 幂等:锚点对不上就退出、不写文件;已打过会打印「跳过」。所以反复执行无害。


四、前提条件

# 条件 怎么检查 不满足会怎样
1 平板是 arm64/aarch64、Android 7+ Termux 里 getprop ro.product.cpu.abi → arm64-v8a node 或编译产物跑不起来
2 电脑和平板在同一 Wi-Fi、同一网段、双向能连 TCP(未开 AP 隔离/访客网络) 平板浏览器能打开 http://<电脑IP>:8090/;装完后电脑能 ssh -p 8022 到平板 平板连不上电脑→装不上;电脑连不上平板→远程工具全挂
3 电脑防火墙放行 TCP 8090(安装期间) curl 一直转圈就是没放行 命令卡住或直接失败
4 平板允许安装未知来源应用 设置 → 应用 → 特殊权限 Termux 装不上,后面全断
5 平板能访问 npm Termux 里 curl -I https://registry.npmjs.org 装 dsh 失败
6 平板约 1.5 GB 空闲空间 df -h /data 编译到一半 No space
7 安装那 1~3 分钟里平板不锁屏、Termux 在前台 — Termux 被冻结,编译中断
8 电脑有 OpenSSH 客户端 ssh -V(Win10 1809+ 自带) 远程工具全部不可用
9 电脑侧 DSH 重启过一次 工具列表里出现 tablet_* 新增插件行不热加载,工具不会出现
10 电脑侧 DSH ≥ 0.1.7-rc.2(要支持用户插件机制) DSH 版本号;插件启动时会自检 所有 tablet_* 工具直接返回「当前 DSH 版本不支持」

第 10 条的细节:版本依次从 DSH_VERSION 环境变量、process.argv 上级目录的 package.json 里取, 都识别不到时放行(避免误伤)。低于门槛时不会装到一半才失败,而是一开始就给结论。 只有第 7 条是"必须有人在平板前面"的。整个流程里人工只出现两次:第一次装 Termux 并粘一行命令、Termux 被冻结后切回前台。


五、连接是怎么建立的(不用数据线、不用 adb)

全程没有任何"直连"要求,靠的是同一局域网内的三段访问:

平板浏览器 ──① 打开安装页 ──▶ 电脑:8090            (平板主动,HTTP)
平板 Termux ──② 报到 ───────▶ 电脑:8090 /register  (平板主动,HTTP)
电脑 DSH ───③ SSH 运维 ────▶ 平板:8022            (电脑主动,SSH)
  • ① ② 是平板连电脑:安装阶段的前置条件,平板必须能打开 http://<电脑IP>:8090/
  • ③ 是电脑连平板:安装脚本会在平板上起 sshd(8022),之后大多数套件工具走这条
  • 三段都只要求「同一网段 + TCP 能通」:不用数据线、不用 adb、不用 root、不用公网 IP

怎么确认连接成立

# ① 平板 → 电脑:平板浏览器打开 http://<电脑IP>:8090/ ,能看到安装页
# ② 报到:跑完那行 curl,电脑侧 tablet_targets 里冒出 u0_aXXX@<平板IP>:8022
# ③ 电脑 → 平板:ssh -p 8022 <termux用户>@<平板IP> echo ok   → 打印 ok

连不上的三种典型原因

现象 原因
平板打不开 8090 不在同一 Wi-Fi;路由器开了 AP 隔离/访客网络;电脑防火墙拦了 8090
能开安装页但没报到 平板没跑那行 curl;或平板走的是蜂窝流量(与电脑不同网段)
报到了但 ssh 连不上 Termux 被系统冻结(切前台 / termux-wake-lock);或平板 DHCP 换了 IP

六、平板端:安装与开机自启

安装页会自动分岔

打开 http://<电脑IP>:8090/,页面第一屏就问「平板有没有 Termux」:

平板状态 你要做的 之后
没有 Termux 点「下载 Termux APK」→ 装 → 打开 再走下面「已有」那一行
已有 Termux 在 Termux 里粘一行 curl -fL http://<电脑IP>:8090/bootstrap.sh | bash

那一行命令进 Termux 后先自检、再决定装什么,任意一项不过就直接给结论:

自检项 不通过时做什么
是否在 Termux 里($PREFIX + /data/data/com.termux) 退出,提示先装 Termux
pkg 命令是否存在 判定为应用商店旧版(0.101),要求换 F-Droid/GitHub 版
架构是 arm64 非 arm64 直接退出
Android ≥ 7.0(SDK 24) 退出并说明
/data 剩余 ≥ 1.5 GB 退出并说出还差多少
curl 能跑 自动 apt update && apt full-upgrade 修 libssl 符号;仍坏才退出
能连通电脑 8090/healthz 退出,列出三个常见原因(不同 Wi-Fi / AP 隔离 / 防火墙)
sshd 存在 自动 pkg install openssh;缺包就切官方源重试

八项全过才动手装 DSH 本体 —— 环境不对会在几秒内给结论,不会装到一半才失败。

开机自启(Termux:Boot)

安装脚本会把开机脚本写好:

~/.termux/boot/start-dsh.sh      # wakelock → sleep 8 → bash ~/start-dsh.sh → 日志进 ~/dsh-boot.log

但 Android 只认装了 Termux:Boot 应用的开机脚本,否则这个目录没人读。所以:

状态 你要做的
还没装 Termux:Boot 打开安装页点「下载 Termux:Boot APK(0.8.1)」,装完打开它一次
已装 不用管,重启平板后 DSH 会自己起来
验证 重启后平板浏览器打开那个网页地址,能开就是成功;不行看 cat ~/dsh-boot.log

装 Termux:Boot 不需要 root,也不改任何系统设置 —— 它只是把自己注册成开机广播接收器。


七、全流程时间线

T0  电脑:调 tablet_install_page
        → 插件生成 SSH 密钥(%USERPROFILE%\.dsh\pad-kit\id_ed25519,没有才生成)
        → 起局域网安装页,返回 http://172.24.x.x:8090/

T1  平板:浏览器打开该地址(页面上有二维码)
        → 「下载 Termux APK」→ 允许未知来源 → 安装 Termux      ← 人工动作 1

T2  平板:打开 Termux,粘贴页面上那一行:
          curl -fL http://172.24.x.x:8090/bootstrap.sh | bash   ← 人工动作 2

T3  平板自动(约 10 秒)
        ├─ pkg install openssh curl
        ├─ 把电脑公钥写进 ~/.ssh/authorized_keys
        ├─ ssh-keygen -A ;nohup sshd(监听 8022)
        └─ curl /register?user=u0_aXXX&port=8022   → 向电脑报到

T4  电脑:插件收到报到,写 ~/.dsh/pad-kit/tablets.json
        到这里「通道 + 认证」都通了

T5  平板自动(1~3 分钟,最容易失败的一段)
        ├─ pkg install nodejs clang make python3 binutils
        ├─ npm i -g @deepseek-ai/dsh --ignore-scripts
        ├─ 编译 require_builtin.node 并装成 android-arm64 可选包
        ├─ 补丁 1:放行 android 的 flock
        ├─ 补丁 2:硬链接失败降级 copyFile
        └─ 起服务与固定入口,打印 FIXED_URL

T6  电脑:tablet_targets      → u0_aXXX@172.24.x.x:8022
        tablet_kit_status    → NODE / DSH / BINDING / FLOCK=patched / LINK=patched / HOME_3081=302

T7  平板:用平板自己的浏览器打开那个 Web 网页 → 就是平板上的 DSH 本体

八、每步谁做、失败怎么办

步骤 谁做 耗时 失败信号 处理
起安装页 插件(一条命令) 1 秒 端口 8090 已被占用 改配置 httpPort 换端口
装 Termux 人 1 分钟 提示"禁止安装" 开未知来源权限
粘那一行 人 5 秒 curl: not found Termux 没装好,重来
建 SSH 通道 平板自动 10 秒 报到失败 仍可用 tablet_targets 手动登记 host/user/port
装 node + dsh 平板自动 1~2 分钟 E: Unable to locate package 换 termux 源(见故障排查)
编译原生绑定 平板自动 1~2 分钟 CMake does not seem to be available pkg install clang make python3
打补丁 平板自动 2 秒 锚点不匹配 → 直接退出不写文件 dsh 升级后重跑 tablet_kit_setup
起服务 平板自动 3 秒 网页返回 503 tablet_kit_setup 重跑
日常控制 电脑(工具) 毫秒级 banner exchange 超时 tablet_wake,或把 Termux 切前台

九、工具(本包 7 个)

套件工具(pad-kit,管安装与状态)

工具 作用
tablet_install_page 起局域网安装页,返回可发给平板的地址
tablet_bootstrap 输出 bootstrap.sh;sshonly: true 只建 SSH 通道、不装 DSH
tablet_targets 列出已报到平板;也能手动登记
tablet_kit_status 一条命令看全套健康度(版本 / 绑定 / 补丁 / 网页入口 / token)
tablet_kit_setup 远程重跑安装脚本(升级、修复)
tablet_kit_url 取固定入口 + token 直连地址
tablet_kit_apk Termux APK 的局域网下载地址

另需单独安装的 dsh-tablet(本仓库不含,管日常操作)

工具 作用
tablet_sh 主力:执行任意 shell 命令
tablet_info 型号、Android 版本、ABI、内存、存储、运行时长
tablet_ls / tablet_read / tablet_write 列目录、读文件、写文件
tablet_push / tablet_pull 电脑 ⇄ 平板传文件(scp)
tablet_install_apk 推 APK 并打开安装界面(最后一下"安装"要人点)
tablet_launch 起 App(解析主 Activity 后 am start)
tablet_wake termux-wake-lock,防冻结

目标解析顺序:调用参数 → 配置 sshHost/sshUser → 最近一次报到。第一次之后基本不用传参数。


十、做不到的事

想做的 能否 原因
看平板屏幕 ❌ Termux 无 screencap,无 adb,无 root
模拟点击/滑动 ❌ 无 input,无 root,无 termux-api
静默装 APK ❌ Android 要求用户点确认,无 root 没有例外
后台自动拉起浏览器 ❌ Android 10+ 禁后台启动 Activity,am start 静默失败(退出码仍 0)
操作别的 App 的内部按钮 ❌ 只能启动,不能操控 UI

结论:电脑侧这套工具是命令行级远程控制 + 文件通道,不是远程桌面。

要分清两个界面,别混:

界面 跑在哪 操作的是谁的东西
平板浏览器里的 DSH(装完就有,主角) 平板本机 平板自己的文件、目录、命令 —— 这才是本套件的目的
电脑 DSH 里的 tablet_* 工具(配角) 电脑 通过 SSH 去动平板;只是安装和运维通道

不会发生的事:平板的 Web 界面读不到电脑的 C:、D: 盘,所有路径都在平板内;电脑关机后平板浏览器照样能用。


十一、已知问题与设计取舍

这些是刻意记下来的,不是待办清单的隐饰:

问题 现状 建议
报到是"最近一次优先" 同网段任何设备都能 POST /register 把自己登记成候选目标 只用可信网络;需要确定性时在配置里写死 sshHost/sshUser
平板 IP 会变(DHCP) 变 IP 后旧记录连不上 重跑一次 bootstrap(会重新报到),或 tablet_targets 手动改
多台平板 只按最近报到选一台 显式传 host/user,或用配置固定
仅 IPv6 的网络 未适配(/register 只去掉 ::ffff: 前缀,SSH 连 IPv6 需要方括号) 用有 IPv4 的网络
Termux 签名冲突 平板上若已有 F-Droid 版 Termux,装我们这份 GitHub debug 版会签名冲突 先卸载旧版(会丢数据),或直接沿用旧版 Termux——bootstrap.sh 不挑来源
Google Play 版 Termux 早已停止维护,装不上新版包 不要用
npm 慢 setup.sh 用默认源 平板能访问 registry.npmmirror.com 的话,可先 npm config set registry https://registry.npmmirror.com 再跑
dsh 升级后补丁失效 npm i -g 会覆盖被补丁的文件 升级后跑一次 tablet_kit_setup;tablet_kit_status 会显示 FLOCK/LINK=failed 提示
node 大版本变化 编译产物按 napi-v9 打,跨大版本可能需重编 重跑 tablet_kit_setup
安装期间锁屏 编译中途被冻结 → 半成品 安装时别锁屏,Termux 留前台
Windows 缺 ssh 客户端 ssh.exe 不存在时报 ssh 不存在 设置 → 应用 → 可选功能 → 添加 OpenSSH 客户端
macOS/Linux 路径 已按平台取 ssh/ssh-keygen 无
安装页常驻 装完仍在监听 8090 可接受;不想开就在配置里换端口或重启 DSH

十二、故障排查

现象 原因 处理
还未认到平板 / 工具提示先装 平板没报到过 先 tablet_install_page,平板跑完那行命令
连不上 …: Termux 的 sshd 没应答 Termux 被冻结 平板:termux-wake-lock;设置 → 电池 → 后台耗电管理 → Termux → 不受限制
SSH 公钥被拒绝 公钥没写进去 重跑 bootstrap,或把 ~/.dsh/pad-kit/id_ed25519.pub 追加到平板 ~/.ssh/authorized_keys
E: Unable to locate package openssh pkg 镜像缺包 echo "deb https://packages.termux.dev/apt/termux-main stable main" > $PREFIX/etc/apt/sources.list && apt update
CMake does not seem to be available 缺编译工具链 pkg install -y clang make python3 binutils
flock is not supported 又出现 补丁被 npm 覆盖 tablet_kit_setup
网页返回 503 平板上 dsh 没在跑 tablet_sh "bash ~/start-dsh.sh"
平板浏览器打不开安装页 不同网段 / AP 隔离 / 防火墙 检查同 Wi-Fi、放行 8090
工具列表里没有 tablet_* 新增插件行不热加载 重启 DSH

十三、安全与卸载

安全:安装页会把公钥暴露给同网段(公钥本身无害),但 /register 接受任意设备的报到,等于"最近报到的设备会被当作目标"。在不可信网络里务必显式配 sshHost;平板侧 sshd 只允许公钥登录,不要打开密码登录。

卸载

平板上:

pkill -f dsh
rm -rf ~/dsh-android-kit ~/dsh-home.js ~/start-dsh.sh ~/dshpad ~/.dsh-kit
npm rm -g @deepseek-ai/dsh

电脑上:删掉 cordis.patch.yml 里的 - insert: id: pad-kit 那段、删掉 package.json 里的 @local/dsh-pad-kit、删掉 ~/.dsh/plugins/dsh-pad-kit,重启 DSH。


十四、目录结构

dsh-pad-kit/
├── install-windows.ps1     Windows 一键安装(幂等)
├── install-unix.sh         macOS/Linux 一键安装(幂等)
├── installer-page.js       不装插件也能用的独立安装页(node installer-page.js)
├── lib/plugin.js           插件本体(7 个工具 + 局域网安装页)
├── kit/                    推给平板的脚本
│   ├── setup.sh            平板侧一键脚本(6 步)
│   ├── install-addon.sh    安装编译出的原生绑定
│   ├── patch-flock.js      补丁 1
│   ├── patch-link.js       补丁 2
│   ├── narb-build.tgz      原生绑定源码包(binding.gyp 已设 require-builtin)
│   ├── dsh-home.js         固定入口跳转页
│   ├── start-dsh.sh        启动器(含 wake-lock)
│   └── termux.apk          Termux(arm64,GitHub debug 版,35,106,607 字节)
├── dsh-android-kit.tgz     上面 kit/ 的打包(不含 APK,避免重复)
├── package.json / cordis.patch.yml
└── README.md / 使用说明.md
—/ 5

No ratings yet

Verified DSH bundle

Commit 3005e65333c1

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout