DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-beads-viewer

d

dsh-beads-viewer

Manifest valid

Beads issue browser in the right sidebar: filter and search the tracker with live ready and waiting counts, read issue Markdown with clickable project-file and issue links, and copy or insert the issu

UI (client)hasBundlePatch

dsh-beads-viewer

Beads issues in the DeepSeek Harness right sidebar — the browser counterpart of the terminal bv viewer.

npm version License: MIT tests

🌏 English · 中文

浅色 Light深色 Dark
Beads panel in the right sidebarBeads panel, dark theme

✨ Features

🗂️ A tab beside Files — registers a beads tab type in the sidebar's new-tab guide, dockable, split and floatable like any other page. State survives a tab switch.🎨 Colour-coded badges — status, priority and type on every row, each dimension its own shape and hue. Label ink is derived from each fill's luminance, so text is always legible; two fills can never read as the same colour (ΔE ≥ 25, test-enforced).
📏 Uniform rows — exactly three line boxes tall (calc(3 * 1lh + padding)), so the list scans as a grid. Long titles truncate at the container edge; the label track is reserved even when empty.🖱️ Hover marks the target — a resting row is plain; the row under the pointer takes a teal wash. One hue mixed against transparent reads correctly on both themes.
🔍 Ready vs waiting — a Ready chip from bd ready, a Waiting chip for issues held by open blockers, plus the status chips with live counts, a search box (/ focuses it) and sorting.📝 Polished Markdown — headings, nested and task lists, tables, fenced code, quotes and emphasis, rendered by a small built-in renderer. Long threads open on the newest comments.
🔗 Clickable references — a path that names a real project file opens in the document preview; an issue id opens that issue. Both stay plain text when the target does not exist.🧾 Id at hand — ⧉ copies it, ↵ inserts it into the composer at the caret as one undoable edit.
🌓 Theme in three ways — the Host's text size, font choices and interface language (zh / en) all apply.🧩 Secondary blocks on a wash — design, notes, acceptance criteria and comments sit on a faint accent wash; the description stays primary.
More screenshots

Issue detail — description first, secondary blocks on the wash:

LightDark
detail, lightdetail, dark

The full badge palette, contrast-checked in both themes:

LightDark
badges, lightbadges, dark

The interface follows the Host language:

panel in Chinese

🚀 Installation

# from the registry
dsh plugin --profile <name> add dsh-beads-viewer

# or from a checkout, which links the profile entry to this directory
dsh plugin --profile <name> add /path/to/dsh-beads-viewer

Then restart the Harness so the new bundle's client half loads (a hard browser refresh also picks up a newer bundle). The tab appears in the right sidebar's new-tab guide.

A linked install picks up edits on the next load with no reinstall; a registry install is a normal package, so upgrading means running add again.

Requirements
  • The bd CLI on the machine running the Harness. The Host finds it on PATH, then at the usual Homebrew and Go install locations; brew install beads is enough.
  • A project with a Beads workspace. The panel asks bd where which workspace it would open, so a subdirectory, a git worktree and a BEADS_DIR override all resolve the way bd itself would.

If either is missing the panel says which one — in the panel itself, with the reason bd gave.

FAQ
SymptomCause & fix
Tab shows HTTP 404, but the search bar and filters are thereThe client half is a static asset and still rendered, but the data route was never registered — the plugin activated before the Host's web server. Fixed in 1.0.0 by waiting on the service; if you see it on an older version, restart the Harness.
Fonts or sizes in the panel do not follow the Host's appearance settingsSame cause as above: the running client bundle is older than the page. Hard-refresh (Cmd/Ctrl+Shift+R). The panel derives its sizes from --dsh-content-font-size and its fonts from the Host font variables.
bd not foundInstall it (brew install beads) or make sure it is on the PATH of the process running DSH.
"This project has no Beads workspace"Run bd init in the project, or point BEADS_DIR at an existing one. The panel shows the reason bd gave.
A workspace that used to open now reports a migrationOld Beads workspaces must be migrated by bd itself; the panel prints bd's instruction verbatim instead of guessing.
Numbers in an ordered list look wider than the bullet beside themThat is the point: the numbered gutter is wider (2.35em vs 1.9em) because digits need the room. The two lists share one text start.

🔧 How it reads the tracker

The Host half serves one read-only route, GET /beads-viewer/api:

QueryAnswer
?cwd=<dir>every issue (slim rows), status counts, the status vocabulary, and each issue's readiness
?cwd=<dir>&action=issue&id=<id>the whole issue, its comments, and both dependency directions
?cwd=<dir>&action=files&paths=<newline-separated>which of those paths exist, and where

