dsh-island-bridge:在 macOS 刘海面板上审批与跳转 DSH 会话

前言

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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