Skip to content
dsh.fish
Bundle

@dsh-external/dsh-sidechat

Side chat drawer for DeepSeek Harness Web

Source
Mintcolour
License
MIT
Updated
Updated 14 days ago

Readme

# DSH Side Chat

[中文说明](README.zh.md)

A standalone [DeepSeek Harness Web](https://github.com/deepseek-ai/deepseek-harness) plugin that adds a Codex-style side chat beside the main conversation. It uses Harness public Session, Storage Domain, Workspace Registry, and Connection RPC surfaces without modifying the official Harness source.

![Split-screen side chat](docs/screenshots/split-view.png)

## Highlights

- Split the main conversation and side chat into two resizable panes instead of covering the main chat.
- Create a side chat from the current conversation, including selected-text quoting without automatic sending.
- Keep the child Session out of the official left sidebar while preserving its original log after relationship removal.
- Show parent title, short Session ID, summary, and a live “follows main-chat permissions” indicator.
- Choose a model and reasoning effort independently for each side chat; a new side chat initially inherits the main chat model.
- Use `/sidechat` to open the current or most recently updated side chat, or `/sidechat content` to fill its draft.
- Render user messages, Markdown, reasoning, tool activity, approvals, questions, slash-command lifecycle, and unknown events through a generic timeline.
- Navigate both conversations with compact Codex-style Turn rails: quiet equal ticks when idle, fisheye expansion and a preview card on hover.
- Generate a title from the first side-chat question, with manual rename taking permanent precedence.

## Screenshots

The screenshots use synthetic conversation content and contain no real project data.

| Feature | Preview |
| --- | --- |
| Resizable split view and parent context | ![Split view](docs/screenshots/split-view.png) |
| Per-side-chat model and reasoning selector | ![Model selector](docs/screenshots/model-selector.png) |
| Compact idle Turn rail | ![Idle history rail](docs/screenshots/history-rail-idle.png) |
| Hover preview and fisheye rail | ![Hover history rail](docs/screenshots/history-rail-hover.png) |
| Dark-theme parent context and permission following | ![Dark side-chat context](docs/screenshots/sidechat-context-dark.png) |

## Install into a Harness checkout

The plugin is currently distributed as a local `link:` package. Keep the plugin checkout next to the Harness checkout so its relative development links resolve:

```text
workspace/
├─ deepseek-harness-proxy/
└─ dsh-sidechat/
```

Build the plugin and install it into the Web profile:

```powershell
cd path\to\dsh-sidechat
$env:HTTP_PROXY='http://127.0.0.1:7890'
$env:HTTPS_PROXY='http://127.0.0.1:7890'
pnpm install
pnpm run build

cd ..\deepseek-harness-proxy
pnpm dsh plugin --profile web add link:..\dsh-sidechat
pnpm dsh web --host 127.0.0.1 --port 3080
```

The package has no `prepare` script. After changing `src/`, run `pnpm run build` and restart the Web profile so it loads the new `lib/client.js`.

## Development

```powershell
cd path\to\dsh-sidechat
$env:HTTP_PROXY='http://127.0.0.1:7890'
$env:HTTPS_PROXY='http://127.0.0.1:7890'
pnpm install
pnpm run typecheck
pnpm test
pnpm run build
```

The development dependencies use `link:` references to a sibling Harness checkout. Harness remains a peer/runtime dependency; this repository does not vendor or patch the official source.

## Architecture

The Host half owns the `dsh_sidechat` storage domain, parent/child lineage validation, title and summary persistence, archive retry, permission synchronization, model inheritance, and the private loopback `/dsh-sidechat` RPC channel.

The Client half registers the native header action, split-screen overlay, selection action, slash-command source, model selector, generic timeline, and main/side Turn history rails. Draft text and pane width stay local to the browser; relationship records and titles are the only side-chat metadata persisted by the plugin.

## Compatibility and privacy

- Designed for the DeepSeek Harness Web profile and its public plugin surfaces.
- Uses peer dependency ranges matching the current Harness checkout; test against the Harness revision you deploy.
- Side-chat RPC is restricted to the local Web connection boundary.
- Images and message drafts are sent through the child Session and are not written to the relationship table.
- Removing a side-chat relationship does not delete or unarchive the underlying Session log.

## License

MIT. See [LICENSE](LICENSE).

Install

dsh plugin --profile web add github:Mintcolour/dsh-sidechat

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source