Skip to content

Releases: 6mt/dsh-control

v0.2.1

Choose a tag to compare

@6mt 6mt released this 20 Oct 09:04

修复

  • 远程环境里点开「文件」面板报 session "…" not found(本轮最难的一个):
    桌面壳用 dsh-app:// 自定义协议提供页面,而帧内 URL 改写只认 http/https/ws/wss,
    导致远端界面用绝对路径发出的请求(/sidebar/api/fs.trees 等)原样打到本地 dsh,
    本地没有远端会话 → 报 not found。现在同 scheme 判断改为与文档自身协议比较,
    自定义协议同样补代理前缀。沙箱(http)与桌面(dsh-app)行为一致。
  • 帧内存储未隔离:远端界面能读到底座应用(同源)的 dsh.sessions.current 等状态,
    现在按环境命名空间隔离,clear() 也只清自己的命名空间。
  • 启动诊断静默丢失:注入脚本的 PATCH 变量作用域错误被自身的 catch-all 吞掉,
    导致 kind:"frame" 诊断不再上报。已修,并让测试“只要脚本吞掉内部错误就全红”。

变更

  • 面板里的「打开界面」改为跳到应用内「远程环境」页并选中该环境;
    「在浏览器打开」保留为次按钮(独立窗口场景)。
  • 远程环境切到别的本地会话再回来不再重新加载(iframe 常驻根级浮层)。

性能

  • 凭据只验证一次(5 分钟内复用,401 时自动刷新重试),不再每个资源请求都取一次 cookie。
  • 哈希静态资源本地缓存(上限 64MB,immutable):第二次请求 ~1.6ms;整页 10 个资源
    冷加载 1.97s → 热加载 0.05s。
  • 打开「远程 dsh 环境」面板时后台预热 SSH 通道;proxyUrl 增加耗时埋点
    DIAG {"tunnelMs","authMs","totalMs"}。

诊断

  • mux 帧遥测:记录每条 open 帧的 endpoint/sessionId,以及远端返回的错误帧
    (MUX → / MUX ← 前缀),出错的 RPC 在宿主日志里自己报名字。

测试

  • 全量 90 项 / 13 个文件(node scripts/run-tests.mjs),含隐私闸门。
  • 新增注入脚本行为级 vm 测试(真实执行 + 断言 WebSocket 静态常量/instanceof/事件、
    URL 改写、存储隔离、自定义协议、冻结 fetch、补丁状态上报)。
  • 注入脚本吞掉内部错误 → 全部用例失败(防止“静默错误”再次上线)。
  • 发版前新增安装验证脚本:node scripts/verify-install.mjs --source github。

安装:dsh plugin --profile <profile> add github:6mt/dsh-control
固定本版:dsh plugin --profile <profile> add github:6mt/dsh-control#v0.2.1
已有安装升级:dsh plugin --profile <profile> update dsh-control,然后 ⌘Q 完全重启

这一版修掉了「远程环境里打开文件面板报 session not found」——根因是桌面自定义协议下帧内绝对路径请求没有经过代理。升级后重启即可。

v0.2.0

Choose a tag to compare

@6mt 6mt released this 18 Oct 14:09

新增:场景二「远程环境」

左侧栏新增「🌐 远程环境」,把远端机器上完整的 dsh 界面(工作区/会话/对话/设置)呈现在本地一个页面里,顶部标签切换环境。

  • 同源反向代理:页面由本地 web 服务转发并注入远端凭据,浏览器不接触令牌;远端外面的反向代理/鉴权层不影响
  • 界面 100% 真实:远端自己渲染,随远端版本自动更新
  • 常驻浮层:切到本地会话再回来,远端界面不重载、连接不重建
  • 资源保留 gzip:仅文档请求关压缩(需注入),静态资源走压缩

修复(本轮全部实测定位)

  • 桌面壳自定义协议导致帧内 WebSocket 1006 → 同 scheme 帧 + 注入绝对 streamBaseUrl
  • 远端 CSRF 栅栏 403 → 转发时重写 Origin/Referer
  • iframe 401 → 每次打开前经 SSH 重探测 token
  • 收养的隧道死亡后不重建 → 每次使用前实测端口
  • 面板空白(SessionList 被误删仍引用)→ 补回 + 静态检查
  • 对话只显示 source.kind === "user"(白名单)

测试

  • 全量入口:node scripts/run-tests.mjs — 12 个文件 75 项,逐文件独立进程 + 超时
  • 新增回归用例覆盖上述每个 bug,均做变异验证

安装:dsh plugin --profile <profile> add github:6mt/dsh-control
固定本版:dsh plugin --profile <profile> add github:6mt/dsh-control#v0.2.0

升级后需 ⌘Q 完全重启(宿主半代码在进程启动时加载)。

v0.1.1

Choose a tag to compare

@6mt 6mt released this 15 Oct 09:49

文档

  • README(中英)新增「版本与更新」小节:升级命令与固定版本的写法(均经封闭实验实测)
  • 新增 CHANGELOG 与 RELEASING(发布流程、版本号规则)

v0.1.0 的 tag 在发布当日随修复有过移动,最终包含首版全部功能、中英 README、
双语截图、环境行分隔符修复、GitHub 直装主线。详见 CHANGELOG。

安装:dsh plugin --profile <profile> add github:6mt/dsh-control
固定本版:dsh plugin --profile <profile> add github:6mt/dsh-control#v0.1.1

v0.1.0

Choose a tag to compare

@6mt 6mt released this 14 Oct 04:31

首个公开版本。

  • 一键接入远端环境(SSH 探测/令牌/隧道,零远端改动)
  • 环境自动生成同名工作区,新会话自动绑定远端路由
  • 远端会话真流式回流本地
  • 远端会话自动命名「控制端·本地标题」
  • 52+ 项自动化测试 + 启动自愈验证

发布当日随 tag 一并包含:中英 README 分离、双机截图与面板截图接入、
环境行分隔符修复(cn-dsh2已连接 → cn-dsh2 · 已连接,含回归测试)、安装主线改为 GitHub 直装。

安装:dsh plugin --profile <profile> add github:6mt/dsh-control
(本 tag 当日有过移动,最新版本见 releases)