READMESource: main@bafc6b82
自动接力 · dsh-auto-successor
DSH 会话的上下文快满时,自动换一个新会话接着干——AI 先把当前任务摘要成交接稿,写进新会话第一条消息,旧会话归档。长任务永不断档。
旧会话(水位 88%)→ 生成交接稿 → 新会话(首条消息 = 交接稿)→ 旧会话归档
为什么需要它
DSH 的会话上下文有硬上限。跑长任务时你只有两个选择:手动开新会话并把上下文重新讲一遍,或者让模型在半截上下文里瞎猜。
billion-context 这类插件解决的是「原地压缩」,压缩会丢细节、改历史、影响前缀缓存。自动接力走另一条路:保留完整历史,另起一条干净的会话,只把结论带过去。
装
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:rodrequezsaievade764-rgb/dsh-auto-successor
Linux / Docker:
dsh plugin --profile <profile> add github:rodrequezsaievade764-rgb/dsh-auto-successor
装好后重启 DSH,左侧栏「自动化任务」下面会出现 自动接力。
用
默认就开着,阈值 85%。水位到点、轮数够,就自动接力,不用你管。
面板三页:
- 状态 — 每个活跃会话的水位条(绿 / 黄 / 红)、轮数、是否被排除;「接力当前会话」按钮可手动触发。
- 规则 — 总开关、水位阈值、最少轮数、冷静期、兜底上下文窗口、交接后是否归档、排除的会话标题正则。
- 日志 — 每次接力一条:自动还是手动、水位、成功还是失败、新会话号;降级交接稿会标出来。
两个全局工具(任何 DSH 会话都能调):
successor_handoff— 立即接力(sessionId不填 = 当前会话)successor_status— 看各会话水位和最近接力
规则怎么定
| 参数 | 默认 | 说明 |
|---|---|---|
| 水位阈值 | 85% | 占上下文窗口百分比。想更早换就调低 |
| 最少轮数 | 6 | 会话跑过这么多轮才允许自动接力,防误伤刚开的新会话 |
| 冷静期 | 10 分钟 | 接力后这段时间内不再自动接力,防连环接力打爆 |
| 兜底上下文窗口 | 128000 | 拿不到模型窗口元数据时按这个算 |
| 交接后归档 | 开 | 关了只建新会话,旧的留着 |
| 排除标题 | 空 | 正则,一行一条;命中的会话不自动接力 |
建议排除的会话:QQ 机器人会话、后台任务会话这类「每句话都是一轮」的,水位涨得快但没有接力价值。填 ^QQ 就行。
交接稿长什么样
固定五节,让新会话能直接接手:
## 任务背景
## 已完成 ← 关键文件路径 / 命令 / 参数原文照抄
## 进行中
## 下一步 ← 按顺序列 1-5 条
## 注意 ← 坑、约束、用户偏好
模型挂了也不会断:自动降级为「原始记录截取」版交接稿,接力照常完成,日志里标「降级交接稿」。
数据位置
%USERPROFILE%\.dsh\plugins-data\auto-successor\
config.json— 规则log.jsonl— 接力史state.json— 冷静期、上次接力workspace/— 接力会话落在专用工作区,不污染你自己的项目目录
重装、升级都不丢。
设计要点
| 方面 | 做法 |
|---|---|
| 触发时机 | 监听 session/event 的 turn/end,只在 reason.kind === 'completed' 的正常结束时判断,半途而废的轮次不算 |
| 水位测量 | 宿主 tokenMeter.measure(session) 取 token,除以上下文窗口;拿不到就标「测不到」不瞎猜 |
| 交接稿生成 | 宿主 llm.stream 直连,不进会话(不污染任何上下文);只取最近 40 条、每条截 1500 字 |
| 新会话 | 走 sessionController.create(同工作区、同 preset),rename 成「接力 · 原标题」 |
| 交接稿投递 | agent.followup 带 source: { kind: 'plugin' },明确标成插件消息 |
| 归档 | workspaceRegistry.archiveSession,失败只记日志不影响接力结果 |
| 热生效 | 改规则原地覆盖 cfg 字段,watcher 与工具闭包共享同一引用,不用重启 |
已知边界
- 需要 DSH 有
tokenMeter、sessionController、workspaceRegistry三个服务(桌面版 / Web 组合都有)。缺哪个就在日志里说清楚,不静默失败。 - 冷静期是全局的,不是按会话:接力一次后,所有会话都等冷静期过去。这是故意的——连环接力比不接力更糟。
- 交接稿质量取决于摘要模型。用小模型(如 Flash)也够,但换大模型细节更多。
测试
npm test
17 个用例:纯函数单测(水位判断 / 文本提取 / 提示词结构 / 配置校验)+ 端到端 mock 全链路(自动触发、降级、手动、冷静期、排除、快照)。全程离线。
License
MIT
No comments yet. Be the first to write one.