返回目录
其他 插件

deepseek-harness-swift

summer-521/deepseek-harness-swift

基于 AppKit、SwiftUI 与 WKWebView 的 DSH 原生 macOS 桌面壳,提供设置中心、DSH 版本管理、插件管理、通知和 Sparkle 应用更新。

Stars
1
Forks
0
Issues
0
更新
4 天前

PROJECT TOPICS

项目标签

INSTALL REFERENCE

安装参考

未验证
dsh plugin --profile web add github:summer-521/deepseek-harness-swift

该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。

PROJECT README

README

DSH 标志
DSH Swift Native Shell

基于 AppKit、SwiftUI 和 WKWebView 的原生 macOS 桌面壳。

Swift 原生版 v1.2.6 许可证:MIT macOS 26+ Apple Silicon arm64

DSH Swift Native Shell 是 DSH Desktop 的独立 Swift 原生 macOS 实现。它负责窗口、菜单、设置页、运行时生命周期和桌面系统集成,核心 DSH Web UI 仍由官方 @deepseek-ai/dsh 运行时提供。

本项目是一个独立的 Xcode 工程,不依赖 Electron 仓库,也不需要通过 npm installnpm ci 准备应用构建依赖。

[!IMPORTANT] 这是非官方社区项目,当前为预发布版本。macOS 构建默认使用本地自签名证书签名(无证书时可用 DSH_CODESIGN_IDENTITY=- 回退 ad-hoc),尚未接入 Developer ID 和 notarization。首次打开如遇系统拦截,请右键选择“打开”,或前往“系统设置 → 隐私与安全性”放行。

下载

当前 Swift 原生版安装包发布在 DSH Desktop Releases

平台 架构 安装包 下载
macOS Apple Silicon DMG 下载 arm64

界面预览

主界面

DSH Swift 主界面

独立设置中心

设置窗口采用接近 macOS 系统设置的布局,支持通用设置、版本管理、插件管理和关于页面。

通用设置

DSH Swift 通用设置

版本管理

DSH Swift 版本管理

插件管理

DSH Swift 插件管理

主要特性

  • 原生 macOS 窗口体验:使用 AppKit 管理主窗口、交通灯、Dock 恢复、窗口拖拽、双击标题栏和独立设置窗口。
  • SwiftUI 设置中心:提供通用、版本、插件和关于页面,界面跟随系统深浅色模式。
  • DSH 运行时管理:应用包只内置 Node.js 和 pnpm,首次启动时从 npm Registry 下载并安装 DSH 运行时。
  • DSH Runtime 更新:首次启动和后续更新均从 npm Registry 获取 DSH 插件族;更新先安装 candidate,完成 Node/control、Renderer HTTP、匿名拒绝、Browser/LAN 边界和 Web UI 验证后才确认,失败时恢复完整的 Runtime 与当前 Profile 快照,并暂时抑制失败版本。
  • 插件管理:支持当前 DSH Profile 插件的安装、更新、卸载和服务重启,桥接插件随应用内置。
  • 桌面通知:支持 DSH 任务完成通知,并可从通知恢复应用窗口。
  • Sparkle 更新:Swift 应用包使用 Sparkle 提供检查更新和签名更新;应用版本与 DSH npm 运行时版本彼此独立。
  • Apple Silicon 构建:应用、内置 Node.js 和 DMG 均为 arm64 架构。

运行架构

DSH Swift Native Shell
├── AppKit / SwiftUI / WKWebView
│   ├── 主窗口、菜单和 macOS 系统交互
│   └── 设置与关于窗口
│
├── DSH Service
│   ├── 应用内置 Node.js
│   ├── 应用内置 pnpm
│   └── 从 npm 安装的 DSH 运行时
│
├── Desktop Host Bridge
│   └── 当前 Profile 的桥接插件
│
└── Sparkle
    └── Swift 应用包更新

构建

环境要求

  • macOS 26 或更高版本
  • 支持 Swift 5.9 的 Xcode
  • 构建时可访问 Swift Package Manager、Node.js 和 npm Registry

构建应用与 DMG

在仓库根目录执行:

bash scripts/build-app.sh
bash scripts/package-dmg.sh

默认构建并打包 Apple Silicon(arm64)版本:

DSH_BUILD_ARCH=arm64 bash scripts/build-app.sh
DSH_BUILD_ARCH=arm64 bash scripts/package-dmg.sh

应用包和 DMG 默认输出到 dist/。如需指定输出目录:

SWIFT_DIST_DIR=/path/to/output bash scripts/build-app.sh
SWIFT_DIST_DIR=/path/to/output bash scripts/package-dmg.sh

构建脚本会自动准备对应架构的 Node.js,并下载、校验固定版本的 pnpm CLI。assets/node/assets/bin/pnpm-pkg/ 是构建时生成的缓存,已通过 .gitignore 排除,不需要提交。

Xcode 工程是标准构建入口;Package.swift 仅作为辅助 Swift Package 清单保留。若要获得完整的资源准备和分架构产物,请使用 scripts/ 下的脚本。

