DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Advanced Sidebar — DeepSeek Harness 插件(DSH Plugin)
← Plugins
A

@achasoft/dsh-advanced-sidebar

Advanced Sidebar

DeepSeek Harness Web Client 的高级侧边栏操作:在对话旁的可调整大小停靠栏中使用 Git 更改、多会话终端、文件浏览器、开发服务器预览、后台任务、Open in、Archive 和 Delete

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:navid-kianfar/dsh-advanced-sidebar#73eccc5e9301f87ac4f6cf8276e5f0c2652f31f7
README兼容性版本

兼容性与来源证明

Advanced Sidebar 以 @achasoft/dsh-advanced-sidebar 发布,当前版本为 0.3.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/15

版本

0.3.0stable
2026/9/15
0.2.0stable
2026/9/14
0.1.0stable
2026/8/26

相关插件

正在加载相关插件…

最新版
0.3.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/15
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

@achasoft/dsh-advanced-sidebar

A session menu and a resizable side dock for the DeepSeek Harness (dsh) Web Client. The ⋯ menu in the session header opens these panels in a column to the right of the conversation:

  • Changes: git status, diffs, staging, commit, a model-written commit message, and push;
  • Terminal: your own shells, in tabs;
  • Files: a file browser with text preview;
  • Preview: dev servers, workspace files, URLs, or a scratchpad;
  • Background tasks: the session's jobs.

The same menu has Open in, Download session log, Archive, and Delete. Work the browser cannot do itself (running git, opening a pseudo-terminal, launching an editor) runs on the host through this plugin's own RPC namespace. One optional model tool, ui_preview, lets the agent inspect and drive the Preview panel.

The dock open beside the conversation, showing the Changes panel with staged and unstaged files, a diff, and the commit box

Features

Session menu

A ⋯ button in the open session's header. It acts on that session, using the session's own working directory, or its workspace path when the session has none.

EntryWhat it does
Changes, Terminal, Files, Preview, Background tasksOpens that panel in the dock. The open panel's entry has a check mark, and choosing it again closes the dock.
Open in ▸New window (a second tab of the Web Client), each configured editor, and the OS file manager: Finder, File Explorer, or xdg-open on Linux.
Download session logExports the session as a ZIP through the harness's own exporter. See the note below.
ArchiveHides the session. Its log stays on disk.
DeleteAsks for confirmation, then archives. See Known limitations.

When the host cannot serve an entry (git not installed, an editor command not found, no subprocess capability), the entry stays in the menu, disabled, with the reason next to it. An entry switched off in settings is not shown at all. The menu asks the host again each time it opens, so installing git or an editor shows up without a restart.

Download session log. The harness package @deepseek-ai/dsh-session-log-export adds its own ⋯ button, with that single entry, to the same header row. This plugin hides that button: it registers an entry with the same id (session-log-download) at priority -1, and moves the entry into its own menu. Exporting still uses the harness's controller and dialog, so /export keeps working. If the harness package is absent or its controller has a different shape, nothing is hidden and the menu has no Download entry.

Session header ⋯ menu open: the panel entries, the Open in submenu, Download session log, Archive, and Delete

The dock

Panels open in a column on the right of the app frame. The conversation narrows to make room, so the dock does not cover it.

  • Resizing. Drag the left edge, use Left and Right on the focused handle, or double-click the handle to return to the configured width.
  • Width limits. The width is kept between 280 px and 960 px, and never leaves the conversation less than 400 px.
  • Narrow windows. When even the minimum width would squeeze the conversation below 400 px, the dock floats over the conversation instead.

Changes

  • Status. The working directory's status, grouped as Staged, Not staged, Untracked, and Conflicted, with branch, ahead, and behind counts. Click a file to see its patch, with Copy patch.
  • Staging. Stage / Unstage a file, or a whole group with Stage all / Unstage all.
  • Commit. Commit records what is staged, with an optional Amend the previous commit. The author git would record (git var GIT_AUTHOR_IDENT) is shown under the message box, so a missing user.email is visible before you commit.
  • Generate. Writes a commit message with the model the composer is currently set to. The model sees only the staged patch, up to commitMessageMaxBytes. The message goes into the box for you to edit, and nothing is committed automatically.
  • Push. Pushes the current branch to its upstream (git push with no arguments). A branch with no upstream shows Publish instead, which pushes to origin, or to the first remote if there is no origin, and sets the upstream. Force push, a remote picker, and custom refspecs are not offered.
  • No discard. There is no way to discard changes from this panel. Use the Terminal panel.