?force=1 bypasses the four-second list cache. Three properties are deliberate:

  • It shells out to bd, and reads no database file. A Beads workspace is either a Dolt server or a SQLite file depending on how it was initialised, and the schema moves between bd releases. bd --json is the interface that stays correct across both — and when a workspace is too old, bd prints the migration instruction, which the panel shows verbatim rather than guessing at.
  • It is read-only. Every read goes through one readBd helper that prepends bd --readonly, so the guarantee is structural rather than a per-call habit — a test asserts the flag is on the argv. No route mutates anything.
  • It only answers itself. The route refuses non-loopback peers, and ?cwd= must be an existing directory that (or whose parent) holds .beads. The directory is then used as the workspace for every bd call, so a request cannot point bd at an arbitrary tree.

📁 Layout

index.js            Host half: the read-only route and the bd calls
client.js           Client half: the sidebar tab, panel, and Markdown renderer
cordis.patch.yml    The bundle patch that mounts the host row
locale/{en,zh}.json Plugin title and description for the Plugin Manager
icon.svg            Panel artwork
test/               Five suites, 103 checks
docs/               Screenshots referenced by this README
🧪 Tests
npm test

114 checks in five suites:

FileCovers
test/host.test.mjsthe helpers, the handler's error states, and a real bd workspace (skipped when bd is missing)
test/client.test.mjsthe Markdown parser, path extraction, file addresses, list indent
test/activation.test.mjsapply against a fake context, including a profile without the right sidebar, and the language switch
test/render.test.mjsthe Markdown renderer with real React, badge contrast, the row pitch, and the section wash
test/panel.test.mjsthe panel's states — list, detail after a row click, failure card, transport error, language change

The last two render the shipped component tree, so a crash, a bad prop or a broken hook order fails the suite instead of blanking the panel.

Readiness is not computed here. bd ready owns the predicate; re-deriving it would drift the moment bd changes a rule. When that command fails the payload says unavailable and the panel offers no readiness chip — "nothing is startable" is a different, actionable statement from "the question could not be asked".

📋 Known limits

  • Reading the tracker costs two bd processes per refresh (list + ready; ~0.8s on a 380-issue project); the list is cached four seconds, refreshes when the window regains focus, and the Refresh control bypasses the cache for its one request.
  • The list is capped at 2000 issues and 200 comments per issue.
  • The panel is a viewer. Creating, editing and closing issues stays with bd and with the agent, which is the one place that can report exactly what changed.
  • Markdown comes from a small built-in renderer rather than a full CommonMark implementation: it covers what issue bodies actually use and adds file and issue links on top.

📄 License

MIT

Comments

Loading…

Similar plugins

dsh-web-plugin-manager

by LX2000WASD

在 Web UI 中一键管理 DeepSeek Harness (DSH) 插件:查看、实时启停、安装/卸载、更新检测、健康检查(依赖/冲突/兼容性分析)、环境管理、插件市场。bundle 与非 bundle 插件全覆盖

UI & ExperienceManifest valid

★ 66

MIT

TypeScript

Sep 20, 2026

dsh plugin --profile web add dsh-web-plugin-manager

A Codex-style right side panel for the DSH Web UI — session artifacts browser (live file tree, scan include, preview, reveal) plus a side chat that forks the current session with a model picker, human

Workflow & AutomationUI & ExperienceManifest valid

★ 0

dsh plugin --profile web add dsh-sidepanel

by Missher12

Independent Missher plugin: current source, installable bundle and documentation.;桌面入口与其他插件见主页链接。

Sessions & MessagesManifest valid

★ 0

MIT

JavaScript

Oct 19, 2026

dsh plugin --profile web add @missher/dsh-session-bridge

by miao-ge

DSH plugin: browser-style project tabs in the window title bar - one tab per session, running / finished / waiting-for-approval badges, drag to reorder, restored across restarts.

Development & InfrastructureManifest valid

★ 0

MIT

JavaScript

Oct 5, 2026

dsh plugin --profile web add dsh-project-tabs

by Missher12

Independent Missher plugin: current source, installable bundle and documentation.;桌面入口与其他插件见主页链接。

UI & ExperienceModels & ProvidersManifest valid

★ 0

MIT

JavaScript

Oct 16, 2026

dsh plugin --profile web add @missher/dsh-reasoning-effort

by kimirong

bbs.dsher.cn 社区面板 — DeepSeek Harness Web 的 bundle 插件:右下角悬浮入口,浏览/搜索/发帖/回帖/点赞/粘贴截图上传/一键登录。dsh plugin --profile web add 一键安装

Manifest valid

★ 0

MIT

TypeScript

Aug 17, 2026

dsh plugin --profile web add @kimirong/dsher-bbs-plugin