DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Sidebar Tags — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
S

dsh-sidebar-tags

Sidebar Tags

为 DeepSeek Harness 侧边栏提供彩色会话标签:可从会话行标记任意会话,一眼查看标签,并通过专用侧边栏面板按标签筛选完整历史记录。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:ysefu/dsh-sidebar-tags#9b10a713fbf38fe023efd207392542ea35699ddf
README兼容性版本

兼容性与来源证明

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

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

版本

1.0.0stable
2026/10/10

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Ab Chartdsh-ab-chart带有绘制其调用的浏览器卡片的图表渲染工具,封装在一个可发布的插件包中Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义

README

dsh-sidebar-tags

Colored session tags for the DeepSeek Harness sidebar. Tag any session from its own row, see the tag at a glance, and filter your whole history by tag from a dedicated sidebar panel.

中文说明 · Changelog · MIT


Why

A long-running Harness install turns into hundreds of sessions across several workspaces. The sidebar can show them, search them and archive them, but there is no way to say "this one is a client deliverable" or "come back to this on Friday" — and no way to get those sessions back as a set.

This plugin adds exactly that layer, and nothing else:

Tags on the rowA colored dot (plus +n) at the start of the session row
Tag from the rowAn entry in the row's "…" menu and a hover button, both a one-click picker
Tag on hoverThe hover card lists the session's tags and its note
Tag panelA sidebar panel: per-tag counts, one-click filtering, full-text search over titles and notes, jump to session, create/rename/recolor/delete tags, export/import a backup

It is a pure client-side plugin: no host routes, no files outside the browser, no model-facing content, no changes to any shipped Harness file. Data lives in localStorage and can be exported as JSON at any time.

Install

# from npm (once published)
dsh plugin --profile <profile> add dsh-sidebar-tags

# from a checkout of this repository
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-sidebar-tags

Then restart that profile (or reload the Web GUI). The plugin appears in the sidebar as Session tags.

Uninstall:

dsh plugin --profile <profile> remove dsh-sidebar-tags

Use

  1. Hover a session row and click the tag button, or open the row's … menu and use Tag this session….
  2. Pick one or more tags. The row gets a colored dot immediately.
  3. Open Session tags in the sidebar to see counts per tag, filter the list, search titles and notes, and manage the tag set itself.
  4. Tags are stored per browser profile. Use Export a backup in the panel to keep a copy, and Import a backup to bring it to another browser.

Six tags ship with the plugin (To do / Doing / Important / Reference / Archivable / Idea); all of them can be renamed, recolored or deleted, and new ones can be created in the panel.

Compatibility

HarnessStatus
0.2.0-rc.2tested (see "How this was verified")
0.2.0-rc.1expected compatible (same slot contract)
older linesthe plugin stays dormant and logs nothing; the seats it needs did not exist

The plugin contributes only to seats the shell declares (sidebar.panellist, the keyed main, sidebar.session.row.leading, sidebar.session.row.hover, sidebar.workspaces.session.menu.item, sidebar.workspaces.session.row.action) and every registration goes through ctx.slots.inject. A shell without a seat never runs the callback, so a future Harness that renames a seat degrades to "this one feature is missing" instead of breaking the boot.

Known limits

  • The row dot is a resting-state marker. The host renders sidebar.session.row.leading only while a row's primary state is idle; a row that is running, waiting for approval or carrying an unread completion shows the host's own status dot there instead. The tags are still visible in the hover card, the row menu and the panel.
  • localStorage is per browser profile. Clearing site data clears tags; private windows start empty. Export a backup if that matters.
  • Sessions deleted outside the Harness may leave a record behind; the panel prunes records for sessions the host no longer lists the next time it opens.
  • The panel lists the sessions the current page knows about, plus remembered titles for tagged sessions that are no longer loaded.

How this was verified

Everything below is runnable from a checkout with plain Node (no bundler, no network):

node scripts/build.mjs                 # bundle + manifest guard (34 invariants)
node scripts/test.mjs                  # 34 unit tests, in one process
node --test "tests/**/*.test.mjs"      # the same tests through Node's own runner

scripts/verify-browser.mjs <gui-url> drives a headless Chromium over the DevTools protocol against a live instance and asserts that the stylesheet is injected, the panel row exists, selecting it mounts the panel, and the panel renders — useful in CI with a browser available. lab/index.html (served by node tools/serve.mjs) renders the same bundle in a stand-in shell so the UI can be inspected without installing anything.

State that has actually been observed, not just intended:

  • the loader mounts the plugin from a profile link: install, and the host serves dsh-sidebar-tags/client.js in the profile's boot graph;
  • scripts/build.mjs and the unit suite pass on Node 24;
  • the four row/panel components, the store and the projections are covered by the unit tests at the level of registration contract and pure functions.

Not yet observed: a click-through of the rendered panel inside a real Harness window. The environment this plugin was written in had no browser that could start (sandbox) — that check is the first thing to run on a normal desktop, and scripts/verify-browser.mjs automates it.

How it works

sidebar.panellist ──► panel row (icon)          ┐
main (key = sidebar-tags) ──► the panel page    │  registered with ctx.slots.inject,
sidebar.session.row.leading ──► the row dot     │  so load order never matters and a
sidebar.session.row.hover ──► tags + note       │  shell without the seat stays quiet
sidebar.workspaces.session.menu.item ──► picker │
sidebar.workspaces.session.row.action ──► picker┘

localStorage ──► TagsDb ──► snapshot store ──► components (React.useSyncExternalStore)
                                 ▲
                    pure functions: validate, migrate, toggle, prune, filter

Panel data comes from the Harness' own Cordis stores (sessions.list, uiSession.sessionStatus, workspaces.list) read through getSnapshot() and subscribe() — the same observables the shipped sidebar reads, so no extra polling, RPC or duplicate cache exists.

Why no build step

lib/client.js is hand-written CommonJS wrapped in the one call the Harness loader expects:

window.__ModuleLoader__.load({ id: 'dsh-sidebar-tags', factory: (require) => { … } })

The only module it requires is react, which every shell provides. That means the published artifact is the source: a checkout is installable and reviewable as-is, git diff shows behaviour, and there is no toolchain to trust or keep current. scripts/build.mjs replaces a bundler with a structural check — wrapper shape, bundle id versus package name, patch row versus package name, region index versus file body, and syntax. The trade-off is no TypeScript and no tree-shaking, which a plugin of this size does not miss; if that changes, the module boundaries are already laid out as @region sections for a move to tsdown.

Repository layout

lib/index.js            host half (inert: the plugin is browser-only)
lib/client.js           browser half — the shipped bundle
cordis.patch.yml        the bundle patch layer that mounts the plugin
scripts/build.mjs       bundle and manifest guard
scripts/test.mjs        in-process test entry
scripts/verify-browser.mjs  headless-Chromium smoke check
scripts/sandbox-install.mjs install into a throwaway profile
scripts/publish-github.mjs  create + push the repository over the REST API (no git needed)
tests/                  34 unit tests + the fake-shell harness
lab/index.html          stand-in shell that renders the bundle in a browser
tools/serve.mjs         throwaway static server for the lab

Contributing

Issues and PRs are welcome. Please run node scripts/build.mjs && node scripts/test.mjs before opening a PR; CI runs both plus the browser smoke check.

License

MIT — see LICENSE.