dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
按状态给 DSH 侧栏会话标题上色:未读(模型运行中=蓝、已跑完=绿)与置顶(黄,读取 DSH 官方置顶集合),两者合成一条从左到右的渐变。置顶、归档与排序由 DSH 官方提供,本插件不重复实现置顶、也不改写官方 bundle;另含列出全部未读会话的设置分节。
中文 | English
See at a glance which sessions in the DSH sidebar still hold output you have not looked at, and which have finished. Session titles are painted by state: unread (blue while the model is running, green once it has finished) and pinned (yellow, read from DSH's own pinned set). When both apply they are composed into one gradient — pin yellow on the left, unread blue/green on the right. Colors are derived from the current theme's brand color and adapt to light, dark, and monochrome themes automatically.
Pinning, archiving, and ordering belong to DSH itself (built in since 0.1.7-alpha.2): the menu entry, the pin icon, the pinned set, and pinned-first ordering are all official, and this plugin deliberately reimplements none of them — it only reads the official pinned set to tint titles. It also never rewrites official bundles: the menu uses an official slot and painting uses the session row DOM, so uninstalling leaves nothing behind.
These are illustrative mockups generated by
assets/mockups/generate.mjsusing the real DSH theme tokens — not screenshots, and they contain no user session data.
| State | Color | Trigger |
|---|---|---|
| Unread · running | brand-blue gradient | The model produced content in any session (including the one you have open) and that session is still running |
| Unread · finished | green gradient | The condition above stops holding (the session went idle) — the job is done |
| Pinned | yellow gradient | Official pin (session row "…" → "Pin session"); the plugin only reads the official pinned set |
| Both at once | yellow → blue/green | Composed in semantic order: pin leftmost, unread rightmost |
assistant/chunk content blocks, assistant/message, tool/result), that session gets the unread gradient. The color distinguishes work state: brand blue while running, green once the session went idle (the running flag is read from the session-list store and re-evaluated on every store update).sidebar.workspaces.session.menu.item slot and placed after the shipped entries.workspaces.list snapshot (pinnedSessionIds, archived rows excluded per official semantics). The plugin never writes pins and never reorders for them; official pinning behaves exactly as shipped.data-row-key="session:<id>" plus the title class suffix _title). There is no anchor-string replacement any more, and transformed output is never written back onto official client.js files.dsh plugin --profile web add dsh-session-colorful-unread-pin-jobs@latest
From GitHub (equivalent):
dsh plugin --profile web add github:enterhalf/dsh-session-colorful-unread-pin-jobs
Uninstall:
dsh plugin --profile web remove dsh-session-colorful-unread-pin-jobs
Requires DSH ≥ 0.1.7-alpha.2 (the new sidebar: official pinning, official slots, and row data-row-key). On older DSH builds (npm latest is still 0.1.5-rc.3) stay on this plugin's 1.0.0.
Uninstall is clean: slot registrations, routes, event subscriptions, timers, and observers are all removed with the fiber. The unread set and settings stay in ~/.dsh/storages/dsh-session-colorful-unread-pin-jobs/ and are picked up again on reinstall.
session/event and marks the non-subagent session unread when a whitelisted event lands (idempotent; no disk write when nothing changed). Storage is ~/.dsh/storages/dsh-session-colorful-unread-pin-jobs/unread.json (atomic write, at most 2000 entries with FIFO eviction, plus the clearOnSend setting). The client reconciles against GET /session-colorful-unread-pin-jobs/list every 2 seconds; the host is authoritative./session-colorful-unread-pin-jobs):
GET /list → { ok, ids }POST /toggle { id, unread } → { ok, ids }GET/POST /settings → { ok, clearOnSend }/top, /active, and /timestamps endpoints are gone along with the self-owned pin and sort planes)ctx.slots.inject('sidebar.workspaces.session.menu.item');ctx.slots.inject('settings.section');MutationObserver plus the 2-second poll drive syncRowMarks(), which scans [data-row-key^="session:"], composes a gradient from the host unread set and the official pinned set (ctx.get('workspaces').list), and writes it as inline style on that row's title element;session-colorful-unread-pin-jobs (follows the UI language; falls back to Chinese when no locale service is present).client.js files under the new architecture. On start, 2.0.0 checks whether a bundle still carries v1 injection markers and, if so, restores the original bytes from the bundle-*.client.js.orig sidecar in storages and realigns the clientModules graph. On a clean install this is a no-op.Breaking changes (hence the major version):
topIds persistence, /top endpoint, pin ordering partition). Use the official "Pin session" instead — it already persists pins and orders pinned sessions first./timestamps endpoint, and the Deep diving "since last agent output" second column are gone.check-anchors / check-migration were replaced by check-env / check-host).Upgrade steps:
client-hmr's 500 ms poll and applies on a page refresh).topIds in unread.json is ignored (never read or written again) — re-pin through the official menu.bundle-*.client.js.orig sidecars stay as a v1 rollback path and may be deleted by hand.data-row-key, so the UI plane does not activate (the host data plane still works). npm run check-env verifies the installed tree against the contract offline.data-row-key="session:<id>" and the title class suffix _title. If DSH changes either, the plugin needs re-adapting — but unlike the old bundle-anchor replacement, a mismatch only means "no color", never a broken page or menu.retainedBy.mainView in the list store; each browser tab decides and clears independently.llm/retry do not count.npm run build # check and emit lib/index.js
npm run build:client # check and emit lib/client.js
npm run check-host # host-half unit tests: storage/migration, HTTP plane, v1 residue cleanup
npm run check-env # offline check that the installed DSH tree exposes the official extension points
npm run check # both of the above
dsh plugin --profile web add /path/to/dsh-session-colorful-unread-pin-jobs
MIT