🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

xswt442-cmd/dsh-xswt-tauriapp

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

DeepSeek Harness 的轻量 Tauri 桌面外壳,也是 dsh 的 desktop harness /…

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/24 · 已提供中文文档

给 DeepSeek Harness 的轻量 Tauri 桌面外壳:窗口、进程、启动与复用、会话交接、菜单与托盘、快捷键、更新和故障恢复归外壳,页面内容仍归 dsh。 A lightweight Tauri desktop shell for DeepSeek Harness: windows, the dsh server process, launch and reuse, the session hand-off, menu and tray, hotkeys, updates and failure recovery are the shell's; the page stays dsh's.

综合分
30
GitHub 分
30
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add xswt442-cmd/dsh-xswt-tauriapp
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 1 天前真实安装成功
是什么
dsh 原生插件 · desktop
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 2 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/24
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-xswt-tauriapp

| English

License: MIT
DSH
release
DSH compatibility
platform
runtime
compat
downloads

DeepSeek Harness 的轻量 Tauri 桌面外壳,也是 dsh 的 desktop harness / runtime supervisor:Tauri 负责 dsh 的外围——窗口、进程、启动与复用、会话交接、菜单与托盘、快捷键、更新、外链与故障恢复;页面内容仍由 dsh 自己负责。外壳不修改 dsh 源码,不向 dsh 页面注入脚本、不读取它的 DOM、不覆盖它的样式或界面,也不介入 dsh 的会话、沙箱与权限模型。

功能

- 服务复用与启动:在 3080–3129 中复用已在运行的 dsh web,否则在首个空闲端口启动一个;服务进程独立于外壳,关闭窗口不会停止它。
- 启动 token 握手与会话交接:握手在 Rust 侧完成并校验,启动 token 不进入任何页面的 URL。
- 启动时选择端口:默认值取扫描结果或上次手输的端口,也可以输入任意端口;可用性当场判定。
- 更新提示:dsh 的更新按正式版 / RC / Alpha 分栏展示,外壳自身的更新按平台挑选安装包并校验发布页的 SHA256SUMS;两者各自记录「不再提示」。
- 系统集成:macOS 使用系统菜单,Windows / Linux 使用托盘菜单;Ctrl/Cmd+R、Ctrl/Cmd+= - 0 与 F12 只在自身窗口获得焦点时注册。
- 站外链接交给系统默认程序打开,不接管应用窗口。

平台与兼容性

| 项 | 状态 |
|---|---|
| Linux(deb / rpm / AppImage) | 支持,由 CI 产出;会话交接与首次导航已实测 |
| Windows(NSIS 安装包) | 支持;安装包与 GUI 已在真机日常使用中验证,交接与首次导航均已实测 |
| macOS(dmg) | 构建已接入,未签名;GUI 未实测 |
| WSLg | 可运行;WebKitGTK 的 GPU 直通不稳,需设 WEBKIT_DISABLE_COMPOSITING_MODE=1 与 WEBKIT_DISABLE_DMABUF_RENDERER=1。WSLg 没有状态栏宿主,托盘图标无处显示;快捷键可用,前提是走 X11 后端。WSLg 一律按 scale 1 渲染,与 Windows 的显示缩放无关,所以在 125% / 150% 的显示器上窗口比原生应用小:用 Ctrl/Cmd+= 缩放即可,因子会被记住,也可用 DSH_SHELL_ZOOM 固定 |

首次导航发送 SameSite=Strict cookie 的行为已在 Linux / WebKitGTK 与 Windows / WebView2 上实测确认;macOS 依赖其 WebView 对无发起者导航的同站判定,尚未实测。

获取

从插件市场安装

插件市场(awesome-dsh-plugin)的条目指向本仓库每个 release 附带的 dsh-xswt-tauriapp-plugin.tgz,它是安装引导而非安装包本体(源码见 plugins/dsh-desktop-app/):

dsh plugin --profile web add https://github.com/xswt442-cmd/dsh-xswt-tauriapp/releases/latest/download/dsh-xswt-tauriapp-plugin.tgz

装上后首次启动 dsh 时,引导会读取本仓库最新 release,按平台挑选安装包,先取 SHA256SUMS、校验通过才写盘,再交给系统安装器。已装好外壳的机器,以及没有桌面会话的机器(CI,或 Linux 上没有 DISPLAY),只会看到一句说明。它不静默安装,也不导入任何 harness API,因此不会成为 dsh 启动失败的原因。