Terminal

  • Your own shells. Interactive shells in the session's working directory, in tabs, up to maxTerminals. They are separate from the model's terminals.
  • Controls. Interrupt and Ctrl+C send SIGINT to the foreground process group. Clear clears the screen, and Restart starts a new shell.
  • Shells keep running. Closing the dock or switching panels leaves them running. Reopening a tab replays the output the host kept (terminalScrollback). Closing a tab ends its shell, and so does archiving or deleting the session.
  • Emulator. The screen is @xterm/xterm, so colors, line editing, and full-screen programs work.

Terminal panel with two shell tabs and git command output

Files

  • Browsing. The working directory, one level at a time. Hidden entries are excluded unless filesShowHidden is on.
  • Preview. A text preview up to filesMaxPreviewBytes. Binary files show their size.
  • Actions. Open with the default application and Show in file manager.

Files panel listing a directory, with a text file previewed

Preview

Four modes, with a viewport picker (Desktop, Tablet, Mobile, Custom) in every mode.

ModeWhat it shows
ServerLaunch configurations from the workspace's .claude/launch.json (Claude Code's format) and the previews setting. The file wins when both define the same name. Start and Stop a server, view Logs (these open automatically when a start fails), Open in a new window, or Open inspectable, which hands the URL to URL mode.
FileA workspace file, rendered by type: HTML and SVG in a frame, Markdown rendered, images, audio, video, PDF, and plain text. The panel reloads when the file changes. Files over previewMaxFileBytes, or of unknown types, offer Open with the default application.
URLAny http(s) address. A localhost, 127.x.x.x, or [::1] address is loaded through the host's proxy, so the frame is same-origin and its DOM and console can be read. Other addresses are framed directly and labeled cross-origin.
ScratchpadHTML you type, rendered from a host route. The text is saved per workspace in this browser's localStorage.

For a launch configuration, readiness means the configured port accepts a TCP connection, checked until previewReadyTimeoutMs. The child process gets PORT, NO_COLOR=1, and FORCE_COLOR=0. Stopping sends SIGTERM to the process tree, then SIGKILL after previewGraceMs.

.claude/launch.json example:

{
  "version": "0.0.1",
  "configurations": [
    { "name": "web", "runtimeExecutable": "npm", "runtimeArgs": ["run", "dev"], "port": 3000 }
  ]
}

Preview panel in Server mode running a launch configuration, with the proxied page and the viewport picker

Background tasks

  • List. The session's background jobs, filtered by text, status, and start date, with duration and status.
  • Stop. Requires allowTaskKill. Stopping a task also suppresses the completion notice the model would otherwise receive.
  • Output. Requires showTaskOutput, and appears only after the task has finished and its completion has been reported. Reading output earlier would consume the output the model reads.

Settings card

Settings → Plugins → Advanced sidebar edits most settings and shows, for each Open in target and preview configuration, whether it is available on this host. See Configuration.

Advanced sidebar settings card, expanded, with menu entry toggles, limits, and the Open in target list

Requirements

  • DeepSeek Harness 0.1.5-rc.2 with the web profile. This is the version the plugin is tested against. Node ^22.19 || >=24.
  • pnpm on PATH, because dsh plugin runs pnpm.
  • git 2.23 or newer on the host PATH for Changes, because unstaging uses git restore --staged.
  • Harness capabilities, each optional. A missing one disables only the entries that need it, with the reason shown:
CapabilityNeeded by
subprocessChanges, Terminal, Preview servers, Open in
fsChanges, Terminal, Files, Preview
jobsBackground tasks (Stop and Output)
workspaceRegistryDelete; Preview File mode (files are served only from registered workspaces)
llm + agentDefaultModelGenerate commit message
connection (with requestRejection) + webServerPreview's same-origin routes: File mode, the loopback proxy, Scratchpad
toolsThe ui_preview model tool
sessionLogDownload (from @deepseek-ai/dsh-session-log-export)Download session log
  • OS: developed and tested on macOS. The code has Windows and Linux branches (shell fallback, file-manager command) that are not verified.

Install

dsh plugin --profile web add @achasoft/dsh-advanced-sidebar
dsh web

