dsh-url-router:爲 DSH Web GUI 增加可尋址性

前言

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=… 等參數會被保留。
  • 不污染歷史記錄:使用 replaceState API,在瀏覽器中導航面板時不會往歷史棧裏塞記錄,用戶無法通過瀏覽器的“後退”按鈕回到面板打開前的狀態。
  • 零依賴:無額外的宿主路由或遙測依賴,純瀏覽器端運行。
  • 整行即真鏈接:側欄的會話行、插件面板的列表行等,整行都是透明的真錨點。用戶可以右鍵調用瀏覽器原生菜單(如“在新標籤頁中打開”),也可以中鍵或 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 的綁定。對於需要頻繁分享鏈接、回溯會話或進行自動化腳本操作的用戶來說,這是一個必要的工具。

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

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

小夜