deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
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.
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.
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.
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.
None: nothing is added to any model request.
None: no prompt-prefix or request-prefix content changes with this package's mount.
npm install
npm run build # esbuild → lib/client.js + lib/index.js
npm test # vitest (pure derivation + transcript-jump specs)
npm run typecheck
[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.MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。