dsh-web
zhu1090093659
DeepSeek Harness (DSH) Web 插件聚合生态 · 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:TianYa-DAO/dsh-pinned-sessions
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
Found a bug or have a suggestion? Open an issue, or email 2842425998@qq.com.
Keeps the sessions a user must not lose track of at the top of the DSH Web sidebar workspace list, and lets any session or workspace be pinned there explicitly from its own "..." menu.
English | 中文
In this order, below the region header and above every workspace group:
sidebar
├─ Workspaces ← the region header (search / view options / add workspace)
├─ Pinned ← added by this plugin
│ ├─ Pinned 2 ← sessions pinned from their "..." menu
│ │ ● Session title… proj
│ ├─ Running 1 ← derived from session state
│ │ ● Session title… other
│ ├─ Unread 1
│ ├─ Open now 1
│ └─ Pinned workspaces ← workspaces pinned from their "..." menu
│ ▸ proj 4
├─ Workspace group A ← a pinned workspace is hidden here
└─ Workspace group B
Globally pinned sessions — chosen from a Session's "..." menu; they stay in their own workspace group below as well.
Running / Unread / Open now — derived from session state:
| Group | Condition | Marker |
|---|---|---|
| Running | session status running === true |
blue pulsing dot |
| Unread | session status completionUnread === true (finished while you had not opened it) |
green dot |
| Open now | session retained by the main view (retainedBy.mainView > 0) |
hollow ring |
A session appears in one of these groups only, in that priority order. A globally pinned session is left out of these groups — the dot on its row in the pinned part carries the same state.
Globally pinned workspaces — chosen from a workspace's "..." menu; each renders as a collapsible group whose sessions can be opened right there, and that workspace's own group is hidden from the list below while it is pinned.
Archived sessions and subagent child sessions never appear. Rows are ordered by most recent update, empty parts are omitted, and the whole section stays unrendered when every part is empty. Clicking a row opens that session.
The section renders only while sessions are grouped by workspace (the "By workspace" and "Workspace tree" view options). It hides itself when the sidebar is collapsed to the rail, when the list is switched to "In one list", and while search results are on screen — and while it is hidden, nothing is hidden from the list below either.
sidebar.workspaces.session.menu.item slot, alongside the shipped pin, rename, fork and archive rows.data-row-key="workspace:<key>".The section is inserted at the top of the list's own scroll container, so a long pinned section scrolls together with the workspace groups rather than clipping its own overflow.
Settings → General → Pinned sessions switches the section off and on. Preferences (the switch, the pinned sessions, the pinned workspaces and which pinned workspaces are collapsed) persist in the shared client store under localStorage key dsh.pinned-sessions.prefs.v1.
From npm:
dsh plugin add dsh-pinned-sessions
From a release tarball:
dsh plugin add https://github.com/TianYa-DAO/dsh-pinned-sessions/releases/latest/download/dsh-pinned-sessions-0.2.0.tgz
In the desktop application, install it from the Plugins page instead. The package declares dsh.bundle, so the profile mounts its cordis.patch.yml row and the client registry serves ./client.js.
client.js loads through the dynamic client module protocol (window.__ModuleLoader__.load). Its overlay row registers into the additive shell.overlay seat, and that row owns the two portals described below.sidebar.workspaces) is a single slot with no insertion hole of its own, so the plugin neither replaces nor re-implements the shipped browser. It creates one host element and inserts it at the top of the region's own scrolling list (the element carrying the browser's list class, which is the overflow-y: auto container), inside div[data-slot="sidebar.workspaces"]. The host is removed when the plugin unloads.listArea class locates the list area, the projectRow and searchResultRow row classes distinguish workspace grouping from the flat list and from search, and the rail class on the browser root marks the collapsed sidebar. A MutationObserver follows structural changes and a 1.5s reconciler covers the region being replaced wholesale.document.body, and the row it belongs to is found by data-row-key plus the open-state class.useSessions, useSessionStatus, useWorkspaces); opening a session goes through ctx.get("uiWorkspace").openSession(id).dshps-* classes and only --dsw-alias-* theme tokens, so it follows the active theme and skins. The client half requires only platform modules (react, react-dom, @deepseek-ai/dsh-client-store, @deepseek-ai/dsh-client-ui-primitives), so the package has no install-time npm dependencies.npm test
Loads client.js through a stubbed dynamic-module protocol and checks the factory and export shape, all three apply() registrations (slot, id, order, shared store, inject face, bilingual dictionaries), the section derivation (priority, archived and subagent filtering, blank sessions, explicit pins, pinned workspaces) and the rendered tree.
listArea, projectRow, searchResultRow, rail, list). A sidebar refactor in DSH requires updating the selectors in client.js.client.js.uiWorkspace is unavailable, but a renamed hook or service still needs a code update.0.2.0-rc.2.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: sidebar。