Skip to content
dsh.fish
Bundle

dsh-split-screen

Split-screen workspace for the DeepSeek Harness web GUI — chat with several agents side by side in native-looking panes.

Source
YEYEYEYESHIFU
stars
1 stars
License
MIT
Updated
Updated 6 hours ago

Readme

# dsh-split-screen

Split-screen workspace for the DeepSeek Harness web GUI — chat with several
agents side by side, in panes that look and behave exactly like the stock
DeepSeek conversation.

## Keyboard shortcuts

| Keys | Action |
|------|--------|
| **Alt+T** | Toggle the focused pane between the full composer and the compact TUI line |
| **Alt+Shift+← / → / ↑ / ↓** | Move keyboard focus to the neighboring pane |

Everything else is mouse-driven and works exactly like the stock DeepSeek UI.

## What it does

- **Always on** — the split workspace simply *is* the conversation area: no
  button to press, no mode to enter or exit. One conversation renders without
  any extra chrome and looks exactly like the stock view.
- **Split any pane** — drag a conversation from the DeepSeek sidebar onto a
  pane edge (left / right / top / bottom) to split it there, or drop it in
  the center to swap that pane's conversation. A translucent ghost previews
  the split position while you drag.
- **Native look, light & dark** — panes render with the stock DeepSeek
  styles, theme variables and primitives: user bubbles, Think rows, tool
  rows, the streaming shimmer, the rounded composer card.
- **Fully interactive panes** — every pane is a live session: streaming
  responses, Enter to send, Shift+Enter for newline, /commands, Stop while
  running, queued messages, todos, and image paste & drag-drop attachments.
- **Two composer styles** — a full composer, or a compact terminal-style
  TUI line with the same width and button positions (Alt+T).
- **Neat by default** — queued messages, todos and the stats line share the
  exact width of the input box; the stats line scrolls to reveal overflow.
- **Persists** — the split layout survives page reloads.

## Getting started

1. Install the plugin and restart `dsh web` — the split workspace is on
   immediately. With a single conversation open you just see the stock view.
2. Drag a conversation from the sidebar onto a pane edge to split.
3. Click a conversation in the sidebar to load it into the focused pane.
4. Use the pane header's split buttons (⬎ / ⬏) for more panes, ✕ to close,
   and drag the dividers between panes to resize.
5. Press **Alt+T** to try the compact TUI composer.

## Recommended companions

- **[dsh-session-hotkeys](https://github.com/YEYEYEYESHIFU/dsh-session-hotkeys)** —
  keyboard-first control for the DeepSeek Harness: `Esc` returns focus to the
  conversation, `Alt+Enter` steers or queues while an agent runs, the model
  picker is keyboard-reachable, and every shortcut is rebindable in a visual
  panel. Works great inside split-screen panes.
- **[dsh-result-only-view](https://github.com/YEYEYEYESHIFU/dsh-result-only-view)** —
  a compact results-only reading mode for running sessions: less visual
  noise while several agents work side by side in your panes.

## Install

```bash
dsh plugin --profile web add dsh-split-screen
```

then restart `dsh web`.

## How it works

- Client-only plugin: the host half is an empty loader entry; everything
  runs in the browser on public service surfaces (`sessions`, `slots`,
  `conversation`), plus a small per-session staging bridge (`session.open()`).
- Panes stage real sessions through the sessions service (history window +
  live event stream), so every pane is a first-class conversation.
- Injects: `@deepseek-ai/dsh-client-runtime`, `@deepseek-ai/dsh-client-locale`,
  `@deepseek-ai/dsh-client-ui-primitives`.
- The stock DeepSeek sidebar is deliberately untouched — it stays the single
  source of truth for conversations.
- Transcripts reuse the ui-conversation CSS module rules (copied verbatim
  under `dsv-` class names) so a harness upgrade cannot silently break
  the look.

## License

MIT

Install

dsh plugin --profile web add github:YEYEYEYESHIFU/dsh-split-screen

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source