Preface

When running long tasks with DeepSeek Harness (DSH), a conversation quickly accumulates dozens of user messages. To view the original text of a specific instruction or verify the constraints given at the time, one must scroll through the message stream screen by screen. The longer the conversation, the higher the cost.

@lcthe/dsh-timeline-rail turns this into a one-click action: drawing a fine ruler along the left edge of the conversation for each user message to form a timeline; hovering over the ruler previews the message, and clicking jumps directly. This article introduces its features, implementation, and integration methods.

What is it

@lcthe/dsh-timeline-rail is a message timeline navigation bar for DSH web conversations, created by lcthe, current version 0.2.12, MIT license. It renders a 1px vertical rail along the left edge of the conversation, above the composer card, drawing an equally spaced horizontal ruler for each durable user message, with a fixed 12px spacing, centered on the vertical axis.

DSH’s philosophy is “everything is a plugin,” and client UI is extended through slots. This package registers a single entry to the conversation.input.dock slot, belonging to a pure display client plugin that does not define new services.

It works on both Desktop and Web. The DSH desktop app is an Electron shell embedding the same browser client, so web-facing plugins behave consistently on both ends; only the headless/TUI profile lacks the composer slot and renders nothing.

Core Features

  • Equally Spaced Rulers: On the 1px vertical rail, each user message gets a horizontal ruler with a fixed 12px spacing.
  • Independent Scrolling for Long History: When history is long, the rail content scrolls internally within the rail rather than compressing the ruler spacing; scrolling the rail does not drag the conversation area to scroll.
  • Full History Loading: After opening a conversation, it automatically sequentially loads earlier history pages via loadOlder() until no more pages remain, adding the corresponding ruler for each page arrival.
  • Click to Jump: Aligns the N-th selected user message to the top of the visible message area.
  • Hover Preview: Wide cards display bolded user messages (limited to 2 lines) and assistant replies (limited to 3 lines); pure image/attachment messages display labeled placeholders.
  • Theme Aware: Colors are taken from --dsw-* tokens, automatically following light/dark themes without extra configuration.
  • Does Not Block Interaction: Aside from the rulers themselves, pointer-events is none, blocking no clicks or scrolling in the message area or Session Log.

Implementation

DSH’s web GUI is a Cordis composition, and this package is a client plugin running on it, doing three things:

  1. Registers a single entry to the conversation.input.dock slot (the extra strip above the composer card).

  2. Reads the real-time ConversationSnapshot via the slot’s useSession, mapping each durable kind: 'user' node to a ruler.

  3. Measures scrollports like [data-conversation-scroll] and [data-composer-seat], laying the rail on the left edge; positioning calculations reuse the product’s own stable data attributes ([data-conversation-scroll], [data-chat-flow], [data-chat-anchor-key], [data-composer-seat]).

It does not define new services nor modify the logic of the message area itself.

Installation and Enablement

Prerequisites: A DSH deployment with a browser client—either the desktop app (with embedded Web UI) or the Web version. The plugin is a pure display component, rendering only where the message input area (composer) exists.

  1. Install the package:
pnpm add @lcthe/dsh-timeline-rail
  1. In cordis.yml, add the plugin line at the same include level as the bundle line:
- insert:
    - id: dsh-timeline-rail
      name: '@lcthe/dsh-timeline-rail'

After the above steps, you can see the time rail on the left edge of the conversation after opening it. For full wiring details, see INSTALL.cordis.yml.md in the repository.

Typical Usage: Dynamic Loading Inside a Conversation

If you just want to try it quickly, you can skip npm installation: let the agent in the conversation use dynamic Cordis tools (cordis_define + cordis_run) to load this package directly. This route is suitable for quick evaluation; the npm package is a stable, shareable form.

Suitable Scenarios and Notes

Suitable users: People who mainly work via DSH Desktop or Web versions, have long conversation histories, and need to frequently backtrack and locate messages. The headless/TUI environment lacks the composer slot, so this plugin will not display anything.

A few things to know before use:

  1. The rulers are equally spaced (one per user message, fixed 12px spacing) and do not represent the actual scroll position of each message. A minimap mode rendering based on actual positions is listed by the author as future work.

  2. Previews are truncated: user messages are limited to 2 lines and assistant replies to 3 lines, with no expand mechanism inside the rail; clicking the ruler jumps to the full message.

  3. The plugin targets the Harness client slot contract for the 0.0.1-rc.1 release line. If subsequent RCs change the conversation.input.dock contract, this package may need to be upgraded. The peerDependencies requirements are as follows:

Package Version Range
@deepseek-ai/cordis >=4.0.1-rc.1
@deepseek-ai/dsh-client-locale ^0.0.1-rc.1
@deepseek-ai/dsh-client-runtime ^0.0.1-rc.1
@deepseek-ai/dsh-client-ui-conversation ^0.0.1-rc.1
@deepseek-ai/dsh-client-ui-slots ^0.0.1-rc.1
react / react-dom ^18.2.0
  1. Security Reminder: The plugin runs with the permissions of the current DSH process; it is recommended to check the source code and license before installing. The source code of this package is public on GitHub and is under the MIT license.

Summary

@lcthe/dsh-timeline-rail solves a very specific problem: locating a specific user message in a long conversation. It does not touch the message stream itself but adds a hoverable, clickable timeline to the left edge, with a small scope of change. If you frequently run long conversations in DSH, it is worth integrating and trying.

  • GitHub Repository: https://github.com/lcthe/dsh-timeline-rail
  • Community Plugin Directory Page: https://www.skillhub.cn/plugins/lcthe/dsh-timeline-rail

The community directory is an independent site with no official affiliation with DeepSeek / Hypothesis.