@hy-sde-org/dsh-memory

中文文档
0.2.1-rc.5发布于 2026/11/01MITTypeScriptES Module

用于DeepSeek Harness的代理管理的长期内存(ctx.memory):持久的项目范围内的内存库,具有提供者注册表和已交付的本地后端-一个独立的插件,不需要更改上游的Harness。

中文使用文档
文档目录8 节
  1. 安装
  2. 直接来自npm(已发布)
  3. 从git签出(预发布/开发)
  4. 布局
  5. 服务API
  6. memory:// 内部url
  7. 配置( memory 行)
  8. 测试

@hy-sde-org dsh-memory

代理策划的长视界记忆 为深寻挽具- ctx.memory 服务及其提供程序注册中心,从 @oh-my-pi 编码代理内存表面(端口位于 hy-sde叉). 记忆是持久的, 项目范围 数据,代理用 retain/recall/reflect/memory_edit/learn 工具(由 @hy-sde-org/dsh-tool-memory),确实如此 在下一个开始时重新加载 会话 通过及时注射。它补充了DSH的会话查询和 压缩而不是重叠:那些回放对话历史, 这家银行会回答“我们在这里决定了什么/更喜欢什么/学到了什么?”

这是一个 独立插件构建线束集成(主机平面) memory 把船划进 cordis.patch.yml,以及代理平面工具 @hy-sde-org/dsh-tool-memory. 上游的深寻线束里没有 (dsh-v0.2.0-rc.2 (后来)需要改变。

只有 local 后端 船只。注册表保持接缝打开 后见之明/记忆模式的提供商——未来的提供商会注册一个 MemoryBackend 同样的工具不会改变。

安装

pnpm install --global @deepseek-ai/dsh

直接来自npm(已发布)

这两个包都发布在npm注册表的 hy-sde-org 组织(@hy-sde-org/dsh-memory 和 @hy-sde-org/dsh-tool-memory, 版本 0.2.0-rc.2). 添加服务,然后通过预设挂载工具:

# one command; the tool package comes in as a transitive dependency
dsh plugin --profile web add @hy-sde-org/dsh-memory @hy-sde-org/dsh-tool-memory

然后复制 examples/agent-preset/ 从已安装的包(或此repo) 来 ~/.dsh/.agent-presets/<id>/ 并在Web UI预设选择器中选择它 (或 dsh agent). 预设行使用 @hy-sde-org/dsh-tool-memory.

从git签出(预发布/开发)

git clone [email protected]:hy-sde/dsh-plugins.git
cd dsh-plugins
pnpm install
pnpm --filter @hy-sde-org/dsh-memory build

MEMORY_TGZ="$(cd dsh-memory/packages/memory && pnpm pack --pack-destination /tmp | tail -n 1)"
TOOLMEMORY_TGZ="$(cd dsh-memory/packages/tool-memory && pnpm pack --pack-destination /tmp | tail -n 1)"
dsh plugin --profile web add "$MEMORY_TGZ" "$TOOLMEMORY_TGZ"

布局

服务是主机平面的:存储是交叉的持久项目数据 会话,所以 cordis.patch.yml 在配置文件中插入一行;这个 每个会话工具解决这个问题。数据存在于 <harness home>/memories/<project>/ 哪里 <project> 是一个编码的绝对CWD -每个项目一个内存根, 由它的每个会话和工具共享。

每个项目根包含三个工件:

  • bank.jsonl.zstd -编写的可编辑工作条目 retain (身份证、 内容、上下文、来源、重要性、时间戳、活动标志)。支持 memory_edit. 磁盘上的容器是与线束相同的zstd帧格式 会话日志使用:每个保存批处理是一个checksum Zstandard帧 (连接,仅追加,自我修复)。前重命名明文 bank.jsonl 仍然是读的,并且在第一次写时被迁移;集 compression: 'none' 在 LocalMemoryConfig 对于原始行追加 格式。编解码器包含在此包中(/frame-codec 子路径, node:zlib只有)。
  • learned.md - new -first, deduped, capped(100)课子弹由 learn;omp保持相同的格式和规范化。幸存了下来 整合; learn 写是注入中和和秘密编辑的。
  • memory_summary.md -可选的综合汇总(手工或工具维护) 那 recall, reflect、提示注射面。

服务API

const memory = ctx.memory                       // MemoryService
await memory.save({ cwd }, { content, context, source, importance })
await memory.learn({ cwd }, { content, context })
await memory.search({ cwd }, 'query', { limit: 10 })
await memory.edit({ cwd }, 'update' | 'forget' | 'invalidate', { id, content, importance, replacementId })
await memory.summaries({ cwd })                 // { summary?, learned?, block }
await memory.status({ cwd })
await memory.clear({ cwd })

后端注册到服务中: memory.register(backend) 返回一个 处理者, memory.resolve() 返回配置的(默认:first) 后端。突变发出 memory/change ({ cwd }),所以进程内消费者 可以使缓存无效。

一、 MemoryBackend 一打方法结束了吗 @hy-sde-org/dsh-memory/types; 运来的那个, LocalMemoryBackend,为纯节点(node:fs)用… 进程内的每个文件写链,所以从兄弟会话并发保存可以 永远不要把对方的信弄丢。

memory:// 内部url

当主机组合挂载时 @hy-sde-org/dsh-internal-urls (共享 注册表后面的读取/grep工具),这个插件注册一个 memory:// 计划 ctx.internalUrls -每个进程一次,via ctx.inject,它是 在没有注册表的组合中优雅的无操作。每个已解决的资源 是 immutable: true:代理永远不会通过 file-shaped URL; memory_edit 是突变面。

两种URL形式:

  • memory://root -项目的合并内存概述(摘要+ 吸取教训+工作库,同块提示注入使用)。 空项目将读取“项目内存为空”指针。
  • memory://<id> -一个完整的存储条目,带有元数据头 (id, source, importance, timestamp, readonly). id是一样的 的 recall/reflect 表面:银行行由他们 m_* 我,教训是 lesson_<hash> (只读),合并摘要为 summary_0 (只读)。读取的范围限定在调用会话的项目(cwd)。

修正误差,沿着上游的oh-my-pi (coding-agent/src/internal-urls/memory-protocol.ts) HINDSIGHT_UNADDRESSABLE 模式:

  • 没有可寻址 -选择的后端没有 readEntry (一个 不可寻址存储):“The … 内存后端不能通过 内存://<id>",指向 recall/reflect.
  • 没有找到 id在这个项目中不存在(或者已经退役了) “记忆 … 在这个项目中不存在”,指的是 recall/memory_edit.
  • 丢失的名称空间、丢失的cwd、未注册的后端和路径 root/和id都得到自己的纠正信息。

完成: complete() 返回 root 加上每个可寻址条目id (listEntries,最新的第一,上限为50)与一行内容预览; 后端只实现 readEntry 回到a <id> 占位符, 一个两者都没有的人只完成了 root。这个 memory:// 计划永远 接受一个路径(后端形状,而不是文件形状)。

配置( memory 行)

关键默认的意义
root<harness home>/memories记忆根(~/$HOME 扩大)。
backend第一次注册服务委托的后端id。
defaultImportance0.7基线重要性是指保存忽略了它。
searchLimit10一次搜索的默认结果上限。

每个条目上限:银行内容4000个字符,银行上下文800个字符,课程内容 2000年,课程内容400节,课程上限为100节,最新第一。所有存储的文本 通过注入中和(控制字符), </引号, ~~~ 围栏) 然后是秘密编辑,写和读。