默认用本地自签名证书(DSH Local Dev)对应用包签名,使 macOS 的 TCC 授权(如屏幕录制)在替换新包后仍保持有效;首次构建前可运行 bash scripts/setup-local-codesign-cert.sh 生成并导入该证书,或通过 DSH_CODESIGN_IDENTITY=- 回退到 ad-hoc 签名。

测试

测试包括源码/工程配置检查与动态 Swift harness;需要 Node.js、macOS 和 Xcode 命令行工具,不需要安装 npm 依赖:

npm test

开发工作流

  • 一次完成本地 arm64 构建、打包、校验及 SHA-256:bash scripts/release-local.sh arm64;加 --dry-run 只查看流程。沿用 SWIFT_DIST_DIR;成功打包后会由原脚本清理 .build。此入口不运行测试、不安装、不发布。

版本与更新

  • Swift 应用版本和构建号独立维护在 Version.xcconfig 中。
  • Swift 应用版本不等同于 DSH npm 运行时版本;后者在应用内的版本管理页单独检查并升级到 npm latestnext 或用户明确选择的 alpha。启动、插件操作和 Runtime 更新共享串行事务门,避免并发重启。
  • Runtime 版本目录以 npm Registry 为唯一来源;当前只接受 stable、alpha.Nrc.N 版本,GitHub 独有版本、beta 及任意降级暂不参与运行时选择。
  • Sparkle 公钥写入 Info.plist,Ed25519 私钥只保存在发布机器的 Keychain 中,禁止提交到仓库。
  • 当前更新 feed 位于 appcast-swift.xml,发布新版本时需要先构建 arm64 DMG,再使用 Sparkle sign_update 生成签名并更新 feed。
  • 发布流程已脚本化:bash scripts/release-prepare.sh <版本> <构建号> --notes <发布说明.md> 会依次执行 npm test → 更新 Version.xcconfig 与 README 三处引用 → 构建并打包 → 用 Sparkle 签名 → 写入 appcast(长度与签名取自同一份 DMG 字节)→ 跑版本一致性测试;加 --publish 才继续提交、打 tag、推送并创建 GitHub Release,加 --dry-run 只打印计划。

已知限制

  • 当前使用本地自签名证书签名(scripts/setup-local-codesign-cert.sh 创建,DSH_CODESIGN_IDENTITY 可切换到其它身份或 - 回退 ad-hoc),未提供 Developer ID 签名和 notarization。
  • 通知点击恢复隐藏主窗口等少数系统交互仍有待完善。窗口隐藏或失焦时,任务完成会发送通知;任务中途等待用户确认(工具审批)或等待回答(提问、计划确认)时同样会通知,避免应用在后台被卡住却毫无提示。
  • 应用更新和 DSH npm 运行时更新是两套独立流程。
  • 当前只提供从已安装 Runtime 向 npm latest/next/alpha tag 的单向升级;默认仅通知不自动安装,nextalpha 只能由用户明确选择;更新失败的版本会抑制到 npm tag 变化、应用升级或用户手动重试;旧版本会保留到新 Runtime 连续两次成功启动后自动清理,暂不提供任意版本切换、卸载或降级入口。
  • App 默认使用独立的 profiles/swift-desktop,终端 dsh web 继续使用 profiles/web;旧版 App 的 profiles/desktop 会在首次启动时安全复制到新目录;通用设置中切换到 web 后,两者会共享插件和依赖,升级或插件变更可能影响终端启动。
  • web Profile 下禁止 DSH Runtime 版本升级和自动更新;从 web 切回 swift-desktop 时,应用会先停止服务,再移除 web Profile 中的 dsh-desktop-host@deepseek-ai/dsh-host-webserver,避免继续污染终端环境。
  • 目前仅提供 macOS 26+、Apple Silicon(arm64)构建。
  • 同一用户会话只允许运行一个实例:状态文件、事务快照、服务记录和端口都位于 ~/Library/Application Support/DSH,而该目录不随 DSH_HOME 隔离。重复启动会被拒绝(LSMultipleInstancesProhibited + 应用内的 flock 实例锁,见 Sources/Service/DshInstanceLock.swift);锁路径被非普通文件占用(目录、符号链接等)、锁调用异常,或锁文件/应用数据目录不可写(权限、只读卷、磁盘空间)时,都会弹窗说明原因并停止启动——锁文件级的失败并不代表同一目录的状态文件不可写,因此不存在“无锁降级启动”这种安全模式。测试 harness 使用独立的 DSH_TEST_APP_SUPPORT 根,仍可并行运行。
  • Runtime 升级完成到下次启动之间是"已确认待结算"窗口:此期间插件安装/更新/卸载与 Profile 切换会保持禁用(普通设置不受影响),重启一次 DSH 后即可继续——这样可避免升级回退时静默撤销此间改动的插件,或让清理悬置。该门禁在插件操作真正取得运行时锁之后会再检查一次,因此排队期间进入该窗口的操作会被拒绝,而不是静默生效后再被回退。

许可证

本项目采用 MIT License。DSH 运行时在首次启动时从 npm Registry 获取,其版权和许可证归对应上游项目所有。

本项目与 DeepSeek 不存在隶属或官方合作关系。DeepSeek Harness 及相关名称的权利归其各自所有者所有。

CLASSIFICATION EVIDENCE

分类依据

项目类型插件
功能分类其他
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。