dsh-workspace-insight: Add a Workspace/Session Activity Dashboard to DSH Web UI

Preface

Developers using DSH (DeepSeek Harness) to build agents usually accumulate a pile of workspaces: one for each project, experiment, and temporary idea. Over time, no one remembers “did we use that workspace last time?”, “which can be archived?”, or “which is actually running periodically?” They can only open the chat interfaces one by one to look through records.

Dashboard tools are not nonexistent, but most require building them yourself or introducing extra databases. The idea of this project is to directly read the Host’s existing local storage—workspace registry, session projection cache, session logs—and calculate and display them in the Web UI. What follows is stone-beka/dsh-workspace-insight, a client-side plugin, maintained by stone-beka, positioned as a read-only, local, and network-request-free activity insight panel.

What is it?

One-sentence positioning: Add a workspace/session activity dashboard to the DSH Web UI to answer “which workspaces are still alive, which dialogs they ran, how much time they spent, and which can be safely archived.”

  • Format: Client-side plugin, mounted via the standard dsh.bundle.patch + dsh.client manifest, no build steps.
  • Data: Read-only local files under $DSH_HOME, no network requests.
  • License: MIT. Version 0.2.1.

Compared to the method of “opening each workspace to flip through the session list,” it compresses all workspace activities into one screen, provides a distribution by day, and archive decisions have clear rules (if not used for over 20 days and still has sessions, marked as “Suggest Archive”) rather than being based on feeling.

Core Functions

The plugin has three views, sharing the same read-only data.

Overview

One row per workspace, showing last used, session count, rounds, model+tool time spent, and a bar for reach in the last 14 days. Workspaces not used for over 20 days but still having sessions are automatically marked “Suggest Archive”. Clicking a row expands sessions, allowing direct opening / archiving / un-archiving.

There is also a “Today’s Heatmap”: a workspace identity color on the left edge of the row; if untouched today, it’s dimmed to 30%, otherwise it retains its color. The “Today N” capsule at the end of the row uses varying shades of green to indicate the number of new/reused dialogs started today in that workspace (1-2 light, 3-5 medium, 6+ dark). Hovering over “Today N” shows a tooltip listing the dialogs used today; if more than 6, it collapses to “+N dialogs”.

Monthly View (Monthly Heatmap Calendar)

One cell per day, cell height increased to 118px, minimum column width 86px, horizontal scroll when the panel is narrow.

Inside the cell, segments are divided by the workspaces appearing that day: segment width = proportion of that workspace’s sessions that day, color = workspace column color (mixed to 78% to keep it soft), with the workspace name written in vertical text inside the segment, width about 10px, so names are visible even in narrow segments.

Interaction-wise: clicking a colored segment filters directly to that workspace, clicking the cell blank selects that day; after filtering, segments of other workspaces darken to 22%, preserving the overall monthly shape. Hovering a colored segment pops up all sessions for that day below the cell, and the whole row is clickable to jump; hovering over a date or blank no longer shows a tooltip, the full list is in the “Daily Records” panel below.

There is a monthly summary at the top: active days, number of dialogs, number of workspaces involved, longest consecutive active days, and MoM (Month-over-Month). You can also view only a specific workspace; if there are no records, it clearly prompts instead of showing an empty calendar.

Timeline (Continuous Date Matrix)

Rows = dates, from the earliest record (2026-08-14) to today without skipping; Columns = workspaces, each column has a solid color (same hue background pattern for header 12%, data cell 8%, empty space 3%). Column order is divided into four segments based on recent activity: Within 7 days / 8-14 / 15-21 / Over 21 days, ordered new to old within each segment by latest session creation time.

Inside a cell, each dialog has a small dot of the same color + title, default max 3 (+ N), with a “Show All” toggle. When zoomed below 80%, it enters small text mode, still retaining 9px titles (max 2 + + N). Clicking a dialog switches back to the dialog panel and opens that session.

Zoom interaction: scroll wheel only up/down; left-click drag to pan; Ctrl / Cmd + scroll wheel to zoom (40%–180%, anchored at mouse); − / + to fine-tune by 10%.

Installation & Enablement

The plugin is published on npm, package name is dsh-workspace-insight. The install command must use the package name, not a npmjs web link—pnpm treats the web URL as a tarball address to download, and the npmjs.com page returns 403 for non-browser requests, resulting in error ERR_PNPM_FETCH_403 ... 403 Forbidden.

Desktop Version: Open “Settings → Plugins → Add Plugin”, paste the package name and install, then hard refresh:

dsh-workspace-insight

dsh web / CLI Users:

dsh plugin --profile web add dsh-workspace-insight

