dsh-remote — 手机远程控制 DeepSeek Harness全功能 · App 级体验
52.1/100
综合分
47
GitHub 星标
3,980
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @mrrisega/dsh-remotenpm 源 · @mrrisega/dsh-remote 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@mrrisega/dsh-remote @ 0.7.7
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 20:45:45
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
命令参数由运行时变量拼接读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 244 处,展示前 74 条)
- 执行外部命令来自配置/变量dsh-setup.mjs:293
const stdout = execSync(cmd, { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"], timeout: timeoutMs, windowsHide: true, ...(cwd ? { cwd } : {}) }); - 执行外部命令固定命令dsh-setup.mjs:461
r = spawnSync("icacls", [file, "/inheritance:r", "/grant:r", `${who}:F`], - 发起网络请求dsh-setup.mjs:522
const r = await fetch(apiBase + "/api/public-config", { signal: AbortSignal.timeout(6000) }); - 执行外部命令固定命令dsh-setup.mjs:587
const r = spawnSync("schtasks", args, { encoding: "utf8", timeout: timeoutMs, windowsHide: true }); - 执行外部命令固定命令dsh-setup.mjs:782
const r = spawnSync("powershell.exe", ["-NoProfile", "-NonInteractive", "-EncodedCommand", encoded], - 执行外部命令来自配置/变量dsh-setup.mjs:1072
const child = spawn(NODE_BIN, [runtimeSetupPath(), "run"], { - 发起网络请求dsh-setup.mjs:1348
await fetch(url + "/", { signal: ac.signal }); - 执行外部命令固定命令dsh-setup.mjs:1584
const child = spawn("/bin/sh", ["-c", cmd], { detached: true, stdio: "ignore", cwd: os.homedir() }); - 发起网络请求dsh-setup.mjs:2243
const r = await fetch(u.toString(), { - 发起网络请求dsh-setup.mjs:2346
const r = await fetch(upstreamUrl() + "/dsh-remote/self", { signal: AbortSignal.timeout(900) }) - 执行外部命令来自配置/变量clients/dsh-remote/upstream-discovery.mjs:111
return String(execFileSync(cmd, args, { encoding: "utf8", timeout: timeoutMs, windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }) || ""); - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:175
const PASSWORD = process.env.DSH_BRIDGE_PASSWORD || ""; - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:176
const TOKEN = process.env.DSH_BRIDGE_TOKEN || ""; - 执行外部命令运行时拼接clients/dsh-remote/dsh-bridge.mjs:194
const out = execSync(`${ioreg} -rd1 -c IOPlatformExpertDevice`, { encoding: "utf8", timeout: 5000 }); - 执行外部命令来自配置/变量clients/dsh-remote/dsh-bridge.mjs:222
const r = spawnSync(reg, ["query", "HKLM\\SOFTWARE\\Microsoft\\Cryptography", "/v", "MachineGuid"], - 执行外部命令固定命令clients/dsh-remote/dsh-bridge.mjs:373
r = spawnSync("icacls", [file, "/inheritance:r", "/grant:r", `${who}:F`], - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:600
await fetch(String(url).replace(/ +$/, "") + "/", { signal: ac.signal }); - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:1184
res = await fetch(`${UPSTREAM}${safe}`, { method, headers: reqHdrs, signal: controller.signal }); - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:1238
let res = await fetch(url, { ...init, signal: AbortSignal.timeout(HTTP_TIMEOUT_MS) }); - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:1254
res = await fetch(url, { ...init, headers: retryHdrs, signal: AbortSignal.timeout(HTTP_TIMEOUT_MS) }); - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:1915
const key = process.env.DSH_BRIDGE_LOCAL_KEY || ""; - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:1922
const r = await fetch(u.toString(), { - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:1943
if (process.env.DSH_BRIDGE_LOCAL_KEY && !refresh) return resolveLocalToken(); - 发起网络请求clients/dsh-remote/dsh-bridge.mjs:1948
const r = await fetch(API_BASE + "/api/device-login", { - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:1950
headers: { "content-type": "application/json", ...(process.env.DSH_BRIDGE_SECRET ? { "x-dsh-bridge-secret": process.env.DSH_BRIDGE_SECRET } : {}) }, - 读取密钥环境变量clients/dsh-remote/dsh-bridge.mjs:2189
if (process.env.DSH_BRIDGE_LOCAL_KEY) return { status: "ok", local: true }; - 执行外部命令固定命令clients/dsh-remote/dsh-bridge.mjs:2894
return String(spawnSync("powershell.exe", ["-NoProfile", "-NonInteractive", "-EncodedCommand", encoded], - 执行外部命令运行时拼接clients/dsh-remote/dsh-bridge.mjs:2899
return String(execSync(`ps -p ${pid} -o command=`, { encoding: "utf8", timeout: 3000, windowsHide: true }) || "").trim(); - 发起网络请求clients/dsh-remote/dsh-events.mjs:524
this.#fetchImpl = options.fetchImpl ?? ((...args) => globalThis.fetch(...args)); - 发起网络请求clients/dsh-remote/e2ee-client.mjs:135
res = await fetch(`${base}/api/e2ee-params`, { - 发起网络请求clients/dsh-remote/mirror-diag-script.js:161
fetch(ENDPOINT, { - 执行外部命令固定命令clients/dsh-remote/wechat-channel.mjs:307
r = spawnSync("icacls", [file, "/inheritance:r", "/grant:r", `${who}:F`], { - 发起网络请求clients/dsh-remote/wechat-channel.mjs:463
this.fetchImpl = opts.fetch || ((...a) => globalThis.fetch(...a)); - 发起网络请求clients/dsh-remote/wechat-channel.mjs:588
const { json } = await this.request({ - 发起网络请求clients/dsh-remote/wechat-channel.mjs:627
const { json } = await client.request({ - 发起网络请求clients/dsh-remote/wechat-channel.mjs:661
const { json } = await this.request({ - 发起网络请求clients/dsh-remote/wechat-channel.mjs:689
({ json } = await this.request({ - 发起网络请求clients/dsh-remote/wechat-channel.mjs:753
const { json } = await this.request({ - 发起网络请求packages/dsh-remote-web/lib/client.js:1565
return fetch(path, opts).catch(function (e) { - 写入剪贴板packages/dsh-remote-web/lib/client.js:1679
return navigator.clipboard.writeText(s).then(function () { return true; }).catch(fallback); - 发起网络请求packages/dsh-remote-web/lib/client.js:3057
fetch("/dsh-remote/captcha").then(function (r) { - 发起网络请求packages/dsh-remote-web/lib/client.js:3753
fetch("/dsh-remote/captcha").then(function (r) { - 发起网络请求packages/dsh-remote-web/lib/client.js:3904
fetch("/dsh-remote/status", { cache: "no-store" }) - 读取本地文件packages/dsh-remote-web/lib/index.js:196
try { cur = readFileSync(file, "utf8").trim(); } catch { } - 写入本地文件packages/dsh-remote-web/lib/index.js:198
mkdirSync(relayDir, { recursive: true }); - 写入本地文件packages/dsh-remote-web/lib/index.js:199
writeFileSync(file, url + "\n", { mode: 0o600 }); - 读取本地文件packages/dsh-remote-web/lib/index.js:232
try { cur = readFileSync(file, "utf8").trim(); } catch { } - 写入本地文件packages/dsh-remote-web/lib/index.js:234
mkdirSync(relayDir, { recursive: true }); - 写入本地文件packages/dsh-remote-web/lib/index.js:235
writeFileSync(file, url + "\n", { mode: 0o600 }); - 发起网络请求packages/dsh-remote-web/lib/index.js:255
await fetch(url + "/", { signal: AbortSignal.timeout(1500) }); - 执行外部命令固定命令packages/dsh-remote-web/lib/index.js:305
r = spawnSync("icacls", [file, "/inheritance:r", "/grant:r", `${who}:F`], - 执行外部命令来自配置/变量packages/dsh-remote-web/lib/index.js:323
const stdout = execSync(cmd, { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"], timeout: 15000, windowsHide: true }); - 读取本地文件packages/dsh-remote-web/lib/index.js:334
accessSync(real, fsConstants.X_OK); - 读取本地文件packages/dsh-remote-web/lib/index.js:477
if (existsSync(p)) return { command: process.execPath, args: [p], shell: false, kind: "node-npx-cli" }; - 执行外部命令来自配置/变量packages/dsh-remote-web/lib/index.js:540
child = spawn(command, args, { windowsHide: true, ...spawnOpts }); - 执行外部命令来自配置/变量packages/dsh-remote-web/lib/index.js:562
child = spawn(command, args, { windowsHide: true, ...opts }); - 读取本地文件packages/dsh-remote-web/lib/index.js:589
raw = readFileSync(filePath, "utf8").trim(); - 写入本地文件packages/dsh-remote-web/lib/index.js:598
mkdirSync(dirname(filePath), { recursive: true }); - 写入本地文件packages/dsh-remote-web/lib/index.js:599
writeFileSync(filePath, JSON.stringify({ pid: pid ?? null, at: Date.now() }), { mode: 0o600 }); - 删除本地文件packages/dsh-remote-web/lib/index.js:637
try { rmSync(p, { force: true }); } catch { } - 删除本地文件packages/dsh-remote-web/lib/index.js:642
try { rmSync(p, { force: true }); } catch { } - 读取本地文件packages/dsh-remote-web/lib/index.js:660
if (!existsSync(marker)) return false; - 删除本地文件packages/dsh-remote-web/lib/index.js:666
try { rmSync(marker, { force: true }); } catch { } - 删除本地文件packages/dsh-remote-web/lib/index.js:893
try { rmSync(join(configBackupDirOf(relayDir, source), b.file), { force: true }); } catch { } - 发起网络请求packages/dsh-remote-web/lib/index.js:1146
const res = await fetch(tokenUrl, { redirect: "manual", signal: AbortSignal.timeout(6000) }); - 删除本地文件packages/dsh-remote-web/lib/index.js:1239
if (ownRevokedPath) { try { rmSync(ownRevokedPath, { force: true }); } catch { } } - 删除本地文件packages/dsh-remote-web/lib/index.js:1240
try { rmSync(legacyRevokedPath, { force: true }); } catch { } - 执行外部命令固定命令packages/dsh-remote-web/lib/index.js:1788
const r = spawnSync("powershell.exe", ["-NoProfile", "-NonInteractive", "-EncodedCommand", encoded], { - 执行外部命令固定命令packages/dsh-remote-web/lib/index.js:1824
const r = spawnSync("schtasks", ["/Query", "/TN", WIN_TASK_NAME], { windowsHide: true, encoding: "utf8", timeout: 8000 }); - 发起网络请求packages/dsh-remote-web/lib/index.js:3378
const res = await fetch(url, { ...init, signal: AbortSignal.timeout(6000) }); - 发起网络请求packages/dsh-remote-web/lib/index.js:3446
const r = await fetch(`${api}/api/public-config`, { signal: AbortSignal.timeout(timeoutMs) }); - 发起网络请求packages/dsh-remote-web/lib/index.js:3529
const r = await fetch(`${api}/api/device-login`, { - 发起网络请求packages/dsh-remote-web/lib/index.js:3557
const r = await fetch(u.toString(), { - 执行外部命令来自配置/变量packages/dsh-remote-web/lib/offline-update.mjs:52
const child = spawn(process.execPath, [setup], {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
4 张 · 点击查看大图功能亮点
- 公网远程访问
- 专属加密地址
- 可选自建服务
公网远程控制 DeepSeek Harness(dsh web):安装后即得专属加密地址,人在外面也能用手机远程访问,不用同一局域网或 WiFi,无需内网穿透,可选自建服务。
最近更新
在 GitHub 查看全部 →v0.7.92026-10-30
微信机器人通道:同一条消息不再执行两遍;推送不再「该推的不推、一推推一堆」。
· 同一条微信消息不再被执行两遍:通道会记住哪些消息已经处理过(按消息 ID 去重,长轮询游标跨重启保留),
断线重连、后台重启后不会把旧消息再派给 Agent 一次;同时只处理已绑定微信用户发来的文字消息,
机器人自己或陌生人的消息不会再被当成指令。
· 长时间没对话后,推送会明确「静默」而不是无声失败:微信平台只允许机器人在「你最近发过消息」后的一小段时间内
主动发消息,超时后发送必然失败。现在识别到这种情况会立即停止无效重试(此前每日简报在每个整点会重试几十次),
面板会显示「微信推送已静默,回任意一条消息即可恢复」,不再刷接口,也不会让你以为机器人坏了。
· 每日简报不再丢:当天简报发不出去会记录下来,你下次在微信里说话时立刻补发;此前失败后当天就不再发。
· 不再「发一句你好、补发一堆」:未送达的通知仍会保留,但一次最多补 2 条 + 一条「另有 N 条较早的通知已省略」的汇总,
其余如实记入日志,不再一次轰炸十几条。
· 「收不到 Agent 返回」一并解决:任务完成推送不再被当成网络抖动反复重试而失败;推送恢复后,未送达的完成通知会补给你。
v0.7.62026-10-25
稳定性与日常体验更新。 主要变化都在用户能直接感知的地方:
· 远程会话更稳:修复打开历史会话时报「历史加载失败 / 会话事件流错乱」的问题,历史记录可正常加载。
· 升级、重启后自动恢复:DeepSeek Harness 重启换了本地端口时,连接会自动跟到新端口,
不再出现「电脑端设备掉线 / 连不上 dsh web」,也不需要手动重启后台服务。
· 「📱 远程访问」入口更好用:点击侧栏入口会直接弹出远程访问设置页,不再受 DSH 界面改版影响;
从「设置 → 远程访问」进入的原有入口保持不变。
· 桌面端「一键更新」更可靠:应用运行中会先下载并暂存,退出应用后自动完成安装;
提示文案与实际行为一致,不再出现「显示更新完成、实际没生效」。
· 签到提示更准确:区分「真实连续签到天数」和「最近 7 天已签进度」;发卡规则不变(最近 7 天签满 7 天发 1 张)。
· 公告显示更可靠:页面刚启动、网络抖动导致首次加载失败时会自动重试;没有公告时也会保留入口。
v0.7.42026-10-23
手机「切出去再回来 / 看历史 / 开文件」这三件事,这次一起变顺。
· iOS 切后台再回来不用反复手动重连:加密会话失效后会自己用「记住本机」恢复并直接回到刚才那台电脑,不再需要回设备列表重新解锁;回到前台发现连接断了会先自动重连,仍不行才给出可操作提示。
· 历史会话、切换会话不再等半天:会话列表、历史消息、文件预览这些「点了就应该出来」的内容不再被按流量限速拖成十几秒(流量照旧计入额度,套餐规则不变)。
· 手机点文件改为直接下载:以前 PDF/大图会在页面里内联打开、经常一片空白,现在会落到手机的「下载 / 文件」里;聊天里的图片显示不受影响。
· 弱网读文件更抗断:读历史或预览文件时网络抖一下会自动重试一次,不用再手点「重新读取」。
· 上传失败会说明原因:上传超过 64MB 或连接中断时,页面底部会直接告诉你是哪种情况(以前只显示「上传失败」)。
升级方式:电脑端插件面板点「一键更新」,或终端执行 npx @mrrisega/dsh-remote@latest;更新后重启一次客户端,手机端刷新远程页面即可。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-remote — 手机远程控制 DeepSeek Harness(全功能 · App 级体验)
离开电脑也能用手机 100% 全功能接管电脑上的 DeepSeek Harness(dsh web)——发消息、看工具执行、审批权限、改设置、管凭据,体验与坐在电脑前一致。免内网穿透,局域网即连。
一条命令安装:npx @mrrisega/dsh-remote
核心功能
- 100% 全功能接管:dsh web 的 HTTP / WebSocket 全量透传 —— 对话、工具执行与输出、审批、设置、凭据(含特权操作)都能在手机上完成,不是阉割版。
- 免内网穿透:电脑端 bridge 主动连中继注册为在线设备,手机浏览器打开 PWA 即可用;不需要公网 IP,也不用配路由器。
- 端到端加密(E2EE):内容在离开手机前用你的账号密码派生密钥加密、进入电脑后才解密;中继只见路由元数据(路径、大小、时间),读不到内容。
- 微信机器人通道:任务完成 / 出错 / 需要拍板时推到微信;在微信里回一个数字就能完成审批,会员还能直接派活、切换会话。
- 两端体验一致:手机 PWA 还原电脑端界面;电脑端 dsh web 侧栏新增「📱 远程访问」入口。
展开完整文档(README 剩余 1 节)
dsh-remote — 手机远程控制 DeepSeek Harness(全功能 · App 级体验) 离开电脑也能用手机 100% 全功能接管电脑上的 DeepSeek Harness(dsh web)——发消息、看工具执行、审批权限、改设置、管凭据,体验与坐在电脑前一致。免内网穿透,局域网即连。 一条命令安装:npx @mrrisega/dsh-remote 核心功能 - 100% 全功能接管:dsh web 的 HTTP / WebSocket 全量透传 —— 对话、工具执行与输出、审批、设置、凭据(含特权操作)都能在手机上完成,不是阉割版。 - 免内网穿透:电脑端 bridge 主动连中继注册为在线设备,手机浏览器打开 PWA 即可用;不需要公网 IP,也不用配路由器。 - 端到端加密(E2EE):内容在离开手机前用你的账号密码派生密钥加密、进入电脑后才解密;中继只见路由元数据(路径、大小、时间),读不到内容。 - 微信机器人通道:任务完成 / 出错 / 需要拍板时推到微信;在微信里回一个数字就能完成审批,会员还能直接派活、切换会话。 - 两端体验一致:手机 PWA 还原电脑端界面;电脑端 dsh web 侧栏新增「📱 远程访问」入口。 - 一条命令 + 开机自启:自动装好 bridge 与 dsh web 插件,并按平台配置自启动与崩溃自愈(macOS launchd / Linux systemd --user / Windows 任务计划程序)。 - 两种模式随时切:官方云服务(手机号登录、含超管后台)或自建 relay(访问密钥认证),面板一键切换,互不影响。 - 插件市场可装:在 dsh 插件市场搜索 dsh-remote-web 即可;桌面运行环境由插件在后台自动补齐。 手机浏览器 └─ /app/ (PWA) 登录 → /_devices 设备列表 → 选择设备 │ nginx (HTTPS) ├─ /app/ → 静态 PWA ├─ /_devices /_login /remote/ → relay-router └─ /_bridge → relay-router (WebSocket) └→ bridge (电脑端) → 127.0.0.1:3080 (dsh web) 界面预览 | 手机端进入 dsh web,100% 还原电脑端体验 | 手机端密钥登录后的在线设备列表 | | 手机端进入 dsh web | 手机端在线设备列表 | | 电脑端 dsh web 插件设置(自建服务模式) | | 客户端设置-自建服务 | 两个版本 | | 开源版(本仓库) | SaaS 云服务版 | | 服务器 | 你自己部署(任意有公网 IP 的机器) | 由服务商托管 | | 账号体系 | 无需账号:访问密钥认证 | 手机号 + 短信验证码 | | 后台管理 | 无(密钥即实例管理员) | 超管后台(用户 / 套餐 / 审计) | | 许可证 | 本仓库(见下文 License) | 商业授权,闭源 | 👉 不想自建服务器 / 没有公网 IP? 直接用官方云服务版(无公网、4G、异地都稳定,多设备 + 超管后台): https://n.risegao.cn:13443/app/ —— 免费版 + PRO ¥19/月 + Pro Max ¥49/月,新用户送 7 天 PRO。 客户端仍是同一条安装命令,登录后选「云服务模式」即可。 安装 需要 Node.js ≥ 20(macOS / Linux / Windows 均可)。电脑端一条命令: npx @mrrisega/dsh-remote 装完无需任何命令:打开 dsh web → 设置 → 「远程访问」,注册 / 登录手机号即可(注册在手机端完成;登录后 bridge 自动启动)。自建用户在同一个面板切「自建服务」标签。 自建模式(已部署 relay-router,无需账号体系): npx @mrrisega/dsh-remote setup --server wss://<你的域名>:端口 --key <访问密钥> 其他命令:status 查看状态、run 前台调试、plugin 重装 / 卸载 dsh web 插件;--help 看完整说明。 升级与卸载都在面板里:dsh web → 设置 → 「远程访问」→「🔄 版本与更新」(检测新版 / 一键在线更新 / 彻底卸载)。 安全与隐私 - 传输:全程 HTTPS / WSS;远程访问需先在电脑端登录你的账号,一次性扫码链接 30 分钟有效、访问一次即失效、可随时取消配对。 - 端到端加密(E2EE):开启后内容在中继侧不可读(中继只见路径、大小、时间)。这是分阶段开启的功能(服务端开关逐步放量,默认关闭 = 走 HTTPS),面板会显示当前加密状态与原因,不会静默降级。服务端只保存密码经不可逆 KDF 派生的校验值,不保存明文密码、也不保存解密密钥——请牢记密码,改密会使旧设备会话全部失效。协议见 docs/e2ee-protocol.md。 - ⚠️ 电脑端 .dsh-config.json 保存账号密码用于自动登录(等于该账号内容的解密权),不要把 .dsh-remote 目录交给备份 / 同步盘 / 他人排查——要发支持包请先删掉 .dsh-config.json 与 .harness-cookie.json。 匿名装机统计与隐私 为了让「装完却连不上」可归因,插件内置一条匿名装机统计通道,只上报装机与连接是否成功: - 采:事件名(安装开始/失败原因/运行环境就绪/bridge 是否注册成功/首次远程打通/面板打开/重启/更新、微信机器人通道的绑定与解绑)、白名单失败码、插件版本、系统平台与架构、Node 主版本,以及一个本机随机 ID(crypto.randomUUID(),非硬件派生、重装即变、不可跨机器关联)。 - 不采:手机号 / 邮箱 / 账号 ID、任何会话或文件内容、真实 hostname / 用户名 / 文件路径、密码与密钥、设备指纹、原始 IP、精确地理位置;请求不带 Authorization(匿名、与账号解耦)。 - 关闭:export DSH_REMOTE_TELEMETRY=0 —— 不生成随机 ID、不落任何文件、不发任何请求;也可在网络侧直接丢弃 POST /api/telemetry/events。关闭不影响面板、bridge 与连接流程的任何功能。 - 自建模式:统计只发往你自己配置的 api_url(不经第三方);没有账号体系与云侧统计,数据只落在你自己的服务器。 完整字段清单与可核实方法见 docs/telemetry.md。 自建部署(开源版) bash git clone https://github.com/mrRisega/dsh-remote.git && cd dsh-remote npm install bash deploy/install-open.sh # 生成 open.env(0600)并启动 router 或 Docker:DSH_LOCAL_JWT_SECRET=… DSH_LOCAL_ACCESS_KEYS=… docker compose up -d。 nginx 反代参考 deploy/nginx-13443-remote-router.conf;之后手机打开 https://<你的域名>/app/ 用访问密钥登录,被控电脑执行上面的 setup --server … --key …。 完整步骤见 docs/self-hosting.md。 组件 | 组件 | 位置 | 说明 | | relay-router | packages/relay-router/ | 中继服务器:bridge 注册表、实时设备列表、HTTP/WS 透明代理 | | bridge | clients/dsh-remote/ | 电脑端守护进程:连 router 注册,把转发帧代理到本地 dsh web;心跳自愈 | | PWA | clients/dsh-web/native.html | 手机端:登录 / 注册 / 设备选择(单文件,零构建) | | dsh web 插件 | packages/dsh-remote-web/ | 设置页「远程访问」面板:连接模式 / 账号 / bridge 启停 / 反馈 | | 部署脚本 | deploy/ | install-open.sh、nginx 参考配置、Dockerfile / compose | 测试:npm test。 交流与反馈 扫码加入 企微交流群(安装答疑、问题反馈、版本更新同步): 也可以在仓库提 Issue;安全相关问题请按 SECURITY.md 私下反馈。 文档 - CHANGELOG.md — 版本记录 - docs/self-hosting.md — 开源自建完整指南 - docs/telemetry.md — 匿名装机统计:采集 / 不采集清单与关闭方法 - docs/e2ee-protocol.md — 端到端加密协议 - CONTRIBUTING.md · SECURITY.md License 本仓库使用 PolyForm Noncommercial 1.0.0(LICENSE):个人、研究与非商业用途免费;商业用途(含内部自用与对外服务)需要商业授权,见 COMMERCIAL-LICENSE.md。 本仓库是源码公开、非商业许可的项目,不属于 OSI 意义上的「开源」;云服务(多用户账号、超管后台)为闭源商业组件,不在本仓库内。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
mrRisega/dsh-remote
dsh-remote — 手机远程控制 DeepSeek Harness全功能 · App 级体验
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2
这是你的仓库?认领条目