前言¶
開發 DSH 插件時,一個常見的調試困境是:某個功能只能在前臺會話裏驗證,而插件自己跑在工具調用裏,拿不到前臺會話的能力。模型想確認”這個流程在真人操作下到底能不能跑通”,往往只能繞道——去翻瀏覽器 cookie、猜 RPC 參數、改 DOM。elfgzp/dsh-session-bridge 把這幾條彎路合成了一組標準工具調用。
這篇介紹基於倉庫 README 與 package.json,說明它能做什麼、怎麼裝、以及使用時要注意什麼。
這是什麼¶
dsh-session-bridge 是 elfgzp 維護的 DSH 插件,分類屬於工作流。它把 Host 已有、但對模型工具不可見的兩套能力暴露成工具:ctx.sessionController(創建、提示、檢查、取消會話)和 ctx.connection.authenticatedUrl()(帶啓動令牌的本地 Web App 地址)。README 對它的一句話定位是:讓 DeepSeek Harness agent 打開前臺會話、驅動它們、把結果讀回來,並交出本地 Web App 的已認證 URL。
核心功能¶
插件提供五個工具:
| 工具 | 作用 |
|---|---|
dsh_web_url |
返回本地 Web GUI 地址,默認遮蔽啓動令牌;傳 includeToken: true 可獲得可直接打開瀏覽器的 URL(需要 danger-full-access 預設)。 |
dsh_session_create |
創建前臺會話,返回其 id。 |
dsh_session_prompt |
向會話發送提示,可選 queue 或 steer 兩種模式。 |
dsh_session_read |
讀取會話記錄;waitMs 可以等待當前輪次結束。 |
dsh_session_cancel |
取消會話中正在運行的輪次。 |
前臺會話和委派任務的區別¶
這是整個插件存在的理由。README 講得比較直接:
- 前臺會話是根智能體,擁有
userQuestions服務,需要人工同意時可以真的開口問。 - 委派任務(子智能體、工作流智能體)沒有這項服務,調用時會得到
APP_APPROVAL_UNAVAILABLE: Application approval is unavailable in delegated tasks; ask the main task to perform this operation。
所以那些需要人工確認的插件(README 舉了 elfgzp/dsh-cua-macos 的例子)只能通過前臺會話端到端跑通,而這五個工具負責創建這種會話。
令牌處理¶
connection.authenticatedUrl() 生成的啓動令牌是一份有效憑證:任何瀏覽器打開這個 URL 都會拿到一個已認證的會話,而且工具返回值會進入對話記錄,進而進入日誌、導出和聊天副本。
因此默認行爲是 maskToken:返回 origin 以及把令牌截成首尾各四字符的 URL。只有在確實需要打開瀏覽器時才傳 includeToken: true,並且不要把結果持久化或粘貼出去。
includeToken: true 受調用方權限預設限制。工具向 permissionPresets 服務查詢當前會話的預設(current(session))並解析爲 { sandbox, approval },只有 sandbox === "danger-full-access" 才交出明文令牌,其他預設一律返回 insufficient-permission 和遮蔽後的 URL。
README 明確說明這個閘門是失敗關閉的:permissionPresets 缺失、resolve() 處理不了 custom、任一調用拋錯、execution.agent.session 不可用,結果都是”不給令牌”,而不是”放行”。
安裝與啓用¶
dsh plugin --profile <profile> add github:elfgzp/dsh-session-bridge
裝完重啓 DSH。插件沒有依賴。倉庫要求 engines.dsh 爲 >=0.2.0,許可證是 MIT。
典型用法¶
README 給的示例是讓智能體驗證只在前臺會話裏能做的事情:
你手上有一個只能在前臺會話裏驗證的功能。請:
1. 用 dsh_session_create 建一個會話
2. 用 dsh_session_prompt 讓它做那件事
3. 用 dsh_session_read(waitMs=120000)把結果讀回來
三個步驟對應工具清單裏的創建、提示、讀取,中間沒有涉及 cookie 或 DOM 操作。
倉庫自帶測試:
npm test # node --test test/*.test.mjs
lib/format.js 裏是純函數(maskToken、clip、reasonLabel、transcribe、waitForTurn),不依賴 Host,測試在普通 Node 20 上就能跑。test/web-url.test.mjs 通過 apply() 接一個假的 ctx,覆蓋了權限閘門和所有失敗關閉路徑。
適用場景與注意¶
適合需要在真實前臺會話裏驗證功能、或者需要把本地 Web App 地址交給外部流程的 DSH 插件開發者。
幾點使用上的注意:
dsh_session_read會截斷長文本,且最多返回maxMessages條消息(默認 40)。長會話要分段讀取。- 會話記錄包含工具調用及其結果,所以即使那個會話用了別的工具,從這裏也能審計。
dsh_web_url依賴webApp服務,無頭部署沒有這個服務,工具會說明這一點而不是直接報錯。- 這個插件是社區目錄裏的第三方項目,按當前 dsh 進程的權限運行。安裝前應通讀源碼並確認許可證(MIT)符合你們的使用要求。
小結¶
dsh-session-bridge 的價值不在於新功能,而在於把原先藏在瀏覽器和 RPC 層裏的操作收進標準工具調用,讓智能體能夠真正走進前臺會話做驗證。
- 社區目錄頁:https://www.skillhub.cn/plugins/elfgzp/dsh-session-bridge
- GitHub:https://github.com/elfgzp/dsh-session-bridge