niushuanan/xiaozhuang-dsh--plugins-multi-window ↗★ 2
@deepseek-ai/dsh-client-ui-multi-window
Hot-pluggable in-page DSH conversation panes with isolated drafts and a four-pane cap
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:niushuanan/xiaozhuang-dsh#bb949c3d291ea55d378cc5fdb1b237b4f63127b6&path:plugins/multi-window说明文档
阅读完整 README ↗@deepseek-ai/dsh-client-ui-multi-window
English | 中文
Native DSH multi-conversation split-view plugin. When enabled, a session row's … menu gains Open Side by Side after Rename, Fork Session, and Archive Session. The selected conversation becomes another block inside the current page rather than an operating-system or browser popup.
Forking is comparison-first while this plugin is active. Whether the user forks from a directory row or from a completed turn inside the conversation, DSH keeps the source in the primary block and opens the new branch beside it by default. Both entry points use the same native conversation service, so disabling the plugin cleanly restores ordinary single-conversation navigation. If the four-pane surface is already full, the successful branch still opens normally instead of being hidden.
A conversation can also be dragged directly from the directory onto the conversation surface. The whole surface becomes a nearby, explicit drop target and opens the dragged conversation as a secondary block. This is a copy-style presentation action: it never accidentally commits the directory's separate drag-to-reorder interaction.
Every block is a complete conversation surface with its own history, composer, draft, model control, and send action. Two conversations divide the available work surface evenly by default; additional panes scale up to four total conversations. A low-noise draggable divider sits between each pair: dragging changes only the two adjacent panes while the others keep the remaining space. Double-clicking a divider, or focusing it and pressing Enter, restores an equal distribution; arrow keys provide precise adjustment. Ratios persist locally for the current conversation combination and return after reload. Each secondary pane uses a same-origin isolated DSH document and its own session-selection key, so navigating or typing in one pane never moves or overwrites another pane's current selection or draft.
The current page keeps the primary navigation and digital companion. Secondary panes omit the sidebar, details column, companion, usage, export, browser entry, and runtime footer. This preserves the transcript and input when a conversation is compressed instead of shrinking every piece of desktop chrome. Divider constraints adapt to the total workspace width; enlarging one pane compresses only its neighbor while four-pane and narrow layouts keep usable composers without introducing page-level horizontal scrolling. Iframes temporarily stop receiving pointer input during a drag so an embedded conversation cannot intercept or stall resizing.
Pane identities persist locally across reloads. Deleted conversations and a conversation that becomes the primary are reconciled out automatically. Each pane has a small independent close action; closing one never changes the primary or interrupts another pane. The feature contributes through sidebar.workspaces.sessionMenuAction and conversation.session.panes, and the existing Loader id ui-multi-window remains stable for hot-plug compatibility.
Model Experience
None, as the package only coordinates presentation, navigation, and existing conversation inputs without adding prompts, tools, model calls, or hidden Agent state.
KV Cache effect
None. All panes observe and operate existing Host sessions through the ordinary DSH path.
Known Limitations and Deferred Work
- Four panes is a UI legibility limit, not a Session or Agent concurrency limit.
- The technical package id retains
multi-windowfor compatibility; the user-facing product is an in-page multi-conversation split view. - Hot-disabling the plugin removes the split surface and action immediately while keeping the persisted pane selection available if the user turns it back on.