AllDSH
EN

Memento

PerryLink · PerryLink/dsh-memento

为 DeepSeek Harness 提供的跨会话记忆:有界、分层、写入需审批,配一个本地 SQLite provider。

Memento 是 PerryLink 开发的 DSH 插件,为 DeepSeek Harness 提供的跨会话记忆:有界、分层、写入需审批,配一个本地 SQLite provider。收录于记忆与上下文,适合记忆与上下文。验证等级 L3(安装命令可解析),安全扫描尚未完成,兼容目标是 DeepSeek Harness 0.1.2-rc.1 || 0.1.5-rc.2,条目最后核查于 2026-09-18,采用 Apache-2.0 许可。安装命令:dsh plugin --profile web add dsh-memento

本条目由 赤榆 核查,数据更新于 · 引用规则

L3active
Memento 验证面板:验证等级 L3(共 5 级)——安装命令可解析,已声明 DSH 目标版本。安全扫描:未验证(未运行扫描)。兼容目标:DeepSeek Harness 0.1.2-rc.1 || 0.1.5-rc.2。许可:Apache-2.0。GitHub 星标:102。条目最后核查 2026-09-18。
Memento 的验证面板。该条目处于 5 级验证中的 L3 级:安装命令可解析,已声明 DSH 目标版本。安全扫描:未验证(未运行扫描);兼容目标:DeepSeek Harness 0.1.2-rc.1 || 0.1.5-rc.2;许可:Apache-2.0;条目最后核查于 2026-09-18。 验证规则说明

实际使用截图

本站截图:插件跑在一次性 DeepSeek Harness 里、任务跑在自动生成的演示项目上,不是你的机器,也不是作者提供的图。点击任意一张可看大图。

Memento — 安装并启用后的样子:「设置 → 插件 → 插件列表」中展开的条目,含完整包名、配置状态与运行状态。
安装并启用后的样子:「设置 → 插件 → 插件列表」中展开的条目,含完整包名、配置状态与运行状态。
Memento — 真实会话说一轮短任务后的样子,任务跑在自动生成的演示项目上。
真实会话说一轮短任务后的样子,任务跑在自动生成的演示项目上。

由 AllDSH 于 2026-09-19 在 DSH 0.1.5-rc.1 上截取,视口 1920×1080,包版本 dsh-memento@^0.5.12。

安装命令

dsh plugin --profile web add dsh-memento

需要先启动 harness:npx @deepseek-ai/dsh web,然后执行上面的命令。第一次用?先看安装教程。

它到底是什么

发布的包名是 dsh-memento,版本 0.5.12,Apache-2.0 许可,作者 PerryLink。README 把它定位成「a capability seam, not another memory warehouse」——不是另建一座记忆仓库,而是提供一个带类型的 ctx.memory 服务、一个本地 SQLite provider,以及这个服务的消费方:memory 工具,和一段注入系统提示的冻结快照。包里发布的是构建产物加文档与测试:index.mjs、lib/、client/、bin/、cordis.patch.yml、五种语言的 README、协议/适配器/上游提案三份文档、JSON Schema 目录,以及一致性测试用例集。

关于「seam」这个词,有一点必须先说清楚。Harness 目前并没有官方的 ctx.memory;README 自称这个插件是「the community rehearsal of the DSH memory protocol — a candidate shape for an official ctx.memory seam」,也就是在为一个尚未存在的官方接口做社区预演,并把自身当作提案论据。所以这个服务是真实可用的,别的插件也能通过本插件自己的 ctx.memoryAdapters 注册表与它对话;但如果你把「建立在 Harness 自身记忆能力之上」理解成「Harness 本来就有这个能力、本插件只是消费它」,那并不是源码的说法。它真正给你的是:一份带 JSON Schema、迁移规则和可分发一致性测试套件的公开契约,而不是只有这个插件看得懂的私有表结构。

