easerlee/dsh-session-shift ↗★ 0

dsh-session-shift

DSH 插件:上下文压力到阈值、或本会话被压缩次数到上限时,自动把工作交接给一个新会话——交接包从会话机械提取(改动过的文件 / 用过的工具 / 最近几轮消息 / 停在哪儿),不过模型,落盘可审阅。 适合长对话及重度开发任务,在达到阈值时自动机械提取上下文并无缝交接。

パッケージ
dsh-session-shift
互換性
未検証
Harness ピア範囲
*
バージョン
0.2.2
ライセンス
MIT
最終更新
2026/10/03

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:easerlee/dsh-session-shift

ドキュメント

README 全文を読む ↗

配置

在 profile 的 cordis.patch.yml 里:

- id: dsh-session-shift
  config:
    enabled: true
    thresholdRatio: 0.85     # 出厂默认 0.6;与 compaction 一起用时调高
    maxCompactions: 2        # 本会话被 compaction 压过几次就交接(0 = 只看压力)
    cooldownMs: 300000
    handoffDir: .dsh/handoff
    recentMessages: 14
    maxChars: 24000
    renameOldSuffix: " [已交接]"
    dryRun: false
键默认说明
enabledtrue关掉就只留 HTTP 接口与工具,不做自动交接
thresholdRatio0.6压力到多少比例触发(0.6 = 60%)。与 compaction 一起用时调高,见下
maxCompactions2本会话被 compaction 压过几次就触发交接(0 = 只看压力)
cooldownMs300000同一会话两次交接的最小间隔
handoffDir.dsh/handoff交接包落盘目录(相对工作区;写绝对路径也行)
recentMessages14用户消息段最多带多少条(每条截 400 字)
maxChars24000交接包字数上限;余量按预算分给两个消息窗口,塞不下先丢更早的
renameOldSuffix [已交接]旧会话改名时加的后缀
dryRunfalsetrue = 只生成交接包,不建新会话(首次验证用)

⚠️ patch 的 config 是整段替换,覆盖时必须把不想改的键一起写上。

助手消息段没有单独的条数配置:它吃用户消息段之后剩下的预算,从最新往回填,每条最多 600 字; 预算不够时丢掉的永远是更早的消息,最新的那条一定在(它就是「停在哪儿」)。