dsh-session-console: Add a central console to the DSH sidebar

Introduction

After running DSH for a while, the left sidebar chat list often piles up a bunch of sessions: those finished but not closed, those hung halfway through, and those untouched for weeks but with hot contexts. Native lists only answer “which sessions exist,” not “which is burning the most tokens,” “which is approaching context limits,” or “how do I dispatch a sentence to that unfinished session.” The daily practice is to open them one by one to check status, or rely on memory of titles and directory names, which isn’t realistic for large scale.

onlyinliu/dsh-session-console is a community-maintained client plugin, maintained by onlyinliu, categorized as “Client.” It expands this list into a dashboard covering all sessions: reads global status, locates a specific session using a sentence of natural language, and dispatches a task to that session and reads back the result. Below is an introduction to its exposed capabilities, installation, and usage.

What is it

The plugin places an icon in the DSH sidebar; clicking opens the main panel. The README describes it as a “Left Sidebar Chat Administrator.” It solves three actions that were originally manual: flipping through chats to check status, finding chats by directory name, and switching to other chats to send messages.

The plugin marketplace entry (awesome-dsh-plugin) describes it as a dashboard covering every session, natural language session positioning, and cross-session task dispatching. The repository currently has 10 files in main, topics include dsh-plugin; the npm package name is dsh-session-console, and the current latest is 0.1.1 (released 2026-11-04, content is a compatibility fix). The star count on the plugin marketplace directory page is 0. This plugin is community-maintained and has no official affiliation with DeepSeek / Fangfang.

Dashboard: Read Global

The main panel lists all sessions; each row displays a batch of metrics:

Metric Meaning
Total Sessions / Running / Cold Sessions / Empty Global Status Distribution
Cumulative Tokens (Input / Output / Cache Read / Cache Write) Derived from tokenUsage projection, no archive scanning
Cache Hit Rate cacheRead ÷ (input + cacheRead + cacheWrite)
Today’s Active / This Week’s Active Bucketed by last active time of sessions
Context Pressure Derived from contextPressure projection, showing percentage of pressureTokens ÷ contextWindow
Model next from modelSelection projection (merged pending), showing provider/model
Heat 100/(1+silentHours/6) + log10(1+token)*8 + log10(1+events)*5 + running40
Hottest / Aggregated by Workspace Who is burning tokens, which directory is busiest

The list supports filtering for All / Running / Today / Cold Sessions / Empty Sessions, sorting by Heat, Consumption, or Recent, and provides instant filtering by title and path. Data comes from DSH’s existing projections and session headers, no archive scanning, and overhead is concentrated in this process.

Reference: Locate a session using a sentence of natural language

In the “Reference and Dispatch Task” input box, enter a sentence of natural language, e.g., How is the content related to the example project going? The plugin’s processing involves four steps:

  1. Strip colloquialisms like “怎么样了 / 情况 / 进度 / 相关 / 内容 / 帮我 / 看看”, leaving the subject 示例项目;
  2. Compare the subject against each session’s title, cwd, directory tail, agent preset, and session id, with weights of 6 / 4 / 3 / 1 / 1 respectively;
  3. Substring hits get full weight bonuses; others use CJK bigram plus Latin word Dice similarity;
  4. “Locked” only if score ≥ 40 and no cross-workspace opponents with the same score exist; otherwise, candidates are listed for you to click.

The comparison uses the real cwd in the session header, not the encoded name ~6570~636E~… from the archive directory, so when a directory is named 示例项目-v2, a sentence saying “示例项目” can still match it. Brother sessions with the same score in the same workspace are not considered ambiguous; the hottest one is taken directly. Only when a cross-workspace opponent with the same score appears is it considered ambiguous and candidates are listed.

Dispatch Task: Write a sentence into another dialogue

After selecting the target, write a sentence; two dispatch methods:

  • queue (Queue): Insert as the next round of input; runs immediately when the target chat is idle;
  • steer (Interrupt Insert): If it is running, insert this sentence into the current round.

It uses the same channel as the UI input box (sessionController.prompt), so cold sessions are automatically restored, and messages are persisted. After dispatching, you can read the latest user / assistant messages, round / tool call / tool failure / exception round statistics, and the last failure reason in the details card, or click to jump directly to that chat to see the full context.

Installation and Enablement

Published to npm:

plugin_manager install_bundle  target=dsh-session-console

Can also install directly from GitHub:

plugin_manager install_bundle  target=github:onlyinliu/dsh-session-console

