dsh-session-bridge:讓 DSH 智能體走進真實前臺會話

前言

開發 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 插件開發者。

幾點使用上的注意:

  1. dsh_session_read 會截斷長文本,且最多返回 maxMessages 條消息(默認 40)。長會話要分段讀取。
  2. 會話記錄包含工具調用及其結果,所以即使那個會話用了別的工具,從這裏也能審計。
  3. dsh_web_url 依賴 webApp 服務,無頭部署沒有這個服務,工具會說明這一點而不是直接報錯。
  4. 這個插件是社區目錄裏的第三方項目,按當前 dsh 進程的權限運行。安裝前應通讀源碼並確認許可證(MIT)符合你們的使用要求。

小結

dsh-session-bridge 的價值不在於新功能,而在於把原先藏在瀏覽器和 RPC 層裏的操作收進標準工具調用,讓智能體能夠真正走進前臺會話做驗證。

  • 社區目錄頁:https://www.skillhub.cn/plugins/elfgzp/dsh-session-bridge
  • GitHub:https://github.com/elfgzp/dsh-session-bridge
羽毛球分组比赛记分
小程序二维码

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

小夜