dsh-dossier:用卷宗与交接文档管理长项目会话

前言

在 DeepSeek Harness(DSH)里做长期项目时,上下文会越积越长。计费往往按被重新计算的上下文长度来算,而不是简单按轮数。冷启动——重启 DSH、闲置一段时间或换机器——会让大量历史 token 全量重算,成本明显高于日常续聊。

常见做法是单条对话聊到底、fork 新对话,或把状态写进 AGENTS.md。前者历史越长每轮越贵;fork 仍继承全部历史;改 AGENTS.md 又会打断工作区相关缓存。维护者 JungleYXu 的 dsh-dossier(社区目录名 jungleyxu/dsh-dossier,分类:工作流)走的是另一条路:把项目切成多条较短对话(「卷宗」),用一份约 800–1500 token 的交接文档传递状态,新会话只读文档、不重放旧对话全文。侧栏还提供卷宗面板,用来归档、排序和管理会话本身。

下面介绍插件定位、核心能力、安装配置与典型用法;事实以 GitHub README 与 npm 包说明为准。

这是什么

dsh-dossier 是 DSH Desktop 插件(当前文档标明平台 DSH Desktop 0.2.x,宿主 Node ≥ 20),npm 包名 dsh-dossier,版本 1.0.0,许可证 MIT。

两个核心部分:

  1. 对话管理 —— 侧栏「卷宗」面板,按项目文件夹归集会话,支持改名、排序、置顶、多选与批量操作。
  2. 项目交接 —— 当前会话生成固定骨架的交接 Markdown,接手会话读文档即可继续,避免重放几十万 token 历史。

数据全部落在本地(~/.dsh/dossier.json、工作区 goals/、全局备份目录),README 未描述对外网络请求。

核心功能

对话管理(卷宗面板)

点击侧栏「卷宗」进入全页面板。左侧导航大致为:★ 交接文档(置顶)→ 全部对话 → 未归档 → 各卷宗分组及其下的对话。

卷宗即项目文件夹:

  • 可新建、重命名、删除卷宗;支持上下调序、置顶、「按更新时间自动排序」。
  • 删除卷宗只解散分组,内部对话回到「未归档」,对话本身及已有交接文档不删。
  • 一个对话最多属于一个卷宗;「移到未归档」只退出分组,不删对话与文件。
  • 多选后可批量「归入…」,浮层内可直接新建卷宗。

对话条目在面板内可改名(与工作区会话标题同步)、置顶、手动调位;双击或「进入对话」打开。排序分默认(手动)、时间、名称三档;支持卡片 / 列表视图,选择记在浏览器本地。

项目交接

一键交接:dossier_handoff_write

对话左下角「交接」按钮会向当前会话投递短指令,由 agent 调用工具写盘,路径约定为:

<会话工作区>/goals/<卷宗名>/阶段-NN-<标题>.md
~/.dsh/dossier/handoffs/<工作区>/<时间>-<会话id>-阶段-NN-<标题>.md   # 全局备份

阶段号在同目录下自动递增。若宿主判断会话「没有干过活」,返回 409 empty-session,不投递 prompt,按钮显示「无可交接」。写盘前会扫描密钥与内网地址模式并告警;超过约 1800 token 会提示压缩背景与过程。

文档骨架固定为八节(写在工具描述中,供 agent 遵循):目标、当前状态、关键决策、已否决的方案、约束、涉及文件、下一步、未解决与风险。README 强调「已否决的方案」若缺失,接手方容易重走已否路径。

交接文档目录与迁移

面板直接列出工作区 goals/ 下的 Markdown。无卷宗时文档落在 goals/ 根下,面板上归在「未归档」。可对单份文档导出、删除(备份仍在)、定位到源会话;支持整组导出/删除,以及整包 dossier-handoff-<时间>.json 导入导出(同名同内容跳过,同名不同内容另存后缀,不覆盖)。宿主限制只能写入 goals/ 前缀内路径。

勾选一份或多份交接文档后点「开新对话」:新对话建在同一工作目录,首条消息要求先读所选文档并按「当前状态」「下一步」续作;开聊前会确认所带文档与费用说明。

交接文档质量检查

仓库提供 scripts/handoff-eval.mjs:23 项静态检查(骨架、≤1500 token、无代码块、路径存在性、已否决 三段式、下一步验收标准、无密钥等)。README 还建议用「零上下文盲接」——把文档单独交给不读仓库的新会话,验证能否复述下一步与验收标准。

成本可见

面板顶部展示最近一条对话的步数、消息数、上下文长度、上一轮花费与缓存命中率(按 deepseek-flash 现价估算)。选中某条对话时追加冷启动约算金额;状态「对话中」(一小时内有过往来)与「已断」仅按时间推断,客户端无精确「当前打开会话」接口。

安装与启用

在 DSH 插件市场搜索「卷宗」,或执行:

dsh plugin install dsh-dossier

本地开发时可在 profile 的 package.json 中用 link: 指向源码路径,把 dsh-dossier 加入 dsh.profile.bundles,在 profile 目录 pnpm install 后重启 DSH。改宿主 index.js 需重启 DSH;只改 client.js 刷新页面(Ctrl+F5)即可。

配置可通过 profile 的 cordis.patch.yml 覆盖 bundle 默认项:

- insert:
    - id: dossier
      name: dsh-dossier
      config:
        handoffRoot: goals   # 交接文档根目录,相对会话工作区

典型用法

  1. 在卷宗面板为长期项目新建卷宗,把相关会话归入该卷宗,便于检索与排序。
  2. 阶段告一段落时,在对话左下角点交接,让 agent 生成 goals/<卷宗名>/阶段-NN-<标题>.md。
  3. 需要新开短上下文会话时,在面板勾选交接文档,点开新对话,按文档中的下一步继续。
  4. 换机器前用面板的整包导出生成 dossier-handoff-<时间>.json,在新环境导入;工作区 goals/ 亦可直接纳入 git。

自检交接文档质量(在插件仓库目录):

node scripts/handoff-eval.mjs <文档.md> --cwd .

适用场景与注意

适合:跨多周、多会话的 DSH 项目;希望用结构化 handoff 换机或 fork 时降低上下文重放成本;需要在侧栏统一归档大量对话的团队或个人工作流。

注意:

  • 插件在 当前 DSH 进程权限 下读写 ~/.dsh/dossier.json、工作区 goals/ 与备份目录;安装前宜浏览 源码 与 MIT 许可证。
  • 交接质量依赖 agent 是否按八节骨架写全,尤其是「已否决的方案」与带验收标准的「下一步」;可配合 handoff-eval.mjs 与盲接自测。
  • 社区插件目录 SkillHub 条目 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系;星标等元数据以目录页为准(当前线索为 0 star)。

结尾

dsh-dossier 把「会话归档」和「状态交接」做成一体:卷宗管对话归属,交接文档用千字级 Markdown 替代全量历史重放,并附带目录浏览、整包迁移与成本粗算。若要试用或反馈问题,可访问 SkillHub 目录页 与 GitHub 仓库(issue 区接受反馈)。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye