Codex-style /side side conversations for DeepSeek Harness: a temporary fork of the current chat in a floating panel, inheriting context without interrupting the main task.
Install
# from npm (prebuilt)
dsh plugin --profile web add @zhuchenglong/dsh-side-chat
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:zclDragon/dsh-side-chat
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Codex-style /side side conversations for the DeepSeek Harness Web GUI.
While your main task runs, open a temporary fork of the current chat in a floating panel: it inherits the main thread's completed context, never interrupts the running task, and never pollutes the main thread's model context. Perfect for "ask while working" — "why did you implement it this way?", "what does this error mean?", "what was the signature again?"
Features
/sidecommand — open a side conversation beside the current session (inherits context up to the last completedturn/end).- Floating panel — a「💬 侧聊」toggle in the bottom-right corner; create, switch, and close side chats from the panel.
- Live Q&A — side chats post through the same message channel as the main
conversation (
session.prompt), stream in real time, and can be stopped. - Markdown rendering — replies render with the same
MarkdownTextthe main conversation uses (headings, code blocks, tables, math), with follow-the-latest auto-scroll. - Concurrent, non-blocking — the side agent runs in the same process alongside the main agent; your main task keeps going.
- Close = removed — closing a side chat disposes its agent and archives the session, so it disappears from the panel and the sidebar.
- Parent-aware — the panel header shows the parent conversation and side
count; chips stay
#N, hovering shows the side chat's own first question. - Clean main thread —
/sideleaves only a command card in the main log, never model context.
Install
dsh plugin --profile web add @zhuchenglong/dsh-side-chat
Or install from GitHub:
dsh plugin --profile web add github:zclDragon/dsh-side-chat#main
Restart dsh web (or refresh the browser) to pick it up.
Usage
- Open the GUI in your browser (default http://127.0.0.1:3080).
- Click「💬 侧聊」in the bottom-right corner, or type
/side. - Click「+ 新建」to open a side chat, then ask your question.
How it works
- Host half (
src/index.ts): registers the/side-chatroutes (open/list/close) and the/sidecommand.openreuses DSH's fork semantics — the seed is the parent's complete log prefix from the lastturn/endup to (not including) the nextturn/start— then creates a child agent withctx.agents.create, inheriting the parent's agent-preset composition and model selection. The panel header title is derived from the side chat's own first user message (bounded byseedLength, so inherited parent messages are never used). - Client half (
src/client/): binds side sessions throughctx.sessions, opens their event window (session.open()), subscribes to the live conversation snapshot, and renders a compact markdown transcript; messages post viasession.prompt(). - Registry: an in-process
Map<sideSessionId, parentSessionId>records grouping; when a parent session is disposed, every descendant side chat is disposed too (orphan cleanup).
Development
pnpm install
pnpm typecheck # tsc --noEmit
pnpm test # vitest (host + client)
pnpm build # tsc declarations + tsdown artifacts (lib/index.js + lib/client.js)
pnpm pack # publish tarball
Known limitations (next iterations)
- The side-chat grouping registry is in-process; a process restart loses the
grouping (the sessions themselves persist). A durable registry via
ctx.storageDomainis planned. - The panel list refreshes on a 3s poll (a side chat opened via
/sideappears within ~3s). - A side chat inherits context only up to the last completed
turn/end(same as a DSH fork); an in-flight turn cannot be inherited.
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8488
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8488
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4217
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
ccch1mneyyy/dsh-TUI★ 4167
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 4045
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1432
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.