engramory

165Star12Fork2Issue0Watching

为 DSH 注入 Engramory 记忆纪律,把 MEMORY.md 索引的 200 行/25KB 上限变成真正会被拒绝的硬卡口。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
Python
License
MIT
分支
master
agent-memoryai-agentsclaude-codecodexdeepseek-harnessdsh-pluginknowledge-basellm-memory

安装

$ dsh plugin --profile web add github:tinqiao-oss/engramory

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 tinqiao-oss/engramory:先查看仓库 https://github.com/tinqiao-oss/engramory.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

engramory 把 Engramory 记忆纪律带到 DSH:宿主里始终加载一份"索引不超过 200 行 / 25 KB"的常驻规则,并把这条上限变成真正会被拒绝的硬卡口(一旦返回拒绝原因,后面的监听器无法再翻案),同时向宿主注册一条同名 skill,确保协议随插件一起到位。

核心能力

  • 把 MEMORY.md 的 200 行 / 25 KB 双维度上限作为同步拒绝规则植入 DSH 的写前守卫,超 cap 且继续变大的写入会直接被拦下
  • 渐进式压缩始终放行:超 cap 的索引只要被缩小就允许写入,210 → 205 → 198 这种逐次瘦身可以一路走通
  • 智能判断"只读 vs 改写":read、view、ls 和任何未识别的工具一律放行,超 cap 的索引必须仍可被读取,否则压缩无从下手
  • 自动模拟可还原的部分编辑(edit / str_replace 等携带 old_str/new_str 的写入),按模拟结果而非参数大小判定是否拒绝
  • 整文件覆写与 str_replace_editor 的 create / str_replace / insert 三种命令都被覆盖,未能模拟的局部写入在已超 cap 的索引上也会拒绝并提示改用整文件覆写
  • 索引文件名按大小写不敏感匹配(Windows/macOS 上 memory.md 即 MEMORY.md),但只看 basename,不影响其它同名目录里的无关文件

技术实现

  • 语言: JavaScript (ESM)
  • 关键依赖: 零依赖(仅用 node:fsreadFileSyncnode:pathbasename);通过 peerDependencies 声明对 @deepseek-ai/dsh-tools >=0.0.1-rc.1 的接口依赖
  • 架构模式: 通过 dsh.bundlecordis.patch.yml 注入 profile 的插件树,补丁插入一行 id: engramory 的配置(含 indexName / maxLines / maxBytes 默认值);运行时通过 ctx.tools.guard() 注册同步写前守卫、并可选地通过 ctx.skills.register()source: 'runtime' 贡献同名 skill
  • 入口文件: adapters/dsh/plugin/index.js

适用场景

你在 DSH 里跑长任务,希望用一个轻量的本地文件记忆库(一个 MEMORY.md 索引 + 多个 detail 笔记)跨会话记住关键事实,但担心索引越长越失控——超出加载窗口的那部分会被静默丢掉、永远不会被召回。装上这个插件之后,写入越界会被直接拒绝、提示你按规约压缩,普通 read 仍能正常进行。如果你只用 DSH 但其它宿主(Claude Code 等)的原生 cap 已经够用,本插件的作用就是把"规则 + 让模型自己跑 check 工具"的弱保证升级成"工具调用层就被截住"的强保证。

前置依赖与兼容性

