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 的绑定。对于需要频繁分享链接、回溯会话或进行自动化脚本操作的用户来说,这是一个必要的工具。

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

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

小夜