- Accueil
- Plugins
- Sessions et messages
- dsh-session-handoff
dsh-session-handoff
weiye6/dsh-session-handoff
Transférez les sessions longues vers une session propre : /handoff résume la conversation avec un LLM, crée une nouvelle session et un nouvel agent dans le même espace de travail, injecte le document de transfert comme premier message et l'ouvre automatiquement ; la session d'origine reste inchangée.
Installer
dsh plugin --profile web add github:weiye6/dsh-session-handoffREADME
dsh-session-handoff
English | 中文
Hand your long DSH session over to a clean one. /handoff summarizes the recent
conversation with an LLM, creates a brand-new session + agent in the same workspace
(no history copied), injects a structured handoff document as its first message, and
auto-opens it — the model continues from the summary instead of replaying the whole
old history. The origin session is untouched.
Features
- One command —
/handoff [<N>|all](defaults to the last 8 user messages;allcovers everything) - Clean handoff — a fresh session with the origin's workspace, model route, and agent preset (system prompt / tools / skills), no context bloat
- Structured summary — 任务目标 / 当前进度 / 关键决策 / 涉及文件 / 下一步 / 遗留问题
- Auto-open — the client half waits for the new session to be ready and navigates to it (each child auto-opens once; history replay never re-jumps)
- Robust by default — summaries run with thinking off (fast, cheap), oversized
excerpts keep the newest messages instead of erroring, and finish reasons
(
max-tokens/error/aborted) are translated into actionable errors - Zero core changes — a single
dsh.bundle.patchrow; only public services are used
Install
# 1. Build the bundle from source (or grab a release tarball)
npm install && npm run build && npm pack # → dsh-session-handoff-0.2.0.tgz
# 2. Install into your web profile
dsh plugin --profile web add ./dsh-session-handoff-0.2.0.tgz
# 3. Restart and verify the row is mounted
dsh web
dsh --profile web --dump-config | grep handoff
# expected: # == dsh-session-handoff / - id: handoff / - name: dsh-session-handoff
Dev-time source link (
dsh plugin --profile web add D:/path/to/dsh-session-handoff) requires the source dir'snode_modulesto resolve@deepseek-ai/*peers; prefer the tarball.
Usage
Type in any conversation's input box:
/handoff # summarize the last 8 user messages (default)
/handoff 20 # summarize the last 20 (same as turns=20)
/handoff all # summarize every user message (same as turns=all)
What happens:
- A command card shows "summarizing…";
- An LLM produces the handoff document (goal / progress / decisions / files / next steps / open questions), which becomes the new session's first message;
- The new session auto-opens; the origin session stays intact and is linked back.
⚠️ Privacy: the recent conversation text (user + assistant messages in the requested window) is sent to the configured model to produce the summary.
Configuration
- id: handoff
name: dsh-session-handoff
config:
turns: 8 # user-message rounds to extract (1–50)
maxInputChars: 24000 # byte cap for the summary input (oldest dropped first)
maxTokens: 2000 # summary output budget
reasoningEffort: off # off (default, fast/cheap) | high | max | inherit
timeoutMs: 120000 # summary call timeout
# provider: deepseek-official # optional fixed model route
# model: deepseek-v4-flash # must be paired with provider
Without provider/model, the current session's latest logged model route
(session.requestHeader()) is used.
How it works
- Host half (
index.mjs, plain ESM): public services only —commands(/handoff),llm(ctx.llm.stream, following officialsession-title-llm),agents(ctx.agents.create— session and agent together, inheriting the origin's cwd / model route / agent preset viaagentPresets.mount), plusworkspaceRegistry.attachSession(same-workspace grouping) andsessionTitle.rename(ahandoff: <source>title). - Client half (
src/client/, tsdown →lib/client.js): ahandoffconversation node matches the/handoffsuccess event and auto-opens the child session (polling until it is addressable, deduped via localStorage).
Development
npm install # devDeps: tsdown / typescript / @types/react / vitest / jsdom ...
npm test # 19 tests: 15 host+client pure functions + 4 client component
npm run typecheck
npm run build # tsdown → lib/client.js (CJS factory, official client-module format)
npm pack # prepack runs typecheck + build automatically
Publish checklist: add the dsh-plugin GitHub topic → open a PR to
awesome-deepseek-harness →
optionally npm publish.
Known limitations
- The handoff document lives in the session only; it is not written to disk
(
HANDOFF.mdis a future enhancement). - Targets the rc.5 public contracts; re-check on DSH upgrades.
- The auto-open component has pure-function tests only; jsdom component tests are pending.
License
Plugins associés
dsh-web-ui (dsh-chat-recovery)
zhu1090093659/dsh-web-ui
dsh-synapse
liangmianya/dsh-synapse
billion-context
ranxianglei/billion-context
dsh-chat-import
nwflower/dsh-chat-import