它提供什么

  • 两个工具。 memory 支持 add / replace / remove / consolidate / query,并带 Save/Skip 引导;memory_recall 返回有界的记忆命中,外加近期会话历史中的匹配。
  • 一条 /memory 命令,含 list、query、add、remove、consolidate、proposals、budgets、audit、export、import <path>、adapters。
  • 一个只读网页面板——客户端抽屉,带可隐藏的浮动入口按钮,可浏览条目、搜索、看预算条与审计尾部。
  • 设置侧栏中的一个分区,除 enabled 外每个字段都能在 DSH 设置页里直接改,不必碰文件;README 在页面上标出哪些即时生效、哪些需要重载,只有 snapshotOrder 属于后者。
  • 一个只读 MCP server(dsh-memento-mcp),让 Claude、Codex 等外部 MCP 客户端在不需要 Harness 的情况下经 stdio JSON-RPC 检索记忆库。它以 readOnly: true 打开数据库,不做迁移,数据库不存在时返回空结果而不是崩溃。
  • 适配器注册表。 ctx.memoryAdapters 允许第三方记忆插件注册可逆的数据转换器,内置三个:mem0 事实集合、Hermes 的 memory.md、CLAUDE.md 风格的 markdown。README 明确写着适配器只做转换、不做抽取——原始的 messages 数组会被拒绝,而不是被摘要。

「有界」是机制,不是形容词

边界按轨道、按层设,单位是字符,并且在服务内部强制执行:budgets.user.userGlobal 与 budgets.user.workspace 默认各 2000,budgets.agent.userGlobal 与 budgets.agent.workspace 默认各 4000。写满时以结构化错误返回用量与上限——README 的说法是「never truncated, never auto-compacted」,绝不截断、绝不自动压缩。这就是全部的边界:源码中不存在按时间的过期机制,也没有条目数上限。真正存在的数字上限都是「每次调用」或「每屏渲染」的限额,而非存储上限——maxEntriesPerQuery(默认 20,硬顶 1000)、commandListLimit(50)、panelEntriesLimit(200)、recall.snippetCap(5)、recall.snippetChars(300);而 auditRetentionDays 默认 0,意思是审计行永久保留。

分层与审批:审批到底审什么

层模型是「两轨 × 两层 × 按 agent 键」。user 轨存关于用户的事实,agent 轨存环境事实与约定;每轨再分成 user-global 与 workspace 两层,并按 agentPreset 隔离,其中 workspace 层以会话工作目录为键(Windows 上大小写不敏感)。所以「分层」指的是作用域与各自独立的预算,而不是多套存储引擎。

审批是源码写得最具体的一处,也正是宣传语需要收敛的一处。所有写入路径——add、replace、remove、seed——都被强制走服务内部的审批 waterfall,而不是工具层,README 把这一点称作从 Hermes 学到的教训:「a gate enforced only in the tool layer is bypassable by late tool injection」,只在工具层设卡可以被后置的工具注入绕开。replace、remove、consolidate 会把被改条目的完整文本放进审批载荷,也就是所见即所批;被拒绝的写入同样会留下一条 *-denied 审计记录。

但审批不是强制的,README 也没有假装它是。writePolicy 默认 ask,可设为 auto 或 off,并被描述为模型不可见的配置。另外,当没有 UI 或 ACP 应答方接入时,ask 会 fail closed——写入直接失败,而不是放行。所以这句话的硬核部分应当读作「没有哪条模型路径能绕过服务里的关卡」,而不是「每一次写入都由人批准」。

召回与冻结快照

层决定库里有什么,召回决定模型看到什么。快照是这个服务的第二个消费方:一段注入系统提示的章节,位置由 snapshotOrder 决定(默认 −50,即排在 harness 身份之后、persona 之前)。它在会话首次组装提示时冻结一次,会话中途不再变化。README 更进一步的表述是「model-visible ⟺ logged」:注入的快照原样落在 system/message 中,因此会话日志里能看到模型当时究竟拿到了什么。这就是它所提供的确定性——同一个会话不会在中途被悄悄换成另一版记忆,日志里的记忆文本也不是转述。

