前言¶
DeepSeek Harness(DSH)桌面端可以同时跑多个 Agent 会话,工具调用和提问又经常需要人工审批。人一旦切到其他 App,DSH 窗口被挡住时,页面内浮层就看不见;系统通知中心能提醒,但第三方 App 往往不能在通知里直接点「同意一次」或「拒绝」。任务还在跑,审批却积压在会话里,Agent 只能空转等人。
dsh-island-bridge 是社区维护的 DSH 客户端插件,由 JiayangSUNwinter 维护,MIT 许可。它把 DSH 的会话状态与待审批操作投影到 macOS 14+ 上的原生 SwiftUI 刘海面板(灵动岛形态),数据走进程内接缝与 stdio,不另开端口、不联网。下面介绍它解决什么问题、如何安装,以及日常使用方式。
这是什么¶
一句话:dsh-island-bridge 在 Mac 刘海区域挂一颗系统级悬浮面板,展示运行中的根会话列表,并在有待交互时独占整颗岛显示完整审批正文与裁决按钮;点击任务行或来源标题会唤醒 DSH 并打开对应会话。
插件分类为客户端,当前 GitHub 星标为 0;桌面端 DSH 要求 >= 0.2.1-rc.2,系统为 macOS 14+(带刘海的屏幕效果最佳,Apple Silicon 优先)。仅支持 macOS,package.json 声明 os: darwin,Windows / Linux 不在支持范围内。
与常见做法的对比¶
README 用表格概括了几种路径的差异:通知中心任意 App 前台可见,但无法在第三方 App 里就地裁决;DSH 页面浮层可以裁决,窗口被挡就不可见;云中继加手机推送可以裁决,但数据会经第三方云。本插件通过原生刘海面板,在「任意 App 前台可见」「可就地裁决」「数据不出本机(仅 stdio / 同源路由)」三点上同时成立。
核心功能¶
审批与提问¶
桥接以 answerer 身份加入 DSH 审批瀑布(approval/request、user-questions/request)。岛上的「同意一次」「拒绝」与 DSH 原动词 allowed-once / rejected 一致,不产生额外权限语义。只要有待交互,整颗岛只显示审批(来源、队列、完整正文、按钮),不夹带运行任务与完成提示;正文在岛内滚动,按钮钉在底部。
提问类卡片会镜像到岛上,但「在 DSH 回答」只会打开对应会话,不会被当成工具权限批准;答案、取消和超时仍按 DSH 原有语义,交互结束立即清理岛上的提示。
任务列表与导航¶
无待交互时,面板展示运行中的根会话(子代理不单独成行)。默认任务标题会展示完整首条消息,手动或模型生成的名称会保留;列表宽度在 392–560pt 间随文字自适应,过长末尾省略,悬停可看全文。动态高度:1 项 96pt、2 项 124pt、3 项 152pt,上限 178pt 后内部滚动。
点任务行或审批来源标题 → 通过 DSH 桌面端同源已鉴权路由与 uiWorkspace.openSession 精确打开会话,不经窗口猜测。导航只在桌面端(dsh-app: 协议)生效,普通浏览器不消费。
完成提示与宿主行为¶
会话结束时,同一岛上出一条 24pt 单行完成提示,3 秒后自动收回,连续完成不叠窗。宿主只托管一个 helper 进程;崩溃重启有退避与预算。helper 二进制首次运行时由 swiftc 编译,并按源码哈希缓存在 $DSH_HOME/dsh-island-bridge/。
v1 为只读状态、审批裁决与跳转,不含内容输入,不能替你在会话里发 prompt。
工作原理(概要)¶
DSH 桌面进程内的 lib/index.js 订阅审批与会话快照,经 stdin JSON 行 推给 Swift 写的 island-helper(NSPanel);面板回传 decision / open 后,审批经已鉴权通道交给桌面 PendingApproval.answer(),跳转走 /api/island-navigation/* 与 lib/client.js。不抓屏、不 hook 其他进程、不解析日志;诊断日志默认关闭,开启时见下文配置。
安装与启用¶
环境¶
除 macOS 14+ 与 DSH 桌面端 >= 0.2.1-rc.2 外,首次运行需要 Xcode Command Line Tools(用于 swiftc 编译原生面板):
xcode-select --install
Node 要求 >= 22;日常使用 DSH 自带运行时即可,Node 主要用于测试与脚本。
推荐:插件管理页¶
在 DSH 的插件管理页里从 GitHub 安装 JiayangSUNwinter/dsh-island-bridge,然后重启 DSH。
命令行¶
# 从 GitHub 安装
dsh plugin --profile desktop add github:JiayangSUNwinter/dsh-island-bridge
# 或从本地仓库根目录安装(开发用)
dsh plugin --profile desktop add link:"$PWD"
装完重启 DSH。dsh plugin 会把参数转发给 pnpm,成功后把包名写进 profile 的 dsh.profile.bundles;本包的 cordis.patch.yml 经 dsh.bundle.patch 声明,作为组合层随 bundle 加载。仓库按 awesome-dsh-plugin 收录要求组织,收录后也可在 DSH Market 里一键安装。
若插件列表里看不到,或宿主日志没有 [island-bridge],需确认三处:包目录在 ~/.dsh/profiles/desktop/node_modules/dsh-island-bridge、package.json 的 dsh.profile.bundles 含 "dsh-island-bridge"、cordis.patch.yml 末尾有 island-bridge 插入项。README 中有完整 YAML 示例;改完同样要重启 DSH。
安装后运行时文件示例:
$DSH_HOME/dsh-island-bridge/island-helper # 首次启动自动编译的原生面板
$DSH_HOME/dsh-island-bridge/island-helper.sha256 # 源码哈希缓存,源码变了自动重编
典型用法¶
| 操作 | 效果 |
|---|---|
| 点常驻区(绿点 / 橙点) | 展开岛,显示任务列表或审批卡 |
| 点顶部收起 / 点岛外 | 收起;同一审批的状态刷新不会再弹开,新审批仍会展开 |
| 「同意一次」/「拒绝」 | 回传与原审批动词一致的裁决,4 秒未确认允许重试 |
| 「在 DSH 回答」(提问卡) | 打开对应会话去回答,不会当成工具权限批准 |
| 点任务行 / 审批来源标题 | 唤醒 DSH 并打开该会话(不产生裁决) |
| 复制按钮 | 复制审批全文 |
并行开多个 Agent 时,可以不在 DSH 窗口前,通过刘海上的列表知道哪些根会话在跑;工具审批弹出时直接在岛上读全文并裁决,需要细节时再点一行跳回对话。
配置¶
| 环境变量 | 默认 | 说明 |
|---|---|---|
DSH_ISLAND_DEBUG |
未设置 | 设为 1 后写入诊断日志 $DSH_HOME/dsh-island-bridge/bridge-debug.log |
DSH_HOME |
~/.dsh |
DSH 数据目录,决定 helper 二进制与日志位置 |
适用场景与注意¶
适合经常在 macOS 上并行使用 DSH 桌面端、又需要离开 DSH 窗口做其他事的开发者:审批不漏、跳转精确,且面板通信仅 stdio,导航与审批应答走 DSH 已有同源已鉴权路由,README 明确不监听端口、不联网、无遥测。
使用前请注意:插件与当前 DSH 进程权限一致,安装前应自行查看 GitHub 仓库 源码与 MIT 许可证;首次安装需本机 swiftc 编译 helper(约数秒到一分钟),升级插件后若行为未变可先重启 DSH 以触发按哈希重编。故障排查可参考 README:例如岛上没有面板时查 [island-bridge] 日志与 swiftc --version;点任务行只唤醒不跳会话时确认使用的是桌面端而非浏览器。
DSH 生态强调「一切皆插件」;社区目录站点 SkillHub 插件页 与 GitHub 由社区维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-island-bridge(当前 package 版本 0.1.5)把 DSH 会话状态与待审批操作接到 macOS 原生刘海面板上:岛上即决、一点回会话,数据留在本机进程内。需要安装命令与交互细节时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/JiayangSUNwinter/dsh-island-bridge
- GitHub:https://github.com/JiayangSUNwinter/dsh-island-bridge