dsh plugin --profile <name> … runs pnpm with the remaining arguments in $DSH_HOME/profiles/<name> (default ~/.dsh/profiles/web). Afterwards, dsh adds every dependency whose package.json declares dsh.bundle to dsh.profile.bundles. This package declares "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }, so it is enabled with no manual edit. Restart dsh web after installing.

To uninstall, remove the package. dsh also drops it from dsh.profile.bundles:

dsh plugin --profile web remove @achasoft/dsh-advanced-sidebar

How cordis.patch.yml is applied

At boot, dsh builds the configuration from patch layers, in this order:

  1. Each bundle's cordis.patch.yml, in dsh.profile.bundles order.
  2. $DSH_HOME/profiles/<name>/cordis.patch.yml.
  3. $DSH_HOME/cordis.patch.yml.
  4. Any --patch <file> overlays.

Later layers override earlier ones by row id. This package inserts three rows:

idnameRole
advanced-sidebar@achasoft/dsh-advanced-sidebar/hostHost service, RPC namespace advancedSidebar, the advanced-sidebar settings section, and the preview routes.
advanced-sidebar-ui@achasoft/dsh-advanced-sidebarBrowser half. It must be the bare package name, because the Web Client finds browser code by resolving <row name>/package.json.
advanced-sidebar-ui-preview@achasoft/dsh-advanced-sidebar/ui-previewThe ui_preview model tool.

To keep the sidebar but not give the model a tool, disable the third row in your profile's cordis.patch.yml:

- id: advanced-sidebar-ui-preview
  disabled: true

To see the composed result:

dsh --profile web --dump-config

Configuration

All keys below are in the config of the advanced-sidebar row. A patch replaces a row's whole config, so an override must restate every key. Copy the row from this package's cordis.patch.yml and edit it.

The host schema declares no defaults, and every key except commitMessagePrompt and terminalShell is required. The defaults listed are the values cordis.patch.yml ships. Changes saved from the settings card are stored as a user layer over the patch value. Card marks keys the card can edit. On a Web Client that is not on loopback the harness settings scope is unavailable, so the card and menu show the host's values read-only.

Menu and behavior

KeyDefaultCardWhat it does
showInSessionHeadertrueyesShows the ⋯ menu in the session header. When off, the button still appears if needed to offer Download session log, and nothing else.
showChanges, showTerminal, showFiles, showTasks, showPreview, showOpenIn, showArchivetrueyesShows each menu entry.
showDeletetrueyesShows Delete. When off, the host also refuses deleteSession.
panelWidth460yesDock width in px (schema allows 280–1400; the dock uses at most 960). Dragging the edge saves here when the scope is writable.
deleteModearchiveyesarchive or purge. purge is unavailable on this harness; see limitations.
confirmDeletetrueyesAsks before Delete. Must be true when deleteMode is purge.
allowTaskKilltrueyesOffers Stop, enforced by the host.
showTaskOutputtrueyesOffers Output for finished tasks, enforced by the host.

git (Changes panel)

KeyDefaultCardWhat it does
gitMaxFiles500yesMost files in one status reading.
gitDiffMaxBytes262144noLargest patch returned for one file.
gitTimeoutMs20000yesTime limit for each read-only git command.
allowGitStagingtrueyesStage and unstage, enforced by the host.
allowGitCommittrueyesCommit, enforced by the host. Also requires staging.
gitCommitTimeoutMs120000yesTime limit for git commit, which runs hooks.
allowGitPushtrueyesPush and Publish, enforced by the host.
gitPushTimeoutMs180000yesTime limit for a push.
allowCommitMessageDrafttrueyesGenerate, enforced by the host. Also requires commit.
commitMessagePrompt''noReplaces the built-in commit-message instruction. Empty uses the built-in one.
commitMessageMaxBytes65536yesLargest staged patch sent to the model. A longer patch is truncated, and the model is told it was cut.

Terminal and Files

KeyDefaultCardWhat it does
terminalShell''yesShell to run. Empty uses $SHELL, then /bin/sh (%COMSPEC% or powershell.exe on Windows).
terminalScrollback200000noCharacters of output kept per terminal for replay.
maxTerminals4yesMost panel terminals open at once (1–32).
terminalGraceMs3000noDelay between TERM and KILL when a terminal closes.
filesMaxPreviewBytes262144noLargest file shown in the Files preview.
filesMaxEntries2000noMost entries listed per directory.
filesShowHiddenfalsenoLists dot-files.

