Files
dsh-chat-split/README.md
T

33 lines
2.3 KiB
Markdown

# @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
1. Click **Split view** in the sidebar's panel list (the two-pane icon).
2. Add chats with **+ Add chat**, the suggestions on the empty page, or *Include in split view* in a chat's "…" menu.
3. 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).
```bash
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.