DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-conversation

Conversation

DSH web surface 的对话大纲面板:将用户问题(索引、时间、每轮统计)作为 0 级节点,并将助手回复中的 Markdown 标题挂在其下方——级别滑块、搜索范围、书签、复制/导出、分节跳转、键盘导航和阅读位置记忆。只读界面:不会触碰提示词、消息、工具结果或提供商流量,也不会在其自身的 localStorage 键之外写入任何内容。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:huangfuren/dsh-conversation#7a525af919c424d13256170abb12ffb7ab835b54
README兼容性版本

兼容性与来源证明

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

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

版本

1.3.1stable
2026/9/22
1.3.0stable
2026/9/21

相关插件

正在加载相关插件…

最新版
1.3.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/15
查看源码 ↗
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-conversation

简体中文

A conversation outline panel for the DSH web surface: it turns the current session into a navigable tree — user questions are the root nodes (index, time, per-turn tool count and text volume), and the Markdown headings of the assistant replies hang under the question they belong to. Clicking any row jumps to the message and flashes it briefly. Pure UI: it never touches prompts, messages, tool results, and makes no provider requests.

Project status: 1.x. Verified on dsh 0.1.5-rc.2 with the web profile. Older dsh versions and other profiles are not certified — the plugin degrades to "panel absent" rather than throwing, but that path is not part of the tested matrix.

Version history: 1.1.0 merged the whole former dsh-outline plugin and renamed the package from dsh-client-hqst; 1.2.0 added the bulk of the navigation surface (three width tiers, side rail, search scope, export, section jump, keyboard shortcuts, reading-position memory).

What it looks like

  • Pinned (default) — a floating panel (dsh-conv-panel) titled "History · Outline".
    • Three width tiers: compact 320px → wide 480px → full 720px full-height, cycled from the title bar.
    • The title bar doubles as the drag handle (4px threshold, position persisted).
    • Tool row: expand/collapse all, bookmarks-only, copy outline (Markdown to clipboard), export as .md, search box with highlighted hits.
    • Search scope: the button left of the search box cycles all / questions / headings.
    • Level slider: 0 = questions only, 1–6 = open down to that heading level; dot tooltips show per-level counts.
    • Rows: collapse arrow, Q1 badge, text, time, this turn's "N tools / N chars" stats, bookmark star; the row at the current reading position is softly highlighted and scrolled into view.
    • Footer: top / bottom, plus the side-rail toggle.
  • Collapsed — defaults to the right-edge rail (dsh-conv-rail): one tick per question, length normalised by that turn's text volume (effectively a conversation density map); hover shows a summary, click jumps to the turn, the icon at the top re-opens the panel. Turning the rail off falls back to the corner capsule (dsh-conv-fab) "History · Outline (N)".
  • Jump granularity — single click jumps to the node; double click jumps to the end of that section (next node at the same or higher level, or the very bottom).
  • Keyboard — with the panel focused, Alt+↓ / Alt+↑ move to the next / previous node; the listener is scoped to the panel and never steals host shortcuts.
  • Reading position memory — each session remembers the outline node you last looked at, and the panel lands there when you come back.
  • Empty state — "No outline content yet" until the session has questions or headings.
  • Persisted state: pinned / drag position / view tier / rail toggle / default level / per-session bookmarks / per-session reading position — all in localStorage under the dsh-conversation: prefix.

How it works

HalfFileResponsibility
Node halfindex.jsAn empty apply() — it exists only so the plugin is visible to the host cordis.yml / Loader. No host-side behaviour.
Client halfclient.jsThe actual UI, discovered by the web host through exports["./client"] plus the dsh.client declaration in package.json.

