DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Turn Rail Persistent — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
T

dsh-turn-rail-persistent

Turn Rail Persistent

DSH plugin: keep the built-in conversation turn rail (the Codex-style mark ladder) visible at every transcript width instead of letting the host hide it below 900px.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:KKKKeybird/dsh-turn-rail-persistent#939d76bdcf2892c06c81e4c1a12ef12fdfa80189
READMECompatibilityVersions

Compatibility and provenance

Turn Rail Persistent is published as dsh-turn-rail-persistent and currently resolves to version 1.0.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/20/2026

Versions

1.0.0stable
9/20/2026

Related plugins

Loading related plugins…

Latest
1.0.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/20/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in productivity-workflow.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Agent Teams@nanmicoder/dsh-agent-teamsAgentTeams for DeepSeek Harness: multi-agent team collaboration (captain, members, tasks with dependencies, messaging) driven by natural language, with a tree monitor in the web GUI

README

dsh-turn-rail-persistent

A DeepSeek Harness (dsh) plugin that keeps the built-in conversation turn rail — the Codex-style ladder of horizontal marks down the edge of the transcript — visible at every transcript width, instead of letting the host hide it on narrow transcripts.

On its own this plugin adds no UI: it un-hides a rail the host already ships, and leaves its position, geometry, and behavior untouched.

The problem it solves

@deepseek-ai/dsh-client-ui-chat already renders a TurnNavigator: one 12px mark per turn (fixed 10px pitch) down the right edge of the transcript, a hover/focus preview of that turn's prompt and settled response, and a click that jumps to — or pages history in for — the corresponding user input.

The host hides that whole rail on narrow transcripts:

@container (width <= 900px) { .<hash>_slot { display: none } }

So as soon as sidebars, a details panel, or a small window squeeze the transcript below 900px, the rail disappears — and it looks like dsh never had the feature. There is no setting for this, and no other plugin addresses it.

Install

# from this repository
dsh plugin --profile <your-profile> add github:KKKKeybird/dsh-turn-rail-persistent

# from npm (once published)
dsh plugin --profile <your-profile> add dsh-turn-rail-persistent

Or one click in Settings → Plugin Market once the plugin is listed in the curated awesome-dsh-plugin registry.

Restart dsh (for the desktop app: restart the app) so the plugin is mounted. No configuration is required.

How it works

Two mechanisms, no host API:

  1. Tag by structure. railNavs() finds the rendered rail from its mark wrappers — an element whose class list carries a *_markPosition CSS-module local, walking up to its <nav> — and tags the nav (data-dsh-turn-rail) and its slot (data-dsh-turn-rail-slot). Matching by structure rather than by hashed local names (eGxaPq_* today, something else after the next build) keeps it working across host rebuilds.
  2. Restore one declaration. The whole stylesheet is [data-dsh-turn-rail-slot]{ display: block !important; }. An !important declaration outranks the normal one inside the host's @container block, so the rail stays mounted at any width. No geometry is touched: the rail keeps the host's edge, height band, ladder pitch, and preview clamp.

A mutation watcher re-tags after a session switch rebuilds the view, and skips its DOM scan while the tagged rail is still mounted (the transcript mutates on every streaming delta).

What is not changed

Mark pitch, active/busy/unloaded states, hover previews, turn paging, scroll follow, and the rail's own "fewer than two turns renders nothing" early return (if (items.length < 2) return null) all stay the host's implementation — so host upgrades bring their improvements along automatically.

The only trade-off: at a very narrow transcript the rail now overlaps the transcript's edge (it is a 28px-wide frame) rather than vanishing.

Tests

node --test test/
  • test/client-load.test.mjs runs the real lib/client.js inside a node:vm context against a minimal DOM stub shaped like the host's rail, and asserts registration, tagging, the always-on rule (no @container, no min-width, no geometry rules), re-tagging after a rebuilt view, no false positives on unrelated <nav> elements, and clean disposal.
  • test/host-contract.test.mjs asserts the plugin's assumptions against the host bundle installed on the running machine: the rail is still hidden by @container (width<=900px) on _slot{display:none}, and mark wrappers still carry a *_markPosition local. It skips when no host bundle is present; a failure there means the plugin needs updating for a newer host.

Compatibility

  • dsh >=0.1.5-rc.2 <0.2.0 (engines.dsh); Node ^22.19.0 || >=24.0.0.
  • Host-only UI change: no model-facing behavior, no tools registered, no network access, no files read or written.

License

MIT