soulnet-dsh-sidebar
Đã xác minhsoulnet-dsh-sidebar · v0.1.0 · MIT · Giao diện web
SoulMirror sidebar for DeepSeek Harness: replaces dsh's left column and brand with the SoulMirror ones, keeps every stock sidebar seat, and adds new seats (primary nav, header actions) other plugins can fill
Cài đặt
dsh plugin add soulnet-dsh-sidebar Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Readme
soulnet-dsh-sidebar
The SoulMirror sidebar for DeepSeek Harness (dsh): a dsh bundle that takes over the left column and the brand of the dsh web UI — and nothing else.
- Same skeleton as the stock column (brand row + fold toggle, New Session, the workspace/session browser, footer actions, Settings, the 56px rail when collapsed), so dsh works exactly as before.
- Every stock inner seat is declared again —
sidebar.brand.mark,sidebar.brand.name,sidebar.workspaces,sidebar.settings,sidebar.footer.action— so ui-workspace, ui-settings and any footer action mount untouched. - Two new seats for other plugins:
sidebar.nav.primary(navigation rows under New Session; icon-only in the rail) andsidebar.header.action(icon buttons in the brand row, wide only). - The SoulMirror icon and wordmark replace the official brand in the sidebar
and in the new-session hero (
conversation.hero.brand.mark).
How it works
dsh's web UI is a roster of plugin rows (ui-layout, ui-sidebar,
ui-brand-official, …). This package's cordis.patch.yml disables the two
rows ui-sidebar and ui-brand-official and inserts itself; its browser half
registers the layout's sidebar seat (the whole left column) and the three
brand seats. No dsh code is forked or patched.
npx -y @deepseek-ai/[email protected] plugin --profile web add soulnet-dsh-sidebar
npx -y @deepseek-ai/[email protected] web --port 3099
Roll back: dsh plugin --profile web remove soulnet-dsh-sidebar — the stock
rows come back on their own.
Filling the new seats (from another plugin)
ctx.slots.inject('sidebar.nav.primary', () => ctx.slots.register(
{ name: 'sidebar.nav.primary', id: 'my-entry', order: 10 },
MyRow, // receives { wide: boolean } (+ t when the registration has a locale)
))
The inject callback fires only once this sidebar has declared the seat, so a
plugin can register into a new seat and a stock one (say sidebar.footer.action)
and stay correct on a stock dsh — see how soulnet-dsh moves its SoulMirror entry.
Types for the two seats (SidebarNavPrimaryOwnerProps,
SidebarHeaderActionOwnerProps) come from soulnet-dsh-sidebar/client
(type-only import; the bundle purity gate erases it).
Layout
packages/sidebar/
├── cordis.patch.yml disables ui-sidebar + ui-brand-official, inserts soulmirror-sidebar
├── src/index.ts host half: empty apply (Loader needs a host row)
└── src/client/
├── index.ts registers the `sidebar` seat + the three brand seats
├── SidebarRoot.tsx the column (stock fold state machine + the two new seats)
├── brand.tsx SoulmirrorBrandMark / SoulmirrorBrandName
├── brand-assets.ts the app icon, 128px PNG data URI (dsh/scripts/brand-asset.py)
├── slots.ts SlotMap augmentation for sidebar.nav.primary / sidebar.header.action
├── locales.ts zh/en (`soulmirror-sidebar` namespace)
└── styles.ts one <style>, --dsw-* tokens only