Skip to content

About

Bounded, layered, approval-gated, auditable cross-session memory for DeepSeek Harness: a ctx.memory capability seam with a zero-dependency SQLite provider, a memory tool, and frozen snapshot injection. Active (unfrozen 2026-10-12); see README for alternatives.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

142 stars

Watchers

0 watching

Forks

Latest commit

 

History

232 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dsh-memento:跨会话记忆接缝——写入经审批门落进本地 SQLite,两轨两层各有硬字符预算(user 2000 / agent 4000),下次会话把冻结快照注入 systemPrompt,审计由审批对、审计表与快照行组成

dsh-memento

让模型跨会话记住该记的事,同时每一次写入都过审批门、留审计痕。

一个类型安全的 ctx.memory 接缝 + 本地 SQLite 提供方 + memory 工具 + 冻结快照注入:别的记忆插件卖仓库,这个插件卖接缝、写审批门与会话可重建的审计。

安装 · 配置 · FAQ · 简体中文 · English · Español · Português · हिन्दी

License DSH npm CI Node

Stars npm downloads dshfind OpenSSF Scorecard DSH Market Gitee

dsh plugin --profile <name> add dsh-memento

社区插件,与 DeepSeek 官方无关。唯一仓库:https://github.com/PerryLink/dsh-memento(Gitee 为镜像)。

它是什么

写下一条值得记住的事,它就在下一次会话开头等着模型——而那次写入过了审批门、留了审计行。dsh-memento 给 DeepSeek Harness 补的是能力接缝,不是又一个记忆仓库:一个类型安全的 ctx.memory 服务、一个本地 SQLite 提供方(node:sqlite,WAL,权限 0600,默认 $DSH_HOME/dsh-memento/memory.db),以及它的两个消费方——memory 工具与注入系统提示的冻结快照。两条轨道(user / agent)× 两个层级(user-global / workspace)× 按 agentPreset 隔离,每轨每层都有硬字符预算;dsh-memento-mcp 另提供一个只读 stdio MCP 入口。

参见同类。 dsh-mnemon 是带 mem0/Honcho 托管 provider 的 framework,锁在 0.2.1 线;@openviking/dsh-memory-plugin 是 Volcengine 示例,未声明 dsh engine;dsh-plugin-memory 是最接近的同类,无 provenance。dsh-memento 是本地 SQLite + 审批门 + 审计链,不是托管 provider 的 drop-in。

dsh-memento 结构图(会话间的回环):会话 S1 的 memory 工具、/memory 命令与适配器 seed 先做预算预检与唯一子串定位,再经服务内部的审批门(writePolicy ask/auto/off,approval/asked + approval/decided,载荷为将被改动的全文)写入 memory.db(entries / audit / proposals / meta,WAL、0600);审计由审批对、插件审计表与快照行组成;下一次会话首次 assemble 同步读库,把冻结快照注入 systemPrompt 段(order -50);检索走大小写不敏感子串,vector 可选;MCP 入口只读

三步上手

  1. 安装(三选一):

    # git 通道(最新 main;等价于 git+https://github.com/PerryLink/dsh-memento.git)
    dsh plugin --profile web add github:PerryLink/dsh-memento
    # npm 通道(已发布版本)
    dsh plugin --profile web add dsh-memento
    # tarball 通道:本仓库 npm pack 后
    dsh plugin --profile web add ./dsh-memento-<version>.tgz

    无构建步骤——index.mjs、lib/ 与 client/ 即发布产物。

  2. 最小配置(默认即可用;这里只是把写策略与预算显式化):

    - insert:
        - id: memento
          name: dsh-memento
          config:
            writePolicy: ask
            budgets:
              user:
                userGlobal: 2000
                workspace: 2000
              agent:
                userGlobal: 4000
                workspace: 4000
  3. 验证已生效:

    dsh --profile web --dump-config | grep -A3 'id: memento'
    > /memory budgets
    > /memory list
    

卸载:dsh plugin --profile web remove dsh-memento(记忆库与会话日志保留)。

