deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
把 DeepSeek Harness 的 Web GUI(默认 http://127.0.0.1:3080)包装为 Windows 桌面应用的 Tauri 壳层。
项目处于活跃开发阶段(v0.1.x)。生产级改造计划见 docs/production-hardening-plan.md,任务分解见 docs/development-plan.md。
--profile web,不捆绑 sidecar);托盘「停止」仅结束本应用拉起的服务进程树,不误杀用户自启的服务;服务在线时幂等返回HKCU\...\Run 注册表项(tauri-plugin-autostart)Ctrl+Shift+D 唤起主窗口tauri-plugin-notification 提供(notify command + 托盘测试项)~/.dsh/settings.yaml 的 ui-theme.preference:light/dark/system;Rust 侧 notify 监听该文件,变化时推送 theme-file-changed 事件即时同步,30s 轮询仅作兜底,system 模式跟随系统 prefers-color-scheme)DSH_URL 覆盖默认 http://127.0.0.1:3080(不同端口或测试用)drag_and_drop(false) 放行拖拽事件给页面,由 DSH GUI 原生处理(已通过 CDP 拖放模拟验证,含 iframe 场景)visible(false) + 显式 hide() 创建,壳页 iframe 加载完成后才显示(任务栏图标只出现一次,无暗色背景闪烁)dsh 命令启动(默认监听 3080 端口);安装与使用见 DeepSeek Harness从发布页下载 NSIS 安装包(.exe),运行安装后从开始菜单/桌面快捷方式启动。
说明:当前发布版未做代码签名,Windows SmartScreen 可能提示"未知发布者"——选择"更多信息 → 仍要运行"即可;请从官方发布渠道获取安装包并核对 SHA256 校验和(见发布说明)。
# 安装依赖(首次)
npm install
# 开发模式:编译并弹出桌面窗口
npm run dev
# 代码检查(clippy + 前端脚本语法 + CSP hash 一致性)
npm run check
# 单元测试(Rust)
cargo test --manifest-path src-tauri/Cargo.toml --lib
# 端到端冒烟(CDP,需 debug 构建 + DSH 服务在线;步骤见本地 docs/testing.md)
npm run smoke
# 生成安装包(NSIS)
npm run build
要求:
stable-x86_64-pc-windows-gnu 已验证)dsh 命令启动,监听 3080 端口)dsh-desktop/
├── package.json # npm 侧:Tauri CLI
├── frontend-dist/
│ └── index.html # 本地壳页:自定义标题栏 + iframe 嵌入 DSH GUI + 服务检测覆盖层
├── scripts/ # 开发/验证脚本(前端检查、CDP 冒烟)
└── src-tauri/
├── tauri.conf.json # 窗口/托盘/打包配置(withGlobalTauri)
├── Cargo.toml # Rust 依赖
├── capabilities/
│ └── default.json # 壳页窗口控制权限(capabilities)
└── src/
├── main.rs # 入口
└── lib.rs # 托盘 / 全局快捷键 / Mica 毛玻璃 / 窗口生命周期 / settings.yaml 监听(主题即时同步)
壳层架构:本地壳页(iframe 方案)。主窗口加载本地 frontend-dist/index.html,
壳页提供自定义标题栏(拖拽、窗口控制、伪最大化)并以 iframe 嵌入远程 DSH GUI。
本地页面有 Tauri IPC 权限(withGlobalTauri),远程 GUI 无权限(安全隔离)。
关键设计:
drag_and_drop(false):必须关闭 Tauri 窗口级拖拽拦截,否则 iframe 内 DSH GUI 的
document.addEventListener("drop") 收不到文件(已用 CDP 验证 iframe 场景:
drop 事件的 dataTransfer.types 含 Files、files 携带真实路径)maximizable(false) + 壳页手动贴齐工作区(Rust work_area command 提供尺寸,
DWM 隐藏边框用实测补偿)DWMWA_WINDOW_CORNER_PREFERENCE = DONOTROUND(直角)WS_THICKFRAME 触发的 1px 激活边框线 → 样式改为 WS_POPUP(去 WS_CAPTION/WS_SIZEBOX)WM_STYLECHANGED,tao 每次重置样式时立即
改回 WS_POPUP(事件驱动,零延迟零开销,无轮询线程).shadow(false)(内容铺满整个窗口)
边缘调整大小改由壳页自绘 8 方向热区 + JS 拖拽实现(系统 resize 需 WS_THICKFRAME,
已移除)transparent(true) + window-vibrancy 的 apply_mica(Win11,
跟随系统主题),Win10 回退 apply_acrylic;窗口控制权限在 capabilities/default.json 中声明tauri-plugin-single-instance,重复启动时聚焦已有窗口(否则新旧实例
争夺全局快捷键 Ctrl+Shift+D,注册失败)#document.titlesrc-tauri/icons/app-icon.svg).github/workflows/ci.yml 定义全链路流水线:fmt 检查 → clippy → 单测 → 前端检查 →
debug 构建 → release 构建 + NSIS 打包(上传安装包 artifact)。
当前状态:仓库尚无 GitHub 远程,workflow 未实际触发过。推送到 GitHub 后 即自动启用;本地等价验证命令序列见 docs/testing.md。 端到端冒烟依赖本机 DSH 服务与
~/.dsh配置,不作为 CI 步骤(本地npm run smoke承担)。
| 现象 | 处理 |
|---|---|
| 窗口显示"DSH 服务未运行" | 确认 dsh 服务已启动(dsh --profile web);或设置 DSH_URL 指向实际地址后重启应用 |
| 标题栏主题不跟随 | 检查 ~/.dsh/settings.yaml 的 ui-theme.preference 值(light/dark/system);应用日志(见下文)确认 watcher 状态 |
| 全局快捷键无效 | 快捷键可能被其他应用占用;查看启动日志中的注册失败告警 |
| 安装包被 SmartScreen 拦截 | 未签名发布版的已知限制(SHA256 核验指引见 SECURITY.md) |
日志位置:%LOCALAPPDATA%\com.dsh.desktop\logs\dsh-desktop.log(1MB 大小轮转,保留最近 5 份;设置页「打开日志目录」可直达)。
http://127.0.0.1:* 与 http://localhost:*)。自定义 DSH_URL 指向其他主机时,需同步扩展 src-tauri/tauri.conf.json 的 security.csp(frame-src/connect-src)DSH_URL 可配置,恢复后自动加载)MIT © 2026 zhangxiang
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。