liangmianya/dsh-synapse
liangmianya/dsh-synapseDeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
从任意层级的已完成回答持续创建隔离分支,主会话始终不受影响。
English | 中文
Branch from any answer. Keep branching at any depth.
A DeepSeek Harness plugin for isolated follow-ups that can keep branching recursively, with no plugin-defined depth limit. Start a side trail from any answer, then turn any answer anywhere in that trail into the next isolated fork point. Repeat for as many levels as the question needs. Every level inherits only its ancestor path, while the main task stays linear and untouched.
Recorded in an unmodified DeepSeek Harness 0.1.1-rc.2 web profile. The UI
and sessions are real; the captions and cursor are added in post.
MAIN TASK → SIDE QUESTION → NESTED SIDE QUESTION → NEST AGAIN → …
dsh plugin --profile web add dsh-nested-followups
Restart the DeepSeek Harness web profile if it is already running, open a conversation, and select Tree View.
git clone https://github.com/sluminositys/dsh-nested-followups.git
cd dsh-nested-followups
pnpm install
pnpm run check
dsh plugin --profile web add .
| Approach | Relevant earlier context | Main stays clean | Can keep branching at later depths | Trail stays attached |
|---|---|---|---|---|
| Ask in the main chat | Yes | No | No | Not applicable |
| Open a new conversation | Lost or copied manually | Yes | No | No |
| Typical temporary sidebar Q&A | Varies | Usually | Usually a linear side thread | Usually not |
| dsh-nested-followups | Exact ancestor path | Yes | Yes—recursively, with no fixed depth | Yes |
The distinguishing feature is not the canvas. It is that any answer at any depth can become another isolated fork point, and the same rule keeps applying to every descendant. The tree is only the map that keeps those recursive detours visible and attached to the root session.
The diagram draws two nested levels and then an ellipsis: the same fork action remains available on every answer at every later depth.
| Action | Direction | Session effect |
|---|---|---|
| Ask follow-up | Right | Creates a new isolated child session at the selected answer |
| Continue this branch | Down | Adds the next exchange to the current branch session |
Continue this branch appears only on the latest completed answer in a branch. Main-line nodes never offer it, so the two operations cannot be confused.
This is not a prompt that asks the model to pretend later messages do not exist, and it is not a line drawn between unrelated chats.
A tree opens fully folded on first visit: the main conversation plus one dot per answer that has branches. Select ⊕ to reveal one capsule per branch, then select a capsule to restore that branch's cards. Child anchors stay folded until you open them, so one expansion never floods the canvas with every descendant.
Alt-select ⊕ or a capsule to expand all descendants. Collapse all returns top-level groups to dots. A pulsing blue marker means a folded descendant is generating; red means one failed. The layout is restored per conversation after a restart.
Branches share the main conversation's working directory, so allowing a side question to write would be unsafe. The plugin therefore checks tools when they actually run. Read operations are permitted; writes and unknown tools are refused by default.
Allowed tools are read, read_image, glob, grep, lsp, the session_*
query tools, job_list, job_output, terminal_list, terminal_read,
list_agents, and get_goal. Code Mode's run_code remains available because
every tool it invokes is checked individually.
A branch joins the same preset as its parent and does not rewrite tool definitions, prompt sections, or presentation format. Its request therefore starts with the same bytes as the parent request at the branch point. Providers that cache request prefixes can reuse that context instead of reading the inherited conversation again.
| Requirement | Version |
|---|---|
| DeepSeek Harness | 0.1.x (verified on 0.1.0-rc.7, 0.1.0-rc.8, and 0.1.1-rc.2) |
| Node.js | 22.19 or later |
| Package manager | pnpm |
This release is verified against an unmodified @deepseek-ai/dsh
0.1.1-rc.2 and keeps 0.1.0-rc.7 as its compatibility floor. DeepSeek
Harness is still in developer preview, so later prereleases may require an
adapter update.
Branches cannot be continued from the standard chat view. DSH currently rejects user messages sent from the normal chat UI to a subagent-origin session. Reading and continuing a branch therefore happen in Tree View. The plugin probes for a future host capability that could safely restore native continuation, but enables it only when DSH explicitly guarantees message delivery.
Branches may appear in the built-in Subagent menu as disabled diagnostic rows. They cannot be selected, are skipped by keyboard navigation, and do not count as active child agents. This does not affect the root conversation or the sidebar, where branch sessions remain hidden.
dsh plugin --profile web remove dsh-nested-followups
Uninstalling removes the plugin UI and services. It does not modify the main conversation or delete persisted branch history.
pnpm install
pnpm run check
pnpm run check runs linting, host and browser type checking, 156 unit and
integration tests, a production build, a smoke test, and package validation.
| Command | Purpose |
|---|---|
pnpm run lint | Static analysis |
pnpm run typecheck | Host, browser, and test type checking |
pnpm test | Unit and integration tests |
pnpm run build | Production build |
pnpm run check | Complete release gate |
Issues and pull requests are welcome. See CONTRIBUTING.md
and run pnpm run check before submitting a pull request.