dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Branchpoint for DeepSeek Harness: fork the current chat into a fresh branch with a compact digest.
Fork the conversation at a clean point.
Branchpoint is a DeepSeek Harness (DSH) plugin that adds a fork button to the chat header. Click it and Branchpoint lists the sections it can split off — a practice set, a theory topic, a single formula or code fragment, or the whole branch. Pick one and it opens a fresh session with only that section's digest already in the composer.
Long chats degrade. Compaction helps, but it also blurs the thread. Branchpoint gives you a clean branch that still knows where you were.
conversation.session.header.actions, next to the branch title.$\log_2 32$), so DSH renders them with KaTeX exactly as in the main branch; the readable form (log₂(32)) is used only for one-line previews in the picker;🌿 Ветка 1 · …, 🌿 Ветка 2 · …, so the left panel never shows two identical branch titles. The root chat is renamed 🌳 … and pinned once, so the main branch stays visible above its branches.🌿 Ветка 1 · the handoff button does nothing — вся ветка
🎯 Goal: the handoff button does nothing
📌 LATEST CONCLUSION:
Fixed the silent no-op: the digest builder now keeps orphan assistant text and
pages older history before summarizing.
✅ DONE (1):
- silent no-op on empty digest → alert + fallback summary
⏳ OPEN (1):
- in progress: verify the button in a fresh session
📂 STATE:
· changed: lib/client.js
· files: lib/client.js, package.json
· run: npm test
(Summary, not a transcript: intermediate steps are omitted. Continue from this.)Branchpoint splits a structured lesson or project chat by its Markdown sections. A section with at least two numbered items under a task-like heading becomes a task unit; other sections with enough text become theory units. Selecting a unit creates a branch that knows only that part.
Example: the main chat has «Практика 2» after a change-of-base explanation. The picker shows «Практика 2 — 7 заданий». The new branch gets only this:
🌿 Ветка 1 · 📝 Практика 2
🎯 Логарифмы
1) $\log_4 8$
2) $\log_9 27$
3) $\log_{\sqrt2} 8$
4) $\lg 2 + \lg 5$
...
Не решай за меня — жди мои ответы.
Формулы оформляй в LaTeX-разметке, как в основной ветке.Formulas keep their original LaTeX, so the branch renders them with KaTeX exactly like the main chat. The picker still shows a readable preview (log₄(8)) because its rows are one line of plain text.
Some parts of a lesson matter without being the topic itself: a formula, a function, a code fragment, a library. The picker lists them under «Разобрать», after tasks and theory. Each row opens a narrow branch that carries only that item and the request «Разбери это отдельно, не углубляясь в остальную тему.»
🌿 Ветка 2 · ∑ Формула: log_a(b) = (log_c(b)) / (log_c(a))
🎯 Логарифмы
$$
\log_a b = \frac{\log_c b}{\log_c a}
$$
Разбери это отдельно, не углубляясь в остальную тему.
Формулы оформляй в LaTeX-разметке, как в основной ветке.Branchpoint numbers the branches of one parent: 🌿 Ветка 1 · …, 🌿 Ветка 2 · …. The number and the section name become the session title in the left panel, so two branches no longer look identical.
The root chat of a branch tree is renamed once to 🌳 … and pinned, so it stays above its branches instead of getting lost among them. Only a real root gets the tree mark; a branch of a branch stays an ordinary 🌿 row.
When «Практика 3» appears later, click the fork button again and split that section off. The main branch stays the map; each branch carries only its own tasks. That keeps context small and focused.
After you finish in the branch, click ↩. Branchpoint opens the main branch and puts a short note in its composer, for example:
↩️ «Логарифмы»: задания «Практика 2» выполнены (проверено 7).Send it if you want the main chat to record that the section is done. For a code branch the note includes the result and the changed files.
«Вся ветка» still produces the full study digest (all topics, all tasks, answers and checks) when you want the whole lesson in one place.
Not on npm yet. Install the prebuilt tarball from the latest GitHub release:
$tgz = "$env:TEMP\branchpoint.tgz"
Invoke-WebRequest "https://github.com/TimRad1/dsh-plugin-branchpoint/releases/latest/download/branchpoint.tgz" -OutFile $tgz
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
plugin --profile desktop add ("file:" + ($tgz -replace '\\', '/'))Or open Settings → Plugins in DSH and install the downloaded .tgz archive.
Fully quit and relaunch DSH. The desktop profile applies plugin composition at startup (it has no HMR).
The button is hidden on a blank session: DSH hides the header actions until the session has history.
lib/index.js is a minimal host half (name, empty apply).lib/client.js:inject = ['slots', 'uiWorkspace', 'sessions'];conversation.session.header.actions;ctx.sessions.binding(sessionId).eventSource;entriesToTurns and entriesToTools parse messages and tool calls;loadOlderHistory pages older history (max 6 pages, 12 s);collectUnits splits assistant answers into Markdown or bold headings (ignoring headings inside code fences) and detects numbered task blocks; collectConcepts finds formulas, functions, code fragments and imported libraries;buildUnitDigest renders only the chosen section and keeps formulas as original LaTeX; readableMath is used only for one-line picker previews; buildDigest still renders the full branch;react-dom) with Escape/backdrop close;createBranch uses ctx.uiWorkspace.openWorkspace to capture the new session id and prepareDraft to fill its composer;nextBranchNumber numbers branches per parent; markMain renames the root chat to 🌳 … once and pins it;localStorage; returnToMain opens the parent and prepares buildReturnNote as a draft.No build step: lib/client.js is a ready ESM bundle in the window.__ModuleLoader__ envelope.
## …), bold headings (**…**), and numbered lists (1. …). A plain-prose chat may show no section rows; «Вся ветка» still works.$\log_2 32$ is visible as source.localStorage link.npm test
node --check lib/client.js
npm packTo load local changes, install the new .tgz (or link:) and restart DSH.
readableMath now only feeds one-line picker previews and no longer leaves begin{cases} / overline{AB} fragments. Adds the «Разобрать» section (formulas, functions, code fragments, libraries) with its own scoped digest. Branches are numbered per parent (🌿 Ветка 1 · …), and the root chat is marked 🌳 and pinned once so it stays above its branches. Adds collectConcepts, nextBranchNumber, markMain, and tests.readableMath, buildReturnNote, parent-session linking, and tests.collectUnits, buildUnitDigest, topicOf, and tests for scoped branches.COVERED; code branches keep all human questions; history paging raised to 6 pages / 12 s; fixed Cyrillic word-boundary detection for answer submissions.MIT © 2026 TimRad1