dsh-session-media:DSH 会话档案层——记忆注入、跨会话检索与附件恢复

前言

在 DeepSeek Harness(DSH)里开新会话时,模型默认不记得你在别的会话里说过什么,也拿不到当时上传的图片或文档路径。社区里已有 dsh-memory(事实记忆,SQLite FTS5)和 dsh-session-recall(基于官方 ctx.sessionQuery 的毫秒级会话检索),但附件批量导出、以及「每个工作区一份 Markdown 每轮注入系统提示」这类能力需要单独补位。下面介绍维护者 Ok541151 发布的 dsh-session-media(GitHub 仓库 Ok541151/dsh-session-media,SkillHub 目录 dsh-session-media),分类为「记忆」,当前版本 0.3.2,许可证 MIT。

这是什么

一句话定位:DeepSeek Harness 的会话档案层——在新会话里让模型知道本项目此前发生过什么,包括历史会话中的图片与文档(通过路径与导出,而非解析图片内容)。

与 README 中的对照关系:

插件 覆盖 dsh-session-media
dsh-memory 事实记忆 不做
dsh-session-recall 高性能会话检索 不替代;本插件检索为关键词线性扫描,冷启动约 12 秒
本插件 附件检索 + 记忆自动注入 独占上述补位能力

若目标是高性能检索,README 建议安装 dsh-session-recall;若需要把会话里的图或文档捞出来,用本插件。

核心功能

自动记忆

每个工作区维护一份 Markdown,每轮对话注入系统提示(段名 plugin:memory,默认 order 210)。改文件后下一轮生效,无需重启 DSH(改插件源码则另见安装说明中的 HMR 限制)。

历史检索

跨所有会话搜索用户与模型双方说过的话:多关键词用空格分隔表示 AND,可选时间范围(工具参数 sinceDays)。仅关键词匹配,无语义/向量能力。

附件取出

针对某个会话列出图片/文档,给出本地原始路径;可通过 extractTo 把原始文件批量复制到指定目录。不处理图片内容本身,理解依赖模型自行读取路径上的文件。

提供的工具

工具 作用
session_search(keyword, limit?, sinceDays?) 跨会话检索
session_read(sessionId, maxChars?) 读取指定会话全文
session_media(sessionId?, kind?, sinceDays?, limit?, extractTo?) 列出附件;extractTo 可复制原始文件到目录
memory_doctor(top?, fix?) 体检索引版本、条数、体积、高频会话、附件统计与告警;fix 可清理并重建

安装与启用

本插件未走市场,需与 dsh-agent-picker 相同的手工接入方式。插件在 DSH 进程权限下运行,接入前请自行审阅源码与 MIT 许可证。

  1. 将插件目录放到本机任意路径,例如 C:\AgentTools\plugins\dsh-session-media。
  2. 在 profiles/web/package.json 的 dependencies 中增加(路径按本机实际修改):
"dsh-session-media": "file:C:/AgentTools/plugins/dsh-session-media"
  1. 在同一文件的 dsh.profile.bundles 数组末尾追加:
"dsh-session-media"
  1. 在 profiles/web 下执行:
pnpm install
  1. 重启 DSH Desktop。

说明:file: 依赖是拷贝而非软链;改完插件源码需重新 pnpm install,或直接覆盖 profiles/web/node_modules/dsh-session-media/index.js。HMR 不会替换已加载模块,改插件代码后必须重启。

运行环境:package.json 要求 Node.js >= 22.15.0。

配置

全部可选,默认零配置可用。

键 默认 含义
memoryDir 自动探测 记忆文件所在目录
files [] 显式指定记忆文件;空则使用 candidateFiles
candidateFiles ['环境笔记.md','MEMORY.md','CLAUDE.md'] 依次尝试
order 210 提示段顺序
maxChars 12000 注入上限;超出时保头 60% + 保尾 40% 截断
cacheMaxEntries 5000 索引缓存条数上限
cacheMaxChars 50000000 索引缓存字符上限
evictMinAgeDays 90 淘汰起始年龄门槛
evictFloorDays 14 门槛下限;降到此仍无解则不淘汰
saveIntervalMs 60000 索引落盘节流间隔(毫秒)

典型用法

在已启用插件的 DSH 会话中,由模型调用上述工具即可,例如:

  • 用 session_search 传入 "部署 失败" 等空格分隔的关键词,缩小到近期会话(sinceDays)。
  • 用 session_read 读完某次排查会话后再继续当前任务。
  • 用 session_media 指定 sessionId,必要时设置 extractTo 将附件导出到工作目录。
  • 索引异常或体积过大时,先 memory_doctor 查看统计,再视情况 memory_doctor 并 fix 重建。

仓库内自测(供开发者验证,非终端用户必做步骤):

node cismoke.mjs            # CI 冒烟,8 项,不依赖真实会话
node selftest.mjs           # 本机完整 17 项,含淘汰策略与媒体路径校验
node selftest.mjs --no-evict  # 跳过会临时改写索引的淘汰用例

selftest.mjs 需要本机已有会话存档;cismoke.mjs 适合 CI。

适用场景与注意

适合谁:需要在多会话、多轮协作中保留工作区级 Markdown 记忆,并偶尔按关键词翻旧对话、批量找回会话附件的 DSH 用户。

请务必知晓的限制(摘自 README):

  1. 检索仅为关键词,无向量语义检索。
  2. 依赖会话存档格式(session.v3/v4.jsonl.zstd,多帧 zstd 拼接);未知版本会跳过并告警,不会自动适配。
  3. 不提供图片内容理解,只提供路径。
  4. 不做脱敏;索引存会话原文,请确认工作区无敏感信息再使用。
  5. 界面与提示以中文为主。

DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文所述安装方式亦不代表官方应用商店一键安装。

结尾

dsh-session-media 在 DSH 里补的是会话档案层:工作区记忆注入、跨会话关键词检索、附件路径与批量导出。与 dsh-memory、dsh-session-recall 分工明确,可按需求组合安装。

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

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

Xiaoye