DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
S

dsh-session-flags

Session Flags

用于 DeepSeek Harness 会话列表的彩色、自定义名称标记——标记重要会话并快速找到它们。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:qingfengzxr/dsh-session-flags#ab7140f14f1e17535e9b81b1c3590bcdbe7337e1
README兼容性版本
Flagged row with the named color chipFlag color pickerRename each colorThe flagged sessions panel grouped by color name

兼容性与来源证明

Session Flags 以 dsh-session-flags 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.1.0stable
2026/10/21

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/21
查看源码 ↗
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 Session Titles Bundle@deepseek-ai/dsh-experimental-session-titles-bundle新的用户提示到达时刷新会话标题。Personalized Recommendations@deepseek-ai/dsh-personalized-recommendations回答下方以卡片形式提供个性化页面和内置插件推荐Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层

README

dsh-session-flags

Colored flags

Colored, user-named flags for DeepSeek Harness session lists.
Mark the sessions that matter, give each color a name of your own, and find them again from a searchable sidebar panel.

English | 中文

A flag is not a pin: pins reorder the list, flags label it. Use one color for “waiting on me”, another for “refactor in progress”, a third for “read tomorrow” — and rename the colors to match your own workflow.

Highlights

  • A flag on every flagged session row. A small flag glyph sits in the session-row leading seat, right before the title, while the row is idle; the row's own status dot takes precedence when a session needs attention.
  • One click on hover. The row's hover strip carries a flag button; its hollow state tells unflagged rows apart at a glance.
  • A “Set flag” row in the session “…” menu. It sits between “Fork” and “Archive” and previews the current color.
  • Named colors. Each of the eight palette colors can be renamed. Names show up in the hover card, the picker, and the menu, so the color system can carry your own vocabulary.
  • A searchable “Flagged sessions” panel. A sidebar panel row opens a page that groups every flagged session by color, shows each color's name, and jumps straight back to the conversation. Search matches session titles, workspaces, and color names.
  • Bilingual UI (English / Simplified Chinese) following the GUI language.
  • Durable, local, private. Flags live in one JSON document under the DSH home, owned by the plugin's Host half. No network calls, no telemetry, no changes to the sessions themselves.

Screenshots

Flagged row + named chipPick a colorRename the colors
Flagged row with the named color chipFlag color pickerRename each color
“Flagged sessions” panel
The flagged sessions panel grouped by color name

Requirements

  • DeepSeek Harness Desktop (or the Web GUI) 0.2.1-rc.2. The package declares engines.dsh: ">=0.2.0-rc.2", and named installs are checked against that range before the package manager runs.
  • The plugin is a normal independent DSH plugin package (Host half + Client browser bundle); it installs into a profile, not into the application.

Install

From npm

Published as the unscoped npm package dsh-session-flags:

# The compatibility preflight runs first (`engines.dsh`), then the package
# manager adds it; reconciling the profile appends the new bundle, so the
# plugin is enabled without a second step.
dsh plugin --profile desktop add dsh-session-flags

In the GUI this is Plugins → Add plugin, typing dsh-session-flags. Either way, reload the profile afterwards — restart the Harness so the new Client bundle is registered. On the official DSH Desktop app prefer the app's own Settings → Plugins page: that profile belongs to the app's plugin manager, and the CLI cannot change it while the app is running.

From a local checkout

pnpm install
pnpm build          # lib/index.js (Host) + lib/client.js (Client bundle, CJS ModuleLoader)

dsh plugin --profile desktop add file:/absolute/path/to/dsh-session-flags
# or, for a clean isolated profile:
dsh plugin --profile flags-dev add file:/absolute/path/to/dsh-session-flags

Restart the Harness and open the Plugins page — the bundle and its dsh-session-flags row should be enabled. The profile patch layer (cordis.patch.yml) is applied automatically through the package's dsh.bundle.patch field.

From a tarball

pnpm build
pnpm pack            # dsh-session-flags-0.1.0.tgz (lib/ is included via "files")
dsh plugin --profile desktop add /absolute/path/dsh-session-flags-0.1.0.tgz

Marketplaces

Third-party listings are independent of npm. The community dsh-market reads the curated awesome-dsh-plugin registry; a listing is one pull request that adds data/plugins/<owner>__<repo>.yml, and the market app picks the entry up from that registry (usually within a day of the PR merging). The exact submission file and release checklist are in docs/releasing.md.

The official Harness ships no plugin market. Its optional custom plugin markets bundle (@deepseek-ai/dsh-experimental-plugin-market-bundle) adds a Discover tab where the user adds market index sources; the community catalog is published as a format-1 index at https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json. Turn it on from Plugins → More → Experimental plugins → Custom plugin markets, add that source, and search for dsh-session-flags. With the bundle on, the agent can browse the same indexes through the read-only plugin_market tool.

Usage