Two points to note. First, the desktop desktop profile is managed exclusively by the desktop application; running dsh plugin --profile desktop ... in the terminal will be rejected (error: profile "desktop" is managed exclusively by the Electron application), so for the desktop version, please use the settings interface. Second, if the error is followed by No authorization header was set for the request, that is a pnpm tip; public packages do not need a token, just ignore it; only 401 requires configuring a token.

After installation, a bar chart icon appears in the left sidebar; clicking it switches the main area to “Workspace Insight”; it can also be opened in the settings page. The right sidebar also registers a narrow tab (only Monthly View + Timeline).

Uninstall:

dsh plugin --profile web remove dsh-workspace-insight

Compatibility prerequisites: Requires DSH’s Web UI (both dsh web’s web profile and the desktop version’s desktop profile work); verified on DSH 0.2.2-rc.1; Host-side decompression of session logs requires Node ≥ 20. The plugin reads Host’s session storage directly; if DSH changes storage format in a major version, the plugin shows a warning bar instead of error numbers.

If no icon appears in the left sidebar after installation, it’s usually because it wasn’t hard refreshed or the plugin row isn’t enabled—Ctrl/Cmd + Shift + R, then confirm that the row is enabled in Settings → Plugins.

Typical Usage

Below are a few reproducible operations based on the plugin documentation.

  1. Open the “Workspace Insight” icon in the left sidebar; by default, enter Overview and scroll to see all workspaces.
  2. In Overview, expand a workspace that hasn’t been used for over 20 days but still has sessions, click Archive to complete cleanup; archiving goes through Client’s uiWorkspace.archiveSession(), the plugin itself writes no session or workspace storage.
  3. Click the “Today N” capsule of a workspace row; the tooltip lists the dialogs used today in that workspace, confirming exactly what was moved today.
  4. Switch to Monthly View, click a colored segment of a day to filter the workspace and see its activity distribution this month; then click “View in Timeline” to jump to the Timeline and keep only that column; “Show All Columns” at the top can restore it.
  5. On the Timeline, use Ctrl / Cmd + scroll wheel to zoom to below 80%, confirming that titles can still be read in small text mode rather than degrading into colored blocks.

Refreshing is not manual: Overview recalculates at most once every 60 seconds, Monthly View at most once every 5 minutes, and adding ?refresh=1 to the URL forces a refresh. The daily activity index has a disk cache at $DSH_HOME/cache/workspace-insight/session-days.v2.json, updated incrementally by file size + mtime; first time 5-10 seconds, afterwards about 100-300ms; deleting the cache rebuilds it automatically, which is the plugin’s only write operation.

Data Source & Scope

The plugin reads three sources of Host data:

Source Purpose
$DSH_HOME/storages/workspace.json Workspace registry, session ownership, archived session IDs
$DSH_HOME/storages/session_projcache/sessions/*.json Title, createdAt, rounds, llmMs/toolMs, token, last question time
$DSH_HOME/sessions/**/*.zstd Session logs (multi-frame zstd), extracting event timestamps by decompressing frame by frame -> daily activity

Privacy-wise: no network requests are sent; both data routing paths are protected by Host’s connection.admit() and same-origin request header validation.

Points to note regarding scope/statistics:

  • Monthly View statistics count “Session-Days” — if a dialog is used over 3 days, it is counted 3 times, not by the number of messages.
  • Dates are calculated from event time based on the local time zone.
  • Statistics cover all sessions with projection cache (current value given in docs: 400 / 518 session-days).
  • llmMs/toolMs is local timing, not the billing metric.

Applicable Scenarios & Notes

Suitable for DSH users who need to switch between multiple workspaces but lack the energy to flip through session records one by one. It turns “finding which workspace is in use and who to archive” into a browsing action, requiring no additional recording of personal usage habits.

The plugin runs with the permissions of the current DSH process and can read session logs and the workspace registry. “Suggest Archive” is just a tip based on the last usage time; please confirm again before deleting. The archive action goes through the interface button, and the plugin itself writes no storage.

Before installation, you should read the source code to confirm behavior and verify the license (MIT). The plugin reads local data, but any third-party code that reads or writes local storage is worth reviewing yourself.

Conclusion

The value of dsh-workspace-insight lies in consolidating activity views scattered across the registry, projection cache, and session logs into a single screen of the Web UI: Overview for the global view, Monthly View to see the rhythm by day, Timeline to see continuous history. All read-only locally, no monitoring installed and no data sent out.

  • Directory: https://www.skillhub.cn/plugins/stone-beka/dsh-workspace-insight
  • GitHub: https://github.com/stone-beka/dsh-workspace-insight
羽毛球分组比赛记分
小程序二维码

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

Xiaoye