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

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

小夜