yth1120/deepseek-harness--packages-client-ui-sidebar ↗★ 1

@deepseek-ai/dsh-client-ui-sidebar

Sidebar plugin: session multi-level tree, search, grouping, state dots 适合需要会话导航侧边栏的用户,工作区浏览由其他包负责。

Package
@deepseek-ai/dsh-client-ui-sidebar
Compatibility
Unverified
Harness peer range
workspace:^
Cordis peer range
workspace:^
Version
0.1.1-rc.1
License
MIT
Last updated
Aug 23, 2026

Other repositories with this package name

Install

This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗

@deepseek-ai/dsh-client-ui-sidebar

English | 中文

Sidebar shell plugin: the brand row, New Session action, layout-owned collapse control, scroll-aware region seat, and bottom-pinned Settings seat. ui-workspace owns the Workspace and Session browser rendered into sidebar.workspaces; this package neither derives its rows nor owns its view preferences. Collapse is off-canvas: the layout resolves a closed sidebar to zero width, so the whole column slides out of view and the shell stays mounted (clipped) rather than rendering a compact rail. While composed, this package also contributes a two-button capsule group — sidebar toggle and New session — to the far-left leading seat of the floating session header (conversation.session.header.leading), giving the off-canvas sidebar a visible re-entry point at the conversation surface's top-left corner. Contract: the slot system standard.

The expanded brand row renders sidebar.brand.mark and sidebar.brand.name as independent single slots. Without occupants, the shell uses the fish mark and a DSH Local Build label carrying the build's 7-character DSH_CLIENT_COMMIT_HASH badge. A deployment package can replace either value without replacing the New Session control; declaration-aware slots.inject() lets such a package activate before or after the sidebar.

New Session starts the runtime's page-local frontend Session Intent. The runtime targets the explicit Workspace used by a scoped action, otherwise the current Session's Workspace, otherwise the most recently active Workspace; when none exists it clears into the blank New Session page. Workspace-specific controls and the shared picker belong to ui-workspace.

SidebarRootComponentProps composes the layout owner share, the global useSessions and useWorkspaces hooks, the declared brand, sidebar.workspaces, and sidebar.settings child slots, and injected startSession plus sidebar-toggle callbacks. There is no plugin store.

Collapse keeps the shell mounted at zero width (clipped off-canvas) so browsing state survives, and re-expanding restores the stored width. The leading group renders at the conversation surface's top-left corner in both the new-session hero (which keeps a leading-only header) and active sessions — but only while the sidebar is off-canvas: an expanded sidebar owns the same brand and actions itself, so the floating copy hides under the frame's data-sidebar-collapsed marker. The group is a fish logo followed by one pill capsule holding three 34px icon-only buttons — sidebar toggle, search, and New session — where search expands the sidebar with its session search pre-opened.

Scrollbars in the column are a pointer affordance: the shell rebinds ui-theme's scrollbar indirection to transparent whenever the pointer is outside it, and keeps the thumb drawn for 2s after the pointer leaves, so a list nobody is pointing at carries no bar. The reservation that keeps rows from moving belongs to the scrolling region (ui-workspace), so revealing a thumb never reflows.

The foot is the sidebar.settings seat: the sidebar renders only the bottom-pinned layout slot and shares its column state (wide); ui-settings registers the trigger row and settings panel there.

The /client exports are the plugin body (apply/inject) plus the contract types only; SidebarRoot, the row components, and the tree derivation remain package-internal behind the slot registration.

Model Experience

None, as the sidebar renders the browser session list; nothing here reaches a model request.

KV Cache effect

None; this package neither assembles nor sends a provider request.

Known Limitations and Deferred Work

  • Session state-dot rendering is owned by ui-workspace — no done/error notification sources are available.
  • Workspace browser behavior is composition-owned — grouping, ordering, search, and row state belong to ui-workspace, not this shell.
  • "New task completed" unread marking is local viewing state — completion-time > last-seen never reaches the host.