从 DSH Desktop 市场安装

所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:市场 → 来源 → 添加来源 → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选中。安装仍需通过市场的 npm 身份校验与你的确认。

同一次运行,动图版。

dsh-memento 视频演示——点开的是 MP4 文件

▶ 2 分 23 秒带解说的完整演示——封面点开后进入 MP4 文件页;若页面上不能播放,就用那里的 Download raw file(MP4,1.87 MB · 直接下载)。GitHub 会剥掉 README 里的 <video> 标签,所以视频是要打开的文件,而不是内嵌播放。

核心能力

dsh-memento 把审批门做在服务内部、把证据留在会话日志里,并把「写满」当成错误而不是让模型随便写:

  • 审批门不可绕过。 每条写路径(add / replace / remove / seed)都被强制经过服务内部的审批 waterfall,而非工具层。writePolicy: ask | auto | off 是模型看不见的配置;replace / remove / consolidate 的审批载荷携带将被改动条目的全文,被拒的写同样落一条 *-denied 审计行。
  • 模型可见 ⟺ 已记录。 注入的快照逐字进入 system/message;每次写都能从 approval/asked + approval/decided + 插件自有审计表重建。
  • 有界且诚实。 每轨每层硬字符预算(默认 user 2000 / agent 4000)。写满返回结构化错误(用量 + 上限)——绝不截断、绝不自动压缩。
  • 审计缺口可见。 /memory audit 列出插件审计表,并在会话日志侧未落盘时附一行说明:本宿主不认识 memory/* 会话事件类型,而 append 未知类型会让该会话无法再加载,因此写入的审计由 approval/asked + approval/decided 与插件审计表承担。该提示随门自适应——宿主收录这些类型后自行消失。

两条轨道 × 两个层级 × 按 agent 隔离:user 轨(关于用户的事实)与 agent 轨(环境事实与约定),各自再分为 user-global 与 workspace 层,并按 agentPreset 隔离。快照在会话首次组装提示时冻结一次,会话中途不再变化。

工具与命令面

表面 类型 说明
memory 工具 带 Save/Skip 指引的 add/replace/remove/consolidate/query;写入走审批门
memory_recall 工具 有界的记忆匹配 + 近期会话历史匹配
/memory 命令 list · query · add · remove · consolidate · proposals · budgets · audit · export · import <path> · adapters
Web 面板 客户端抽屉 只读:浏览条目、搜索、预算条、审计尾部;悬浮入口按钮可隐藏(panel.enabled)
设置分区 DSH 设置侧栏 → dsh-memento 免改文件编辑除 enabled 外的全部配置字段(0.1.7 线上 namespace = memento profile entry,之前是 dsh-memento 设置 namespace);即时/重载生效时机在页面内标注

示例

详细示例

命令

memory_stats

输入

{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"memory_stats","arguments":{}}}

输出

{
  "total": 3,
  "namespaces": [
    {
      "track": "agent",
      "scope": "user-global",
      "count": 1
    },
    {
      "track": "agent",
      "scope": "workspace",
      "count": 1
    },
    {
      "track": "user",
      "scope": "workspace",
      "count": 1
    }
  ]
}

来源 test/mcp.test.mjs:108-118 (fixture seed at 21-27); README.md:160-176

失败分支

输入

{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"memory_search","arguments":{}}}

输出

{"jsonrpc":"2.0","id":10,"result":{"content":[{"type":"text","text":"invalid arguments: query must be a non-empty string"}],"isError":true}}

来源 plugins/dsh-memento/lib/mcp.mjs:188; plugins/dsh-memento/test/mcp.test.mjs:126-127; reproduced via plugins/dsh-memento/bin/mcp-server.mjs

简短示例

  • /memory

MCP 服务器

dsh-memento 附带一个只读 stdio MCP 服务器(dsh-memento-mcp),让外部 MCP 客户端(Claude、Codex 等)无需 harness 即可检索记忆库。它通过 newline-delimited JSON(NDJSON)承载 JSON-RPC 2.0——每行一个 JSON 对象,不支持 Content-Length 分帧。

只读。 数据库以 node:sqlite 的 readOnly: true 打开(不跑迁移、不写 WAL、不 bump recall-count);库文件不存在时返回空结果而非崩溃。

工具 用途
memory_search {query, limit?} → 排序后的条目(经检索 Provider seam 的大小写不敏感子串检索)
memory_stats {} → {total, namespaces} 条目总数 + 按轨道/作用域概览

直接运行:

node bin/mcp-server.mjs
# 或 npm 安装后:npx dsh-memento-mcp

数据库路径取自 $DSH_MEMENTO_DB_PATH(绝对路径,或相对 $DSH_HOME);默认为 $DSH_HOME/dsh-memento/memory.db。

Claude Desktop(claude_desktop_config.json)配置示例:

{
  "mcpServers": {
    "dsh-memento": {
      "command": "npx",
      "args": ["-y", "dsh-memento-mcp"],
      "env": {
        "DSH_MEMENTO_DB_PATH": "/home/you/.dsh/dsh-memento/memory.db"
      }
    }
  }
}

服务器只读:无网络、无写入、无审批门——仅检索与统计。

dsh-memory-protocol v1

dsh-memento 是 DSH 记忆协议的社区预演——官方 ctx.memory 接缝的一个候选形态。该协议把本插件的接缝规范化为跨插件契约:

  • Entry spec — 两条轨道 × 两个层级 × 按 agent 隔离,外加短 tags(≤16 × ≤32 字符)与每次 replace 递增的每条目 version。

  • Write semantics — 幂等的唯一子串条件写;批准即所见载荷(replace / remove / consolidate 携带将被改动的全文)。

  • Audit contract — 每次写都能从 approval/asked + approval/decided + 提供方账本重建。

  • Budget model — BUDGET_EXCEEDED / AMBIGUOUS_MATCH 语义。

  • Schema versioning — 带响亮版本检查的迁移规则。

  • Spec — docs/protocol-v1.md(中文: protocol-v1.zh.md);规范性 JSON Schema 见 docs/schemas/dsh-memory-protocol-v1.schema.json。

Adapter registry — ctx.memoryAdapters(register / list / adapt / export)让第三方记忆插件通过注册纯数据转换器接入协议(可逆 register();导入走审批门 seed,导出只读)。接入指南:docs/adapters-guide.md(中文: adapters-guide.zh.md)。

内置适配器 外部格式 说明
mem0 mem0 fact collections({facts: [{memory, metadata?}]}) metadata.category / metadata.tags 成为 tags;原始 messages 数组被拒绝——适配器只转换、绝不抽取
hermes-memory-md Hermes memory.md(## section + 列表项) 章节名成为 tags;非列表散文响亮失败
claude-code-memory-md CLAUDE.md 风格 markdown(标题、列表、段落) 列表项与段落成为条目;章节名成为 tags

Conformance suite — test/protocol-conformance/:可分发用例集,任何声明兼容的提供方都能跑(node test/protocol-conformance/run.mjs · --provider ./your-factory.mjs);本仓库 CI 以自有提供方为黄金参考运行它(npm run test:conformance)。

与其他记忆插件的差别

插件 是什么 dsh-memento 的差异
dsh-memory-evolve 记忆仓库 / 进化循环 类型化服务接缝、审批门与会话日志审计;无仓库野心
dsh-mnemon 记忆存储助手 协议 + 门 + 审计,而非又一个 store
dsh-kb-sieve 知识库筛选 无检索工程:小语料子串搜索,经 session_search/sessionQuery 跨会话召回
dsh-tdai-memory 任务驱动记忆工具 预算按 track×layer 且在服务内强制执行,而非尽力而为
claude-bridge Claude Code 桥接 DSH 原生;未来的 seed(source:'claude') 路径让桥接写入同一 store
dsh-external/Recall 外部 agent 记忆 本地优先、零网络、走 DSH 自有审批接缝
Official MCP memory examples DSH 宣称的"memory = 外部 MCP"立场 原生第一方补充:同目标、无外部服务器;两者共存

名称是 dsh-memento(已发布到 npm 与 GitHub)。不是 dsh-recall(易与 dsh-external/Recall 混淆),也不是已删除的旧名 dsh-memory。

从终端记忆里学到的

dsh-memento 不是 Claude Code、Codex 或 Hermes 的移植——但其设计刻意吸收了它们各自做对的部分,并拒绝有害的部分:

终端记忆 做对了什么 dsh-memento 采纳了什么
Claude Code — CLAUDE.md 分层纯文本记忆文件(用户级 → 项目级),人类可读、可编辑,自动合并进每个会话 纯文本条目;user-global / workspace 层按会话合并;可浏览、export、审计的 store——透明即特性
Codex — AGENTS.md 按目录作用域自动发现并注入的指令,零模型摩擦 按会话 cwd 隔离的 workspace 层(Windows 大小写不敏感);会话开始时自动注入冻结快照
Hermes — memory.md 主动记忆保存,以及"只在工具层强制门可被后期工具注入绕过"的安全教训 带 Save/Skip 指引的 memory 工具 + 审批门控的自动捕获提案;门位于 ctx.memory 写方法内部,而非工具层

来源:Claude Code memory · Codex AGENTS.md · Hermes memory · Hermes #48181。

刻意拒绝的部分:隐藏地自动摘要进模型私有状态(此处压缩摘要成为等待人类 approve/dismiss 的待处理提案)、仓库/向量库野心,以及任何缺少人类可见审批或审计链的写入。也采纳了:Hermes 记载的"两个进程共享一个主目录写同一记忆文件"的告诫——见 安全边界。

配置

所有可调项都是 Schemastery Config 字段(可从 cordis.yml 覆盖);非法值在加载期响亮失败。按 id 覆盖会替换整行——请重述所有需要的键。cordis.patch.yml 是 bundle 声明,memento 这一行的 id 同时是设置表单的 namespace。

设置面板。 0.1.7 线上插件自己的 Config 就是它的设置页:表单的 namespace 是 profile entry id(memento,即本 bundle 那一行的 id:),可编辑字段恰好是插件标了 .volatile() 的那些(下表除 enabled 外的每个键),被接受的编辑合并进 profile 的插件行并提交进运行中的插件——无需改文件、无需重启。几乎全部即时生效(写策略、语言、预算、各上限、提案、面板;dbPath / auditRetentionDays 经重开 store 生效;retrieval.vector 经重装检索器生效);插件在加载期注册的面(snapshotOrder、工具描述文案)在重载后跟随,页面为这些字段标了记号。数值下限同时写在 schema 里,越界编辑在写入路径即被拒绝,不会留下一个用不了的配置。旧线(0.1.2-rc.1、0.1.5-alpha.1、0.1.6-0)上同一张卡片编辑 dsh-memento 设置 namespace,行为与从前一致;设置服务完全缺失时一切回退组合配置。悬浮窗按钮可在同一页面隐藏(panel.enabled)。

最常用键:

键 默认值 含义
enabled true 总开关;false 移除服务、工具、快照、命令、面板与 answerer(设置页不可编辑——禁用的插件没有设置项)
panel.enabled true 显示 Web 面板悬浮按钮;在设置页保存 false 后立即隐藏 🧠 入口,无需刷新(设置页本身不受影响)
dbPath '' → $DSH_HOME/dsh-memento/memory.db 绝对路径,或相对 $DSH_HOME(Windows 上回退到 ~/.dsh)
budgets.user.userGlobal 2000 user 轨 user-global 层的硬字符预算
writePolicy 'ask' 默认写策略:ask / auto / off(模型不可见)
language 'en' 模型可见文本与命令输出语言:en / zh
retrieval.vector false 语义召回开关:true 且探测到嵌入 provider 时 memory_recall 走向量召回(伪嵌入),否则优雅降级回 substring
完整配置表(25 个键)
键 默认值 含义
enabled true 总开关;false 移除服务、工具、快照、命令、面板与 answerer(设置页不可编辑——禁用的插件没有设置项)
panel.enabled true 显示 Web 面板悬浮按钮;在设置页保存 false 后立即隐藏 🧠 入口,无需刷新(设置页本身不受影响)
dbPath '' → $DSH_HOME/dsh-memento/memory.db 绝对路径,或相对 $DSH_HOME(Windows 上回退到 ~/.dsh)
budgets.user.userGlobal 2000 user 轨 user-global 层的硬字符预算
budgets.user.workspace 2000 user 轨 workspace 层的硬字符预算
budgets.agent.userGlobal 4000 agent 轨 user-global 层的硬字符预算
budgets.agent.workspace 4000 agent 轨 workspace 层的硬字符预算
writePolicy 'ask' 默认写策略:ask / auto / off(模型不可见)
writePolicies {} 按轨/作用域或按来源的覆盖(如 user/workspace、source:claude)
language 'en' 模型可见文本与命令输出语言:en / zh
snapshotOrder -50 快照段顺序(在 harness 身份之后、persona 之前)
maxEntriesPerQuery 20 每次查询默认结果上限(硬上限 1000)
commandListLimit 50 每次 /memory list / query 渲染的条目数
commandAuditLimit 10 每次 /memory audit 渲染的审计行数
recall.historyLimitDefault 8 memory_recall 默认扫描的会话数
recall.snippetCap 5 memory_recall 每个会话的片段数
recall.snippetChars 300 memory_recall 片段字符数
recall.windowDays 30 memory_recall 近期窗口天数
retrieval.vector false 语义召回开关:true 且探测到嵌入 provider 时 memory_recall 走向量召回(伪嵌入),否则优雅降级回 substring
panelEntriesLimit 200 Web 面板条目分页大小
panelAuditLimit 20 Web 面板默认审计行数
auditRetentionDays 0 审计保留天数(0 = 永久保留)
proposals.enabled true 每次成功压缩后自动捕获一条记忆提案
proposals.maxChars 2000 提案字符上限
proposals.maxPending 8 待处理提案上限

profile patch 覆盖示例:

- insert:
    - id: memento
      name: dsh-memento
      config:
        writePolicy: auto
        retrieval:
          vector: true
        language: en

FAQ

记忆到底存在哪里?会不会跟着会话日志一起被带走?

默认落在本地 $DSH_HOME/dsh-memento/memory.db(node:sqlite,WAL,POSIX 0600),零网络、零凭据。会话日志里既没有数据库也没有库文件内容:注入模型的快照文本逐字进入 system/message,并另有一条 audit(snapshot) 行——这是「模型可见 ⟺ 落盘」的设计目标,不是泄漏;记忆库本身只在你的机器上。卸载不删库、不删会话日志。

宿主不认识 `memory/*` 会话事件类型时,审计会不会断?

不会断,只是换了一条链。截至 0.2.1-alpha.2,KNOWN_SESSION_EVENT_TYPES 仍不含 memory/*,而 append 未注册类型会让该会话下次加载被拒,因此运行时门保持关闭:审计由 approval/asked + approval/decided 审计对与插件自有 audit 表共同承担,/memory audit 会在会话日志侧缺行时附一行说明,进程内也会告警一次。门是自适应的——宿主收录这些类型后自动开启,代码不用改。ask 策略在没有 answerer 时同样失败关闭:写入被拒,而不是悄悄放行。

会不会和别的插件抢工具名、服务键或 slot?

不会。工具全部带命名空间;它提供 memory、memoryAdapters、memoryEmbedding、memoryRetrieval 四个服务键(都不是内置 seam);不注册客户端 slot、不注册 webServer 前缀、不覆写内置行的 config、不改全局对象。逐条论证见「与其他 DSH 插件的互操作性」。

写满了会偷偷截断吗?开销多大?

都不会。预算在服务层审批前后各校验一次,写满抛结构化 BUDGET_EXCEEDED(含 used / limit / needed),由模型自己整合或删除后重试——绝不截断、绝不自动压缩;子串歧义抛 AMBIGUOUS_MATCH。开销侧:provider 是单连接同步 SQLite,无网络、无模型调用;快照每个会话只渲染一次并冻结,所以系统提示前缀在会话内稳定(前缀缓存友好)。

安全边界

  • 仅公开服务。 只消费 tools、systemPrompt 与审批接缝;不改 engine / agent-loop / apiproxy / 官方 UI。
  • 零网络、零凭据。 本地数据库,POSIX 文件权限 0600。
  • 失败要大声。 库损坏、schema 过新或非法配置在加载期抛错;写满与子串歧义返回结构化错误。
  • 一进程一库。 多个会话共享 SQLite 库;共享同一 $DSH_HOME 的两个进程写同一文件(SQLite 锁下后写覆盖)。

权限与数据

  • 权限:workshop 清单声明 harness:tool、filesystem:read、filesystem:write,以及 network:none / subprocess:none / shell:none / python:none / credentials:none。写审批走官方审批接缝。
  • 数据:本地 SQLite 数据库(0600),零网络、零凭据。
  • 会话日志:审计完整性来自审批对(approval/asked + approval/decided)加插件自有审计表;会话日志侧的缺口由 /memory audit 明示,宿主收录 memory/* 后自动消失。

已知限制

  • 会话事件已声明、尚未发出(rc.2)。 memory/added|updated|removed|recalled|snapshot 已合并声明,但 rc.2 没有仓库外事件类型的注册面;一旦 harness 构建收录这些类型即自动开启发出。
  • ask 策略需要 answerer。 未组合 UI/ACP answerer 时,写入失败关闭。
  • 无 FTS5 索引。 子串搜索走大小写不敏感的 instr(对 CJK 正确)。

与其他 DSH 插件的互操作性

已对照 DSH 0.2.0-rc.2(本 README 面向的运行时)与 2026-10-05 实测的高星插件集验证。

本插件不干扰其他插件,包括广泛安装的高星插件:

  • 无工具名冲突。 所有工具都带命名空间,不占用任何已被内置工具或其他插件持有的裸名。
  • 无服务键冲突。 只提供 memory, memoryAdapters, memoryEmbedding, memoryRetrieval;该键既不是内置 seam,也没有被任何已调研的高星插件提供。
  • 无 slot 冲突。 不注册客户端 slot key,因此不参与 shadows-shipped-ui 座位争抢。
  • 无 HTTP 路由冲突。 不注册任何 webServer 前缀。
  • 无 patch 层冲突。 组合包 patch 只 insert 自己那一行,从不覆写内置行的 config。
  • 无全局改写。 不改原型、不改写 process.env、不替换全局 fetch dispatcher。

共享事件监听器在构造上就不互相干扰。 它用 ctx.on() 监听顺序敏感事件 approval/request —— Cordis 的广播语义:每个监听器都会运行,任何一个都无法饿死其他监听器。此处每个监听器都通过 next() 委托,因此链条绝不会被短路;改写作用在 next() 产出的值上,而不是用它顶替返回:

静态证据:dsh-plugin-doctor 的 K10–K13 在本仓全部为 pass。

兼容性

维度 状态
Harness DeepSeek Harness dsh-v0.2.1-alpha.2(2026-10-12 适配;0.2.1-alpha.1 自 2026-10-04 起):0.1.7 线把整条设置注册面(installSettingsSection / SettingsProvider.installSection / SettingsNamespace / SettingsScope)换成 live config 表单——表单的 namespace 就是 profile entry id(memento),可编辑字段就是标了 .volatile() 的那些,被接受的编辑提交进运行中的插件而不是重挂它。浏览器半经 ctx.configForms.get(entryId) 读同一份表单(ctx.settingsScope 服务已删)。两侧都保留了 installSection / settingsScope 分支,peer 区间仍声明支持 0.1.2-rc.1、0.1.5-alpha.1、0.1.6-0 三条线;新增的 >=0.1.7-0 <0.2.0 这一段是修 bug——旧范围按 semver 预发布规则把目标宿主本身排除在外。仍无插件事件注册面——KNOWN_SESSION_EVENT_TYPES 不含 memory/*,且 Session.append 第三参只承载 surface 类型的 SurfaceIntent,故审计门保持自适应、行为不变(会在进程内告警一次,并在 /memory audit 输出里明示缺口)。类型证据来自三个面:本机 checkout 的已构建类型、node_modules 里钉住的已发布线、以及 DOM 库下的浏览器半侧。已按 0.2.1-alpha.2 复核: 本插件触及的全部宿主面在两个 tag 之间逐字节相同(packages/settings/settings/src/**、packages/client/ui-settings/src/**、packages/client/ui-slots/src/**、packages/client/modules/src/**、packages/interaction/user-approval/**、vendor/loader/src/**、vendor/schemastery/src/**、packages/boot/app-boot/src/config-schema/**),会话格式仍是 v4、没有 v4→v5 迁移,KNOWN_SESSION_EVENT_TYPES 只增了一个官方类型——故审计门继续关闭、代码零改动。真正变动的是钉住的 dev/test 线(0.2.1-alpha.2,以及 pnpm-workspace.yaml 里对应的 release-age 白名单)与兼容基线;npm test(201 例,含真实 Loader 组合套件)、typecheck:ci、覆盖率、制品、一致性套件与五语门在 alpha.2 上全绿。alpha.2 确实新增了 plugin:<name>/* 命名空间的 appendPluginRecord 写入器,但宿主自己的 packages/core/session/README.md 禁止仓外插件调用,且强制的 plugin: 前缀无法表达 memory/*,故本包不采用。
Node ^22.19.0 || >=24.9.0
平台 Windows / macOS / Linux(纯 host;无原生代码、无网络)
模型 任意

生态与质量

开发

npm install              # node ^22.19 || >=24.9
npm test                 # node --test
npm run lint             # oxlint
npm run test:conformance # dsh-memory-protocol v1 conformance suite
npm run typecheck        # 宿主面 × 本机 D:\deepseek-harness checkout(无 checkout 时打印「不可验证」并 exit 0)
npm run typecheck:ci     # 宿主面 × node_modules 里钉住的已发布线
npm run check:client     # 浏览器半侧(DOM 库)类型门
npm run check:coverage   # line-coverage gate
npm run check:readmes    # five-language README consistency gate
npm run verify:self-contained # reject out-of-repo dependency specs
npm run verify:artifacts # artifact presence + syntax + import

lib/ 零 DSH 依赖(仅 node: 内置模块);DSH 导入只出现在 index.mjs。

配图由 scripts/gen-readme-assets.py 程序化生成(Python + Pillow),可重复执行。

Topics:dsh, dsh-plugin, deepseek-harness, memory, agent-memory, approval, audit, sqlite, cordis, llm

家族与致谢

本项目是 PerryLink 维护的 DeepSeek Harness 插件家族成员(全部 Apache-2.0)。如果这个插件帮到了你,给个 star——它不解锁任何功能,但会让下一个人更容易找到它。

  • @alone-tree — DSH 设置面板入口与可隐藏的悬浮入口按钮(#8)。
  • @zzproc — memory_recall 输出 schema 的 source/tags 修复(#11)。
  • @Niuniu-Sir — issue #1 中的启动崩溃报告,催生了 0.3.1 引入的 ~/.dsh 回退。
  • @alex-debap — 产品经理。他管的是产品的形状,而不是代码,从项目一开始就贯穿整条设计线:提出「做能力接缝、不做又一个记忆仓库」的立项主张(一个类型安全的 ctx.memory 接缝,而非又一个记忆仓库),要求写入审批门必须在服务内部强制执行、让模型的任何路径都绕不过去,而不是工具层的一句约定,并确立「每次写入都能从审批对加插件自有审计表重建」的审计保证。命名了有界、分层的召回模型——两轨 × 两层、按 agent 预设隔离、按轨与层硬性字符预算——并主张本地优先、零网络零凭据的存储($DSH_HOME 下 0600 的 SQLite,不联网、不存密钥)。把协议当作产品线来推——公开的 dsh-memory-protocol v1 预演、适配器注册表与可分发一致性套件。守住「这个插件刻意不做什么」的范围线。
展开全部插件
插件 状态
dsh-aqua-input-check
dsh-archive-check
dsh-auto-review
dsh-autotier 🧊 已冻结 — 见仓库 README
dsh-bid-ca-precheck
dsh-bid-qual-check
dsh-cert-mcp 🧊 已冻结 — 见仓库 README
dsh-checkpoint-rewind
dsh-click
dsh-composer-history
dsh-contract-stance
dsh-customs-doc-check
dsh-data-quality 🧊 已冻结 — 见仓库 README
dsh-demurrage-ledger
dsh-doublecheck
dsh-drill-script-check
dsh-eia-guide-check
dsh-emergency-plan
dsh-essay-rubric-check
dsh-evidence-check
dsh-export-ctl-check
dsh-fast
dsh-fmea-table-check
dsh-forecast-penalty
dsh-fund-research
dsh-github
dsh-gongwen-flow-check
dsh-gongwen-word-check
dsh-guard-plan-qc
dsh-hazchem-check
dsh-hazplan-check
dsh-hidden-risk-map
dsh-hs-classify
dsh-icd-rule-check
dsh-industry-research
dsh-lawcite-adapter
dsh-laya
dsh-lc-doc-check
dsh-learning-gap-check
dsh-library
dsh-local-ai
dsh-lsp-actions
dsh-mask
dsh-mcp-panel
dsh-medrec-qc
dsh-memento 🧊 已冻结 — 见仓库 README
dsh-nsfc-form-check
dsh-nurse-record-check
dsh-observe
dsh-origin-rvc-check
dsh-ota-review-check
dsh-output-styles
dsh-paper-doc-adapter
dsh-permission-rules
dsh-permit-report-check
dsh-pipeline-check
dsh-pleading-draft
dsh-plugin-doctor 🚫 已退役(仓库已归档)
dsh-plugin-guide
dsh-plugin-kit 🚫 已退役(仓库已归档)
dsh-plugin-upgrade 🚫 已退役(仓库已归档)
dsh-policy-brief-draft
dsh-power-loss-split
dsh-power-ticket-check
dsh-ppap-check
dsh-protest-deadline
dsh-railway-window
dsh-repair-order-qc
dsh-research-report
dsh-review-reply-check
dsh-rulefile-check
dsh-safety-brief-check
dsh-score 🧊 已冻结 — 见仓库 README
dsh-session-sync
dsh-site-log-check
dsh-skill-pack-security
dsh-soe-decision-check
dsh-soilwater-check
dsh-sop-sync-check
dsh-spc-gbt-adapter
dsh-talk
dsh-tender-extract
dsh-tender-matrix
dsh-test-drive
dsh-ticktick 🚫 已退役(仓库已归档)
dsh-translate
dsh-warranty-calc
dsh-budget 🧊 已冻结 — 见仓库 README
dsh-claude-move 🧊 已冻结 — 见仓库 README
dsh-defend 🧊 已冻结 — 见仓库 README
dsh-draw 🧊 已冻结 — 见仓库 README
dsh-reach 🧊 已冻结 — 见仓库 README
dsh-background-agents 🚫 已退役(仓库已归档)
dsh-session-pin 🚫 已退役(仓库已归档)
dsh-team-rooms 🚫 已退役(仓库已归档)

License

Apache License 2.0 © 2026 dsh-memento contributors

Apache-2.0 · 社区插件,与 DeepSeek 无关。

About

Bounded, layered, approval-gated, auditable cross-session memory for DeepSeek Harness: a ctx.memory capability seam with a zero-dependency SQLite provider, a memory tool, and frozen snapshot injection. Active (unfrozen 2026-10-12); see README for alternatives.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

142 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages