JackZo400/dsh-carryover ↗★ 0

dsh-carryover

给 dsh 的会话交接:开新会话之前先把上一段摘要成笔记,笔记落盘核对成功才允许删旧轨迹;摘要失败就一条都不删。新会话自动带上这份笔记。 适合需要跨会话传递上下文并自动清理旧轨迹的开发任务。

Package
dsh-carryover
Compatibility
Unverified
Version
0.1.0
License
MIT
Last updated
Sep 27, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:JackZo400/dsh-carryover

配置

- insert:
    - id: carryover
      name: dsh-carryover
      config:
        enabled: true

        sessionsRoot: ~/.dsh/sessions                                   # 轨迹根
        projCacheRoot: ~/.dsh/storages/session_projcache/sessions       # 投影缓存
        transcript: auto            # auto = 自己挑 session.v.jsonl.zstd 里版本最大的那个

        workspace: .                # 笔记/账本/日志默认都在这下面
        # notesDir: ''              # 默认 /memory/carryover
        # sessionMapPath: ''        # 默认 /tmp/session-map.json
        # logPath: ''               # 默认 /memory/carryover.log

        inject: true                # 新会话自动带上笔记
        injectOrder: 40             # 挂进上下文的顺序(越小越靠前)
        maxInjectChars: 4000

        summary:
          baseUrl: https://api.deepseek.com   # 任何 OpenAI 兼容接口,给根或 /v1 都行
          apiKey: ''                          # 强烈建议走 DSH_CARRYOVER_API_KEY
          model: deepseek-chat
          maxTokens: 900
          prompt: ''                          # 留空 = 内置提示词(写便条,不写公文)
          extraPrompt: ''                     # 追加一句额外要求

        minDialogueChars: 40        # 正文太薄就不值得花一次模型调用
        purgeThinSessions: true     # true = 太薄的直接清;false = 再短也走一遍摘要
        minSummaryChars: 10         # 摘要短于这个长度 = 没摘到,不删
        maxSummaryChars: 1200       # 摘要超长就截断(头尾各留一半)
        maxInputChars: 60000        # 喂给摘要的正文上限

所有项都有默认值,配置是浅合并(summary / labels 这两层单独合,不会因为配了 summary.model 就把整个 summary 表打掉)。

映射文件(这个插件唯一的「外部契约」)

默认 /tmp/session-map.json,格式:

{
  "group:demo":  { "sessionId": "3f2a...c1", "carried": "1a9b...7e" },
  "c2c:alice":   { "sessionId": "88d0...4b" }
}
  • sessionId:这条通道当前的会话 id(宿主每开一个新会话就更新它);
  • carried:已经交接过的那个会话 id(插件写,防止重复摘要、重复花钱)。

key 是什么由你定 —— 通道名、群号、用户 id、工作目录都行,它只用来给笔记文件起名 (会做文件名安全处理,../.. 这种东西钻不出去)。

谁来写这份文件?两种都行:

  • 宿主插件写(推荐):建新会话时顺手写一行,是顺手的事;
  • 你自己/脚本写:想让插件处理一批历史会话时,把要交接的 id 写进去就行。

没有这份文件,插件既不知道要交接谁,也不知道新会话属于哪条通道 —— 它会安静地什么都不做, 而不是去猜。