dsh-pin-sessions
Manifest valid★ 1Pin and unpin sessions to the top of the Web sidebar with a dedicated pinned panel, archive section, and native three-dot menu integration.
DSH Pin-Sessions Plugin
A DeepSeek Harness (DSH) web plugin that lets users pin sessions to a dedicated sidebar section for quick access to recurring workflows, and provides an archive-sessions settings panel with batch delete, restore, workspace grouping, and pagination.
Features
- Pin / Unpin sessions — Pin sessions to the top of the sidebar, hidden from their workspace browser
- Archive panel — Settings panel for managing archived sessions with batch delete, per-row restore, workspace grouping, and 20-per-page pagination
- Context menu integration — Right-click pin/unpin via
@baihejiangnan/dsh-session-context-menu - Pin = Archive — Pinning archives the session from the workspace browser; unpinning restores it
Architecture
Standard DSH plugin split: host half (Cordis loader entry + TYPERT manifest) + client half (window.__ModuleLoader__.load wrapper).
Host Side
| File | Responsibility |
|---|---|
src/index.ts | Opens pin_sessions storage domain, creates PinsStore + PinsRuntime |
src/runtime.ts | PinsRuntime extends TypertRemoteService — 8 TYPERT methods |
src/typert.ts | Host TYPERT manifest (must match client) |
src/store.ts | Durable pin store over the pin_sessions domain |
src/domain.ts | pin_sessions domain declaration |
src/schemas.ts | Zod schemas for pin records |
TYPERT Methods
list, pin, unpin, toggle, isPinned, deleteSessions, listArchived, unarchiveSession
Key Design: Pin = Archive
Pinning calls workspaceRegistry.archiveSession(sessionId) to hide the session from the workspace browser. Unpinning calls unarchiveSession() which removes the ID from archivedSessionIds. This triggers domain/changed → host/archived-sessions-changed frame → client auto-updates.
Client Side
| File | Responsibility |
|---|---|
src/client/index.ts | Registers locale, mounts TYPERT_REMOTE, context-menu extensions, portals PinnedSection + ArchiveSection |
src/client/PinPanel.tsx | Pinned section portaled to top of sidebar |
src/client/ArchivePanel.tsx | Settings panel with workspace grouping, pagination, batch delete, restore |
src/client/styles.ts | CSS mirroring native DSH classes |
src/client/locales.ts | i18n strings |
src/client/remote.ts | TYPERT remote interface |
src/client/typert-remote.ts | Client TYPERT manifest (must match host) |
Build & Install
# Build
cd dsh-pin-sessions
pnpm install
pnpm run build # tsc + tsdown + wrap-client.mjs
# Typecheck
pnpm run typecheck
# Install into DSH
dsh plugin --profile web add /path/to/dsh-pin-sessions
- Host-side changes require DSH server restart
- Client-side changes require browser refresh
Key Service Access Patterns
| Service | Usage |
|---|---|
ctx.get("workspaceRegistry") | archiveSession(), archivedSessionIds, list(), enqueueOperation(), setState() |
ctx.get("sessionPersistence") | list() returns headers with {id, cwd?, origin?} |
ctx.get("sessions") | get(id) returns live session or undefined |
ctx.get("agents") | get(id) returns agent with cancel() and whenIdle() |
ctx.get("storageDomain") | get("session_projcache") for projection cache |
GlobalStandardProps | Auto-injects useSessions and useWorkspaces hooks |
Context Menu Integration
@baihejiangnan/dsh-session-context-menu exposes a global registry at Symbol.for("dsh.session-context-menu.extensions") with .register(entry). The plugin may load after us, so we poll every 500ms until the registry appears.
Entries: {id, label, order?, visible?, run}. The context menu's isAction() checks for "会话"+"操作" or "session"+"action" in aria-label; titleFrom() extracts the quoted title.
License
MIT
Comments
Loading…
Similar plugins
Adds Pin/Unpin to the sidebar session-row menu and a collapsible Pinned Sessions group above the session list, with host-side persistence, hover quick-unpin, collapse memory, and live running-state do
★ 0
dsh plugin --profile web add dsh-plugin-pin-sessionby NattoCB
Adds a Workspaces / Recent-sessions switcher above the sidebar list, with a pinned-sessions group, a per-row menu (pin/unpin, copy session id), title filtering, and browser-local pin storage with a on
★ 1
MIT
JavaScript
Sep 10, 2026
dsh plugin --profile web add dsh-plugin-sidebar-viewsby jackovibe
Codex 式会话置顶与归档风格的 DSH Web 插件(置顶=标记不是排序,宿主持久,零顺序改动)
★ 1
MIT
JavaScript
Sep 23, 2026
dsh plugin --profile web add dsh-codex-pinby TianYa-DAO
Keeps running, finished-but-unopened and currently open sessions at the top of the DSH Web sidebar workspace list.
★ 1
MIT
JavaScript
Oct 20, 2026
dsh plugin --profile web add dsh-pinned-sessionsby AndreyTepaykin
Pinned-sessions block for the DeepSeek Harness sidebar: a collapsible pinned panel above the Settings row, hover pin buttons on session rows and a session-header toggle. Pins live in the plugin's own settings namespace.
★ 0
MIT
JavaScript
Oct 1, 2026
dsh plugin --profile web add dsh-sidebar-pinsby 439436269-ctrl
DSH 插件:侧栏内联的「置顶」会话分组(原生度量 + 就地搜索)。A pinned-session group in the DeepSeek Harness sidebar.
★ 0
MIT
JavaScript
Oct 7, 2026
dsh plugin --profile web add @vfvrpq/dsh-pinned-sessions