Client behaviour:

  1. Takes two required services via inject: ["slots", "sessions"]; if either is missing it warns and disables the panel.
  2. Registers question-history (order: 100) in the shell.overlay slot, passing store / sessions down instead of relying on face injection.
  3. sessions.binding(id) obtains the current session face and subscribes to getSnapshot() via useSyncExternalStore.
  4. buildOutlineItems flattens the snapshot into outline items: user/steering → level 0 (counting that turn's tools and text volume); assistant text blocks become level 1–6 by ATX heading (^#{1,6}\s+, # inside fenced code blocks skipped); streaming partial headings appear live with a breathing animation; non-prose nodes (tool-call / context) are counted but never enter the outline.
  5. OutlineManager owns level, search (with scope) and bookmark state, synced to localStorage; tree building, collapse restoration, visible-row flattening and reveal-on-locate are pure functions.
  6. Click-to-locate tries the host's internal anchors [data-chat-anchor-key] → [data-message-key] → [data-node-key], then falls back to matching data-chat-flow-kind order plus a text check; when nothing matches it says "this node cannot be located right now" rather than silently scrolling to the wrong place.
  7. "End of section" is resolved by nextSectionItem walking the pre-order flat list for the next node at the same or higher level, falling back to scrolling to the bottom.
  8. Export uses an in-memory Blob + URL.createObjectURL (no host request, nothing written to the workspace) and shares its content with "copy outline" (outlineToMarkdown).
  9. All styling goes through dsw-alias-* / dsw-shadow-* theme tokens; no hard-coded colours.

Compatibility

  • Both snapshot contracts: the new snapshot.nodes[] + snapshot.partial, and the legacy snapshot.chat.{order, nodes(Map)} + node.data.content. A shape mismatch yields an empty list, never an exception.
  • Host API degradation: the shapes of slots / sessions and the face's getSnapshot / subscribe are probed layer by layer; a rename or removal only makes this panel disappear, it never takes down other plugins in the same slot.
  • Bilingual copy: the plugin ships its own zh/en dictionary and falls back by navigator.language; if the host injects a usable t that wins.

Design notes and provenance

The feature choices here were informed by publicly described functionality and interaction patterns of similar plugins in the DSH ecosystem (conversation outline / question navigation / minimap style). Capabilities of this kind — an outline tree, an edge rail, search, export, reading-position tracking — are generic interaction design and are not protected by copyright. The code is an independent implementation in this repository; no third-party source was copied or adapted, and there is no third-party runtime dependency (the only peer dependency is the host-provided react).

Requirements

ComponentSupported baseline
Node.js>= 22.19
DSH>= 0.1.5-rc.2 < 1.0.0 (certified on 0.1.5-rc.2)
react^18.2.0 (provided by the host)
Surfaceweb (dsh.client.platform)

Anything outside this table is unverified.

Installation

An immutable tag is preferred:

dsh plugin --profile web add github:huangfuren/dsh-conversation#v1.3.0

Tracking the development branch (no tag published yet? use this):

dsh plugin --profile web add github:huangfuren/dsh-conversation

Or point at a local checkout:

dsh plugin --profile web add file:/absolute/path/to/dsh-conversation

package.json declares dsh.bundle.patch (./cordis.patch.yml), so dsh plugin add wires the bundle itself. If you prefer to insert it by hand in the profile's cordis.patch.yml, the equivalent is:

- insert:
    - id: conversation
      name: dsh-conversation

The only peer dependency is react ^18.2.0, supplied by the host.

Development

npm run check    # node --check on both entry points
npm test         # node --test
npm run verify   # check + test (bound to prepack, so a failing test cannot be packaged)

client.js is not an ES module: the dsh client module loader loads it as window.__ModuleLoader__.load({ id, factory }), and the require inside factory can only resolve host-provided external modules (this plugin uses react alone). Relative requires would not resolve in the real loader, which is why the client stays a single self-contained file — the same choice dsh-grafana makes (its client.js is ~67 KB). test/client.test.js therefore loads the module through a minimal loader stub and asserts the pure helpers it exports as internals.

Known limitations

  • Click-to-locate depends on the host's DOM contract (data-chat-anchor-key or data-chat-flow-kind); if those attributes are renamed wholesale, new candidates must be added in locateByKey / collectUserRows.
  • The panel is fixed-positioned, so it can overlap other top-right floating plugins — they have to offset their top. The rail hugs the right edge centred, so it will visually collide with a similar navigation plugin if both are enabled.
  • The "N tools / N chars" figures count tool nodes after that turn in the snapshot and the character count of assistant prose; if the host renames node kinds they degrade to not displayed (never throw).
  • The export filename is fixed at dsh-conversation-outline.md; there is no naming option.

Dependencies and license

  • peerDependencies: react ^18.2.0
  • license: MIT