2.3 KiB
2.3 KiB
@local/dsh-chat-split
Split view for DeepSeek Harness: several chats open at once in the main area.
Features
- Side by side, then a grid. Chats sit in one row while each still gets the readability width (default 420 px). When the window is too narrow for that, they wrap into a grid of rows and columns.
- Minimum height. Every window is at least 396 px tall (configurable). If the rows don't fit, the grid scrolls instead of squashing the chats.
- A full chat in every window. Each window renders the real conversation (messages, composer, tools), the same embedded view DSH uses for sub-agent chats.
- Own chat list per window. The
☰button opens that window's own sidebar: filter and switch which chat the window shows. A blue dot marks chats already open in another window, and a green dot marks running ones. - Top bar per window. Title, grid position (row · column), move up / left / right / down, and close.
- Blue glow on re-selection. Selecting a chat that is already open (from a window's list, + Add chat, the "…" menu, or the main sidebar) while split view is showing flashes that window with a short blue glow. Choosing it in the main sidebar keeps you in split view.
- Include / exclude. Every chat's "…" menu in the sidebar has Include in split view / Exclude from split view.
- Settings with a live preview. Settings → Chat split has sliders for minimum height, readability width, gap and window chat-list width, plus a scaled preview of the split view built from your real chats. Drag the preview's width/height or change the number of chats to see where it wraps.
Use
- Click Split view in the sidebar's panel list (the two-pane icon).
- Add chats with + Add chat, the suggestions on the empty page, or Include in split view in a chat's "…" menu.
- Rearrange with the arrows in each window's top bar; close with
✕.
The list of open chats and the settings are stored in the browser (localStorage).
Development
client.js is the whole plugin (index.js is an empty host half).
node --test test/*.test.mjs # headless: registrations, rendering, layout maths, main-sidebar glow
The test loads client.js with real React (REACT_DIR=<dir with react/ and react-dom/>) against fake DSH services, and skips when React isn't found.