v0.3.0 把原有三层系统提升为可组合记忆内核,同时保持一个安装包、默认三层行为、公开工具与现有数据格式兼容。Runtime、Documents、Memory Spaces 现在是三个可启停 Layer;现有路由由 default-three-tier Strategy 表达,Provider 构造通过 Registry/Factory 解耦。
| 读者 | 行动 |
|---|---|
| 已有用户 | 备份、更新、重启并核对三个默认 Layer;无需迁移数据,也无需新增 View 操作 |
| 新用户 | 第一次走通流程时保持三个默认 Layer 全部开启 |
| 运维者 | 切换范围、Layer 或扩展后,检查设置保存结果与状态页 generation |
| 扩展作者 | 只从 dsh-mnemon/* 公共子路径导入,并通过 mnemonMemory / MemoryBoot 注册 contribution |
- 新增 wire-safe Contracts、
MemoryCatalog、原子MemoryTopologyManager、MemoryKernel、Guard、MemoryPlan与MemoryReceipt。 - Catalog、Topology 和 Guard 分别带代际边界;组件或 Guard 变化后,旧 Plan 在执行前被拒绝并要求重新规划;已接受的 Plan 会被原子 claim 一次,顺序或并发重放都不能重复数据面步骤。
- 普通设置面只为每个 Layer 提供一个总开关。开启表示允许默认策略按需使用,不会强制 Recall;关闭同时停止上下文、模型工具、后台处理和数据面 Web/RPC。
- Kernel 内部继续区分能力与触发来源并执行 Guard;这些约束属于权威控制面,不作为 v0.3 普通用户的细粒度配置项。
- 新增
MemoryBoot与 CordismnemonMemory服务(MemoryExtensionHost保留为 v0.3 预发布别名)。扩展可以在 Host 挂载前或运行中贡献 Layer、Adapter、Strategy、Guard 与MemorySource;热卸载推动新 generation,Source readiness 以事务方式验证。 - 设置页通过
memory-systemRPC 读取实时描述符并动态渲染 Layer,不再依赖固定前端枚举。新发现 Layer 默认关闭;保存只写变化 Layer 的enabled布尔值。 - 新增 Strategy manifest、权限边界和 deterministic replay 原语,为后续模型生成策略的 shadow/canary/回退流程建立制品接口。
- 源码拆为多个 private workspace,但 npm 仍只发布
dsh-mnemon,并新增contracts、kernel、extension-sdk、provider-sdk、strategy-sdk、默认 Layer/Strategy 等子路径。 - Root Agent 的每个用户回合固定一个不可变、轻量的
MemoryTurnView。有界Wake完整保留 Runtime 投影,并只提供 Documents 与 Memory Spaces 的数量封面;同一回合的每个模型 step 使用相同 Source revision/digest。完整 Document 与 Memory Space ID 集合留在 Host,不受 Wake 预算截断。 - Recall 与 related 读取从 root 回合派生权限(child agent 沿
parentSession),根据 Host 固定状态校验可选 Memory Space ID,然后直接调用MnemonService。模型侧没有 View/node ID、Zoom、View capability、完整目录或已选 ID 回显,也没有第二个 Recall LLM。Recall 仍由 LLM 驱动:普通回合是 0 次 Provider 查询;首次查询后,只有 LLM 判断 evidence 不足时,才可显式提交一个实质不同的精炼查询。同查询重放,第三个查询不能到达 Provider,也不创建 child Agent。两次共享至多 6 条、每条 1,200 字符、总正文 4,800 字符的 envelope,首次准入会为恢复路径预留容量;随后另可进行一次独立有界的 Related。模型侧不暴露容易误判的语义过滤器,并丢弃低相关项、限制 medium/unknown evidence。 - 已授权的 Mnemon Native smart search 如果在质量筛选后丢失结构化精确锚点,或聚焦查询缺少足够词面覆盖,会执行一次有界本地 keyword 恢复。恢复结果先按阈值校验、去重并排在泛化结果之前,再经过同一质量策略与输出 envelope;不会重复请求远程 Provider,也不改变 Recall 调度或模型调用次数。两次由 LLM 选择的查询各自保留一个有界 medium/unknown 准入槽,使精炼保持有效,但不会放宽共享的 6 条/4,800 字符 envelope。
- 模型侧 Document search、Memory Space catalog 和 status 各自具有硬上限。同一 root 回合的 root、child 与并行调用共享一个 Documents 搜索槽,后续调用只返回简短的未执行提示,不再访问磁盘。Document search 使用有界汉字双字 token,使自然中文查询能够命中相关段落,而不会退化为一个无法匹配的整句 token;聚焦查询同时要求最低 token 覆盖,以过滤偶然的局部重叠。完整记录、Provider 设置、文件路径、详细统计和未启用 Provider 行继续留在 Web/RPC 控制面,不再累积到对话历史。
- Runtime 写入继续支持本回合新提供的事实和显式保存/纠正请求;但纯读取问题不会把 Documents、Recall 或 Related 返回的证据复制、提升或摘要进热记忆,除非用户明确要求进行这种提升。
- 兼容 Controller 与 Provider 的成功 Authority mutation 统一生成
MemoryReceipt,回执在回合边界合并,使下一个回合重新快照 TurnView;当前回合保持不可变。 - MEMORY.md 容量维护只让无工具 planner 规划路由和压缩候选。Host 把目标限制为已有、active、可写的 Space,逐条精确写入原始 entry,验证 committed receipt 或完全一致的 Recall evidence,最后把 compaction 与原 add/replace/remove 作为一次 revision-bound 本地提交。待提交或正被 replace/remove 的 entry 不会作为旧来源归档;coverage、字节预算或 revision 任一无效都保留 Runtime 并失败关闭。
- 后台审查先经过确定性的 dirty-candidate 和当前轮 no-memory admission。达到 activity 门槛但没有持久化信号的普通对话不会启动 child;简短 recall/writeback cue 每个会话至多出现一次。
以下结果固定于 2026-08-24 的产品候选 6066aa796326a98575e142d68883b11b09d38f13;它与身份整理前实际运行评测的 95a4a450e62098614cbb443d12f6d675f5e75402 具有完全相同的文件树。正式基线为 dsh-mnemon@0.2.16 / e5aae00797772bee34f414820b545d21391b84c7,运行于 DSH 0.1.1-rc.2,真实模型为 deepseek-v4-flash。行为门禁属于发布证据;真实 Provider 的 token 与延迟变化是该环境下的观测结果,不是跨模型、网络和硬件的 SLA。
- 最终 v0.3 完整场景 27/27 完成。额外的两组稳定 Recall 门禁各运行 20 个全新隔离 session,语义与工具策略合计 40/40;没有 Runtime/Documents/Memory Space 写入,没有为 Recall 预取 Memory Space Catalog,也没有 child Agent。
- Recall 仍由 LLM 决定是否调用:无须持久历史的 steady-state 为 16/16 且 0 次 memory tool;误导措辞组仅 1/20 由 LLM 发起一次实质不同的 refinement,第三个 query 仍受 Host 上限阻止。
| 场景 | 正确性 | v0.2.16 → v0.3 token 中位 | 用户 wall 中位 | 调度变化 |
|---|---|---|---|---|
| Autonomous Recall | 10/10 → 10/10 | 279,077 → 99,736(-64.26%) | 86.95s → 14.87s(-82.90%) | child 13 → 0 |
| Isolated Recall | 5/5 → 5/5 | 119,352 → 22,609(-81.06%) | 47.68s → 8.59s(-81.99%) | child 9 → 0 |
| Capacity maintenance | baseline 完成 2/2;v0.3 3/3 | 137,879 → 37,275(-72.97%) | 58.88s → 28.27s(-51.98%) | child 5 → 1 |
| Steady-state | 16/16 → 16/16 | 85,650 → 84,741(-1.06%) | 8.39s → 8.38s | 两版均 0 memory tool |
| 上下文与检索 | v0.2.16 | v0.3.0 | 判读 |
|---|---|---|---|
| realistic corpus 首请求 | 10,198 tokens | 10,167 tokens | 固定上下文没有新增 token 税 |
| 80 Documents + 80 Spaces 首请求 | 10,200 tokens | 10,169 tokens;Wake 4,158 字符 | 标题、ID、描述和正文不随目录规模进入 Prompt |
| direct retrieval hit@1 | 41/60 | 60/60 | 长尾命中改善 |
| direct retrieval hit@6 | 45/60 | 60/60 | v0.3 的 60 个 expected 查询全部命中 |
| result 正文中位 | 304 字符 | 304 字符 | 没有通过扩大结果正文换取命中率 |
| 本地检索 P95 | 43.22ms | 62.73ms | 增加 19.51ms,是有界本地恢复的明确代价 |
双向 canonical data 验证为 4/4,不需要迁移。另有 20 个 absent 查询,两版都可能返回候选,因此非空结果不能被当作事实存在证明。
上表是本次冻结结果的公开发布记录。公开的评测 Harness 说明记录场景、方法、安全边界与复跑命令;每次运行会把机器可读指标写入指定输出目录。原始 Provider trace、request/session event 与本机路径刻意不提交;理解公开结论或复跑 Harness 不依赖任何私有工程归档。
从 v0.2.16 升级不需要迁移数据。Runtime JSON/Markdown、Documents、Memory Space registry、Provider service registry、Mnemon Native Store 与远程 Provider 数据格式均未改变。
TurnView、Source 权限、Turn pin 和待发布 Receipt 是 Host 运行态,不写入上述用户数据格式。现有设置、命令、RPC、WebUI 和用户操作流程不要求理解或手动管理 View;Recall 会自动使用固定的 Source 状态,不新增交互。
未配置 memoryTopology 时自动得到与旧版本等价的三层默认拓扑:三个 Layer 均启用,内部使用固定兼容策略。已有 storageScope、dataDir、Provider、召回质量、生命周期、工具和界面设置继续生效。
建议升级步骤:
- 按现有流程备份当前 Mnemon root 或导出 Mnemon Pack;
- 更新
dsh-mnemon并重启每个使用它的 DSH profile; - 在设置 → 记忆系统 → 记忆层确认三个默认 Layer;
- 在状态检查 Catalog/Topology generation 和 Provider;
- 分别打开三个 Sidebar Tab,并用一轮对话确认 Runtime 注入与按需 Recall。
enabled=false 只停止参与,不会删除或迁移数据。Sidebar Tab 保留并显示“已关闭”;重新启用会使用原目录。降级到 v0.2.16 前建议备份,并从 YAML 移除只对 v0.3.0 有意义的 Layer 开关;本版本没有改变持久数据,因此包级回退不需要反向数据迁移。v0.2.x 会忽略这些开关并恢复旧版硬编码参与行为,但 canonical data 仍可读取。
- 只从
dsh-mnemon/*公共子路径导入,不依赖仓库内src/或packages/路径。 - 把组件注册交给
mnemonMemory.register()返回的 disposer;不要维护进程外的第二个 Catalog。 - 为每个参与自动投影的扩展 Layer 提供
MemorySource。只有必须进入每轮 Wake 且本身有界的文本才使用eager;较大记忆使用routed,只提供有界封面与 Host-only 路由状态。 - Strategy 只提出 JSON-safe steps,不持有数据面句柄;使用 manifest 限权,并用 replay 覆盖禁用层、自动/手动、预算与越权案例。
- executor 尊重
AbortSignal,让 Kernel 生成succeeded、partial、failed或cancelled回执。 - 收到 stale-plan 错误后重新规划,不要重放旧步骤。
仓库内原有 src/memory-system/* 只作为源码兼容 facade;第三方应使用 npm 子路径。
- Guard 只能拒绝,Strategy 无法放宽 Host 或参与模式;Guard 集合变化会使旧 Plan 失效。
- Cordis isolate 管理作用域和卸载,不隔离恶意 JavaScript。Layer executor、Provider Adapter 和 Strategy 必须来自受信任包。
- 本版本不会自动执行模型刚生成的代码;只交付 manifest、权限封装、replay 和 Kernel 权威校验。
- 任意新引擎可以先作为独立 Layer/Adapter 接入;Memory Spaces 中全新的 Provider 设置卡、动态连接 schema 与持久 registry 注册尚未泛化,九个现有 Provider 继续由内置 Catalog 管理。
- 现有 controller 数据面保持兼容,并已统一受 Layer 参与 gate 约束;尚未全部改走持久
MemoryPlan的兼容路径会把已提交 Authority 变更桥接为同一个MemoryReceipt合约,不建立第二种回执。
发布验证覆盖 TypeScript、完整 Vitest、确定性双构建、所有公共子路径导入、声明解析、真实隔离 Headless profile 激活、发布包内容、publint 与 attw。新增回归重点覆盖 Catalog/Topology generation、热注册与卸载、Guard 变化、stale Plan、部分回执、三层开关的 8 种组合、描述符驱动设置页及 Sidebar 停用态。
- 本地完整套件
472项通过;1项 Windows 专用 smoke test 只在当前非 Windows 环境跳过。 - 双构建比较
103个生成文件并确认 hash 一致;10 个 Node-compatible 公共入口可直接导入,Client 入口按浏览器 wrapper 验证。 - 隔离 Headless profile 成功激活并向模型请求暴露 35 个总工具,其中 5 个代表性 Mnemon 工具全部存在。
- 发布包为 110 个文件,publint strict 与 attw ESM profile 均通过。DSH
0.1.1-rc.2UI primitives 仍只产生上游缺失 source map 的开发期警告。
上一个版本见 v0.2.16 发布说明。