用 dsh-session-deeplink 給 DSH 會話加上可分享的 URL

前言

DeepSeek Harness(dsh)的 Web 界面默認跑在本機,會話列表在側欄裏。打開某一個對話之後,瀏覽器地址欄通常還是根路徑。刷新頁面、再開一個標籤,或把當前地址發給同事,對方並不能直接落到同一條會話上,只能自己再點一遍側欄。

社區插件 dsh-session-deeplink 做的事情很窄:把當前會話 ID 寫進 URL 的 ?session= 參數,打開這條鏈接時再按參數切回去。它是 Web 客戶端插件,不往 host 進程裏掛服務。

本文按社區目錄頁、GitHub 倉庫 README、客戶端源碼和 npm 包頁交叉覈對後整理。社區插件目錄 deepseek-harness-plugin.com 是獨立站點,和 DeepSeek / 幻方沒有官方從屬關係。DeepSeek Harness 本身的核心理念是「一切皆插件」,插件由社區各自發布。

這是什麼

dsh-session-deeplink 是一款面向 DeepSeek Harness Web 客戶端的會話深鏈接插件,由 R3alloc 維護,許可證 MIT。目錄頁把它歸在「會話與消息」分類。截至 2026-08-18,GitHub 倉庫 R3alloc/dsh-session-deeplink 星標爲 6,npm 上的版本是 0.1.1

它解決的問題是:讓本機(或同一套會話列表)裏的會話可以被 URL 直接尋址。README 寫得很明確——只要該會話仍存在於 DSH 會話列表中,打開這條 URL 就會恢復到同一會話。它不是把對話內容發到公網的雲分享,也不是跨機器自動同步會話存儲。

倉庫把插件拆成兩半:

  • Node 入口 src/index.tsapply 爲空,不注入、不提供任何 host 服務,只爲了讓 Loader 能掛上這一行,並掃描到 dsh.client 聲明。
  • 瀏覽器端 src/client/index.ts:真正幹活的部分。package.jsondsh.client.platformweb,並聲明注入 @deepseek-ai/dsh-client-runtime

核心功能

根據 README 和客戶端源碼,能力可以概括成下面四點。

?session= 打開指定會話

查詢參數名固定爲 session。地址形如:

http://127.0.0.1:3080/?session=session-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

3080 是 DeepSeek Harness Web UI 的默認端口,也是 README 裏的示例。插件在會話列表進入 ready 之後讀這個參數:目標 ID 在 sessions.list 裏存在、且當前會話不是它,就調用 ctx.sessions.open(target)。只處理一次初始參數,之後不再根據 URL 反覆打開。

目標不存在時,源碼會打一條 console.warn,不會去 open。倉庫測試覆蓋了這種情況:地址欄改回當前有效會話,側欄選擇保持不變。

切換會話時同步地址欄

初始深鏈接處理完之後,插件訂閱 sessions.list。當前會話變化時,用 history.replaceStatesession 參數改成新的 ID。用 replace 而不是 push,所以切換會話不會在瀏覽器歷史裏堆一串幾乎相同的頁面。

保留其他查詢參數和 fragment

同步時只改 session 這一個鍵,pathname、其餘 query、hash 都留下。倉庫測試覆蓋了這種情況:頁面原來是 /?mode=test#conversation,切換會話後變成帶上 session=,同時 mode=test#conversation 仍在。

沒有當前會話時,會刪掉 session 參數,而不是留下一個空值。

只跑在瀏覽器裏

README 和 Node 入口註釋都寫了:不添加任何 host 服務。cordis.patch.yml 只是把 id 爲 session-deeplink 的插件插進 profile 的 layer 棧,好讓客戶端半邊進入瀏覽器 roster。

安裝與啓用

目錄頁給出的安裝命令原文是:

dsh plugin add github:R3alloc/dsh-session-deeplink

倉庫 README 則要求裝進 web profile,因爲這是 Web 客戶端插件。作者給出的兩種寫法如下。

從 npm 安裝(README 建議日常用這條,包裏已經帶好客戶端 bundle,安裝時不必再跑構建):

dsh plugin --profile web add dsh-session-deeplink

從 GitHub 安裝:

dsh plugin --profile web add github:R3alloc/dsh-session-deeplink

Git 依賴會走包內的 prepare 腳本在本機構建。README 說明:pnpm 10 及以上可能要先在對應 profile 的 pnpm-workspace.yaml 裏授權構建,再重新執行安裝:

allowBuilds:
  dsh-session-deeplink: true

如需可復現安裝,目錄頁建議固定 commit 哈希。本文覈對倉庫 main 時,最新提交爲 f6250b6c5ec6bcc8a6f715b59d034664f409281e(2026-08-14),可以寫成:

dsh plugin --profile web add github:R3alloc/dsh-session-deeplink#f6250b6c5ec6bcc8a6f715b59d034664f409281e

目錄頁和 README 都提醒:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。

裝完後重啓 dsh web

典型用法

  1. 啓動 Web UI(官方倉庫默認地址是 http://127.0.0.1:3080),打開任意已有會話。
  2. 地址欄應變爲帶 ?session= 的 URL。把這條鏈接收藏、複製到另一個標籤頁,或發給使用同一套會話列表的人。
  3. 用這條 URL 重新打開頁面時,只要該會話還在列表裏,界面會切到對應會話,不用再點側欄。
  4. 之後在側欄切換會話,地址欄裏的 ID 會跟着變;刷新頁面應仍落在當前這條會話上。

不需要額外配置項。源碼裏沒有可調的選項對象,查詢鍵名寫死爲 session

適用場景與注意事項

適合這些情況:

  • 本機同時開多個標籤,每個標籤釘住不同會話
  • 把正在進行的對話做成書籤,隔天用同一條 URL 回來
  • 團隊共用同一套 DSH 會話存儲時,用鏈接指向某一條對話

使用前需要注意:

  1. 能力邊界。鏈接能打開的前提是目標會話已經在當前 DSH 會話列表裏。對方沒有這條會話,打開鏈接不會憑空把對話內容拉過去。插件也不負責複製上下文、註冊自定義協議。
  2. 只作用於 Webpackage.json 聲明 dsh.client.platformweb。裝到非 web profile 上,瀏覽器端邏輯不會生效。
  3. 版本。README 寫明當前版本基於 DeepSeek Harness 0.1.0-rc.6 開發。Harness 仍處於開發者預覽,後續版本可能要同步更新插件。
  4. 安全。插件以當前 dsh 進程權限運行。從 GitHub 安裝還會在本機執行 prepare 構建。裝之前應閱讀 src/client/index.tssrc/index.ts 和 MIT 許可證。日常安裝優先用 npm 包,避免安裝階段跑構建腳本。
  5. 失效行爲。會話被刪或 ID 寫錯時,插件只打警告,不會拋錯中斷界面;地址欄會同步成當前仍有效的會話。

小結

dsh-session-deeplink 把 DSH Web 會話變成地址欄裏的一條查詢參數:能打開、能同步、能保留其餘 URL 片段,而且不往 host 側加服務。功能面很小,但對「刷新丟會話、鏈接點不回去」這類日常摩擦是對症的。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-session-deeplink/

GitHub:https://github.com/R3alloc/dsh-session-deeplink

羽毛球分组比赛记分
小程序二维码

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

小夜