WhereWhat it does
Session row, leading seatShows the flag color while the row is idle (status dots win while a session needs attention).
Session row, hover stripFlag button → opens the Set session flag dialog.
Session “…” menu → Set flagSame dialog, reachable without hovering.
Session hover cardColored dot plus the color's current name.
Dialog → Manage flag colorsRename each of the 8 colors; blank a name to fall back to the localized default.
Sidebar → Flagged sessionsSearchable page with every flagged session, grouped by color name. Search matches the session title, its workspace, or the color name.
Panel row hover → ×Clear that session's flag without opening the conversation.
Panel header → Manage colorsSame color-name manager, right where the list is.

Choosing “No flag” clears the flag. Names and flags are saved as soon as you confirm; the dialog reports a failure instead of closing when the Host rejects a write.

How it works

src/
  shared/         palette + wire protocol shared by both halves
  host/           Cordis plugin: owns flags.json, registers exact Fetch routes
  client/         Cordis plugin: locale copy, styles, slot contributions, dialogs
  index.ts        re-exports the Host entry
  client/index.ts Client bundle entry (ModuleLoader factory)

Host half (name / inject / apply). It needs only ctx.connection and registers three exact Fetch routes below /api/dsh-session-flags (state, set-flag, color-names) with ctx.connection.fetch.register. Each response uses the Connection convention { ok: true, value } or { ok: false, error: { code, message } }. The document is persisted atomically (write temp file + rename) with serialized mutations, so concurrent UI actions cannot lose a write.

Client half. It registers a locale namespace, one <style data-plugin-css> element, and six slot contributions:

SlotEntry
sidebar.session.row.leadingFlagMark — colored glyph in the leading seat
sidebar.session.row.hoverFlagHoverTag — dot + name in the hover card
sidebar.workspaces.session.row.actionFlagRowAction — flag button in the hover strip
sidebar.workspaces.session.menu.itemFlagMenuItem — “Set flag” menu row
shell.overlayFlagDialog — picker + color-name manager
sidebar.panellistFlagPanelIcon — sidebar row for the flagged-session panel

All six are registered through ctx.slots.inject, so they appear when the owning slot declares itself and are disposed with the plugin. State flows through two observable sources (FlagsStore, DialogStore) handed to the framework as hooks, which yields typed useFlags(selector) / useDialog(selector) hooks in every seat — no cross-slot imports.

The panel is a seventh contribution: a keyed entry in the layout's main slot under the panel id dsh-session-flags. The sidebar row and the page share that id (a panellist list id addresses the matching main panel). The page reads the Session and Workspace Controller snapshots through the framework's standard selector hooks, projects them plus the flag document with buildFlagPanel (pure, unit-tested), and navigates by delegating to the Workspace UI service (uiWorkspace.openSession). That service is injected through ctx.inject, so profiles without the workspace UI still keep every row-level flag feature.

Why the Host owns storage. The Desktop host boots dsh with --port 0, so the GUI gets a different loopback origin on every launch; a browser localStorage document would be per-launch. A JSON file under the DSH home is stable across launches, windows, and Web/TUI clients.

Styles are plain CSS injected as <style data-plugin="dsh-session-flags" data-plugin-css="dsh-session-flags/flag.css">, with all chrome reading --dsw-* theme tokens (the same mechanism official client packages use) instead of adding a CSS runtime dependency. Flag colors are the one exception: they are user data and are painted from the persisted hex.

Develop

pnpm install
pnpm typecheck     # tsc --noEmit (strict, noUncheckedIndexedAccess)
pnpm test          # vitest: palette, Host store, Client store, dialog store, panel projection, SSR seats
pnpm build         # tsdown: lib/index.js (ESM, Host) + lib/client.js (CJS ModuleLoader)
pnpm dev           # tsdown --watch

The Client bundle is a CommonJS ModuleLoader factory (window.__ModuleLoader__.load({ id, factory })) with react, react/jsx-runtime, and @deepseek-ai/* left external for the running Harness to resolve — the same shape official client packages and other third-party plugins use. dsh.client.inject lists the client services/packages the bundle expects loaded first.

Compatibility target: official packages are pinned at 0.2.1-rc.2 as dev dependencies for types; the only runtime peer is @deepseek-ai/cordis ~4.0.5 (optional, supplied by the host loader). engines.dsh declares the supported host range (>=0.2.0-rc.2), which is also what named installs are preflight-checked against. The plugin degrades quietly (no marks, no dialog) when a slot or service is missing rather than patching the host or the application.

Data location

$DSH_HOME/session-flags/flags.json ($DSH_HOME defaults to ~/.dsh). The Host resolves the directory through the Harness dshHomePath service. Document shape:

{
  "version": 1,
  "flags": { "<session-id>": "red" },
  "colorNames": { "red": "重点项目" }
}

Unknown fields and invalid ids are dropped on load, so a partially corrupted file never blocks the feature.

Releasing

Publishing, GitHub/catalog listing, and market discovery steps live in docs/releasing.md.

License

MIT © 2026 qingfengzxr