Skip to content

Releases: mrRisega/dsh-remote

dsh-remote 0.6.5

Choose a tag to compare

@github-actions github-actions released this 13 Sep 21:37

Fixed

  • 面板「一键更新」在市场装法(npm / 插件市场安装)下不再空转。此前该路径只清理由历史
    include、不动插件包,命令 exit 0、界面显示"安装完成",插件却始终停在旧版本(实测:装的是
    0.6.3,更新后仍是 0.6.3,日志写着"已保持市场管理的源码不变")。现在会按包管理器主动把插件包
    升级到最新
    ,并如实报告三种结果之一:已升级(x.y.z → x.y.z)/ 已是市场最新版 / 升级失败并给出
    可手动执行的命令。
  • 插件包升级成功后明确提示需要重启一次 dsh web —— 市场装法经 dsh.profile.bundles 激活,
    该文件只在启动时读取(与"首次安装可热挂载"的边界一致,见 0.6.4 说明)。

dsh-remote 0.6.4

Choose a tag to compare

@github-actions github-actions released this 13 Sep 21:26

正式版。本轮的预发版(beta.1 ~ beta.11)到此收束:安装体验、macOS 26 自启动、
插件激活方式与匿名统计都已在生产环境验证过。

Added

  • 插件热加载:安装插件改为写 profile 的 cordis.patch.yml(HMR 监听该文件),
    首次安装装完只需刷新页面、不必重启 dsh web。实测:进程 pid 不变、安装耗时约 1.3 秒、面板接口立刻可用。
    边界(实测):HMR 只认 patch 文件的变化,而加载器按 URL 缓存模块 —— 所以
    同一插件升级到新版本时 patch 行内容没变,热加载不生效,仍需重启一次 dsh web
    安装器会按版本号核对并如实提示,不会谎报成功。
  • 匿名装机统计:只上报「装机/连接是否成功」这类事件(12 个白名单事件 + 11 个白名单失败码),
    不含账号、手机号、会话或文件内容、主机名、路径、设备指纹与 IP;标识是本机随机 ID(重装即变)。
    环境变量 DSH_REMOTE_TELEMETRY=0 可完全关闭。披露文档见 docs/telemetry.md
  • macOS 26 自启动修复:macOS 26 把 gui/<uid> 会话域置为 on-demand-only(RunAtLoad/KeepAlive
    失效、只登记不启动),现在优先用 user/<uid> 域(实测崩溃后 launchd 自动重建),
    失败才回退 gui/<uid> + kickstart(如实告知不支持自愈),再不行退化为后台进程。

Changed

  • 安装输出精简:多阶段重复播报收敛成结尾一份汇总。
  • 面板不再要求「重启 DeepSeek harness」:插件热加载 + bridge 是独立 launchd 进程,
    装插件/在线更新都不需要重启;只有「磁盘插件版本与运行版本不同」时才提示刷新页面
    且不再自动重启(刷新零风险,重启会打断你的会话)。

Fixed

  • duplicate loader entry id 崩溃:patch 行与插件自带 bundle patch 同时生效会让 dsh web
    启动即报 plugin tree failed to load。现在两条激活路径互斥:bundles 已声明就不写 patch 行;
    写完 patch 行再复核 bundles 已清空,没清掉就回滚。
  • 「刷新后横幅还在」:提示判断从"文件时间戳"改为"版本号比较" —— 补装把同一版本重写一遍
    不再误报。
  • 更新提示的版本比较:改为语义化比较(预设版低于同号正式版),装预发版的人不会被误判成落后。
  • ~/Library/LaunchAgents 不存在时自动创建;服务 PATH 补 /usr/sbin/sbin(修 ioreg: command not found)。
  • 热加载探测改为按版本判断:此前只检查面板接口是否 200(旧版本本来就有这个接口),
    于是「profile 已更新到新版本、运行中仍是旧版本」会被误报成"热加载成功"。现在比对运行中版本与
    本次安装版本,不一致就如实提示需要重启 dsh web。
  • 安装器的配置目录统一为 ~/.dsh-remote(修掉「面板读不到配置 / 运行状态文件散落进仓库」)。
  • 测试污染harness-restart 用例会覆盖开发者真实的 ~/Library/LaunchAgents,已加 HOME 隔离与静态护栏。

dsh-remote 0.6.3

Choose a tag to compare

@github-actions github-actions released this 12 Sep 03:32

Added

  • 插件清单声明宿主要求engines.dsh: ">=0.1.0-rc.6 <0.2.0-0"):插件市场详情页不再提示
    "未声明宿主要求",并可据此按 DSH 版本筛选适配插件。
  • 发版说明自动化:每个版本的 GitHub Release 正文由 CHANGELOG 对应小节自动生成,
    插件市场的「更新说明」因此显示真实条目(此前为空/通用文案)。

