🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

手机桥接 kinocode-jp/dsh-mobile

DeepSeek 客户端
kinocode-jp13 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

扫码配对手机,在手机上使用 DSH 并处理审批

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/kinocode-jp/dsh-mobile.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 28 处,展示前 28 条)
  • 发起网络请求
    lib/index.mjs:252
    return route.fetch(request)
  • 发起网络请求
    lib/desktop-api.mjs:35
    async fetch() {
  • 发起网络请求
    lib/desktop-api.mjs:61
    async fetch() {
  • 发起网络请求
    lib/desktop-api.mjs:75
    async fetch() {
  • 发起网络请求
    lib/desktop-api.mjs:94
    async fetch(req) {
  • 发起网络请求
    lib/desktop-api.mjs:115
    async fetch(req) {
  • 读取本地文件
    lib/desktop-api.mjs:120
    const info = await stat(path)
  • 读取本地文件
    lib/desktop-api.mjs:123
    return new Response(Readable.toWeb(createReadStream(path)), {
  • 发起网络请求
    lib/desktop-api.mjs:150
    async fetch(req) {
  • 读取本地文件
    lib/desktop-api.mjs:174
    const info = await stat(path)
  • 读取本地文件
    lib/desktop-api.mjs:177
    for (const entry of await readdir(path, { withFileTypes: true })) {
  • 读取本地文件
    lib/desktop-api.mjs:181
    isDirectory = await stat(join(path, entry.name)).then(s => s.isDirectory(), () => false)
  • 请求外部主机in-process
    lib/gateway-client.mjs:192
    const response = await this.fetchHandler.fetch(new Request('http://in-process/api/$events/result', {
  • 发起网络请求
    lib/gateway-client.mjs:192
    const response = await this.fetchHandler.fetch(new Request('http://in-process/api/$events/result', {
  • 写入本地文件
    lib/state.mjs:45
    await mkdir(this.dir, { recursive: true, mode: 0o700 })
  • 读取本地文件
    lib/state.mjs:47
    const parsed = JSON.parse(await readFile(this.file, 'utf8'))
  • 写入本地文件
    lib/state.mjs:63
    await rename(this.file, `${this.file}.corrupt-${this.now()}`)
  • 写入本地文件
    lib/state.mjs:153
    await writeFile(tmp, `${JSON.stringify(this.data, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    lib/state.mjs:154
    await chmod(tmp, 0o600)
  • 写入本地文件
    lib/state.mjs:155
    await rename(tmp, this.file)
  • 写入本地文件
    lib/tls-store.mjs:68
    await mkdir(this.dir, { recursive: true, mode: 0o700 })
  • 读取本地文件
    lib/tls-store.mjs:70
    const certPem = await readFile(join(this.dir, 'ca.pem'), 'utf8')
  • 读取本地文件
    lib/tls-store.mjs:71
    const keyPem = await readFile(join(this.dir, 'ca-key.pem'), 'utf8')
  • 读取本地文件
    lib/tls-store.mjs:95
    const certPem = await readFile(join(this.dir, 'server.pem'), 'utf8')
  • 读取本地文件
    lib/tls-store.mjs:96
    const keyPem = await readFile(join(this.dir, 'server-key.pem'), 'utf8')
  • 写入本地文件
    lib/tls-store.mjs:117
    await writeFile(tmp, content, { mode })
  • 写入本地文件
    lib/tls-store.mjs:118
    await chmod(tmp, mode)
  • 写入本地文件
    lib/tls-store.mjs:119
    await rename(tmp, path)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:in-process

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 插件,用于 DSH Mobile 安卓应用:扫码配对,在手机上运行 DSH,从通知里直接批准回答。

README

由 DeepSeek 最新模型翻译生成
DSH Mobile — DeepSeek Harness 主机插件 @kinocode/dsh-mobile 是适用于 DSH Mobile Android 应用的 DeepSeek Harness (DSH) 插件。支持以下功能: - 扫描 DSH 侧边栏中的二维码与手机配对。 - 通过电脑上运行的 HTTPS 网关,在手机上使用原版 DSH Web UI。 - 在桌面端实时会话中,直接通过通知处理审批请求和 Agent 提问(任一设备先提交的回答生效)。 - 当关注的会话结束一轮操作时接收通知。 Android 应用单独分发,不包含在本仓库中。这是一个非官方项目,与 DeepSeek 无关。 环境要求 - DeepSeek Harness >=0.2.1-rc.2 <0.3.0。锁定此版本区间是因为插件依赖尚未稳定的 DSH Gateway 内部 API。 - DSH Web 服务器(webserver 服务),DSH Desktop 内置。 - Node.js 22.4 或更高版本(DSH Desktop 自带的运行环境即可)。 - 手机和电脑处于同一网络,或均加入 Tailscale。 - 通知功能:需要中继服务器(见通知与中继)。
展开完整文档(README 剩余 1 节)
DSH Mobile — DeepSeek Harness 主机插件

@kinocode/dsh-mobile 是适用于 DSH Mobile Android 应用的 DeepSeek Harness (DSH) 插件。支持以下功能:

- 扫描 DSH 侧边栏中的二维码与手机配对。
- 通过电脑上运行的 HTTPS 网关,在手机上使用原版 DSH Web UI。
- 在桌面端实时会话中,直接通过通知处理审批请求和 Agent 提问(任一设备先提交的回答生效)。
- 当关注的会话结束一轮操作时接收通知。

Android 应用单独分发,不包含在本仓库中。这是一个非官方项目,与 DeepSeek 无关。

环境要求

- DeepSeek Harness >=0.2.1-rc.2 <0.3.0。锁定此版本区间是因为插件依赖尚未稳定的 DSH Gateway 内部 API。
- DSH Web 服务器(webserver 服务),DSH Desktop 内置。
- Node.js 22.4 或更高版本(DSH Desktop 自带的运行环境即可)。
- 手机和电脑处于同一网络,或均加入 Tailscale。
- 通知功能:需要中继服务器(见通知与中继)。

安装

在 DSH 插件页面添加 @kinocode/dsh-mobile,或运行:

dsh plugin --profile desktop add @kinocode/dsh-mobile

重启 DSH。日志中应显示 [mobile-bridge] gateway listening {"origins":[...]}。

配对手机

1. 点击 DSH 侧边栏底部的 スマホを接続(连接手机)。
2. 在应用中点击 QR を読み取る(扫码)并扫描该二维码。如果没有摄像头,可以使用 リンクをコピー(复制链接)并将链接粘贴到应用中。
3. 二维码为一次性使用,5 分钟后过期。点击 新しい QR(生成新二维码)可重新生成。

该面板还会列出已配对的手机并支持将其移除。移除手机会立即撤销其访问权限。该面板目前仅提供日语界面。

在手机上,DSH 的侧边栏默认隐藏,让对话占满屏幕宽度。点击左上角的圆形按钮可以把侧边栏叠加在对话上方打开;选择会话或点击外部区域即可关闭。仅用于桌面端的按钮也会隐藏。

配置

所有字段均为可选。将它们添加到 profile 的 cordis.patch.yml 中。Profile patch 会替换插件的完整配置,因此请包含所有需要保留的字段。

- id: mobile-bridge
config:
relayUrl: https://relay.example.com
relayEnrollToken: '...'

| 字段 | 默认值 | 说明 |
| relayUrl | ''(关闭) | 用于接收通知并在通知中进行回复的中继服务器。 |
| relayEnrollToken | '' | 仅允许已知电脑接入的中继服务器 Token。 |
| gatewayEnabled | true | 为手机运行 HTTPS 网关。 |
| gatewayPort | 3543 | 网关端口(1024–65535)。 |
| gatewayHosts | 自动检测 | 监听的 IPv4 地址。仅接受私网地址(见下文)。 |
| hostLabel | 电脑名称 | 显示在手机上的名称。 |
| previewMaxChars | 400 | 应用中显示的最长命令预览字符数(50–4000)。 |
| stateDir | $DSH_HOME/mobile-bridge | 存放主机身份标识、已配对设备和证书的绝对路径。$DSH_HOME 默认为 ~/.dsh。 |

配置 ID mobile-bridge 和日志名称 dsh-mobile-bridge 保持不变,以兼容旧版本。

工作原理

- 网关。 HTTPS 服务器仅监听私网 IPv4 地址:10/8、172.16/12、192.168/16 以及 Tailscale 的 100.64/10。证书由插件创建的 CA 签发。二维码包含该 CA 的指纹,因此应用仅对该电脑信任该 CA。
- 配对。 应用在 Android Keystore 中生成 ECDSA P-256 密钥,并使用一次性代码注册公钥。
- 控制请求。 获取待处理列表、提交回答和修改设置的请求均使用设备密钥签名。插件会验证签名、时间戳(±5 分钟)以及 nonce 以防止重放攻击。
- DSH 界面。 配对后,应用会获得一个有效期为 12 小时的网关会话,该会话使用仅保存在电脑本地的密钥签名。移除设备会立即撤销该会话。网关直接登录本地 DSH Web 服务器;手机端永远不会收到 DSH 本身的登录凭据。
- 实时会话。 插件作为所有者客户端(owner client)在进程内连接至 DSH Gateway 事件流,相当于一个额外的 GUI 窗口。由于它未注册审批监听器,因此不会抢占桌面端的请求,也不会绕过桌面端。Gateway 接收最先提交的回答,并在其他所有端关闭对应提示。
- 桌面端面板。 侧边栏面板使用仅限所有者访问的 DSH API 路由(/api/dsh-mobile-bridge/*)。

通知与中继

使用移动数据的手机无法直接连通网关,因此通知需经由中继服务器转发。插件会与中继维持一条出站 WebSocket 连接。中继通过 Firebase Cloud Messaging 推送通知,并将手机签名的请求转发给电脑。中继无法伪造这些签名,且永远不会接触 DSH 界面或 DSH 的登录凭据。

本项目不提供公共中继。如果不使用中继,只要手机可以直接连通电脑,除通知以外的所有功能均可正常使用。

中继可以读取的内容:

- 推送消息。 默认包含:会话标题、工具名称或问题标题、最多三个选项、状态以及内部 ID。如果在应用中开启 ロック画面にコマンド全文を表示(在锁屏显示完整命令),中继还会看到命令预览或完整问题(最多 400 字符),以及轮次结束时 Agent 最后回复的前 200 个字符。
- 通过中继发送的请求。 各端点与中继之间的通信经过加密,但并非端到端加密。当手机通过中继路由请求时,中继可以读取待处理列表(完整命令预览、原因、问题)、会话列表(标题和工作目录)以及你的回答(包含自由文本输入)。

请仅使用你自己运行或信任的中继。

在锁屏界面上,除非手机设置为显示敏感内容,否则 Android 仅显示简短的公开摘要。DSH 正常退出时,插件会尝试撤回未关闭的通知(最多等待 3 秒)。如果 DSH 崩溃,应用会在下次加载待处理列表时清理过期的残留通知。

故障排查

| 现象 | 排查 |
| 手机无法连接 | 两台设备是否处于同一网络或均连接至 Tailscale?防火墙是否拦截了 3543 端口?如果电脑的 IP 地址发生改变,请生成新的二维码。 |
| "The certificate does not match the QR code" | 该二维码来自其他电脑,或网关 CA 已被重新创建。请生成新的二维码。 |
| 收不到通知 | 手机是否已允许通知?是否设置了 relayUrl,且 DSH 日志中是否显示 relay connected?会话的权限预设是否会触发审批请求?(“Full access” 从不触发。) |
| 重启 DSH 后 DSH 界面显示空白 | 待 DSH 启动完成后,关闭并重新打开应用。 |

安全

报告安全漏洞请参阅 SECURITY.md。

开发

npm test

测试使用 Node 内置的测试运行器,无需网络连接或外部依赖。

许可证

MIT。lib/vendor/qrcode.mjs 为 Kazuhiko Arase 开发的 qrcode-generator 1.4.4(MIT 许可证)。
预览分享卡片长什么样 ↓kinocode-jp/dsh-mobile
分享 · DeepSeek Harness Hub
kinocode-jp/dsh-mobile

扫码配对手机,在手机上使用 DSH 并处理审批

回到顶部