DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-plugin-workspace-split

d

dsh-plugin-workspace-split

Manifest valid

Split view for the Web UI: tiles 1-3 columns x 1-3 rows of live sessions from several workspaces in one grid, with draggable dividers, sidebar-follow routing, an in-pane file preview and an in-pane ch

UI (client)hasBundlePatch

English | 简体中文

Workspace Split View

A DeepSeek Harness Web UI plugin that renders several live sessions at once in a rows × columns grid, so two or more workspaces can be watched side by side — and used, not just watched: every pane is the real conversation, not a thumbnail.

┌───────────────────────────┬───────────────────────────┐
│ workspace A · session 1   │ workspace B · session 2   │
│ … conversation …          │ … conversation …          │
│ … composer …              │ … composer …              │
├───────────────────────────┼───────────────────────────┤
│ workspace C · session 3   │ workspace D · session 4   │
└───────────────────────────┴───────────────────────────┘

Features

  • Grid of live conversations — 1–3 columns × 1–3 rows (up to 9 panes), each cell showing a real session with its composer and streaming output.
  • Resizable, per-column layout — drag a column divider to resize columns; every column keeps its own row heights.
  • Per-pane routing — swap a pane's workspace or session, create a session in that pane's workspace with the shipped new-session flow, or pop the session out to the normal conversation view with ↗.
  • Sidebar follow — while split view is open, opening a session from the left sidebar fills a pane instead of replacing the split view. An inline switch turns this off when the native behaviour is wanted.
  • In-pane file preview — file links in a pane open a read-only reader docked beside (wide pane) or below (narrow pane) that pane's conversation, with a draggable divider, text line numbers and paging, inline images, and Open with default app.
  • In-pane changes review — the edited files summary at the end of an answer opens the same dock as a review: the turn's changed-file list with line counts and the unified diff of the selected file.
  • Remembers your layout — tracks, sizes, assignments and the follow switch live in localStorage under dsh.workspace-split.v1.
  • English and Chinese UI — every visible string is localized.

Compatibility

RequirementValue
Harness runtime>= 0.2.1-rc.3 (engines.dsh)
Harness UIWeb (platform: "web"), desktop or browser
Reactsupplied by the Harness client module table

The pane renders the shipped chat view and reads a few client services (sessions, slots, locale, workspaces, layout, optional remote, sidebarRight, uiWorkspace). They are part of the released client API, but a future Harness may rename them; engines.dsh states the tested range, and the plugin fails closed (a per-pane note, not a broken shell) when one is missing.

Install

From a plugin market

  1. In the Harness Web UI open Plugins → Discover.
  2. Add the market index URL that lists this plugin, find Workspace Split View, and press Install.
  3. Restart DeepSeek Harness so the profile reloads its bundles.

With the plugin_manager tool

Ask the agent to run plugin_manager with install_bundle, target dsh-plugin-workspace-split (registry install) or the absolute directory of a checkout (development link: install). Enable the bundle if the profile keeps it disabled, then restart.

From a checkout (development)

Run plugin_manager with action install_bundle and the absolute path of this directory as the target (the profile keeps it as a link: dependency), enable the bundle if your profile leaves it disabled, then restart Harness.

No build step: client.js is a plain browser module and index.js is an empty Host entry point.

Uninstall

Disable or remove the bundle in Plugins; the grid panel disappears and the main column returns to the single conversation view. Removing the package from the profile also removes the sidebar panel button. Your localStorage layout key can be deleted independently.

Usage

  1. Click the four-pane grid icon in the left sidebar's panellist (below Plugins / Schedules) to open Split view in the central column.
  2. Pick Columns and Rows (1–3 each). The first time a pane appears it shows one session per workspace, most recently updated first; new panes continue round-robin across workspaces. A pane you clear by hand stays empty.
  3. Drag a column divider to resize columns (12% minimum each); double-click it, or focus it and press Enter/Space/Home, to reset to an even split; ←/→ nudges by 2%. With more than one row, each column also has its own horizontal dividers that only change that column's row heights.
  4. Each pane header holds: a workspace chooser (the workspace's newest session, or a fresh one), a session chooser grouped by workspace, + (new session in that pane's workspace), and ↗ (open in the normal view).
  5. The toolbar's right-most button toggles sidebar follow (on by default). The receiving pane is the one you last clicked, else the first empty pane, else a pane already showing that workspace, else pane 0; an adopted pane flashes once.
  6. File links and the end-of-answer N files edited card open a reader docked in the same pane. Drag its thin divider to resize the dock (18–78% of the pane), double-click it (or focus it and press Enter/Home) to restore the default share, or nudge it with ←/→ by 2%. Esc or Close dismisses it; text files page with Load more, images render inline, everything else offers Open with default app.

