dsh-url-router: Adding Addressability to the DSH Web GUI

Introduction

The DeepSeek Harness (DSH) Web GUI is a plugin-based dynamic environment. While working with it, users frequently switch between sessions, panels, plugins, or the task board. Because these views are rendered dynamically, the browser address bar cannot directly reflect the content currently on screen. As a result, users cannot copy a link to share the current state, nor can they use a URL to trace back through past actions.

dsh-url-router is a DSH Web GUI plugin that solves this problem. As the sole writer of the address bar, it maps the current interface by modifying the URL fragment (the part after #), giving every interface a distinct, addressable link.

Installation and Activation

The installation command is as follows:

dsh plugin --profile web add dsh-url-router

After installation, restart the dsh web service and perform a hard refresh in the browser (Ctrl+Shift+R or Cmd+Shift+R) to load the new plugin.

Core Features

The plugin has the following key characteristics:

  • Address bar routing: The address bar fragment always reflects the current on-screen content.
  • Independent links: Each interface (session, panel, plugin, etc.) has a unique URL fragment.
  • Fragment-only changes: The plugin only modifies the # portion of the URL. It does not rewrite the path or query string. This means startup parameters such as ?token=… are preserved.
  • No history pollution: It uses the replaceState API, so navigating between panels in the browser does not push entries onto the history stack. Users cannot use the browser’s “Back” button to return to the state before a panel was opened.
  • Zero dependencies: No additional host routing or telemetry dependencies are required; it runs purely on the browser side.
  • Full row as a real link: Session rows in the sidebar, list rows in plugin panels, and similar rows are transparent, true anchors across the whole row. Users can right-click to invoke the browser’s native menu (for example, “Open in new tab”), or use middle-click / Ctrl+click to open in a new tab.

Supported Routing Scope

The plugin supports the following main routing types:

  • Sessions: #/session/<id>, corresponding to a specific session in the main view.
  • Main panels: #/panel/<panelId>, corresponding to a main panel (such as plugins or task board).
  • Plugin pages and components: #/panel/plugins/<package name>/<component id>, corresponding to a specific component page inside a plugin.
  • Task board: #/panel/task-board/task/<task id>, corresponding to the details of a specific task on the task board.
  • Settings panel: #/settings, #/settings/<section>, #/settings/<section>/<tab>.

Notes and Limitations

  • Mutual exclusivity: A URL fragment can have only one writer. This plugin is mutually exclusive with other plugins that write fragments (for example, dsh-session-url). Enabling them at the same time will cause them to overwrite each other.
  • Virtualized views: DSH views are virtualized, so only rows rendered on screen are recognized. Rows that have not been rendered cannot be navigated to via a link, and pasting a link cannot “fake” a jump to an unrendered row.
  • Unstable settings section IDs: The sections in the settings panel do not have stable IDs. The plugin identifies the current section by reading aria-current="true" in the DOM. Therefore, if the official UI changes the displayed text, old section links may stop working. However, after users click again, a new link is generated automatically.
  • Workspace name is display-only: The workspace name in the link is mainly for display. The session ID still determines which session is opened.

Summary

dsh-url-router brings addressability to the DSH Web GUI. It does not rely on a complex routing mechanism and binds interface state to the URL by modifying the fragment only. For users who need to share links frequently, revisit sessions, or perform automation scripts, this is an essential tool.

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

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

Xiaoye