編集者注

对话指示器

DeepSeek Harness Web GUI

これは DeepSeek Harness(DSH)プラグインです。当サイトは GitHub README、インストール情報、メンテナンス状況、公開セキュリティシグナルをまとめています。

上流で中国語 README が提供されていないため、リポジトリのオリジナルコンテンツを表示しています。

dsh-conversation-indicator

English | 中文版

Conversation indicator for the DeepSeek Harness web GUI. A compact pill sits vertically centered on the right side of the transcript, just left of the scrollbar, with one clickable marker bar per user message — assistant replies are not marked. Clicking a marker smooth-scrolls the transcript so that conversation lands near the top, so you can jump around a long session without dragging the scrollbar or scrolling past tool spam. The pill stays out of the way while the transcript scrolls or streams: it appears only when the pointer moves near it and fades out once the pointer leaves.

Screenshot: the indicator pill on the right edge of the transcript

Hover a marker for the summary tooltip; click it to jump to that conversation.

browser: watches [data-conversation-scroll] (the app's transcript scrollport)
         -> reads [data-chat-anchor-key] rows, filtered by data-chat-flow-kind
         -> fixed pill overlay, vertically centered near the right edge
         -> one marker bar per row, positioned by content ratio (contentTop / scrollHeight)
         -> click -> scrollport.scrollTo({ top: contentTop - padding, behavior: 'smooth' })

No harness change is needed and nothing runs server-side: the host entry is a no-op; the whole plugin is the client bundle served at /plugins/dsh-conversation-indicator/client.js.

Install

From the GitHub repository (pnpm's github: git-dependency shorthand for git+ssh://git@github.com/smanx/dsh-conversation-indicator.git#main):

dsh plugin --profile web add github:smanx/dsh-conversation-indicator#main

Restart the web server once so the boot manifest composes the new client bundle, then refresh the page. The pill stays hidden while the transcript scrolls or streams — move the pointer near it (the right edge, just left of the scrollbar) to reveal it, and it fades out when the pointer leaves. It only exists at all when the current session has more than one screen of content (it hides when the transcript does not overflow). To update, run the same command again — pnpm re-resolves the git dependency to the latest commit.

For development against the working tree (live rebuilds, no re-install), point the profile at the local checkout instead:

dsh plugin --profile web add file:C:/mydata/codes/dsh-conversation-indicator

Options

The plugin is self-contained and keeps its preferences in the browser (localStorage["dsh-conversation-indicator.options"], JSON, partial merge). Set them from DevTools and reload; changes apply on the next plugin mount.

KeyDefaultEffect
enabledtrueMaster switch.
markKinds["user"]Row kinds to mark (data-chat-flow-kind); "*" marks every rendered row. Assistant replies render as kind assistant-step and are not marked by default — add "assistant-step" (or "*") to mark them too. Other kinds: steering, context, tool-call, command, compaction, manual-compaction, model-retry, turn-error, turn-max-tokens, turn-tail, unknown.
panelWidth26Panel (pill) width in px.
markerSize6Marker bar height in px.
rightMargin10Gap between the panel and the scrollport's right edge in px.
panelHeightRatio0.5Panel height as a fraction of the scrollport height (markers stay concentrated in the middle band).
minPanelHeight / maxPanelHeight140 / 520Panel height bounds in px.
showCounttrueSmall conversation-count badge at the panel's bottom.
tooltipstrueHover summary tooltip: kind label + the row's text (UI chrome stripped).
summaryMaxChars200Max characters of the hover summary body.
scrollPadding12Extra px kept above the target row when jumping.
hoverZoneX28Hot zone around the panel (px, horizontal) that reveals it on hover.
hoverZoneY24Hot zone around the panel (px, vertical) that reveals it on hover.
idleHideMs450Ms of no pointer activity before the panel starts fading out.
fadeOutMs400Panel fade-out animation duration in ms (fade-in stays at 200ms).
localStorage["dsh-conversation-indicator.options"] = JSON.stringify({
  markKinds: ["user", "tool-call"],
  panelWidth: 30,
  markerSize: 8,
})

Model experience

AspectEffect
Token costNone — indicators are UI-only and never enter a request.
Tool callsNone — the model gets no new tool.
Session logUnchanged — the plugin reads the rendered DOM only, adds no events.
PromptUnchanged — no system-prompt section is registered.

Permission boundary

  • The client observes the transcript scrollport and the rows the web app already renders ([data-chat-anchor-key] / [data-chat-flow-kind]); it writes nothing to the session log and registers no model-facing tools.
  • The rail is a pointer-events: none overlay; only the small markers are interactive, so the scrollbar and the conversation remain fully usable.
  • Marker positions are layout-derived (proportional to the row's place in the scroll content); no conversation content is copied or stored.

Development

pnpm install
pnpm run check    # typecheck + vitest + build (lib/ committed with source)
pnpm run test     # vitest (geometry / kind / options / rail DOM behavior)
pnpm run build    # esbuild host + client bundles, tsc declarations

The plugin has no dependency on the harness checkout: the client bundle is self-contained vanilla DOM, so pnpm install needs no ../dsh sibling.

Known limitations

  • Markers reflect the currently loaded history window; very old rows that the web app has not rendered yet cannot be marked (paging in more history adds their markers).
  • The rail is drawn near the scrollbar of the active conversation view; it does not overlay other views (trajectory, details panel).
  • Options are read at plugin mount; toggling localStorage live takes effect on the next mount (page reload or view remount).
  • Smooth scrolling is animated by the browser; clicking many markers in quick succession may not interrupt the current animation.

License

MIT

REPOSITORY SIGNALS

セキュリティとインストールエビデンス

このスコアは公開リポジトリメタデータと当サイトに登録されたインストールエビデンスのみに基づくもので、コードセキュリティ監査とは異なります。

出所の追跡可能性

公開プラグインカタログから取得し、公開 GitHub リポジトリにリンクしています。

ライセンス

リポジトリは MIT ライセンスを宣言しています。

メンテナンス活動

過去180日以内にコードの更新があります。

インストールエビデンス

再現可能な正確なインストールメタデータはまだ登録されていません。リポジトリの説明に従って手動で確認してください。

インストールライフサイクルスクリプト

確認したパッケージメタデータにインストールライフサイクルスクリプトは宣言されていません。