설치
pnpm add @lcthe/dsh-timeline-rail이 명령은 GitHub 저장소 주소에서 생성됩니다. 실행 전에 업스트림 README와 소스를 검토하고 재현성이 필요하면 release 또는 commit을 고정하세요.
README
유지 관리자가 작성한 문서 스냅샷입니다.
@lcthe/dsh-timeline-rail
A message timeline rail for the DeepSeek Harness web chat.
Along the right edge of the conversation, above the composer, it draws a low-contrast, evenly spaced column of thin tick marks — one tick per durable user message, styled after a meeting-notes / editor timeline. Hover a tick to preview that message; click it to jump the conversation straight to it.
Desktop & Web both supported. The DeepSeek Harness desktop app is an Electron shell that embeds the same browser client served over a localhost web server, so a "web" plugin renders identically on both. This package targets the browser-side conversation slot and works wherever that client runs — Desktop and Web. Only headless / TUI profiles have no composer slot and render nothing.

Features
- Evenly spaced ticks — one short horizontal line per user message along a 1px track, so a conversation reads as a clean time axis instead of a clamped map.
- Click to jump — aligns the selected user message to the top of the visible message area.
- Hover to preview — a compact wide card shows which message it is (
用户 · 第 N 条) plus the first lines of its text; image/attachment-only messages get a labelled placeholder. - Theme aware — colors come from
--dsw-*tokens, so it follows the light/dark theme with no extra config. - Slim and out of the way — pointer-events are none except on the ticks themselves; the rail never blocks clicks on the messages.
How it works
DSH's web GUI is a Cordis composition. This package is a client plugin that registers a single entry into the conversation.input.dock slot (the additive band above the composer card). It reads the live ConversationSnapshot through the slot's useSession hook, maps each durable kind: 'user' node to a tick, and measures the scrollport ([data-conversation-scroll], [data-composer-seat]) to lay the rail out on the right edge. It defines no service and no host-side behavior.
Positioning is computed against the same stable data attributes the product itself uses ([data-conversation-scroll], [data-chat-flow], [data-chat-anchor-key], [data-composer-seat]), so the rail stays correct across sidebar collapse, the details panel, theme changes, and live message appends.
Install
Requires a DeepSeek Harness deployment with the browser client — that is the desktop app (Web UI embedded) or the web version alike. The rail is pure presentation; it renders only where the conversation composer exists.
pnpm add @lcthe/dsh-timeline-rail
Then add the plugin row to your cordis.yml at the same include level as the bundle rows:
- insert:
- id: dsh-timeline-rail
name: '@lcthe/dsh-timeline-rail'
Full wiring details live in INSTALL.cordis.yml.md.
Alternative: load in-session as a dynamic plugin
DSH web also ships a first-class dynamic-Cordis tool. If you are in a session and just want to try it, ask the agent to load the plugin (it can cordis_define + cordis_run this package). This is the recommendable route for quick evaluation; the npm package is the stable, shareable form.
Peer dependencies
| package | 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 |
Development
pnpm install
pnpm run build # typecheck (tsc) + bundle (tsdown) -> lib/
lib/index.js,lib/invariant.js— node-half ESM for the Host Loader.lib/client.js— the browser bundle in DSH's__ModuleLoader__.load({ id, factory })closure format, with CSS modules inlined and auto-injecting a<style data-plugin>.lib/types/**— emitted TypeScript declarations.
Known limitations and deferred work
- The rail renders only in the web client; headless/TUI profiles have no composer slot, so nothing shows there.
- Ticks are currently evenly spaced (one per user message) rather than reflecting each message's true scroll position; a "minimap" mode that puts each tick at the message's real position is a natural follow-up.
- Message preview text is clamped to four lines; longer messages are truncated without an affordance to expand in the rail itself (clicking the tick already jumps you to the full message).
- The plugin targets the slot contract as of the
0.0.1-rc.1release line of the Harness client packages. If theconversation.input.dockcontract changes in a later RC, this package may need a bump.
License
저장소 정보
- 언어
- TypeScript
- 라이선스
- MIT
- 마지막 업데이트
- 2026. 8. 17. AM 8:54
신중하게 설치하기
소스 코드, 권한, 수명 주기 스크립트, 의존성 및 네트워크 접근을 검토하고 신뢰하지 않는 플러그인은 격리 환경에서 테스트하세요.