dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
常驻程序坞的 DeepSeek Harness 开关:左键回到/启动 dsh 网页界面,右键菜单(停止服务、动画开关),图标实时显示服务与任务状态并在完成/需确认时发光提醒。 | Always-on macOS Dock toggle for DeepSeek Harness: left-click to open/start the dsh web UI, right-click menu (stop service, animation toggle); live state icon with glow alerts.
简体中文 | English
中文:常驻程序坞的 DeepSeek Harness 开关 —— 左键点击回到/启动 dsh 网页界面,右键打开菜单(停止服务、动画开关);图标实时显示服务与任务状态,并在任务完成或需要确认时发光提醒。
English: An always-on Dock toggle for DeepSeek Harness — left-click to open or start the dsh web UI, right-click for the menu (stop service, animation toggle). The icon mirrors live service/task state and glows when a task finishes or needs confirmation.
仓库:https://github.com/wjingshan/dsh-dock-launcher
⬇️ 下载最新版(Release) — 解压后把 App 拖进「应用程序」即可。
一个运行在 macOS(Apple Silicon / M4)上的常驻小程序:程序坞图标 = 拨动开关。
左键点击 = 启动 / 回到 DeepSeek Harness(dsh)网页界面;右键点击 = 操作菜单(停止服务、动画开关等)。
图标实时呈现服务与任务状态,并在任务完成 / 需要确认 / 等你选择时做动态提醒。
界面语言跟随系统,内置 简体中文 / English / 日本語 / 한국어(可在「系统设置 → 通用 → 语言与地区 → 应用程序」单独指定本 App 的语言)。
| 图标 | 状态 | 说明 |
|---|---|---|
| 关闭 | 红 · 滑块在左 | |
| 启动中 | 白色滑块左右往复(胶囊通电变绿) | |
| 启动失败 | 关闭态 · 圆钮上是红色 ✕ | |
| 运行 · 空闲 | 绿 · 滑块在右 | |
| 任务进行中 | 多色极光流动 | |
| 任务完成 | 边缘内发光 + 白色流光(绿) | |
| 需要确认 / 等你选择 · 单选 | 问号变形动画 | |
| 等你选择 · 多选 | 对勾淡化叠加 |
八张图放在同一列、而不是排成一行:GitHub 的
max-width: 100%会把图片压缩到所在单元格的宽度。 横排时每列宽度都不同(实测 121~235px),每张图就被压成不同尺寸,看起来"大小不一";放在同一列则 共用同一个列宽,无论视口多宽,八张图的显示尺寸必然完全一致。
点下图标立刻进入「启动中」:关闭态红胶囊上绿色从左端扫满(0.3 秒通电,前缘带一道柔光),此后 胶囊保持绿色,白色滑块在整只胶囊里左↔右往复(余弦,两端速度为零;一个来回 1.1 秒)——「开关已经 通了电,还在等服务就绪」。服务就绪时滑块从当前位置平滑滑到右端停住(0.25 秒归位),落定那一帧与 「运行 · 空闲」图标逐像素一致,无缝接管。启动失败(未找到 dsh / 起不来 / 120 秒无响应)则是 绿色从右端退去、滑块滑回左端,并在中间那颗圆钮上弹出红色 ✕(0.55 秒入场,之后静止),同时 弹出原因说明。
上表里「任务进行中 / 任务完成 / 需要确认 · 单选 / 多选」都是动图。dsh 停下来等你选分支(
ask_user_question)或审批计划(exit_plan_mode)时进入「需要你介入」态——DeepSeek 与 HARNESS 分别向上下让开、开关上的白圆点放大成一个大圆角方形、里面浮现蓝色符号,随后不停循环,直到你在 dsh 页面做好选择、dsh 继续运算,才播放反向动画收回成开关:
- 需要确认(审批)· 等你选择 · 单选 / 普通提问:圆内是蓝色问号,循环「亮度呼吸」(圆内蓝光一明一暗)。这几种情形共用同一套问号动画(所以表中并作一列),在 App 里的区别只在提示音与通知文案。
- 多选:圆内是蓝色对勾,循环「淡化叠加」——对勾从起点写出 → 画完从起点逐渐褪掉 → 还剩约一半时新一笔从起点重画,两笔同框。
图标使用连续圆角(squircle) 并随系统浅/深色外观自动切换底板配色(下图左:深色外观;右:浅色外观):
| 深色外观(默认) | 浅色外观 |
|---|---|
本 App 是 DeepSeek Harness(dsh)的配套开关,不是独立软件,请先满足:
dsh 命令可用,并至少运行过一次 dsh web 完成初始化(否则点图标会提示「未找到 dsh」);DEEPSEEK_API_KEY):右键菜单 「编辑 API keys…」 写入 $DSH_HOME/.env(缺省 ~/.dsh/.env,dsh 启动时自动读取并注入所有插件);也可在 ~/.zshrc 里 export,或在 dsh 网页的 Models 页保存。否则 dsh 发消息会报 no API key,依赖第三方 API 的插件(例如鲸鱼娘 Galgame 的升级 CG 需要 DASHSCOPE_API_KEY)会报缺少 key;brew install zstd:任务状态监测与提醒需要它;缺失时 App 仍能启停服务,但图标不反映任务状态;xattr -dr com.apple.quarantine "/Applications/DeepSeek Harness 开关.app"
推荐直接用下面的一键安装(脚本会自动去掉隔离标记)。App 菜单里也有 「环境自检…」 可以随时查看以上各项的实际状态与修复建议。
复制到「终端」执行,自动下载最新版并安装到 /Applications(含去除隔离标记、并自动启动):
sh -c "$(curl -fsSL https://raw.githubusercontent.com/wjingshan/dsh-dock-launcher/main/install.sh)"
也可以手动安装:从 Releases 下载 .dmg(打开后拖入「应用程序」)或 .zip(解压后拖入)。
首次打开若提示「无法验证开发者」:右键 App → 打开(或 系统设置 → 隐私与安全性 → 仍要打开)。
DeepSeek Harness 开关.app (当前版本 v0.15.0)
127.0.0.1:3080 标签;页面被关了就恢复一个新标签;服务没运行则启动它。打开的是带 token 的完整地址,因此不会落到 401 未授权页:优先读 dock-bridge 插件写的运行时文件,未装该插件时回退解析 dsh 启动日志。关闭(红,滑块左)= 服务已停止启动中:点下图标立刻播放的通电 + 滑块左右往复动画(见上)启动失败:关闭态 + 圆钮上的红色 ✕(入场:绿电退去 + 滑块归左 + ✕ 弹入,之后静止),菜单变为「重新启动 DSH 服务」运行 · 空闲(绿,滑块右)任务进行中:多色极光流动(蓝→青→绿→紫长色带缓慢流动 + 一道柔光掠过,60fps)待关注提醒:需要你介入(需确认 / 等你选择)= 变形动画(问号 / 对勾,见下);任务完成 = 绿色边缘内发光 + 边缘内侧 2px 白色流光~/Library/Sounds)、可点试听按钮;三种提醒还能各自设置重复次数:1 / 2 / 3 / 5 次,或**「直到鼠标移到程序坞」**(鼠标进入程序坞或菜单栏区域即停,无需辅助功能权限)。底部还有「选择音效时自动试听」开关与「恢复默认」;设置持久化保存。$DSH_HOME/.env(缺省 ~/.dsh/.env,不存在时按 0600 写入带注释的模板)。dsh 启动时读取该文件并注入所有插件与工具进程,所以以后接入任何新 API 只要加一行 KEY=VALUE —— 本 App 不需要跟着改版,也不认识任何具体的 key 名。保存后需要重启 DSH 服务生效(弹窗里可直接点「重启 DSH 服务」)。.zshrc,本 App 仍会解析 ~/.zshenv / .zprofile / .zshrc / .bash_profile / .bashrc / .profile 中形如 *_API_KEY / *_TOKEN / *_SECRET / *_PASSWORD / *_CREDENTIAL 的变量(含 *_ACCESS_KEY_ID),并排除 *_PATH / *_FILE / *_DIR / *_URL 这类「名字像 key 其实是路径」的项。已存在的进程环境变量优先;$DSH_HOME/.env 由 dsh 自己读取,本 App 不重复注入,以免两套解析器对同一个值产生分歧。整条链路只读、只写变量名进日志,不记录任何值、不外传。~/.dsh/sessions/*/session.jsonl.zstd 活跃会话日志:
approval/request、approval/asked → 需要确认turn/end(普通对话回合结束)→ 任务完成;存在活跃 goal 时回合结束不打扰,改为 goal/change(operation == "complete" / goal.phase == "complete")→ 任务完成turn/start → 进行中tool/call 且工具为 ask_user_question / exit_plan_mode → 等你选择(这两类交互在日志里没有专用事件,只能按工具名识别)完成提示规则:会话没有活跃 goal 时,一轮对话结束(
turn/end)即算完成;会话存在活跃 goal 时,只在整个 goal 真正结束(goal/change · complete)时提示。监测覆盖所有近期活跃会话,多会话并行不漏检。
dsh 生态里已有多个桌面启动器与提醒类项目,本 App 与它们的关键区别在形态:它不是 dsh 插件,而是一个独立的 macOS 原生程序坞应用——dsh 完全没有运行时,它照样在程序坞里待命,左键点一下就把服务拉起来并进入页面。
生态中的相关项目(名称与描述均可对照 awesome-dsh-plugin 精选列表 核实):
| 相关项目 | 形态 | 与本 App 的差异 |
|---|---|---|
dsh-start | macOS,命令行 + 脚本生成可入坞的 DSH.app | 功能面同为 macOS 启停,但以 CLI 与脚本构建为主,App 需自行生成 |
dsh-launcher | macOS,菜单栏应用 + 宿主插件写 runtime.json | 入口是状态栏菜单;本 App 的入口是程序坞图标本身 |
dsh-unread-dot | macOS,Dock 角标与提示音 | 基于 Web 侧 Badging API,属 dsh 插件内部;本 App 是原生程序坞应用,自带图标动效 |
dsh-task-watcher-plugin | Windows,托盘四态图标 + 任务面板 | 四态状态的思路接近,但只面向 Windows 托盘,且另起独立进程 |
dsh-tray、dsh-dock、dsh-native-launcher、dsh-desktop-windowos | Windows 托盘 / 桌面壳 | 平台不同 |
dsh-clean-desktop-shell | Windows + macOS 桌面壳 | 以快捷方式与托盘为主;不提供程序坞图标即状态显示 |
本 App 的组合目前没有第二个项目同时具备:程序坞图标本身就是状态显示与唯一入口(左键回页面 / 右键出菜单),服务未运行时左键直接拉起服务;图标实时区分 关闭 / 启动中 / 启动失败 / 空闲 / 进行中 / 待关注 六态(点下图标就有拨动动画,失败直接留一个红 ✕);任务完成由真实的 goal 结束事件驱动,多会话并行不漏检。
DeepSeek Harness 开关.app 拖进「应用程序」,双击打开(或拖到程序坞固定)。提示:提醒共有四条通道——Dock 图标动画、程序坞弹跳、提示音、系统通知。系统通知是可选的:不需要横幅的话,右键菜单里选「关闭系统通知」即可,此时连授权框都不会弹(授权只在首次真正要投递通知时才申请)。
本 App 只涉及两个系统权限,而且两个都是可选的——不授权也能正常用。
| 权限 | 用途 | 不授权会怎样 |
|---|---|---|
| 系统通知 | 提醒横幅(四条提醒通道之一) | 其余三条照常:Dock 图标动画、程序坞弹跳、提示音。右键菜单可关掉这项 |
| 自动化(AppleEvents) | 只访问浏览器:读活动标签页地址,精确判断你已回到 127.0.0.1:3080;点击图标时切回已打开的标签而非新开 | 退化为「浏览器在前台即视为已回到界面」;点击图标改为激活浏览器 + 打开地址(可能多开一个标签) |
没有申请、也没有使用的权限:辅助功能、输入监控、屏幕录制、完全磁盘访问、文件与文件夹(桌面 / 文稿 / 下载)、麦克风、摄像头、定位、通讯录、日历、照片、登录项。
其中值得一提的是:「鼠标移到程序坞就停提示音」用的是定时轮询鼠标位置(NSEvent.mouseLocation),不是全局事件监听,所以确实不需要辅助功能或输入监控权限。
另外,App 未启用沙盒(entitlements 为空、ad-hoc 签名):这既是它能自由调用 homebrew 里的 dsh / zstd、读写 ~/.dsh 的前提,也意味着它没有公证——首次打开需要靠 install.sh 去掉 quarantine 标记。
本仓库还附带一个小巧的 dsh 宿主插件 plugins/dsh-dock-bridge。装上它之后,App 不必再去解析 dsh 的启动日志,而是由 dsh 进程直接把端口、PID 和带 token 的地址写出来:
# 从本地路径安装(把路径换成你的克隆位置)
dsh plugin --profile web add /path/to/dsh-dock-launcher/plugins/dsh-dock-bridge
装完重启一次 web profile 即可。要点:
~/.config/dsh-dock-launcher/runtime.json(权限 0600,因为里面是活的 token),进程退出时删除;SIGTERM 退出路径也覆盖。~/Library/Logs/dsh-web.log 里解析带 token 的地址。该插件同时是本仓库向 awesome-dsh-plugin 的投稿条目(它需要一个可
dsh plugin add安装的宿主插件,而不是纯.app)。
patch(+0.0.1) = 修 bug / 小改minor(+0.1.0) = 新增功能 / 行为增强(0.x 阶段的主要改动也走 minor)major(+1.0.0) = 重大改动 / 不兼容(进入稳定期后)VERSION = 语义版本号;BUILD_NO = 每次构建递增号(build.sh 自动生成,已 gitignore)。CHANGELOG.md 追加记录。详见 CHANGELOG.md。cd dsh-dock-launcher
./build.sh # 一键:绘图标→打包 icns→编译→组装→打包多语言→签名,并注入版本号
src/Icons.swift;改应用图标:src/draw_icon.swift。src/ServiceManager.swift、src/TaskMonitor.swift、src/main.swift。resources/*.lproj/Localizable.strings(en / zh-Hans / ja / ko)。dsh-dock-launcher/
├── src/
│ ├── main.swift # 常驻应用:Dock/菜单栏、监测、动画、通知、左键回页面、右键菜单
│ ├── ServiceManager.swift# 启动/停止/端口探测、通用 API 凭据管线($DSH_HOME/.env + shell 兜底)
│ ├── TaskMonitor.swift # 多会话游标、zstd 解压、事件识别
│ ├── Frontmost.swift # 前台浏览器/标签检测、聚焦或恢复 dsh 页面
│ ├── Icons.swift # 各状态开关图标 + 菜单栏模板图标 + 动画绘制(极光/发光/流光)
│ └── draw_icon.swift # 用 CoreGraphics 绘制 App 图标(生成 1024px PNG)
├── resources/ # 界面多语言(en / zh-Hans / ja / ko 的 Localizable.strings)
├── docs/ # 状态图标预览图 + 支付宝收款码(README 引用)
├── plugins/dsh-dock-bridge/ # 可选宿主插件:提供端口/PID/带 token 地址(可 dsh plugin add)
├── install.sh # 一键安装到 /Applications
├── Info.plist # 应用元数据(含 CFBundleLocalizations)
├── build.sh # 一键构建脚本(读取 VERSION/BUILD_NO 注入版本号)
├── VERSION # 语义版本号(第一行)
├── BUILD_NO # 构建号(每次构建自增,已 gitignore)
├── CHANGELOG.md # 版本记录
├── LICENSE # MIT
├── README.md / README.en.md # 中文 / 英文说明
└── DeepSeek Harness 开关.app # 成品(已 gitignore)
MIT © 2026 wjingshan
DeepSeek Harness 开关 是我自用的小工具,顺手开源出来。如果它帮到了你,欢迎请我喝杯咖啡 ☕
感谢你的支持! 💙