deepseek-harness/packages/client/ui-sidebar
2026-08-13 13:07:24 +08:00
..
src • feat(self-modification): add dynamic Cordis plugin runtime and UI 2026-08-13 01:29:36 +08:00
tests fix: ci 2026-08-13 01:33:31 +08:00
package.json Adopt MIT for DSH packages 2026-08-13 13:07:24 +08:00
README.i18n.yaml Merge remote-tracking branch 'origin/master' into xtr/sidebar-workspace-controls 2026-08-11 15:59:40 +08:00
README.md Merge remote-tracking branch 'origin/master' into xtr/sidebar-workspace-controls 2026-08-11 15:59:40 +08:00
README.zh.md docs(web): record workspace sidebar behavior 2026-08-11 15:25:11 +08:00
tsconfig.json refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
tsdown.config.ts feat(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +08:00

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

English | 中文

Sidebar shell plugin: the wordmark, 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 into the layout-owned 56px rail remains presentation-local. Contract: the slot system standard.

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 sidebar.workspaces and sidebar.settings child slots, and injected startSession plus sidebar-toggle callbacks. There is no plugin store.

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.