Repository navigation
Releases: xswt442-cmd/dsh-xswt-tauriapp
Release list
v0.1.0
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.1.0_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.1.0-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.1.0_amd64.AppImage && ./dsh-xswt-tauriapp_0.1.0_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
维护
boot-check的每条 dsh 线在矩阵列里带上自己的--before日期,安装步骤与报告宿主版本的步骤共读该列。@0.2.0-rc.1钉到2026-09-29T00:00:00Z,该 leg 因此检查 rc.1 那个构建(0.2.0-rc.2发布于 09-29)。- README 的「工作原理」一章由六个小节压成一张表,机制约束本身仍在
AGENTS.md与对应代码注释里。 - README 按已发布的行为改写两处:
DSH_HOME非空即按字面采用,不再描述成要求目录已存在;市场引导的变量清单补上DSH_TAURIAPP_INSTALL_DIRS,无桌面会话的判据补上WAYLAND_DISPLAY。 - README 的安装命令不再写死版本号,
dnf与apt并列,并写明外壳在 Linux 只自动挑选.deb。
v0.0.15
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.15_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.15-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.15_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.15_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
维护
RELEASING.md与两份 CHANGELOG 归入docs/;仓库根目录保留README.md、README.en.md、LICENSE,以及按名字被工具查找的AGENTS.md与CLAUDE.md。- 兼容检查覆盖
0.2.0-rc.1:此前矩阵只测0.1.5-rc.1与latest,而latest仍是0.1.7-rc.2。
v0.0.14
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.14_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.14-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.14_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.14_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
新增
- 两份 changelog 以
## Unreleased段承载尚未发布的条目,发布时改名成## X.Y.Z - YYYY-MM-DD并在最前补一个空的;scripts/check-docs.mjs要求每份恰好一个、且在最新位置,并拿最新已发布段的版本去对那五个版本字段。
修复
- 混码的控制台输出改为按行分别解码:捕获里出现一处 OEM 字节,过去会把整块(包括同一批 npm 的 UTF-8 中文)一起送进代码页,回来的是一段"合法但说错话"的文本。
- 状态锁被毒化时不再丢掉失败报告:
fail()原先遇到Err直接返回,而那正是别的线程刚 panic、最需要告诉用户为什么没起来的时候;snapshot()也不再回落成"还没启动"。 - 服务器在 token 请求上直接答 200、却又同时下发 cookie 时,那枚 cookie 会被带进交接,而不是把一个无 cookie 的 session 交给 dsh 窗口。
- 判断"这是一个 dsh,但它的会话你从这里进不去"只看 HTTP 401,不再额外要求响应体里出现那句英文提示串:本地化的 dsh 过去会掉进"端口被占用",而那正是让启动它的人读成 bug 的说法。
- 装在 profile 的符号链接布局下(
$DSH_HOME/profiles/<名>/node_modules/.bin/dsh)不再每次启动都报"有更新":读已装版本时先跟完链接再往上找package.json,找不到就什么也不提示。此前它找的是.bin的上一级、拿"0.0.0"顶替"不知道",于是任何稳定版都比它新,对话框还显示你跑的是 0.0.0。 - 设了
DSH_HOME而那个目录还不存在时,按字面使用它,不再静默回落到~/.dsh:回落之后什么都找不到(没有 token、没有端口候选),而启动流程会顺手把回落那套目录建出来,在用户真正那套旁边多起一个没人要的服务器。 - 冷启动对同一批端口只走一遍:以前
plan先自己扫一次日志端口,对话框端口列表又扫一次,而每个端口在check_port里本来就探两回。 - 启动失败那条路径和每次交给系统打开的链接,都不再留下没人回收的子进程(上一批只接了启动成功那一路)。
- 发布构建不再自带 WebView 检查器:两个窗口各自按
DSH_SHELL_DEVTOOLS决定(调试构建总是开)。此前devtoolsfeature 一直开着,F12 与右键检查在生产构建里同样可用,而菜单项的门只挡住了菜单项。 - 安装包与四处记忆的设置文件都不再原地截断写:先落
<name>.part再改名,读到的一定是写完整的文件;半截安装包出现在对话框打印的那个路径上的情况没有了。 - 检查更新的在途请求不再覆盖刚点下的"不再提醒":候选是否已忽略按列表当前状态重算,而不是按发起检查时的快照。
- 连续两次交接不再让已经建好的 dsh 窗口留在隐藏状态:第二个调用者发现标签被占用时认作同一结果,不再把那次成功判为失败并复位交接状态。
- Unix 上由本外壳启动的服务退出后不再留下僵尸进程,有一个线程专门等待它。
- 缩放被
DSH_SHELL_ZOOM钉住的那次运行不再改写记住的缩放值——钉住只在本次会话有效。 - 单实例的 accept 循环碰到不可恢复的错误时退出,而不是每轮一行 stderr 地空转到进程结束。
- 装上的版本无法归入任何已知通道时不再自动弹更新提醒:这种版本过去按"最不稳定"处理,于是任何通道都合格。
安全
- 注册在唯一带能力窗口上、页面却从不发的四个命令删掉了:
check_self_update、clear_dismissed、dismissed_versions、dismiss_path。应用自定义命令不吃 capability 门,注册了就是那页 JS 能调的——其中两个还会真清数据、真吐路径。 - 交给系统默认程序打开的链接只接受
http、https、mailto:explorer与open会执行命令行上点名的可执行文件,而 dsh 会往磁盘写文件,所以file:一类的链接是一次启动而非一次浏览。被拒绝的链接写进外壳日志。 - 来自发布接口的安装包文件名先验证是裸文件名才当路径用,Rust 与插件两条下载路径同修:带分隔符的名字既能写到缓存目录之外,又因为同一名字就是
SHA256SUMS的键而自证校验通过。 - 插件在 Windows 上不再用
runas动词交出安装包(那会静默提权),并改为把 argv 直接交给spawn而不是拼一条 shell 命令字符串。
维护
- 发布作业在算校验和之前先核对产物的名字集,而那份后缀表是从
self_update.rs里读出来的——改了新前缀、某条 leg 空手而归,过去能一路绿到发布页,再让对话框打印一个没附上的文件名。 - 两份文档脚本共用的标题解析器现在有自己的测试(接在
npm test里):它认不出标题时的表现是双语检查对着两个空表通过,所以"守卫没生效"和"守卫通过"长得一模一样。 - 写明 Linux 的自动更新只覆盖
.deb:同一个发布也产.rpm与.AppImage,那是发布说明里的手动路子,不是更新器漏选了什么。 - 已发布段标题的解析集中到
scripts/changelog.mjs,check-docs.mjs与release-notes.mjs都走它。此前两者的正则本就不一致:换一种标题写法能让两本 changelog 同时解析为空,双语检查对着两个空表通过。 release-notes.mjs接受X.Y.Z-rc.N(release.yml本就切这种 tag 并标记为预发布),找不到对应段时打::warning::,而不是安静地把发布正文留成一行Release X.Y.Z。- 单实例那条在 Windows 上必挂死的测试改为像外壳那样先把 accept 起在另一个线程上:
cargo test --lib现在能在 Windows 上跑完(它留下的僵尸进程也是上一轮LNK1104的原因)。 - 启动 token 的正则只编译一次,此前每次轮询都重新编译一遍——而
wait_for_ui每 500 毫秒就要扫一次 256 KiB 的日志尾巴。 - 两份 README 的环境变量表按代码实际判定重写(判的是"有没有设置"而不是"是否非空"),补上此前没记的
DSH_SHELL_RELEASES_API、DSH_BIN、DSH_NODE_BIN与插件那四个;AGENTS.md 的 Verify 清单补上漏掉的前端语法检查那条。
v0.0.13
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.13_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.13-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.13_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.13_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
新增
- 记住 dsh 窗口的大小与位置,下次启动放回原处;记忆中的位置只在当前某块显示器仍能看到它时才采用。
- 第二次启动不再开第二个窗口,而是把已在运行的外壳提到前面;
DSH_SHELL_ALLOW_MULTIPLE=1可同时运行多个。 - 端口对话框列出这台机器用过、日志仍在的端口(新到旧,最多 6 个)与各自会做什么,点一下即填入端口框。
- macOS 上从 Dock 图标重新激活(或再次
open)会把 dsh 窗口提到前面,此前这个手势没有任何反应。
修复
- 启动失败不再一律报「未就绪(进程已退出或超时)」:区分进程已退出、在监听但没写 token、握手未完成三种情况,后者报出本机 dsh 版本,并附上本次运行 stderr 的末尾几行。
- 外壳自更新的安装包改存缓存目录,重启后提示里的
sudo apt install <路径>仍然有效;同一目录只留最新一个安装包。 - Windows 上交接安装包改用
ShellExecuteW并检查返回值:explorer只转发请求、退出码与文件无关,打不开时也会报「安装程序已打开」。 - 市场 stub 的安装包改存
$DSH_HOME(与它记录的状态同处)并清掉被取代的旧包:此前存在临时目录,重启后它记录的那个路径已不存在,却仍按「已下载」保持沉默。
v0.0.12
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.12_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.12-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.12_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.12_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
修复
- dsh 0.1.7-rc.1 把启动 token 交换的重定向目标改成了相对的
./,此前外壳把它直接拼在源站之后(http://127.0.0.1:3600./)导致握手失败——服务明明在监听却报「未就绪」;现在该重定向按请求 URL 解析。
v0.0.11
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.11_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.11-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.11_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.11_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
修复
- Windows 上更新 dsh 不再因
\\?\前缀路径而失败:从启动器推导出的 npm 路径在进入命令行前会去掉该前缀,而cmd.exe无法执行这类路径。 - 更新失败的提示不再是一行乱码:子进程输出先按 UTF-8 解码,失败再按机器的 OEM 代码页解码;此前 Windows 自己的中文报错会变成替换字符。
- 外壳自身的更新在 Linux / WSL 上不再谎报成功:交给系统打开时会等
xdg-open,打不开时(退出码 3)明说"系统里没有能打开它的程序",并给出sudo apt install <路径>。
v0.0.10
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.10_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.10-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.10_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.10_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
新增
- 记住 dsh 窗口的缩放因子,重启仍生效;
DSH_SHELL_ZOOM可指定会话初值,优先于记忆值。
修复
- 更新检查与「更新并重启」改为异步命令,窗口不再在 IPC 回调里卡住。
- 市场条目的宿主平台与架构改为可注入参数,
node --test在三个平台都能过。 - 选端口改为实际 bind 一次,不再被未释放的 listener 误报空闲。
- 端口候选只取 90 天内的日志,不再探测机器用过的每个端口。
- 手输端口总能被记住;待装版本先过 semver 校验;缩放因子传入新建的 dsh 窗口。
- 市场条目的「是否已安装」由 fixture 决定,装了外壳的机器上测试不再翻转。
- 市场引导识别 WSL:
xdg-open装不了.deb时明确提示改取 Windows 安装包。 - 打开器非零退出记一行日志,交接安装包失败不再无声。
- Windows 更新 dsh 不再报
os error 193:按平台选 npm 启动器,.cmd经cmd.exe /d /s /c运行。 - npm prefix 同时认
<prefix>/lib/node_modules与<prefix>/node_modules,Windows 上也能推导出拥有 dsh 的 npm。 - 日志尾部按字节读入后宽松解码,多字节字符不再吞掉启动 token。
- 交接状态建窗前置位,不再出现隐藏窗口加假的 90 秒超时。
安全
bootstrap窗口只放行打包资源,loopback 上的其他页面拿不到命令面。- Windows 站外链接改用
explorer:URL 里的&与%VAR%不再被 cmd 解析或展开。 - dsh 窗口只放行交给它的那份会话,其余 loopback 链接交给系统浏览器。
维护
- Linux 交接安装包后补一句
sudo apt install提示。 docs:check校验五处版本号一致;README 环境变量表补上DSH_SHELL_ZOOM。
v0.0.9
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.9_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.9-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.9_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.9_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
新增
- 市场条目声明详情页截图:新增
plugins/dsh-desktop-app/screenshots.json与assets/screenshot-1-launcher.png。
维护
- 发布说明改从默认分支的
CHANGELOG.md生成,不再取自 tag:改过的旧条目不会再被重跑还原。 - 两份 changelog 的条目改为一行一条、只写改了什么;README 把「平台与兼容性」移到「获取」之前。
v0.0.8
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.8_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.8-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.8_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.8_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
插件市场入口(不是安装包本体):dsh-xswt-tauriapp-plugin.tgz,
装着它,首次启动 dsh 时会自动下载并校验上面那份本平台安装包。
新增
- 启动时可选端口:默认值为运行中 dsh 的端口,否则是首个空闲端口(
3080–3129)或上次手输的端口;也可输入任意端口。 - 端口可用性在启动前判定,区分将启动 / 可复用 / 被占用 / 会话无法接手 / 低于
1024。 - 手输的端口会被记住,仍空闲时优先于扫描结果。
- 外壳自身的更新检查:新版本在弹窗顶部提示「下载并安装」,按平台挑选本仓库 release 的安装包,比对发布页
SHA256SUMS通过后才交给系统安装器;本平台没有安装包时退化为打开发布页,校验不符或缺校验文件则拒绝且不落盘。 - 插件市场入口
plugins/dsh-desktop-app/:零依赖的引导插件(声明dsh.bundle),首次启动 dsh 时按平台取SHA256SUMS、校验通过才写盘再交给系统安装器;已安装时保持安静,无桌面会话或本平台无安装包时只打印一句说明,不静默安装,也不导入 harness API。
变更
- 启动弹窗改为每次启动都显示(标题「启动 dsh」,主按钮「打开 dsh」);更新检查与端口扫描并行。
- 候选端口改为从
$DSH_HOME/launcher/logs的日志文件名派生,不再扫描3080–3129;扫描使用独立的短连接超时,非标准端口下次仍能被发现。
修复
- 菜单或托盘构建失败不再阻止应用启动(此前在没有状态栏宿主的桌面上会打不开)。
- 弹窗的「已安装位置」改为实际的 dsh 启动器路径(此前是回环 URL)。
- 版本比较先剥离 tag 的
v前缀,并要求两边都可解析为 semver,不再把当前版本当新版提示。
维护
- 发布工作流新增
stub任务:打包市场引导包并以不带版本号的名字dsh-xswt-tauriapp-plugin.tgz附到 release,断言包内含dsh.bundle与cordis.patch.yml;版本一致性检查扩到五处(新增plugins/dsh-desktop-app/package.json)。 - 两份 changelog 各自重复的
## Unreleased段已合并为一段(scripts/release-notes.mjs只取第一个匹配段)。
v0.0.7
安装
| 平台 | 文件 |
|---|---|
| Windows | *-setup.exe |
| macOS | *.dmg |
| Debian / Ubuntu | *_amd64.deb |
| Fedora / RHEL | *.rpm |
| 任意 Linux | *.AppImage |
# Debian / Ubuntu
sudo apt install ./dsh-xswt-tauriapp_0.0.7_amd64.deb
# Fedora / RHEL
sudo dnf install ./dsh-xswt-tauriapp-0.0.7-1.x86_64.rpm
# AppImage
chmod +x ./dsh-xswt-tauriapp_0.0.7_amd64.AppImage && ./dsh-xswt-tauriapp_0.0.7_amd64.AppImagemacOS 构建未签名,首次打开需右键 →「打开」,或执行
xattr -dr com.apple.quarantine /Applications/dsh-xswt-tauriapp.app。
下载后可用 sha256sum -c SHA256SUMS 校验完整性。
修复
- 应用与安装包改用项目自己的图标:由
tauri icon生成(icon.ico含 16–256px),并指定 NSIS 的安装器与卸载器图标。 - 发布工作流升级到各 action 的 Node 24 版本,消除 Node 20 弃用告警。