How it works

The plugin is one client module (client.js) plus one Host row. The panel mirrors the shipped main → main.conversation chain:

main[key=workspace-split]              SplitView      (declares the pane slot)
  workspaceSplit.pane (single, session) PaneHost → SessionProvider
    conversation.content factory        shipped Chat view (embedded variant)

Each pane retains one Session reference and binds it with the SessionProvider standard seat, so an embedded conversation follows its own session instead of the one selected in the main column. The layout is a CSS grid whose grid-template-columns come from persisted fractions; dividers are absolutely positioned and driven by pointer events with keyboard equivalents.

Two shipped surfaces assume the right Sidebar is mounted, which it is not while a global panel occupies main:

  • a file link calls sidebarRight.openResource("dsh-resource://file/…");
  • the edited-files card calls sidebarRight.openResource( "dsh-resource://changes-review/session/<session>/<seq>/<turn>", {params:{index}}).

The plugin wraps ctx.sidebarRight.openResource: a file address becomes the in-pane reader, a changes-review address becomes the in-pane review (reading the shipped tab's own same-origin routes api/changes.summary and api/changes.diff), and every other address or error keeps the shipped behaviour. Both docks are read-only and keep the conversation visible.

Development

npm run check    # syntax, manifest, locale parity, CSS usage, market index
npm run market   # regenerate market/index.json (npm source)
npm run market -- --git --commit=<40-hex>   # …or point it at a Git commit instead
npm run pack     # release gate + npm pack tarball in ./dist

There is no bundler: client.js is loaded as-is by the Harness client module loader (window.__ModuleLoader__.load({ id, factory }), require('react') only). Keep it plain ES2022 with React.createElement calls. UI strings live in the zh / en dictionaries next to CSS in client.js; plugin metadata lives in locale/en.json and locale/zh.json.

Set localStorage['dsh.workspace-split.debug'] = '1' to turn expected-fallback diagnostics into console warnings.

Limitations

  • While a global panel is active the right Sidebar is unmounted, so its tabs are unavailable; this plugin covers the two click paths above, not every sidebar-dependent action.
  • Follow mode intercepts session switches; use a pane's ↗ or the toolbar switch to reach the native single-conversation behaviour.
  • Review diffs are read-only and show one file at a time.
  • The Harness client services used here are released API, not a formal stable contract; a Harness upgrade outside the declared range may need a plugin update.

License

MIT

Comments

Loading…

From the same category

dsh-desktop

by anywhere-labs

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

UI & ExperienceManifest valid

★ 34.4k

↓ 175/wk

MIT

TypeScript

Oct 31, 2026

dsh plugin --profile web add dsh-plugin-desktop

by zhu1090093659

DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop

UI & ExperienceManifest valid

★ 9.9k

↓ 225/wk

Apache-2.0

TypeScript

Nov 2, 2026

dsh plugin --profile web add dsh-web

A collection of independent Web UI plugins and skins, including task boards, Git graphs, mobile access, and live token stats.

UI & ExperienceManifest valid

★ 8.6k

↓ 225/wk

Apache-2.0

TypeScript

dsh plugin --profile web add dsh-web

by PC2005-cloud

DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物

UI & ExperienceManifest valid

★ 5.2k

↓ 224.8k/wk

MIT

TypeScript

Nov 2, 2026

dsh plugin --profile web add dsh-pet

by omdsh-dev

开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git,

UI & ExperienceManifest valid

★ 4.8k

↓ 99.3k/wk

MIT

TypeScript

Oct 30, 2026

dsh plugin --profile web add dsh-better-sidebar

by bowenliang123

The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,

Tools & CapabilitiesUI & ExperienceTerminal & ClientsManifest valid

★ 4k

↓ 139k/wk

Apache-2.0

TypeScript

Nov 2, 2026

dsh plugin --profile web add dsh-context