Bundle
dsh-codex-side-outline
DeepSeek Harness plugin: a hoverable/clickable outline rail on the left of the chat column (one marker per turn, summary card on hover, click to jump).
- Source
- EnkiduGilgamesh
- License
- MIT
- Updated
- Updated 3 days ago
Readme
# dsh-codex-side-outline
A Codex-style side outline for the DeepSeek Harness chat column. It extracts an
outline of the current conversation and shows it as a thin rail along the left
edge of the center (conversation) column, adjacent to the sidebar.
- **Gray short lines** — one line per conversation turn, stacked top-to-bottom.
The hovered turn is the longest and lengths step down in both directions
(5 levels), so the rail reads like a minimap.
- **Hover to inspect** — a summary card shows:
- first line = the user question (bold, brand accent bar);
- following lines = the agent's **final** reply only (thinking/chain-of-thought
and intermediate narration before tool calls are excluded).
- **Click to jump** — clicking a line scrolls the conversation to that turn's
user message.
- **Pager** — long conversations get ▲/▼ buttons to scroll the rail.
- **Auto-hides** on the trajectory view, and **follows the sidebar** in real
time as you drag or collapse it.
## Package layout
This is an installable **bundle** (`dsh.bundle`) that also ships a **browser
(client) half** (`dsh.client`), following the
[official plugin guide](https://deepseek-harness.github.io/deepseek-harness/en/develop/basic/).
| File | Purpose |
| --- | --- |
| `package.json` | Bundle + client manifests (`dsh.bundle.patch`, `dsh.client`). |
| `cordis.patch.yml` | The layer applied when a profile lists this bundle. |
| `index.js` | Host half — a no-op entry (browser-only plugin). |
| `client.js` | Browser half — the outline rail UI. |
`src/conversation-outline.client.js` is a retained reference copy of the
original process-local dynamic plugin, kept for provenance; it is not shipped
in the npm package.
## Install
Install from GitHub into the **default `web` profile**:
```sh
dsh plugin --profile web add github:EnkiduGilgamesh/dsh-codex-side-outline
dsh web
```
Or clone to a local directory first, then install from there:
```sh
git clone git@github.com:EnkiduGilgamesh/dsh-codex-side-outline.git
cd dsh-codex-side-outline
dsh plugin --profile web add .
```
Verify the layer before booting (optional):
```sh
dsh --profile web --dump-config # shows a "# == dsh-codex-side-outline" layer
```
> ⚠️ **Restart required.** The web app composes its client bundle roster at
> boot. After `dsh plugin add` — or after editing this plugin's code — stop the
> running `dsh web` process and start it again. A page refresh alone is **not**
> enough for a newly added or updated bundle to load.
## How it works
- **Slot:** `shell.overlay` (frame-wide floating layer). This keeps the rail
outside every column's scroll container. The rail's horizontal offset is read
from the frame's inline `grid-template-columns` via a `ResizeObserver`, so it
tracks sidebar drag / collapse / window-resize with zero-frame lag.
- **Data:** read from the client `sessions` service (not the Host):
- `useSessions((s) => s.current)` (standard prop of `shell.overlay`) yields
the current session id;
- `sessions.binding(id).session` exposes an `ObservableSnapshot` whose
`getSnapshot().nodes` carries the folded `ConversationNode[]`;
- `user` nodes contribute the question text (`content` text blocks), and
`assistant` nodes contribute the reply text (`blocks` of `kind: 'text'`).
- Folded/older history is auto-loaded via `session.loadOlder()` so the rail
shows every turn without a manual "load more".
- **Jump:** each turn's `seq` is mapped to the chat node key via
`snapshot.chat.nodes.values()` (`anchorSeq` → `key`); clicking scrolls the
row carrying `data-chat-anchor-key` inside the `[data-conversation-scroll]`
scrollport.
- **Trajectory:** the rail hides while `[data-trajectory-scroll]` is present in
the DOM (i.e. the trajectory view is the active conversation view).
- **Styling:** a package-local `<style>` tag colored with theme CSS variables
(`--dsw-alias-*`), so light/dark modes follow the active theme.
Install
dsh plugin --profile web add github:EnkiduGilgamesh/dsh-codex-side-outline#2e923efab570557d056ba8cbbb915f55ff878ff7
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-codex-side-outline from the hub