测试

pnpm -r --filter @hy-sde-org/dsh-memory test

版本与发布记录

@hy-sde-org/dsh-memory 共发布 11 个版本,首次发布于 2026/08/26;过去 12 个月发布了 11 个版本。

版本发布日期距今
0.2.1-rc.5latest2026/11/012 天前
0.2.1-rc.32026/10/259 天前
0.2.1-alpha.42026/10/1618 天前
0.2.1-alpha.22026/10/1321 天前
0.2.0-rc.22026/10/031 个月前
0.1.7-rc.22026/09/291 个月前

关于 @hy-sde-org/dsh-memory 的常见问题

@hy-sde-org/dsh-memory 是什么?

用于DeepSeek Harness的代理管理的长期内存(ctx.memory):持久的项目范围内的内存库,具有提供者注册表和已交付的本地后端-一个独立的插件,不需要更改上游的Harness。

如何安装 @hy-sde-org/dsh-memory?

在项目目录运行 npm install @hy-sde-org/dsh-memory,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@deepseek-ai/cordis(~4.0.5)、@hy-sde-org/dsh-internal-urls(^0.2.1-rc.5)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@hy-sde-org/dsh-memory 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@hy-sde-org/dsh-memory 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@hy-sde-org/dsh-memory 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.19.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@hy-sde-org/dsh-memory 可以商用吗?

@hy-sde-org/dsh-memory 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@hy-sde-org/dsh-memory 还在维护吗?

最新版本 0.2.1-rc.5 发布于 2026/11/01(2 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/08/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。