memory_recall 比名字听起来要窄:它扫描会话历史(默认 8 个会话),每个会话取 5 个片段、每段 300 字符,时间窗默认 30 天,在此之上才叠加有界的记忆命中。语义召回默认关闭;打开 retrieval.vector 后,只有当「an embedding provider is available」时才启用向量召回,而 README 直接说明它用的是 fake hash embedding,否则退化为子串匹配。子串匹配走大小写不敏感的 instr 而不是 FTS5,README 说这是有意为之,且对 CJK 是正确的选择。

运行要求与数据落点

  • Node:^22.19.0 || >=24.0.0,engines 与 README 的兼容性表一致。
  • Harness:README 以 DeepSeek Harness dsh-v0.1.5-rc.2 为验证对象(2026-09-09 适配,2026-09-11 在 rc.2 master checkout 上验证完整审批链与 profile 安装冒烟)。workshop 清单声明的兼容版本是 ["0.1.2-rc.1", "0.1.5-rc.2"]。peer 依赖把 @deepseek-ai/cordis 钉在 ^4.0.2、@deepseek-ai/schemastery 钉在 ^3.18.2,dsh-session、dsh-settings、dsh-tools 则是 >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0。
  • 原生模块:没有。README 称其为「pure host; no native code, no network」,而 lib/ 零 DSH 依赖,只用 node: 内置模块。
  • 外部服务:没有。可选的设置面板需要挂载 DSH 设置服务;没有它时一切回落到 cordis 组合配置。
  • 平台:Windows / macOS / Linux。host 半是纯 Node;可选的 client 半声明为 web 平台、immediately: true。

Provider 是本地 SQLite(node:sqlite,WAL 模式),默认落在 $DSH_HOME/dsh-memento/memory.db,可用 dbPath 覆盖(绝对路径,或相对 $DSH_HOME 的路径;README 提到 Windows 上会回退到 ~/.dsh)。文件权限 0600。README 列出的权限声明是 harness:tool、filesystem:read、filesystem:write,以及 network:none / subprocess:none / shell:none / python:none / credentials:none——本地数据库、零网络、零凭证。源码中没有任何一处说这个插件会把记忆发往别处。

作用域是按 home 目录而不是按项目:一个库里装着所有轨道与层,多个会话共享它,README 还警告两个进程共用同一个 $DSH_HOME 时会写同一个文件,在 SQLite 锁下是后写覆盖。查看靠 /memory list、query、budgets、audit 与网页面板;/memory export 导出,import <path> 经审批把关的 seed 路径写回。删除是手动动作:卸载插件会保留数据库与会话日志。

已知限制(源码自己列的)

  • 会话事件只声明、未发事件(rc.2 现状)。memory/added|updated|removed|recalled|snapshot 已合并声明,但 rc.2 没有为仓库外事件类型提供注册面;要等 Harness 构建注册之后才会真正发出。
  • ask 策略需要应答方。 没有 UI 或 ACP 应答方时,写入 fail closed。
  • 没有 FTS5 索引。 子串检索跑在大小写不敏感的 instr 上,对 CJK 正确,但它不是全文索引。
  • schema 稳定性。 协议带有带强制版本校验的迁移规则,README 自己的建议是:依赖快照格式时请固定版本。请把存储契约当成仍在移动的东西。
  • 被刻意拒绝的做法:向模型私有状态做隐藏的自动摘要——压缩摘要在这里变成等待人工通过或驳回的 pending proposal;同时也拒绝了仓库化与向量库野心,以及任何缺少人类可见审批或审计轨迹的写入。
  • 不是跑分。 两份来源都没有给出准确率、召回率或质量测评,本条目也不作此类声称。

什么时候用它、什么时候不要用

如果你想跨会话记住东西,同时又要求记忆是可读的——条目能列出、能导出、能审计、有预算,写满时明确报错而不是悄悄截断,而且事后能在会话日志里逐字找到当时注入的内容——那它合适。它更适合在意「模型被告知了什么」的人,而不是在意检索有多聪明的人。

如果你期待的是一个知识引擎,那就别用它。它没有向量库、没有图结构、没有衰减、除协议里的幂等条件写入之外没有去重,也没有 FTS5。README 自己写得很直白:「no retrieval engineering: small-corpus substring search」——不做检索工程,只做小语料子串搜索。语料大、召回需求偏语义的话,这里的诚实默认就是子串扫描,外加一条可选的 fake-hash 嵌入路径。

