DeepSeek Harness 插件

dsh-turn-dots

Codex-style conversation turn rail: one dot per turn in the DeepSeek Harness web GUI.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
Blaczz/dsh-turn-dots
最近更新
2026年8月14日
分类
界面增强
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/Blaczz/dsh-turn-dots
插件名:dsh-turn-dots
作者:Blaczz

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-turn-dots ⚫

> Codex-style conversation turn tracker: a vertical column of dots on the LEFT edge of the conversation column, one dot per user input; hovering a dot morphs it into a rounded vertical preview pill; clicking jumps to that turn. Zero core changes.

English | 简体中文

DeepSeek Harness (DSH) Web GUI plugin that draws a vertical turn-dots rail at the left-center of the conversation column: one fixed-pitch dot per user input, regardless of conversation length. Hovering a dot morphs it into a rounded vertical rectangle (Codex style) showing the first 48 characters of that input in vertical writing mode; clicking smooth-scrolls the conversation to that turn. The dot at the current viewport position carries a themed ring so you can track where you are.

> Adapted and slimmed down from dsh-milestone (MIT): it reuses the session-overlay bridge, the fixed-pitch dot geometry, and the row-anchor jump logic, but moves the rail to the left-center, replaces the separate tooltip with the dot-morph interaction, and drops search/bookmarks/fork/badges and every other extra feature.

✨ Features

  • One dot = one user input: driven by the session snapshot (chat.order + nodes.get(key), kind === 'user'), fixed pitch, auto-adapts to message count.
  • Hover morph: the dot expands into a rounded vertical rectangle (30×84px) carrying the input preview in vertical writing mode (writing-mode: vertical-rl, works for CJK and Latin); title/aria-label carry the full text.
  • Click to jump: smooth-scrolls to that message (scrollIntoView) via the [data-chat-anchor-key] row anchors.
  • Current-position ring: the dot at the viewport top gets a themed ring (pure scrollport observation, no polling).
  • Load older: when the session has earlier pages (hasMore), a ··· button at the rail top loads them one page at a time, expanding the dots over the whole conversation.
  • Cold-start resilient: after a DSH restart, if the rail mounts before the conversation scrollport DOM exists, positioning retries for up to ~3s instead of staying hidden until the next message.
  • Zero core changes: only official seams — shell.overlay root overlay + SessionProvider bridge + a session-scoped child seat.
  • Theme-aware: all colors come from the --dsw-alias-* token layer, so the rail follows light/dark and third-party palettes (e.g. the dsh-paper-theme warm cream).
  • HMR friendly: every registration lives in ctx.effect / ctx.slots.inject, cleaned up on hot reload.

📦 Install

Prereqs: DeepSeek Harness installed (dsh web runs), Node ≥ 22.19, pnpm.

# Option 1: local directory install (development)
cd dsh-turn-dots && npm install --legacy-peer-deps && npm run build
dsh plugin --profile web add ./dsh-turn-dots

# Option 2: local link install
dsh plugin --profile web add link:./dsh-turn-dots

# Option 3: zero-install quick check (no profile changes)
dsh web --patch ./cordis.patch.yml

Restart dsh web after adding the plugin line (later source changes go through HMR).

🎛️ Usage

1. Open any session with at least two user turns (the rail hides below 2 to avoid a stray dot). 2. A vertical dot column appears at the left-center of the conversation column — one dot per user input. 3. Hover a dot → it morphs into a vertical preview pill; click → smooth-jump to that turn; the dot at the current position carries a ring. 4. Long conversations: DSH only loads the most recent window by default, so the dots reflect the loaded part; when older pages remain (hasMore), a ··· button appears at the rail top — click it to load older messages page by page and expand the dots.

> Tuning knobs live in src/client/TurnDotsRail.tsx: MIN_MARKS (minimum turns before showing, default 2), PREVIEW_LENGTH (preview length, default 48), RAIL_INSET (inset from the scrollport's left edge), SCROLLPORT_MAX_RETRIES (cold-start positioning retry cap, default 20 × 150ms).

🛠️ Local development

npm install --legacy-peer-deps          # install build deps
$env:DSH_NODE_MODULES = "$env:USERPROFILE\.dsh\profiles\node_modules"
npm run setup:dsh-workspace             # symlink the runtime @deepseek-ai/* packages
npm run verify                          # ★ one-shot gate (clean + typecheck + build)
npm run typecheck                       # type check
npm run build                           # tsc + tsdown → lib/
dsh web --patch ./cordis.patch.yml      # zero-install quick check

Directory layout

dsh-turn-dots/
├── package.json            # dsh.bundle.patch + dsh.client dual contract
├── cordis.patch.yml        # bundle patch layer (inserts this package)
├── tsdown.config.ts        # client bundle (__ModuleLoader__.load + purity gate)
├── scripts/                # build / clean / setup-dsh-workspace / verify
└── src/
    ├── index.ts            # host half: no-op (client-only plugin)
    └── client/             # browser half
        ├── index.ts        # apply: shell.overlay bridge + rail registration + styles
        ├── TurnDotsOverlay.tsx  # root overlay → SessionProvider → session rail
        ├── TurnDotsRail.tsx     # left-edge rail: marks / hover morph / jump
        ├── useCurrentAnchor.ts  # current-position ring (scrollport observation)
        ├── rail-logic.ts        # pure helpers: extractText / findRow / currentIndexOf
        ├── rail-style.ts        # dots + morph + ring CSS (token-driven)
        └── locales.ts           # zh/en copy

🧩 Ecosystem position

  • Compared with existing plugins: dsh-milestone (right edge, separate tooltip, feature-rich), dsh-message-preview / dsh-navbar / dsh-turn-scrubber (all right side), dsh-chat-outline (left outline list). This is the only left-center, dot-morph-on-hover implementation, matching Codex's long-conversation navigation.
  • Approach: dual-contract client plugin (dsh.client + bundle patch); the overlay bridge follows dsh-milestone's shell.overlay + SessionProvider pattern.
  • Zero core changes: all registrations live in ctx.effect / ctx.slots.inject, cleaned up on HMR unload.

⚖️ License

MIT © 2026 Blaczz. Portions adapted from dsh-milestone (MIT © 2026 SnowCrescenter-tech); see [LICENSE](./LICENSE). Not affiliated with DeepSeek Harness — a community plugin.