插件目录 / UI & Skins / dsh-client-ui-question-history
dsh-client-ui-question-history
已验证 · 实测可装 dhj-l
功能简介
UI & Skins 类别的 DeepSeek Harness 插件。
可用 — 实测通过,早期项目
UI & Skins 类别的 DeepSeek Harness 插件。 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-client-ui-question-history
Floating right-edge question-history panel for the DeepSeek Harness web GUI: it lists the current session's user questions in conversation order and jumps the transcript to the clicked question. The browser half registers the panel into the frame's shell.overlay seat, vertically centered at the conversation column's right edge, capped at twelve visible rows (the remainder scrolls inside the panel), and hidden entirely when the current session has no user questions.
How it works
The overlay seat is root-scoped and receives no useSession, so the plugin's apply closure mirrors the current session's conversation snapshot into a registrant-private store and exposes it through the inject hooks compartment — the component reads it through the framework-bound useCurrentSession selector hook and contains no subscription machinery. The mirror follows sessions.list.current, resubscribing to the staged session's snapshot store on every selection change.
selectQuestions derives the list purely from the snapshot: the Chat node index's ordered keys, user and steering kinds only, visible nodes only, text blocks concatenated with whitespace normalized, and images collapsed to a localized marker. Clicking a row calls scrollToQuestion, which centers the target row in the active transcript's scrollport using the chat view's own scroll-restore vocabulary ([data-conversation-scroll] and [data-chat-anchor-key]).
The browser half is a lazy-CJS factory handoff: the GUI serves lib/client.js at /plugins/dsh-client-ui-question-history/client.js, and the script registers the factory through window.__ModuleLoader__.load. The factory requires only react and @deepseek-ai/dsh-client-runtime/client (the snapshot-store exemption) from the module table; everything else is type-only. npm run build reproduces the bundle with esbuild; lib/ is committed so a checkout can be dropped into the GUI without a build step.
Installation
The GUI loads client plugins from packages with a dsh.client declaration that its Loader can resolve, composed by a profile patch. For a dsh web profile at $DSH_HOME/profiles:
Copy this package into the profile's dependency mirror so the Loader resolves the row name:
cp -r lib package.json README.md "$DSH_HOME/profiles/node_modules/dsh-client-ui-question-history/"Add the row to the profile's patch (
$DSH_HOME/profiles/web/cordis.patch.yml):- insert: - id: ui-question-history name: 'dsh-client-ui-question-history'Restart the web GUI.
Removing the patch row removes the panel.
Model Experience
Question-history panel
What the model sees
Nothing. This plugin adds no tool schema, no prompt section, and no model-visible input: the panel registers into the shell.overlay seat and its selectQuestions derivation is client-side presentation over the session log, so replay reconstructs the same list.
Token effect
None: nothing is added to any model request.
KV Cache effect
None: no prompt-prefix or request-prefix content changes with this package's mount.
Development
npm install
npm run build # esbuild → lib/client.js + lib/index.js
npm test # vitest (pure derivation + transcript-jump specs)
npm run typecheck
Known Limitations and Deferred Work
- The transcript jump couples to the chat view's scrollport vocabulary. The panel drives
[data-conversation-scroll]and[data-chat-anchor-key]directly — the chat view's own restore mechanism — so a future chat-view refactor must keep those attributes or the click stops scrolling. - Only in-window questions are listed. The derivation reads the loaded conversation snapshot, so questions outside the current history window appear only after older history is paged in.
- The panel is either fully visible or hidden. There is no collapse toggle; a session without user questions hides the panel entirely.
- The apply-side wiring is not covered by the standalone tests. The pure derivation and jump helpers are tested here; the registration/mirror behavior is exercised by the DeepSeek Harness repository's own test runtime.
License
MIT
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-client-ui-question-history」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:dhj-l/dsh-client-ui-question-history Headless(CLI)profile:
dsh plugin --profile headless add github:dhj-l/dsh-client-ui-question-history 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。
使用场景
改变 dsh 的外观或交互方式——一套主题、皮肤或新面板,重塑工作区。
适合谁
在 web UI 里一待几小时、想让它按自己的习惯好看又好用的人。
二次开发建议
皮肤、面板和主题 token 是扩展点——写新皮肤、加面板,或与上游配色同步 token。