dsh-session-grove: Add cross-workspace session grouping to the DSH sidebar.

Introduction

After running many prototype sessions, the sidebar displays sessions from different workspaces simultaneously: some are running, some are waiting for input, and some have just been archived. The native Workspace view included with DSH Desktop divides sessions by workspace, making it difficult to express relationships like “these sessions from different workspaces actually belong to the same experiment.” The typical solution involves moving sessions back and forth, but doing so disturbs the official workspace attribution and session logs.

dsh-session-grove takes a different approach: adding a layer of grouping above the official sidebar that only affects display position. Grouping only modifies the plugin’s own records; it does not touch workspace attribution, the workspace registry, session logs, or workspace.json. It is maintained by momijijin, and the current version is 0.4.0-beta.58.

What It Changes and What It Doesn’t

Any operation that assigns a session to a group only changes two things: the plugin’s own group record, and the session’s position in the Free Groups view. The following are the boundaries listed in the README:

  • Official workspace membership, the workspace registry, and session logs are never modified;
  • Session titles and archive status only change upon explicit user operations or when the opt-in controlSessions API is enabled;
  • workspace.json is never written.

Therefore, sessions from different workspaces can be placed in the same group, at the cost of needing to maintain the plugin’s own data file.

Installation and Compatibility Scope

Installation is done via dshmarket. Search for:

dsh-session-grove

The README notes that the marketplace entry is still in preparation; once online, installation and updates should be done entirely through dshmarket / the plugin manager. The plugin does not self-update and does not know where the next version is hosted. Local tarball and CLI installation are troubleshooting paths for maintainers and are only documented in docs/RELEASE.md; ordinary users should go through the marketplace. If you have installed the local tarball previously, you need to reinstall it from the marketplace to bind the installation source to the directory.

Compatibility scope is determined by the DSH core/API bundled with the plugin, not the desktop shell name. The following facts are from the README and package.json:

  • engines.dsh: >=0.2.0-rc.2 <0.3.0; mainly adapted for @deepseek-ai/dsh 0.2.1-rc.2 and 0.2.1-rc.5;
  • engines.node: >=22.19.0;
  • Official desktop verification: community DSH Desktop Stable 2.0.18 (rc.2), official DeepSeek Harness desktop 0.2.1.0 (rc.5);
  • Explicitly does not support community DSH Desktop Beta and community DSH NEXT; these may load by accident but do not constitute a compatibility promise.

On the platform side, CI runs Node-level and packaging verification on Ubuntu, Windows, and macOS; coverage gates only run on Ubuntu. Real DSH UI has only been verified on Windows; Linux and macOS UI support remains experimental until there is a real host/UI verification pass. The runtime itself is platform-neutral JavaScript: there are no process.platform or child_process branches in src/, nor does it call PowerShell; the PowerShell in scripts/qa/ is just a maintainer test rig and is not included in the npm package.

The useful point is that the official and community desktops bundle different DSH versions and plugin combinations, requiring separate regression testing. This is explicitly stated in the README.

Grouping and View Operations

The following are the available capabilities listed in the README.

Grouping:

  • Create root groups, supporting up to 8 levels of nesting;
  • Rename, change icon, select a palette color, or customize #RRGGBB;
  • Drag to reorder, change parent, and bring along the subtree;
  • Move up / down in the menu as an alternative to dragging;
  • Collapse / Expand;
  • Empty leaf groups can be deleted directly; before deleting a non-empty group, you must first choose a destination for the child sessions and child groups;
  • When creating a session within a group, use the inferred workspace; workspace switching or creation must go through the host UI.

View:

  • Switch between Free Groups and native Workspace views;
  • Sidebar width from 264px to 80% of the viewport, default 420px;
  • Double-click the splitter to restore default width;
  • View mode, width, collapsed state, archive filtering, and dialog geometry are all persisted.

Sessions, Archives, and Search

On the session side, you can put sessions from different workspaces into the same group, or drag sessions back to Ungrouped; support includes opening, renaming, archiving / unarchiving, and assigning to groups; archive actions are placed in the hover-out menu; the session menu includes fork and Copy Session ID. Fork uses the last completed turn and places the child session at the top of the source group (if the source belongs to Ungrouped, it places it at the top of Ungrouped). Search results in archives are dimmed and cannot be opened.

Search covers session titles, workspace, and group paths; clicking a result automatically expands ancestors, scrolls to the corresponding line, and highlights it.

The header only has three stat buttons: Running, Waiting for input, Unread. Each is a mutually exclusive main state, and background job counts are not included. Each bubble lists sessions by group; clicking opens it.

Dialogs support dragging the title bar and eight-directional resizing; clicking the mask does not close it, only Cancel/Escape does.

On the first run, there is a one-time prompt explaining that grouping only changes display position and how to create groups or drag sessions; this prompt can be dismissed and its state is stored in localStorage. When there are no groups and no sessions, the empty state provides an entry to create the first group. The view options in the top-right corner include archive three-state, Reset layout (only restores layout, does not touch grouping data), and version / range information.

Data and Upgrades

Location of group records:

<dshHome>/storages/dsh-session-grove.json

Writes use revision number comparison and a serial queue to avoid concurrent write overwrites.

Regarding localization, the package includes dictionaries for over 18 languages (English, Chinese, Japanese, Korean, German, French, Spanish, Brazilian Portuguese, Italian, Dutch, Polish, Turkish, Vietnamese, Thai, Indonesian, Russian, Hindi, Traditional Chinese, Arabic). Locale IDs are parsed by base language (ja-JP → ja, zh-Hant/zh-TW → zh-Hant, pt-BR → pt); unsupported languages fall back to English; Arabic will flip the plugin root to RTL. The plugin registers these dictionaries with the host but does not add languages to the host language directory.

Upgrading from dsh-session-groups

The identity reset in 0.4.0-beta.1 means this package will not automatically read, copy, or delete the old dsh-session-groups records and browser keys, to avoid importing data from a community plugin with the same name. The manual migration checklist is written in docs/MIGRATION-0.4.md.

Use Cases and Notes

Suitable for scenarios where you maintain multiple workspaces simultaneously and have already or are about to exceed the native Workspace view’s organizational capacity, especially when you need to hang sessions from different workspaces under a single theme. Grouping is a display-layer abstraction and does not change the session’s workspace membership or logs, so the justification for moving them should be limited to display purposes; do not use it to replace true workspace splitting.

The plugin runs within the host dsh process, with permissions equivalent to the current dsh process. Before installing, check the repository for source code and LICENSE; the stars, update frequency, and community feedback on this distribution page are also worth reviewing before deciding to rely on it long-term. Official documentation can be found on the GitHub repository, and the community directory on the SkillHub page.

Conclusion

The value of dsh-session-grove lies in turning “cross-workspace session attribution” into a draggable display layer, while deliberately not touching official session data. It is a beta version, with the supported range bound to the engines.dsh interval; whether it can actually be used depends on checking against your own DSH version.

  • SkillHub Directory: https://www.skillhub.cn/plugins/momijijin/dsh-session-grove
  • Source Repository: https://github.com/momijijin/dsh-session-grove

(SkillHub is an independent community directory site with no official affiliation with DeepSeek / Hyperbolic.)

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

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

Xiaoye