使用 Release 产物
每个 release 附带 Windows 安装包、macOS dmg、deb、rpm 与 AppImage,以及 SHA256SUMS。deb 依赖 libwebkit2gtk-4.1-0、libgtk-3-0 与 libayatana-appindicator3-1(托盘用;Ubuntu 24.04 起 GTK3 的包名是 libgtk-3-0t64,它 Provides: libgtk-3-0,因此照装不误):

sudo apt install "./dsh-xswt-tauriapp_0.0.12_amd64.deb"

从源码构建

需要 Rust、Node 与 Tauri 的 Linux 系统依赖:

sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev rpm
pnpm install
pnpm tauri build --bundles deb,rpm,appimage

使用

./src-tauri/target/release/dsh-xswt-tauriapp

外壳先显示 bootstrap 页面,同时完成服务发现与更新检查,随后打开 dsh 窗口。可用环境变量:

| 变量 | 作用 |
|---|---|
| DSH_HOME | DSH 主目录,默认 ~/.dsh |
| DSH_BIN | 直接指定 dsh 的 lib/bin.js |
| DSH_NODE_BIN | 直接指定 node 可执行文件 |
| DSH_TAURI_REGISTRY | 覆盖版本查询地址,默认 npm registry |
| DSH_SHELL_DEBUG | 非空时输出交接、导航与更新检查日志 |
| DSH_SHELL_DEVTOOLS | 非空时在菜单中提供开发者工具(debug 构建默认提供) |
| DSH_SHELL_ZOOM | dsh 窗口的初始缩放因子(0.3–3.0),优先于记忆值 |
| DSH_SHELL_WAYLAND | 在 Linux 上不切换到 X11 后端(见「菜单、托盘与快捷键」) |

工作原理

服务发现、握手与会话交接

| 步骤 | 行为 |
|---|---|
| 端口段 | 3080–3129 |
| 复用判定 | 读取 $DSH_HOME/launcher/logs/server-.out.log 尾部的启动 token |
| 握手(Rust 侧) | GET /?token=… → 303 与会话 cookie → 携带 cookie 复请,校验页面含 DeepSeek Harness |
| 交接 | 把 cookie 写入 cookie 存储(补上服务未给出的 Domain),确认可读之后才创建 dsh 窗口 |
| 无认证服务 | 直接 GET / 返回 200 且含标记时同样采纳 |
| 启动 | node /lib/bin.js web --port  --no-open,独立进程组,输出追加到上述日志 |

服务日志是启动 token 的唯一来源:在终端手工启动、日志未落在该路径的实例不会被识别,外壳会另起一个实例。这是 dsh 的鉴权模型决定的,外壳不做额外猜测。

端口选择

| 情况 | 行为 |
|---|---|
| 已发现可复用的服务 | 端口框预填它的端口,确认即复用;填别的端口会在新端口再起一个实例 |
| 没有可复用的服务 | 默认 = 3080–3129 中第一个空闲端口;手输过的端口若仍空闲则优先 |
| 端口被别的程序占用 | 当场提示,确认不会继续 |
| 端口上是 dsh,但本机无法接手其会话 | 单独说明——例如在 Windows 侧启动的实例,或用了另一个 DSH_HOME |
| 低于 1024 | 直接拒绝,普通用户无法绑定 |

只有手输过的端口会被记住并作为下次的默认值;接受灰色默认值不算选择,默认值因此继续跟随「第一个空闲端口」。

候选端口取自 $DSH_HOME/launcher/logs/server-.out.log 的文件名,而不是对整个端口段做扫描:没有日志的端口没有启动 token,握手不可能完成,探测它没有意义。这也让刻意选用的非标准端口(例如 9000)在下次启动时仍能被发现。

窗口模型与首次导航

| 窗口 | 内容 | 权限 |
|---|---|---|
| bootstrap | 外壳自带页面:进度、更新弹窗、失败信息 | 本地源,唯一被授予 IPC capability 的窗口 |
| dsh | dsh 的原始界面 | 远端源,不获得外壳 IPC |

dsh 的会话 cookie 带 SameSite=Strict,由其他源的页面发起的导航不会携带它,这正是把外壳页面直接导航到 dsh 会停在 dsh 401 文本上的原因。外壳保留 dsh 的安全语义,只调整交接顺序:Rust 先完成握手并把 cookie 写入 cookie 存储,之后才以 http://127.0.0.1:/ 创建 dsh 窗口。该窗口的首次导航由宿主发起,没有发起者页面,因此不是跨站请求。