依赖最低版本说明
Node>=18adapters/dsh/plugin/package.json#engines.node 显式声明
DSH 宿主(@deepseek-ai/dsh-tools>=0.0.1-rc.1package.json 的 peerDependencies;运行时需暴露 ctx.tools.guard() 与可选的 ctx.skills.register()
操作系统跨平台os 限制、无原生模块;纯 ESM,仅使用 node 内置 fs / path
原生模块无 node-gyp、不依赖系统 C 库,三个主流操作系统均可运行
记忆库本体插件不创建 MEMORY.md 也不生成 AGENTS.md 常驻规则,需另行跑 python tools/engramory_init.py dsh --install-skill

安装方式

dsh plugin --profile web add github:tinqiao-oss/engramory

配置项

DSH profile 的 patch 层会在插件加载时插入一行 id: engramory,其 config 字段即下表内容;若想自定义请在你的 profile 里以 - id: engramory 覆写整段,并把想保留的键重新列全(patch 会整段替换而非合并)。

配置类型说明默认值
indexNamestring被视为索引的文件名(只看 basename,大小写不敏感),守卫只对它生效;空字符串或非字符串会回退到默认值MEMORY.md
maxLinesinteger硬性行数上限;非有限数或非正整数会回退到默认值200
maxBytesinteger硬性 UTF-8 字节上限(25 KB);非有限数或非正整数会回退到默认值25600
registerSkillboolean为 false 时只装守卫、不注册运行时 skill(适用于宿主不挂载 skill registry 的 profile)true
skillstring自定义的 skill 正文 markdown;留空则使用插件内置的精简协议(包含 Recall / Write / Sync / 索引上限规则)内置 markdown

常见问题

Q: 安装这个插件之后会自动生成我的记忆库吗?

A: 不会。插件只负责把 200 行/25 KB 上限变成硬卡口、再向宿主注册一条名为 engramory 的 skill;记忆库和常驻规则文件需要单独跑 Engramory 仓库里的 python tools/engramory_init.py dsh --install-skill 创建。

Q: 索引被改超之后还能不能压缩?

A: 能,而且必须能。判定规则是"写入索引超过上限且比当前文件更大才拒绝"——一个 210 行的索引被压缩到 205、再到 198 都会放行,渐进式压缩始终可行,不会把你锁死。

Q: 看到拒绝提示该怎么办?

A: 拒绝原因里会直接告诉你当前行数 / 字节数与上限。把长行拆成"一句话要点 + 链接",合并重复条目,归档冷笔记,然后用整文件覆写(writestr_replace_editorcreate)一次性压缩;下一次整文件写入就会通过。

Q: 想调整上限大小去哪改?

A: 不要在原 profile 里再加一条 - insert:,那样会出现两个 engramory 行、原 caps 仍生效。正确做法是在你 profile 自己的 patch 层里以 - id: engramory 覆写该行的 config,并且把全部想保留的键重新列出来(patch 是整段替换)。

Q: 是否包含原生模块?

A: 不包含。插件是纯 ESM,只用 node:fsnode:path 两个内置模块,没有 node-gyp、不挑 Node ABI,三个主流操作系统都能跑。

Q: 读 MEMORY.md 会被拦吗?

A: 不会。守卫只对已知会改文件的工具(write/edit/str_replace 等)做裁决,read、view、ls 和任何未识别的工具一律放行——这正是设计选择:超 cap 的索引必须仍可被读,否则就陷入"想压缩却看不到内容"的死锁。

Q: 为什么 dsh plugin add 在 dsh 0.1.0-rc.6 上装不上?

A: 这是上游 dsh 的 preview 打包问题:dsh plugin 命令走未捆绑的 pnpm,并且依赖的 @deepseek-ai/dsh-type-meta 在 registry 上找不到。修复发布前,插件本体的决定表仍由仓库自带的 21 个 node --test 用例守住,可信度未受影响。

上手难度

入门 — 安装就是一条命令;cordis.patch.yml 已把合理的默认 caps 注入 profile,普通用户基本不需要再改配置,只有"想换索引文件名"或"想放宽上限"的进阶用户需要动 patch。

已知问题与限制

  • insert 这类无法从参数还原结果的局部写入,若从"未超 cap"一次性跨过 cap,当前守卫不会立刻发现;下一次整文件覆写会被拦下,或通过外部 engramory_check.py 检出。已超 cap 的索引再做这类不可模拟的局部写入一定会被拦下。
  • 守卫的工具名单按 dsh 文档化的 tool-fs 契约覆盖(write / editfile_pathstr_replace_editorpath),对未知工具一律放行;这是纪律护栏而不是安全边界,误拦 read 的代价远高于漏放一次写。
  • DSH 仍是开发者预览,宿主插件 API 可能再变;本插件只触碰 ctx.tools.guard()ctx.skills.register() 两个面,迁移成本被刻意压到最低。
  • 第三方插件通过 dsh plugin 命令安装到 profile 在 dsh 0.1.0-rc.6 上尚不可用(上游打包问题,不是本插件缺陷),期间只能用源码级方式直接挂载插件本体。
  • 插件不会替你创建 MEMORY.md 或常驻规则文件——记忆库本身需要按 Engramory 协议另行初始化。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/tinqiao-oss/engramory)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录