Install from local directory during development (changes take effect immediately):

plugin_manager install_bundle  target=D:\create\dsh-session-console

After installing, restart DSH once for the icon to appear in the sidebar. The package name and the github: line are from the original README text; do not concatenate commands yourself based on the plugin name.

Two known installation issues, explained in the README:

  • declares no dsh.bundle when installing by package name: The mirror hasn’t synced to the latest version yet, resolving to the 0.0.0-stage placeholder version left by the npm release. The solution is to switch the installation source to the official npm source, or use github:onlyinliu/dsh-session-console. Retry after the mirror’s latest syncs to 0.1.1.
  • incompatible-version when installing: The installed version is 0.1.0. Its engines.dsh upper bound is written as <0.2.2-0. According to semver pre-release rules, 0.2.2-rc.1 is greater than 0.2.2-0, so it is judged incompatible; 0.1.1 has widened the upper bound to <0.3.0-0.

The declaration for 0.1.1 is:

"engines": { "node": ">=18", "dsh": ">=0.2.0-rc.2 <0.3.0-0" }

Pay attention to DSH’s judgment behavior when loading plugins: as long as the manifest declares engines.dsh, it only recognizes that; @deepseek-ai/dsh-* in peerDependencies will be ignored, compared with includePrerelease: true. So an upper bound written like <0.2.2-0 with -0 means every time DSH releases a new rc will be judged incompatible, which is exactly why 0.1.0 couldn’t be installed on 0.2.2-rc.1. For old versions wanting to upgrade: those installed by package name can use “Update” in Settings → Plugins → Entry Details page; those installed from local directory / link: / github: / tarball have no “Update” entry, remove first then re-add. The README also states that when a package with the same name is already installed, install_bundle directly reports already-installed, there is no way to bypass it by writing a precise version, you must remove it first then install. The tools/compat-check.mjs in the repository can replicate this judgment outside of DSH:

node tools/compat-check.mjs package.json
# dsh-session-console@0.1.1  engines.dsh = ">=0.2.0-rc.2 <0.3.0-0"
#   dsh 0.2.2-rc.1      compatible
#   ...
# ALL_COMPATIBLE

Typical Usage

The following flow is given in the README and can be understood as a complete operation.

  1. Open the sidebar icon to enter the panel, use filtering and sorting to find the target session; when unsure which one it is, enter a sentence of natural language in the “Reference and Dispatch Task” input box, e.g., How is the content related to the example project going?, and see if the candidate is locked.
  2. After locking, write a sentence to say. Select queue or steer. If the target session is in a cold state, it will automatically recover.
  3. In the details card, read the latest user / assistant messages and round / tool call / tool failure / exception round statistics, and the last failure reason when there is a failure. Click to jump to that chat if you need the full context.

The Host side exposes same-origin HTTP routes (only loopback address accessible) and aggregation entry points; the client panel fetches data through these routes. In addition to the sidebar panel, the plugin also registers 5 tools for agents; specific names and parameters refer to the repository lib/index.js.

Applicable Scenarios and Notes

Suitable for developers who have multiple DSH sessions open at the same time, need to quickly locate by workspace or topic, and wish to temporarily dispatch work to other sessions. Its read operations cover global token usage and context pressure, which can reduce the burden of opening each one to check status; task dispatching uses the UI input channel, cold sessions recover, and messages are persisted.

Before using, be clear about two points:

  • The plugin runs with the permissions of the current DSH process, can see statistics information for all sessions, and can also dispatch input to other sessions. Before installing, read the source code first to confirm that the exposure scope of routes and tools matches expectations.
  • The license is MIT (from package.json), release credentials and internal tokens are not in the repository, and are not content introduced by this plugin.

Also note the release rhythm: the domestic region of the plugin marketplace prioritizes reading the npm package dsh-plugin-catalog, which is only published on the schedule / workflow_dispatch branches of build-site, so the domestic directory may lag until the next night. If you need to see it urgently, switch “Global” in “Market Settings → Download Region” in the UI, or simply write the installation source as the official npm source.

Conclusion

The value of this plugin lies in turning the high-frequency small task of “flipping through the list to find a session” into a static overview, paired with a sentence of natural language for positioning and a channel for cross-session dispatch. The benefits are obvious: click fewer times, switch windows fewer times. Inappropriate scenarios are also clear: if only one or two sessions are needed, or the workflow is managed via the command line, the benefits are limited.

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

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

Xiaoye