dsh 网页端项目级+全局长期记忆:分拆 POST /items 路由避免路径冲突,多轮工具调用上下文压缩后存入记忆项,去重与会话级持久化。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:qwert702/dsh-memory
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness 网页端长期记忆插件:项目记忆 + 全局记忆双库,自动提取、自动注入、小模型定期整理,外加一个 Obsidian 风格的记忆图谱。
兼容性:当前版本 2.1.0,适配 harness 0.2.0 / 0.2.0-rc.2(配置走
Config导出 +apply(ctx, config)、会话日志走snapshotEvents()、客户端坐席列属主包)。0.1.7 起 harness 已移除settings.register(),因此本插件不再有可热改的设置命名空间——配置写在 profile 的cordis.patch.yml里(见下)。
一键安装:
dsh plugin --profile web add <仓库或本地路径>例如本地路径:
dsh plugin --profile web add "D:\CBN-HT\Desktop\AI编程\dsh插件\dsh-memory(记忆插件)"装完重启 harness(dsh web)、刷新页面,会话头部「对话 / 轨迹」旁边会出现「记忆」标签页。
- 本地语义召回(可选增强) —— 安装可选依赖后自动启用
all-MiniLM-L6-v2本地嵌入(transformers.js 纯 WASM,无原生编译):提取/新增的记忆自动向量化存入 sidecar,注入时按"语义相似度 × 词面重合 × 重要性"融合排序——换说法也能召回。未安装依赖或模型下载失败时自动回退纯关键词检索,状态在 Tab 状态栏可见。国内网络可用embeddingRemoteHost配置 hf-mirror 镜像。 - 整理时自动建链 —— 每次整理对余弦相似度 ≥
autoLinkThreshold(默认 0.78)且尚无关联的活跃记忆对自动补 related 双向边(单次上限 30 条),图谱随使用自然生长。 - 记忆详情与溯源 —— 列表中点击任意记忆展开详情卡:完整内容、类型/标签、创建与更新时间、强化次数;关联记忆可点击跳转;「打开来源会话」一键跳回当初产生这条记忆的对话(0.2.0 下经 Workspace UI 的
openSession导航)。
功能
- 双作用域记忆库:
- 项目记忆 —— 按会话工作区(cwd 哈希)分库,只在该项目的会话中注入;
- 全局记忆 —— 跨项目共享,所有会话都注入。
- 存储为纯 JSON(
~/.dsh/memory/global.json+projects/<hash>.json,尊重$DSH_HOME),原子写入 + 跨进程文件锁(headless/web 多实例并发安全)。
- 相关性召回 —— host 维护每个会话最近用户输入的滚动缓冲;注入时按"与当前对话的相关度 × 重要性"排序,问什么补什么,而不是盲目补最重要的。
- 记忆 Tab(轨迹旁边的视图环插槽,纯增量、不替换任何原装组件):
- 列表视图 —— 一条一张卡片:类型色点、内容、标签、来源时间、强化次数、链接数;行内编辑(内容/类型/标签)、📌置顶、归档/恢复、删除;两步点击建链接(可选 related/supersedes/contradicts 关系);搜索过滤;显示已归档开关;撤销整理 / 导出 MD·JSON / 导入备份。
- 图谱视图 —— canvas 力导向图:节点=记忆(颜色=类型、半径=链接度)、边=关联;滚轮缩放、拖拽平移/拖节点、点选高亮邻域并显示详情卡;静止后渲染循环自动休眠。
- 自动注入 —— 监听
system-prompt/assemble瀑布,把 Top-K 记忆作为动态上下文追加进每个请求;置顶记忆保底携带;无 cwd 的组装只带全局;任何异常都原样放行 assembly,绝不影响请求。 - 自动提取(v2 协议) —— 监听
turn/end排队提取;提示词携带既有相关记忆,模型对每条候选标注add/update/supersede/contradict动作:更新合并到原条目、取代时旧条目归档并建 supersedes 链、冲突时双向 contradicts 链共存;字面近似去重兜底;子代理会话不参与提取;连续失败 3 次自动暂停——暂停提示依赖「记忆」Tab 处于打开状态(Tab 每 25 秒轮询状态,转为暂停的瞬间弹出一次全局通知);记忆语言跟随对话主语言(可强制 zh/en)。 - 定期整理 —— 每作用域累计 N 轮自动触发或手动触发:模型提 merge/link/archive/retag 操作流,host 校验后事务应用;过期记忆按 autoArchiveDays 启发式自动归档(不依赖模型);每次模型整理前自动快照,Tab 内一键「↩ 撤销整理」。
- 多种记录入口:
- 斜杠命令
/remember <一句话>(存入当前项目/全局库); - 每条 AI 回复旁的「✦ 记住」按钮(小模型提炼该消息要点入库)。
- 斜杠命令
小模型路由
辅助调用(提取/整理)走 harness 的 ctx.llm,凭据不出服务器:
- 配置里成对填写
extractProvider/extractModel(推荐配一个小模型); - 未配置时跟随会话自身路由的模型(与 dsh-context-compressor 同一约定);
- 都没有时报错并在状态栏提示。
配置(profile cordis.patch.yml)
0.2.0 的配置通道是包导出 Config schema + loader 调用 apply(ctx, config):插件没有设置面板、也没有可热改的命名空间,改动即「改文件 + 重载」。
在对应 profile 的 cordis.patch.yml(如 ~/.dsh/profiles/web/cordis.patch.yml)里按条目 id 覆盖,条目 id 由插件自带补丁 dsh-memory.yml 插入时固定为 ui-memory:
# profile patch 的 config 是「整体替换」语义:没写的字段由 Config schema 的
# 默认值补齐(插件侧再兜一层 DEFAULTS),所以只写想改的键即可。
- id: ui-memory
config:
enabled: true # 总开关(false 时所有管线与写路由停用)
injectEnabled: true # 自动注入开关
autoExtract: true # 自动提取开关
extractProvider: '' # 提取模型路由(成对填写;留空跟随会话模型)
extractModel: ''
manageProvider: '' # 管理/整理专用模型(成对填写;留空则用提取模型)
manageModel: ''
consolidateEveryTurns: 20 # 自动整理的提取轮次阈值(0 = 关闭自动整理)
topK: 8 # 注入条数上限
maxInjectChars: 1500 # 注入总字符帽
maxInputChars: 12000 # 提取回放字符上限
maxTokens: 1024 # 辅助调用输出预算
autoArchiveDays: 90 # 过期自动归档天数(0 = 关闭)
memoryLocale: '' # 记忆语言:空=跟随对话,或强制 zh/en
embeddingsEnabled: true # 本地语义嵌入开关(需可选依赖,见下)
embeddingRemoteHost: '' # HuggingFace 镜像(国内推荐 https://hf-mirror.com)
autoLinkThreshold: 0.78 # 整理时自动建链的余弦阈值(0 = 关闭)
模型分工:extract* 管高频的自动提取与「记住这条」提炼;manage* 管低频的记忆整理/归档。manage* 留空时回落到 extract*,再留空则跟随会话模型。典型用法:提取用便宜快的小模型,整理用更强的模型。
启用语义召回(可选):让插件安装目录能解析到 @huggingface/transformers(在插件目录或 profile 的 node_modules 里 npm i @huggingface/transformers),重启后首次使用自动下载 ~23MB 量化模型(国内可配 embeddingRemoteHost: 'https://hf-mirror.com' 加速)。注意 0.2.0 桌面版自带的 asar 不再内置 transformers.js:装不上就自动回退关键词检索(/status 的 embeddings.state 会显示 unavailable),其余功能不受影响。
旧版本的
~/.dsh/settings.yaml命名空间写法在 0.1.7+ 已失效;若曾配置过,请按上表搬进 profile patch。
工作原理
turn/end ──▶ 提取队列 ──▶ 回放新增事件(snapshotEvents)──▶ 小模型出 JSON ──▶ 去重 ──▶ 写库
│
累计 N 轮 ─┴──▶ 整理队列 ──▶ 小模型出 ops ──▶ 校验+应用
任何请求 ──▶ system-prompt/assemble 瀑布 ──▶ 选 Top-K ──▶ 追加 <memory-briefing> 上下文
浏览器「记忆」Tab ──▶ /api/dsh-memory/*(items/add/update/remove/link/unlink/graph/consolidate/extract/undo/export/import/distill/embed/status,共 15 条)
配置 ──▶ profile cordis.patch.yml 的 ui-memory.config ──▶ Config schema 校验 ──▶ apply(ctx, config)
- 配置通道:包导出
Config(schemastery schema,符合 Standard Schema)→ loader 校验 profile 条目config→apply(ctx, config);插件把结果与内置DEFAULTS合并后固定使用(无热更新)。 - 会话读取:0.2.0 的
Session去掉了events取值器,插件统一走snapshotEvents()(不可变快照),deriveEventMessage()/requestHeader()/session.header契约不变。 - 机器流量识别:
user/message的来源source在 0.2.0 不再有统一{kind:'plugin'},改为生产者自报 kind。插件同时识别{kind:'plugin', plugin:'dsh-commander'}(0.1.x 旧拼写)与{kind:'dsh-commander'}(0.2.0 新拼写);辅助调用自建消息使用{kind:'dsh-memory'}。
仓库布局
lib/index.js— host 半区:Config导出 +apply(ctx, config)+ 监听器(注入/提取)+ 整理管线 + 15 条路由。lib/store.js— 双作用域 JSON 库(缓存 + 每文件串行锁 + 原子写)与持久化游标/计数。lib/util.js— 纯函数:作用域键、相似度、简报挑选、模型输出解析、回放构建、来源分类。lib/embeddings.js— 可选本地嵌入(transformers.js WASM):向量 sidecar 读写与串行推理队列。lib/client.js— 浏览器半区(手写 bundle):conversation.view增量条目(列表 + 图谱)+ 消息级「记住」动作 + 全局 toast。test/smoke.cjs—node test/smoke.cjs:Config 契约、纯函数断言、路由注册、注入监听器、提取/整理管线(临时 DSH_HOME 隔离)、client 注册、导航与 SSR。test/e2e-flow.cjs— 六阶段端到端业务流(node test/e2e-flow.cjs),同样用apply(ctx, config)装配真实插件。
已知限制
- 配置不可热更新:0.1.7+ 移除了
settings.register(),没有等价的热改通道——改配置必须改 profile patch 并重载;插件也没有设置面板(原「网页设置界面自动生成」能力随该 API 一并消失)。 - 同步日志读取被官方标记为弃用:
Session.snapshotEvents()在 0.2.0 仍可用且语义等价于旧的session.events(注释标注「新代码不建议使用」,替代方案是异步的会话查询服务)。本插件用它构建提取回放;若未来版本删除该方法,需要改注入sessionQuery一类服务读取日志。 - 客户端导航依赖 Workspace UI:0.2.0 删除了
sessions.open(),「打开来源会话」改调uiWorkspace.openSession();该服务缺席时按钮静默失效(不影响其他功能)。 - 相关性召回以 recent 缓冲中最近人类输入(约末尾 2000 字符)近似当前话题,长上下文的回指与远距离主题召回有限;靠 topK + 字符帽控制体量。
- 自动整理需要可用的模型路由;未配置且会话未路由过时会失败并提示。
- 本地语义嵌入需要环境能解析
@huggingface/transformers(0.2.0 桌面 asar 不再内置),否则自动回退关键词检索。 - 图谱布局为简单力导向(无社区着色等高级特性),数百节点内流畅。
- Windows 下项目键对路径做了大小写折叠,跨平台共享同一目录视为同一项目。
License
MIT
链接
同类插件
vectorize-io/hindsight#coding-agents★ 54464
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 40976
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
MemTensor/MemOS#memos-local-plugin★ 12136
DeepSeek Harness 本地记忆插件:分层 L1/L2/L3 记忆,自动沉淀与手动 memos_* 检索工具并存,内置记忆浏览器。
agentscope-ai/ReMe#dsh★ 3702
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2802
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1321
读取本机上其他四十二个编程智能体已经写下的会话文件(Claude Code、Codex、Cursor、VS Code Copilot Chat、opencode、OpenClaw、Hermes、Kimi、Cline、Zed 等),包括安装之前的历史:提供 deja_recall、deja_session、deja_blame、deja_fix、deja_how、deja_remember 六个工具与 /deja 命令,并可选地把召回结果加入运行时上下文。本地 BM25 索引,不用大模型,不用向量嵌入,不联网(dsh plugin --profile web add dsh-deja)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。