Preview

KeyDefaultCardWhat it does
previewsFromLaunchFiletrueyesReads .claude/launch.json.
previews[]no (listed)Extra launch rows: name, runtimeExecutable, runtimeArgs, port, url, cwd. An empty runtimeExecutable makes the row attach-only: it points the frame at url and starts nothing.
maxPreviews3yesMost dev servers running at once.
previewReadyTimeoutMs60000yesHow long to wait for the port to accept connections.
previewScrollback200000noLog characters kept per server.
previewGraceMs3000noDelay between TERM and KILL when a server stops.
previewMaxFileBytes33554432noLargest workspace file served to the frame.
previewProxyTimeoutMs30000noTime limit for one proxied request to a loopback server.
previewCommandTimeoutMs15000noHow long a ui_preview command other than open waits for the panel.
previewBindTtlMs6000noHow long a panel counts as open after its last poll.

Open in

KeyDefaultCardWhat it does
editorsVS Code (code), Cursor (cursor), Zed (zed)no (availability listed)Rows of id, label, command, args. args go before the path. id must match ^[a-z][a-z0-9-]*$, be unique, and not be reveal.

The host refuses a configuration at load when:

  • an editor id is invalid or duplicated, or an editor command is empty;
  • a preview name is empty or duplicated;
  • a preview row has no command, no URL, and no port;
  • deleteMode is purge while confirmDelete is false.

The advanced-sidebar-ui-preview row has one key, commandTimeoutMs (default 15000, range 1000–600000). It is the default wait for ui_preview open when the call passes no waitMs.

Model tool and RPC

ui_preview

Registered only when the advanced-sidebar-ui-preview row is composed. It works only while the Preview panel is open in the same session. Otherwise it returns immediately with a message telling the model to open the panel.

ActionArgumentsResult
openurl or path; optional workspace, waitMsPoints the panel at an http(s) URL or a workspace file, and reports whether the page can be inspected.
domoptional selectorThe rendered DOM: tags, ids and classes, text, display, and box metrics, plus the page text, viewport, and URL.
evalexpressionRuns JavaScript in the frame and returns the value as JSON.
consoleoptional cursorConsole messages, uncaught errors, and unhandled rejections logged since cursor.
clickselectorDispatches click() on the element.
typeselector, text, optional keySets the element's value, dispatches input and change, then optionally the key.
reloadnoneReloads the frame.
resizewidth, heightSets the frame viewport size.
closenoneCloses the preview.

dom, eval, click, and type refuse a cross-origin frame by name instead of returning nothing.

RPC namespace advancedSidebar

The browser half calls these endpoints over the harness's client connection:

  • describe
  • gitStatus, gitDiff, gitStage, gitUnstage, gitCommit, gitPush, gitCommitMessage
  • terminalOpen, terminalRead, terminalWrite, terminalSignal, terminalClose
  • listEntries, readFile
  • previewList, previewStart, previewStop, previewLogs, previewFileInfo, previewPoll, previewResult, previewRelease
  • openIn
  • taskKill, taskOutput
  • deleteSession

Every endpoint returns a result value with a failure code instead of throwing. The root export re-exports the types.

Security notes

  • git does not run programs the repository configures.
    • Every git command passes -c core.fsmonitor=false.
    • Every git diff passes --no-ext-diff --no-textconv.
    • Read-only commands (status, diff, log, identity, remote list) switch off filter.<driver>.clean/process from the repository's local and per-worktree config. Global and system filters, such as git-lfs, still run. A driver name that cannot be disabled this way, because it contains =, makes the reading fail instead.
    • Stage, commit, and push are explicit user actions and keep git's normal behavior, including hooks and filters.
  • No option injection.
    • Paths are checked to be inside the repository and passed after --.
    • The commit message is a single -m argument.
    • Publish checks the branch with git check-ref-format --branch, checks the remote as refs/remotes/<remote>/HEAD, and pushes -- <remote> refs/heads/<b>:refs/heads/<b>.
    • Credential prompts are disabled (GIT_TERMINAL_PROMPT=0), so a push that needs credentials fails instead of hanging.
  • Host-enforced switches. allowGitStaging, allowGitCommit, allowGitPush, allowCommitMessageDraft, allowTaskKill, showTaskOutput, and showDelete are checked by the host, not only hidden in the UI.
  • Paths stay inside the workspace. Files, Preview File mode, and ui_preview file arguments are resolved through the harness filesystem's containment check, so symlinks cannot escape.
  • Panel terminals are separate from the model's terminals. They are allocated with ctx.subprocess.spawnTerminal, not the agent's terminal registry, so your keystrokes never reach a terminal the model controls.
  • Preview routes are gated. The routes /advanced-sidebar/preview-file, /advanced-sidebar/preview-proxy (plus its websocket upgrade), and /advanced-sidebar/preview-scratchpad each call the harness connection's requestRejection first. That is the same host/origin check and signed dsh-auth-* cookie check that guards /api, and it answers 401/403 otherwise. If the connection has no such gate, the routes are not registered at all.

Known limitations

  • Delete only archives. The harness's session persistence API (0.1.5-rc.2) has no way to remove a session. So deleteMode: purge is reported unavailable, the card will not select it, and a configured purge archives and returns the reason the log was kept.
  • No push channel. An out-of-tree plugin cannot add wire frames, so terminal output, preview logs, and ui_preview commands are polled.
    • The command poll runs every 600 ms while there is work and every 2 s when idle.
    • A watched preview file is checked every 900 ms.
    • Background tasks are the exception: they use the harness's existing session/jobs push.
  • No terminal resize. The subprocess API has no resize call. The emulator follows the dock, but the shell keeps its starting size until you Restart it.
  • Server mode frames are cross-origin. A started dev server's own URL is framed directly. Use Open inspectable to load it through the proxy.
  • Websocket proxying works only at the proxy root. A dev server that opens its live-reload socket on a subpath is not tunneled. The page still renders, and HTTP streaming (including SSE) is proxied.
  • ui_preview eval runs as a function body. Declarations do not persist between calls.
  • Console capture sees only the page's console and error events, not network failures or workers.
  • Byte-range requests need fs.readByteRange. Without it, the file route answers a full 200, so media plays but cannot seek.
  • The dock depends on the frame's DOM. It reserves width by setting a CSS property and a data attribute on the shell.overlay frame element. A harness layout change could require an update.
  • Large browser bundle. The terminal emulator makes up most of it, and the harness serves one file per plugin, so it cannot be loaded lazily.
  • Generate costs model tokens. Each press calls the deployment's provider. Set allowCommitMessageDraft: false to remove it.
  • Stopping a task hides its completion from the model. Set allowTaskKill: false to remove Stop.

Development

The dev dependencies are link: specifiers to a DeepSeek Harness source checkout at ../../deepseek-harness, relative to this directory. Clone the harness there before installing.

pnpm install
pnpm run typecheck
pnpm test              # checks generated/ against src/host, then runs vitest
pnpm run build         # tsc -p tsconfig.build.json, then tsdown -> lib/

generated/ is the committed Typert RPC contract, written by scripts/emit-typert.mjs in the harness generator's format. If you change src/host/types.ts or the @Remote methods, update that script's spec and regenerate:

pnpm run regen:typert  # rewrites generated/ and its fingerprint
pnpm run check:typert  # the same check pnpm test runs first

To load your checkout into a local profile, build it, then add it by path:

pnpm run build
dsh plugin --profile web add "$(pwd)"
dsh web

The profile loads the built lib/ output, so build first. After changing browser code, rebuild and reload the page. After changing anything under src/host/, or regenerating generated/, restart dsh web.

License

MIT

  • Loopback only. The proxy forwards only to literal loopback hosts (localhost, 127.0.0.0/8, [::1]). A hostname that merely resolves to loopback is refused.
  • No credential forwarding. The harness's dsh-auth-* cookie is stripped from forwarded requests and from upstream Set-Cookie headers.
  • Registered workspaces only. The file route serves only files inside a workspace in workspaceRegistry.
  • Scratchpad size. Scratchpad documents are limited to 1 MiB.
  • No caching. Responses are sent with no-store.
  • A proxied page runs as the Web Client's origin. Its scripts can call the harness API with your session. Only preview dev servers you trust as much as a browser tab signed in to the harness.
  • ui_preview open accepts any http(s) URL, like the address bar. Only loopback URLs become same-origin and inspectable.