与同目录另一款记忆插件 dsh-mnemon 的区别。 两者不是同一件事的两个变体。Mnemon 是一个要装在宿主机上的独立 Go 二进制(~/.mnemon,四图知识存储、意图感知召回、重要度衰减、自动去重、可选接入 Ollama 或 OpenAI 兼容嵌入服务),而 dsh-mnemon 是把 DSH 运行时记忆、受管项目文档与 Mnemon 的记忆空间叠成受监督三层体系的 DSH 插件。dsh-memento 不需要宿主二进制,也不需要外部嵌入服务:它是一个 DSH 插件,对外提供带类型的记忆服务与本地 SQLite 存储,差异点在于审批关卡、审计可复原,以及按轨道×层强制的预算,而不是检索质量。它自己的 README 也是这个口径——对照 dsh-mnemon 时,它声称的是「protocol + gate + audit, not another store」(协议+关卡+审计,而不是又一座仓库)。另一个实际差别是:dsh-memento 额外把同一份存储以只读方式开放给外部 MCP 客户端。

安装形态。 dshWorkshop 描述的是事务型 profile-bundle 安装:失败时按 generation 回滚,激活方式是热重载,支持 dispose,并声明激活前不改动当前 profile。任何直接读取该数据库的工具,都应当照抄内置 MCP server 的只读姿态,而不是去写它。README 还提醒忽略两个旧名:它叫 dsh-memento,不叫 dsh-recall(容易与 dsh-external/Recall 混淆),也不是那个已被删除的旧名 dsh-memory。

FAQ

每次写入记忆都必须人工批准吗?

不是,厂商也没有这样声称。默认策略是 ask,但 writePolicy 可以设为 auto 或 off,还能通过 writePolicies 做按轨道/作用域或按来源的覆盖。改不掉的是关卡所在的位置:四条写入路径都被强制走服务内部的审批 waterfall,而不是工具层,所以没有模型路径能绕开它。另外注意,没有应答方时 ask 会 fail closed。

记忆内容会离开我的机器吗?

插件声明 network:none,README 写着零网络、零凭证,全部存在本地 0600 的 SQLite 文件里。但两份来源都没有声称这些记忆是私密的或加密的。有一个推断需要你自己下,源码并没有说:注入的快照会原样落在 system/message,也就是说记忆内容是发往当前会话所用模型的内容的一部分——如果那个模型在远端,内容就随之外发。

我存了什么,怎么看、怎么删?

查看用 /memory list、query、budgets、audit,网页面板可只读浏览条目,导出与写回用 /memory export 与 import <path>。源码没有记载「一键清空」的开关。卸载插件会保留数据库与会话日志,所以删除是文件系统上的手动操作。

这个存储格式稳定到可以依赖吗?

协议带有强制版本校验的迁移规则,而插件自己的建议是:依赖快照或存储格式时请固定版本。请把 0.5.12 当成一个需要钉住、而不是随手升级的版本。

会话日志里哪里能看到记忆?

README 的表述是「model-visible ⟺ logged」:快照原样落在 system/message,每一次写入都可以由 approval/asked 加 approval/decided 这对事件,加上插件自己的审计表复原。被拒绝的写入同样留下一条 *-denied 审计记录。

来源与参考

本页的技术判断建立在以下第一手资料之上,链接可直接追溯核对。

  1. [1]PerryLink/dsh-memento — GitHub插件自身的仓库与 README——本条目的每一项论断都以这份第一手文档逐条核对。
  2. [2]dsh-memento on npm — npm本页安装命令实际解析到的已发布包。
  3. [3]deepseek-ai/deepseek-harness — GitHubDeepSeek Harness、Cordis 运行时与插件加载模型的上游仓库。
  4. [4]@deepseek-ai/dsh on npm — npm已发布的 harness 包,也是本站 dshTarget 字段跟踪的版本来源。
  5. [5]dsh-plugin GitHub topic — GitHub本站用于发现收录插件的检索入口。

