DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-panes

d

dsh-panes

Manifest valid

Full-screen workspace panel for DSH: a project sidebar with per-project tabs for session, files, explorer, project search, terminal, browser, source control and a Markdown notes vault.

UI (client)hasBundlePatch

dsh-panes

A full-screen workspace panel for DeepSeek Harness: a project sidebar on the left and, per project, a set of tabs — session, files, search, terminal, browser, source control and notes.

dsh-panes workspace: project sidebar, per-project tabs, Markdown preview

一个 DSH 全屏工作台面板:左侧是项目列表,右侧是该项目的 tab 集合(会话、文件、搜索、终端、浏览器、源代码管理、笔记)。切换项目就切换整套 tab。

Panelmain + sidebar.panellist row — one panel, opened from the DSH sidebar
Tabssession · file · explorer · search · terminal · browser · git · notes
Hostone same-origin POST /dsh-panes/api route, plugin-header fenced
Clientone bundled file (shadcn/ui + Tailwind, preflight off), React external
LicenseMIT

Tabs

TabWhat it does
SessionThe conversation for this project, embedded in the tab strip. One tab per session.
FileRead-only code view with syntax highlighting (shiki), line numbers, breadcrumb, word wrap, ⌘G jump-to-line, paged loading for large files, UTF-8 detection.
ExplorerDirectory tree: open, copy path, reveal in the system file manager.
SearchProject-wide content search: regex, case sensitivity, globs, split result list + preview, hit counts, truncation flag. Uses the machine's rg, then the rg bundled with @vscode/ripgrep, then a bounded JS walk — and tells you which engine ran.
TerminalA real pty in the tab, via the host's webTerminals service, with fit-on-resize and live theme.
BrowserEmbed an http(s) page next to the code, with back/forward/reload.
Source controlThe Git tool window: changes, staged/unstaged, commit box, commit history graph, diffs, branch actions (16 rail buttons, each switchable), AI-generated commit messages.
NotesA Notion-style Markdown vault: list + BlockNote editor, one .md per note, frontmatter preserved by the host, .trash on delete, etag-based conflict detection.

Session tab Code file tab

Install

# from npm
dsh plugin --profile web add dsh-panes

Then add "dsh-panes" to dsh.profile.bundles in ~/.dsh/profiles/web/package.json and restart the client once — a new bundle is composed into the boot graph only on restart. After that, rebuilds are picked up by a page reload.

The plugin shows up as the Workbench / 工作台 row in the DSH sidebar.

From a checkout instead (development):

pnpm install && pnpm build                     # lib/ is the shipped artifact
dsh plugin --profile desktop add "$(pwd)"      # pnpm link
# add "dsh-panes" to dsh.profile.bundles, restart

Uninstall: remove it from dsh.profile.bundles, then dsh plugin --profile web remove dsh-panes.

Using it

  • The sidebar lists every workspace, with its open-tab count (or a running dot when it has live sessions). + adds a project; the filter box narrows the list; the collapse button shrinks the sidebar to a 52px rail (automatic below 820px of panel width).
  • + at the top right opens the NEW TAB menu: session, open file, explorer, search, terminal, browser, git, notes.
  • Tabs are scoped to the project: switching project switches the whole tab set. Each project's layout is persisted.
  • The status bar shows branch + changed-file count (±n, click opens Git), live session count, cursor line/column, encoding, language and light/dark.

Keyboard (the panel only — a focused editor or terminal keeps its own keys):

KeysAction
⌘P / Ctrl+PQuick open a file by name
⌘⇧F / Ctrl+Shift+FProject search
⌘⇧NNew session tab
⌘WClose the current tab
⌘⇧TReopen the last closed tab
⌘BCollapse / expand the project sidebar
Tab / ⇧TabCycle tabs
EscClose the panel

Per view: ⌘G jump to line (file), ⌘⇧V preview/source (Markdown), ⌘S save (note).

Settings

Plugins → dsh-panes. Every field is live — no restart.

Appearance settings

FieldMeaning
startupworkspace (default) · last (only if the workbench was the last panel) · conversation
fontUiFamily / fontUiSizeUI font stack / size (px); empty = follow dsh
fontCodeFamily / fontCodeSize / fontCodeLineHeightcode font stack, size, line height
notesVaultPathabsolute notes directory; empty = $DSH_HOME/notes (an Obsidian vault works)
experimentalRemoteOpsshows and allows push / pull (default off)
commitModel / commitReasoning / commitPromptAI commit message model, reasoning strength, extra prompt
rail*one switch per Git action-rail button (16 of them)

Git settings Git tool window

How it is built

The package is a Cordis plugin with two halves, mounted by a bundle patch:

PathRole
src/index.tsHost half: the Cordis plugin, POST /dsh-panes/api route, Config schema.
src/client.tsxBrowser half: registers the main panel and its sidebar.panellist row.
src/panel/Panel shell, file/explorer/search/Markdown/terminal/browser views, shared types.
src/tabs.tsPure tab model: per-project tab sets, idempotent open, persisted layout.
src/notes.ts, src/notes/Notes vault (host ops) and the list + BlockNote editor.
src/git/Forked Git tool window (host.js, panel.js, adapter); see src/git/UPSTREAM.md for provenance.
src/ui/shadcn primitives (button, input, dropdown-menu) + cn().
src/styles/tailwind.cssDesign tokens (host theme vars) + Tailwind layers.
cordis.patch.ymlBundle patch: one insert row naming this package.

Two registrations are needed for one panel: main holds the content and sidebar.panellist (same id as the panel key) holds the sidebar row, its label and its icon. Registering main alone shows nothing.

Host calls go through the single same-origin route with { op, args }; the client must send x-dsh-plugin: dsh-panes, and the host answers only loopback or same-origin callers.

Tailwind runs with preflight off and every component lives under .workbench-root / .workbench-portal, so the panel cannot restyle the host. Only react, react-dom and @deepseek-ai/* stay external; everything else is bundled into lib/client.js (compiled to CJS and wrapped into the client-modules factory form by scripts/wrap-client.mjs).

Development

pnpm install
pnpm build       # build:styles (Tailwind -> src/generated/styles.ts) + tsdown + wrap
pnpm typecheck   # tsc --noEmit
pnpm test        # node --test: host route, tab model, search, notes, git guards
pnpm check       # build + typecheck + test

Rebuild and reload the page to pick up client changes; a bundle added to a profile needs a client restart.

Known limits

  • Read-only for code: no editor or write-back, no LSP. Notes are the only writable surface.
  • Add project cannot register a workspace: the client half exposes workspaces.model but no add. The row and the + entry report that refusal instead of pretending.
  • Search and notes act on client-supplied absolute paths, fenced by the plugin header + same-origin check rather than by "must be inside a registered workspace" (the host exposes no workspace list to the host half). Treat the route as trusted-page-only, the way /api is.
  • Git push / pull stay hidden by default: the buttons are absent until experimentalRemoteOps is on, and the host refuses those methods while it is off. No credential, proxy or conflict handling is claimed for them.
  • The Git panel is a fork of dsh-ide-git v0.21.1 (MIT), pinned here and no longer synced with upstream; it still carries its own dig- styling.
  • The Git status bar calls summary with stats: false — it shows ±n changed files, not added/removed line counts.
  • The browser tab can only frame sites that allow embedding.
  • Notes: a symlink inside the vault is refused (lstat), so a note can never be a link to a file outside the vault — read or write.
  • The browser bundle is a single ~9.4 MB file (≈2.1 MB gzip), most of it BlockNote. The editor is loaded lazily so a failure in it costs one tab, not the panel's boot — it does not save download time.

Credits

The Git tool window is forked from dsh-ide-git v0.21.1 (MIT); its license and the exact list of local hunks live in src/git/LICENSE and src/git/UPSTREAM.md. The design language follows DSH's own panel tokens.

MIT © flyfly6

Comments

Loading…

Similar plugins

dsh-devpanel

A developer toolkit for the DeepSeek Harness (DSH) web console: a real multi-tab PTY terminal docked under the composer plus an AI-output file browser sidebar with syntax highlighting, Markdown render

Development & InfrastructureManifest valid

★ 0

↓ 138/wk

dsh plugin --profile web add dsh-devpanel

by xing-shuyin

Developer tools panel for the DSH web UI: file browser with preview, edit, and path-only file mentions; multi-tab terminals with quick commands; Git panel with commit, push, pull, and branch switching

UI & ExperienceManifest valid

★ 6

↓ 126/wk

JavaScript

Aug 19, 2026

dsh plugin --profile web add dsh-ui-tools

by Nothree-code

Workspace file-tree panel for the DSH web UI: explore, preview (DOCX / Markdown / PDF / code / CSV), and manage files with a real context menu.

Tools & CapabilitiesUI & ExperienceManifest valid

★ 4

MIT

JavaScript

Sep 13, 2026

dsh plugin --profile web add folder-tree-sh

by Timebro9999

Manage your whole workspace in the DeepSeek Harness sidebar: a pinned band for projects and conversations, a bell activity view with answer previews, per-project emoji icons, and collapsible 置顶/项目/组件 sections. On npm as dsh-session-deck. Bilingual (EN/中文).

UI & ExperienceDevelopment & InfrastructureManifest valid

★ 0

MIT

JavaScript

Oct 1, 2026

dsh plugin --profile web add dsh-session-deck

by ChrisLou-bioinfo

Show the workspace (project folder) on each session row in the flat, recency-sorted sidebar list

Terminal & ClientsManifest valid

★ 0

MIT

JavaScript

Oct 8, 2026

dsh plugin --profile web add dsh-workspace-badge

by miao-ge

DSH plugin: browser-style project tabs in the window title bar - one tab per session, running / finished / waiting-for-approval badges, drag to reorder, restored across restarts.

Development & InfrastructureManifest valid

★ 0

MIT

JavaScript

Oct 5, 2026

dsh plugin --profile web add dsh-project-tabs