前言¶
DeepSeek Harness (DSH) 的 Web GUI 是一個基於插件的動態環境。用戶在操作時,經常需要在會話、面板、插件或任務看板之間切換。由於這些視圖是動態渲染的,瀏覽器地址欄無法直接反映當前屏幕上的內容,導致用戶無法複製鏈接分享當前狀態,也無法通過 URL 回溯歷史操作。
dsh-url-router 是一個 DSH Web GUI 插件,它解決了這個問題。它作爲地址欄的唯一寫者,通過修改 URL 的 fragment(即 # 後的部分)來映射當前界面,使得每個界面都有獨立的可尋址鏈接。
安裝與啓用¶
安裝命令如下:
dsh plugin --profile web add dsh-url-router
安裝完成後,需要重啓 dsh web 服務,並在瀏覽器中執行硬刷新(Ctrl+Shift+R 或 Cmd+Shift+R)以加載新插件。
核心功能¶
該插件主要具備以下特性:
- 地址欄路由:地址欄的 fragment 時刻反映當前屏幕內容。
- 獨立鏈接:每個界面(會話、面板、插件等)都有唯一的 URL 片段。
- 僅修改 Fragment:插件只修改 URL 的
#部分,不會改寫路徑(Path)或查詢串(Query String)。這意味着啓動時的?token=…等參數會被保留。 - 不污染歷史記錄:使用
replaceStateAPI,在瀏覽器中導航面板時不會往歷史棧裏塞記錄,用戶無法通過瀏覽器的“後退”按鈕回到面板打開前的狀態。 - 零依賴:無額外的宿主路由或遙測依賴,純瀏覽器端運行。
- 整行即真鏈接:側欄的會話行、插件面板的列表行等,整行都是透明的真錨點。用戶可以右鍵調用瀏覽器原生菜單(如“在新標籤頁中打開”),也可以中鍵或 Ctrl+單擊在新標籤頁打開。
支持的路由範圍¶
插件支持以下主要類型的路由:
- 會話:
#/session/<id>,對應主視圖中的某個會話。 - 主面板:
#/panel/<panelId>,對應主面板(如 plugins、task-board 等)。 - 插件頁面與組件:
#/panel/plugins/<包名>/<組件 id>,對應插件內部的具體組件頁。 - 任務看板:
#/panel/task-board/task/<任務 id>,對應任務看板中的某個任務詳情。 - 設置面板:
#/settings、#/settings/<分區>、#/settings/<分區>/<頁籤>。
注意事項與限制¶
- 互斥性:一個 URL fragment 只能有一個寫者。本插件與其它寫 fragment 的插件(例如
dsh-session-url)互斥,同時啓用會導致兩者互相覆蓋。 - 視圖虛擬化:DSH 的視圖是虛擬化的,只有渲染在屏幕上的行纔會被識別。未渲染出來的行無法通過鏈接跳轉,粘貼鏈接也無法“假裝”跳轉到未渲染的行。
- 設置分區 ID 不穩定:設置面板的分區沒有穩定的 ID。插件通過讀取 DOM 中的
aria-current="true"來識別當前分區,因此如果官方修改了顯示文案,舊的分區鏈接可能會失效,但用戶重新點擊後會自動生成新鏈接。 - 工作區名僅用於顯示:鏈接中的工作區名主要用於顯示,決定打開哪個會話的依然是會話 ID。
總結¶
dsh-url-router 爲 DSH Web GUI 帶來了可尋址性。它不依賴複雜的路由機制,僅通過修改 Fragment 實現了界面狀態與 URL 的綁定。對於需要頻繁分享鏈接、回溯會話或進行自動化腳本操作的用戶來說,這是一個必要的工具。