菜单、托盘与快捷键

| 平台 | 形态 |
|---|---|
| macOS | 原生系统菜单(含「编辑」菜单,文本框快捷键依赖它) |
| Windows / Linux | 托盘菜单;不挂永久菜单栏,不占用 dsh 的高度 |

Tauri 的快捷键只能挂在菜单 accelerator 上,而 Windows / Linux 上挂在窗口的菜单就是可见菜单栏。这两个平台因此改用全局快捷键,并且只在自身窗口获得焦点期间注册、失焦即注销,不会长期占用整台机器的 Ctrl+R。桌面环境拒绝发放全局快捷键时,外壳照常启动,只是失去快捷键。

Linux 上另有一个前提:global-hotkey 通过 X11 抓键,而 Wayland 原生窗口的按键不经过 X 服务器,快捷键会注册成功但永不触发。外壳因此在有 DISPLAY 时默认使用 X11 后端(XWayland 在所有 Wayland 桌面上都存在),设置 DSH_SHELL_WAYLAND=1 可退出该行为;显式设置 GDK_BACKEND 时外壳不干预。
缩放由 Rust 调用原生 set_zoom 完成:WebView 自带的缩放热键在 macOS / Linux 上依赖向页面注入 polyfill,与本项目的不注入原则冲突。缩放因子会被记住(存于应用配置目录),重启后仍然生效;也可以用 DSH_SHELL_ZOOM 指定初值,此时环境变量优先。

外壳自身的更新

与 dsh 的更新是两条独立路径:dsh 来自 npm,外壳来自本仓库的 GitHub Releases,启动时并行检查。

| 情况 | 行为 |
|---|---|
| 有新版本,且该发布带本平台可安装的安装包 | 弹窗顶部提示「下载并安装」;下载后比对 SHA256SUMS,通过才交给系统安装器打开 |
| 有新版本,但该发布没有本平台的安装包 | 提示改为「打开发布页」,不猜、不下载别的东西 |
| 校验不通过 | 拒绝安装并说明期望与实际哈希,不落盘 |
| 发布里没有 SHA256SUMS | 直接拒绝下载未经校验的安装包 |
| 检查失败(断网、API 限流、还没有任何发布) | 静默,不提示;不确定有新版本不是打扰用户的理由 |

版本比较要求两边都能解析成 semver,并先剥离 tag 的 v 前缀。这里不复用 dsh 的比较函数:它的字符串回退适用于版本流,用于更新器则会把当前正在运行的版本当成新版本提示一次。

「不再提示」按外壳版本单独记录(dismissed-shell-updates.json),与 dsh 的忽略列表互不影响。

dsh 自身的更新

通道由版本字符串判定,不使用 npm dist-tag——后者自身可能指向一个 RC。

| 通道 | 判定 |
|---|---|
| 正式版 | 无预发布后缀,如 0.1.5 |
| RC | 预发布段以 rc 开头,如 0.1.5-rc.2 |
| Alpha | 预发布段以 alpha 开头,如 0.1.6-alpha.1 |

启动弹窗只在稳定度不低于已装版本的通道中选取候选:已装 RC 时只会被提示 RC 或正式版,Alpha 需在弹窗中主动选择。「不再提示此版本」把该版本写入应用配置目录,且仅抑制该版本。

开发与验证

cargo test --manifest-path crates/dsh-core/Cargo.toml
cargo test --manifest-path src-tauri/Cargo.toml --lib
node --test plugins/dsh-desktop-app/test/plugin.test.js
node scripts/check-docs.mjs
cargo run --example launch --manifest-path crates/dsh-core/Cargo.toml

crates/dsh-core 不依赖 GUI 工具链,可在缺少 libwebkit2gtk 的环境中独立构建与测试。examples/launch.rs 以与外壳相同的代码路径启动真实服务并输出准备好的会话(url= 与 cookie=);compat CI 用它验证握手,并确认启动 token 不进入 URL。

plugins/dsh-desktop-app/ 的市场引导插件是零依赖的纯 Node 模块,其测试全部运行在本机回环的替身发布服务器上:不访问 GitHub,也不打开任何安装包(DSH_TAURIAPP_NO_OPEN=1 使它停在即将交给系统安装器的那一刻)。

License

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群