deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:xbzbing/dsh-hub-desktop
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
个人小玩具,主要解决在使用远程开发机的场景下,文档页面和
dsh页面来回切换有点乱的问题。 刚好我的OpenCode-go和mimo-code-plan都要到期了,于是使用 OpenDesign 设计原型,用dsh实现出来,然后就有了DSH Hub。 累计消耗dsh有 395 轮,7784 步,1528M token。
个人使用的 Electron 桌面工具:统一管理多个 dsh(DeepSeek Harness)实例 —— 本地进程、SSH 隧道、远程 HTTP 直连三种形态一站管理。认证对接 dsh-auth-gateway 协议(密码 + TOTP + HttpOnly Cookie 注入),支持凭据保险库与已存密码静默登录。
由于没有苹果开发者账号,因此无法打包可信的 App,需要clone代码仓库并通过pnpm dist:mac来编译 App。
local:spawn 本地进程ssh:隧道,看门狗指数退避自动重连http/https:远程直连![]() |
![]() |
| 亮色主题 · 实例总览 | 暗色主题 · 实例总览 |
![]() |
![]() |
| 实例详情页 | 侧边栏收起 · 图标模式 |
| 层 | 选型 |
|---|---|
| 桌面框架 | Electron 44 + electron-vite 5 + Vite 7 |
| UI | React 18 + zustand + 手写 CSS(OKLch 明暗双主题) |
| 语言 | TypeScript 5.9(strict + noUncheckedIndexedAccess) |
| 校验 | zod 4.6.5(唯一新增运行时依赖) |
| 测试 | Vitest 4(单测)· Playwright _electron(E2E)· 契约测试(对真实网关) |
| 工具链 | ESLint 9 flat + Prettier 3 · pnpm 11 · Node 22 |
刻意避开 vite 8 / TS 7 / React 19(版本线评审结论,勿升级)。
src/
├─ shared/ 框架无关核心(node + web 双工程共享,不 import electron)
│ ├─ endpoint.ts URL 解析/归一化(协议优先、host:port 消歧、IPv6、回环检测)
│ ├─ contracts.ts 实例模型(zod 判别联合)+ IPC 通道常量 + IpcResult 信封 + 版本迁移
│ ├─ settings.ts 非敏感偏好(语言/主题/托盘/自启/通知)
│ ├─ i18n/ 扁平 key → {zh,en} 文案目录
│ └─ bridge.ts preload 桥接面类型 + app 通道常量
├─ main/ 主进程(唯一处理 electron 全局件的地方)
│ ├─ index.ts 窗口 / app://hub 协议 + CSP / 装配
│ ├─ ipc/register.ts 全部 ipcMain.handle 单点注册;入参 zod 校验 → 错误信封
│ ├─ registry/ 实例注册表:原子写 + 备份 + 自愈 + 迁移
│ ├─ transport/ local spawn / ssh 隧道 / http 直连
│ ├─ auth/ 网关客户端 + 认证状态机 + 会话恢复 + 静默登录
│ ├─ webview/ 分区 Cookie 注入、请求拦截、视图计划
│ ├─ vault/ 凭据保险库(钥匙串,显式 opt-in)
│ ├─ audit/ 审计日志(白名单投影)
│ └─ shell/ 托盘 / 原生设置 / 通知 的可注入实现
├─ preload/ contextBridge 白名单,只暴露 dshHub.*
└─ renderer/ React 壳 + 视图 · zustand store · i18n 护栏
tests/e2e/ Playwright _electron
tests/upgrade/ 升级路径与发布元数据护栏
scripts/release/ 发布演练与校验和
design/ UI 视觉基线(HTML 原型)+ 品牌 token
核心设计约定(详见 AGENTS.md):
{ok:true,value} | {ok:false,code,message},错误码稳定,
渲染层按码表映射文案;新增通道走固定四步(contracts → register → bridge/preload → 测试)transport: local|ssh|http × authMode: auto|none|gateway,
transport 创建后不可变更前置:Node 22+、pnpm 11。
pnpm install
pnpm dev # 启动 dev server + Electron 窗口
受限 / 沙箱环境下 install 需要附加参数(pnpm store 与 electron 缓存落到可写目录):
pnpm install --store-dir=/tmp/pnpm-store --cache-dir=/tmp/pnpm-cache
ELECTRON_CACHE=/tmp/electron-cache node node_modules/electron/install.js # postinstall 偶发跳过时
| 命令 | 说明 |
|---|---|
pnpm dev |
dev server + Electron 窗口 |
pnpm typecheck |
node + web + e2e 三工程类型检查 |
pnpm lint |
ESLint(flat config) |
pnpm test |
单测(vitest) |
pnpm build |
三端产物(E2E 前置) |
pnpm test:e2e |
Playwright _electron |
pnpm test:contract |
对本地 dsh-auth-gateway 源码运行认证契约测试;需设置 DSH_AUTH_GATEWAY_SRC=/path/to/dsh-auth-gateway |
测试说明:E2E 用例使用 DSH_HUB_DATA_DIR 指向的隔离临时目录,实例与凭据均为测试环境构造的数据。CI 失败时收集的产物只包含 Playwright 错误上下文、trace、界面截图与审计日志;凭据保险库文件(vault/credentials.json)即使内容是密文也不上传。若未来某条测试必须预置保险库数据,必须使用测试环境构造的 mock 数据并在此处记录其构造方式。
发布相关命令分为“本地打包与验证”和“公开 Release”两类。公开 Release 由发布说明的「分发方式」决定:source-only 只发布源码、tag 和 Release Note;windows-unsigned 额外提供未签名的 64 位 Windows 安装包与 SHA-256 校验和,由标签流水线在 windows-latest 上构建。两种模式都不上传 .app、.dmg、.zip 等 macOS 二进制与自动更新元数据:macOS 未签名未公证的产物在 Gatekeeper 下不可用,使用者需自行准备构建环境并从源码构建。
本地打包命令仍保留,但生成的未签名、未公证产物只适用于开发、本机验证和受控测试:
pnpm dist:mac:zip # mac zip,本地验证用
pnpm dist:mac # 仅生成未封装的 macOS .app,本地验证用
pnpm dist:win # Windows NSIS,本地验证用
pnpm electron:prepare # 按需下载 Electron 二进制(dist* 已内置,无需手动执行)
pnpm release:checksums # 生成 SHA256SUMS.txt(发布流水线使用)
pnpm release:check # 发布演练:校验发布说明与分发模式、资产清单自洽
Electron 44 起二进制按需下载:pnpm install 之后 node_modules/electron/dist 可能不存在,而打包配置的 electronDist 指向它,因此四个 dist* 脚本都会先执行 pnpm electron:prepare(已存在则立即跳过)。
发布前运行 CI=true pnpm release:check -- --pre,确认发布说明的分发模式与资产清单自洽。windows-unsigned 模式下推送 tag 即触发 .github/workflows/release.yml 构建并上传资产到 Draft Release;source-only 模式按演练输出创建无资产 Draft Release。两种模式都由人工确认后再 Publish;详见 docs/release-policy.md。恢复 macOS 二进制分发前,必须具备 Apple Developer ID 签名、公证、干净机器验证和可复核的更新元数据校验。
无 TTY 环境跑
pnpm <script>需带CI=true(pnpm 11 依赖检查在无 TTY 时会中止)。
<userData>/(可用环境变量 DSH_HUB_DATA_DIR 覆盖);
实例注册表在 <userData>/registry/instances.jsonhub-data/ 为本地运行 / E2E 数据(已 gitignore;E2E 自动隔离到 hub-data/e2e*)docs/PRD.md · docs/dsh-hub-desktop-design.md ·
docs/desktop-implementation-plan.md · docs/release-policy.md ·
design/dsh-hub-desktop.html · design/brand-spec.mddocs/local/ms-<N>/(当前 ms-1),不进 git
(一次性任务追踪,见 .gitignore)AGENTS.mdCLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。