全部链接最后核验于 2026-09-11

关于本条目的问题

Memento 安全吗?可以安装吗?
Memento 当前的验证等级是 5 级中的 L3 级(安装命令可解析,已声明 DSH 目标版本),安全状态为「未验证(未运行扫描)」。验证等级记录的是安装路径被核查到什么程度,它本身不是安全保证:是否安全取决于插件实际能碰到什么。安装前请阅读源码与安装脚本,确认它对文件、shell、网络和凭证的访问范围。
Memento 兼容哪个 DeepSeek Harness 版本?
Memento 声明 dshTarget 为 0.1.2-rc.1 || 0.1.5-rc.2,即本站核查这条目时所对应的 DeepSeek Harness 版本。dshTarget 是插件作者声明的兼容目标,它只说明该版本被核查过,并不保证上游发布新版本后插件仍然可用。升级 harness 前请先在隔离的 profile 中试装。
Memento 怎么安装?
先用 npx @deepseek-ai/dsh web 启动 harness,然后复制页面顶部的安装命令。该命令由仓库发布的包名(或条目声明的安装 spec)生成,因此不会与仓库实际发布的内容脱节。本条目最后核查于 2026-09-18。
每次写入记忆都必须人工批准吗?
不是,厂商也没有这样声称。默认策略是 ask,但 writePolicy 可以设为 auto 或 off,还能通过 writePolicies 做按轨道/作用域或按来源的覆盖。改不掉的是关卡所在的位置:四条写入路径都被强制走服务内部的审批 waterfall,而不是工具层,所以没有模型路径能绕开它。另外注意,没有应答方时 ask 会 fail closed。
记忆内容会离开我的机器吗?
插件声明 network:none,README 写着零网络、零凭证,全部存在本地 0600 的 SQLite 文件里。但两份来源都没有声称这些记忆是私密的或加密的。有一个推断需要你自己下,源码并没有说:注入的快照会原样落在 system/message,也就是说记忆内容是发往当前会话所用模型的内容的一部分——如果那个模型在远端,内容就随之外发。
我存了什么,怎么看、怎么删?
查看用 /memory list、query、budgets、audit,网页面板可只读浏览条目,导出与写回用 /memory export 与 import <path>。源码没有记载「一键清空」的开关。卸载插件会保留数据库与会话日志,所以删除是文件系统上的手动操作。
这个存储格式稳定到可以依赖吗?
协议带有强制版本校验的迁移规则,而插件自己的建议是:依赖快照或存储格式时请固定版本。请把 0.5.12 当成一个需要钉住、而不是随手升级的版本。
会话日志里哪里能看到记忆?
README 的表述是「model-visible ⟺ logged」:快照原样落在 system/message,每一次写入都可以由 approval/asked 加 approval/decided 这对事件,加上插件自己的审计表复原。被拒绝的写入同样留下一条 *-denied 审计记录。

相似的 DSH 插件

查看全部

由浏览器自己弹出的「一轮结束」通知——零配置、不新增工具、不耗 token,并用「按结束原因」与关键词规则把噪声压下去。

L2
83 JavaScript

在 DSH Web GUI 中用文生图、图生图与无限画布生成图像,生图渠道由你自己配置。

L2
78 TypeScript

deja-vu

vshulcz

本机的跨 agent 会话记忆:把磁盘上已有的编码 agent 历史建成索引,召回进 DSH,不依赖 LLM。

L3
829 Go

Graph Memory

adoresever

DSH 记忆插件:保留最近若干轮对话,把更早的内容归档,并从本地 SQLite 图谱按需召回带原始出处的问答。

L2
626 TypeScript

Mnemon

mnemon-dev

编辑推荐

由 LLM 监督的持久记忆:图谱召回、跨会话记忆库,引擎是单个原生二进制。

L2
587 Go

dsh-mnemon

omdsh-dev

可组合的三层记忆:运行时上下文、可检索的项目文档,以及建立在可插拔 Provider 之上的长期记忆空间。

L2
384 TypeScript
ESC

输入关键词搜索索引,索引由 Pagefind 在部署时生成。