Changed

  • 市场预构建包地址改为 releases/latest/download/(资产名不带版本号)——
    一键安装始终跟随最新版本;此前钉在 v0.6.0,导致市场长期安装旧版。

dsh-remote 0.6.2 — 插件市场预构建包

Choose a tag to compare

@mrRisega mrRisega released this 12 Sep 00:18

[0.6.2] - 2026-09-11

稳定版(latest)。主题:插件市场安装即可用(补齐桌面运行环境 + 修复自愈停摆 + 首次安装重启引导)。

Fixed

  • 插件市场安装后 bridge 起不来、且永远不自愈(本机实测复现并修复)。只装插件半(市场/dsh plugin add
    的用户,桌面运行环境 ~/.dsh-remote/dsh-setup.mjs 从未被补齐,而登录/「启动 bridge」会直接写 plist 并
    launchctl bootstrap → 指向不存在的脚本 → launchd KeepAlive 无限重拉(实测 runs = 23
    last exit code = 1、日志 20+ 次 MODULE_NOT_FOUND)。三处根因一并修掉:
    1. startBridge() 不再在运行环境缺失时 bootstrap:改为拒绝启动并转入后台补装,不再生成指向空路径的
      自启动项(这类 plist 是崩溃循环的唯一来源)。
    2. launchdStatus() 不再把崩溃循环谎报为「运行中」launchctl print 能打印时以它的 state 为准,
      绝不回退 launchctl list——崩溃循环里 list 的 PID 列会闪现已死的 pid(实测 40213 1
      ps -p 40213 为空),旧实现据此报 running: true,直接导致第 3 条的自愈停摆。
    3. 自愈顺序修正scheduleRuntime 把「运行环境是否就绪」提到最前,先于「账号是否登录」与
      「服务是否在跑」判断;并主动摘除指向不存在脚本的失效自启动(bootout + 删 plist),止住崩溃循环。
      另:插件加载(apply)即开始后台补装运行环境,不再等用户先登录;自启动 plist 增加 ThrottleInterval
      崩溃时不再空转重拉。

Added

  • 首次安装/更新后引导重启 DeepSeek harness:dsh web 的插件(宿主半 + 浏览器半)都在进程启动时装载,
    市场安装只是把文件写进 profile,必须重启才生效。现在:
    • 「设置 → 远程访问」顶部醒目提示「首次安装需要重启 DeepSeek harness」+「重启」按钮;
    • 面板最底部常驻「🔄 重启 DeepSeek harness」按钮(随时可达);
    • 面板内一键重启:优先交回监管者(launchctl kickstart -k 精确匹配承载本插件的作业 / systemctl --user restart),无监管者时用原命令行自拉起;重启期间页面自动轮询并在服务恢复后刷新,无需手动操作;
    • 「待重启」状态持久化并跨进程结清:真重启后提示自动消失,同一进程内(仅刷新页面)不会误撤。
  • GET /dsh-remote/status 新增 service.runtimeReadyrestartpending/kind/reason),面板据此
    区分「运行环境没装(自动补装中)」与「装了但没跑」,并把崩溃循环如实显示为「启动失败(已自动转入修复)」。

Changed

  • npm run test:plugin 默认置位 DSH_RELAY_SKIP_SERVICE=1(测试隔离):插件加载不再在用例里触发真实
    npx 补装 / launchctl / 重启 harness;需要真实分支的用例显式 unset。

dsh-remote 0.6.0 — 插件市场预构建包(dsh-remote-web / dsh-remote-ui)

Choose a tag to compare

@mrRisega mrRisega released this 10 Sep 13:31

预构建插件包,供各 DSH 插件市场一键安装(免源码构建):

  • dsh-remote-web.tgz — 新名插件包(dsh-remote-web@0.6.0,含 E2EE 数据面 / 桌面授权)
  • dsh-remote-ui.tgz — 旧名兼容别名(dsh-remote-ui@0.6.0,与上面同一份代码,供改名灰度期使用)

dsh-remote v1.0.0

Choose a tag to compare

@mrRisega mrRisega released this 19 Aug 18:30

🎉 首个正式发布

在手机浏览器上全功能远程控制 DeepSeek Harness(dsh web)的安全反向代理网关。

特性

  • 零侵入:不改 DSH 任何代码/配置,dsh web 保持 127.0.0.1 监听
  • 功能全覆盖:loopback 伪装实现特权方法(settings/credentials 等)全覆盖
  • 安全默认:口令登录(scrypt 哈希)、会话 cookie、失败限流、IP 白名单、可选 TLS
  • WebSocket 原生透传,手机与桌面实时同步
  • 零运行时依赖(Node.js ≥ 20 原生模块)

安装

curl -fsSL https://raw.githubusercontent.com/mrgaoang/dsh-remote/main/install.sh | bash

许可

双许可:个人/非商业免费(PolyForm Noncommercial 1.0.0)+ 商业授权。
详见 COMMERCIAL-LICENSE.md