中文EN

dsh-memory-spaces

memory装不上npmMIT

用户治理的跨会话记忆空间,提供独立的来源与使用关系、来源追踪、版本管理和发送前注入检查。

下载量 / Downloads
1,197
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-memory-spaces

沙箱测试结果

阶段结果
1 安装✗
2 列装—
3 挂载—
4 启动—
第一条错误
dsh: initialized profile web at /home/node/.dsh/profiles/web

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-memory-spaces

[English](README.md) | 中文

![CI](https://github.com/icearia0219/dsh-memory-spaces/actions/workflows/ci.yml) ![npm](https://www.npmjs.com/package/dsh-memory-spaces) !DSH 兼容性:当前版本已验证 ![许可证:MIT](LICENSE)

会话默认私有,只有用户明确连接后才共享记忆。

dsh-memory-spaces 是一个独立的社区 DeepSeek Harness 插件,让选定会话拥有持久、可检查的记忆,而不是把所有对话合并到一个全局记忆池。用户决定哪些会话可以贡献、哪些会话可以使用,以及每轮回答有哪些记忆进入模型上下文。

为什么需要记忆空间?

有用的决策、约束、偏好和项目事实往往停留在最初讨论它们的会话中。手动复制十分重复,而不受限制的全局记忆又可能暴露无关上下文。记忆空间让一组命名的本地会话共享知识,并通过明确连接、可见来源和发送前检查保留用户控制。

和单一全局记忆有什么不同?

插件不把记忆简化为自动读写开关,而是让治理过程保持可见,并把贡献与使用分开:

原则 · 插件行为

默认私有 · 只有用户明确把会话连接为使用者后,该会话才会收到空间记忆。

独立关系 · 记忆来源可以贡献所选内容而不使用空间;使用者可以使用记忆而不贡献内容。仅仅建立关系不会复制已有或未来会话。

用户治理 · 创建空间、改变关系、处理生命周期、导入历史、清除来源和破坏性删除都需要用户界面操作或人类直接命令;插件不会向模型暴露这些工具。

发送前检查 · 自动匹配的记忆仍可在输入框中关闭;确认方式只注入用户主动勾选的候选记忆。

可检查记录 · 记忆版本保留生命周期状态和应用层来源,界面会显示哪些会话使用每个空间。

本地所有权 · 每个 Web Profile 使用本地 SQLite 数据库;当前版本没有远程邀请或跨实例同步。

截图

管理器会保留记忆版本及其来源信息,同时把记忆来源和使用会话作为两种独立关系。

使用会话页签显示每个会话的回答时使用方式,但不会因此授予记忆写入能力。

历史导入必须由用户明确执行,生成的摘要命令事件会留在会话记录中。

<a id="quick-start"></a>

快速开始

把已发布的明确版本安装到现有 Web Profile:

dsh plugin --profile web add dsh-memory-spaces@0.1.1
dsh --profile web --dump-config
dsh web

打开一个会话,选择 记忆空间,创建空间,明确保存所选消息,再把另一个本地会话连接为使用者。发送匹配提示词前,在输入框中检查或关闭候选记忆。

本包适配官方原版 DSH 聚合包 >=0.1.5-rc.3 <0.2.0;0.1.5-rc.3 与 0.1.7-rc.2 都有全新安装兼容性证据。请阅读 [DSH 兼容性](docs/DSH_COMPATIBILITY.md)了解准确证据;更改现有安装前请查看[兼容性、升级与移除](#compatibility-upgrades-and-removal)。

安全性概览

  • 关系变更和破坏性治理操作不会作为模型工具暴露;持久命令必须来自当前的人类直接事件。
  • 已存记忆仍是不可信输入。插件会标记注入上下文并允许用户检查候选项,但不能保证抵抗 Prompt Injection。
  • Profile 内的 SQLite 数据库没有加密。拥有无限制文件系统或 Shell 权限的模型、插件或进程可以修改它。
  • 保存所选对话、历史摘要或快照前会显示敏感内容警告,但用户仍需负责凭据保护和提供方保留策略。
  • 逻辑删除和来源清除不是安全物理擦除。升级或执行破坏性操作前请备份数据库。

完整限制请查看[安全与隐私](#security-and-privacy)、[威胁模型](docs/THREAT_MODEL.md)和[安全策略](SECURITY.md)。

招募早期测试者(Early Adopters Wanted)

0.1.1 版本需要自动兼容性矩阵之外的真实安装和工作流反馈,尤其希望测试以下场景:

  • Windows、macOS 和 Linux;
  • 声明兼容范围内的不同 DSH RC 版本;
  • 中文会话和英文会话;
  • 包含大量记忆的空间;
  • 同一台机器上的多个 DSH Profile。

无论成功与否,都欢迎填写安装反馈表。表单会记录环境、安装方式、UI 显示、空间创建、跨会话注入和已脱敏日志,让兼容性声明建立在可复现的反馈上。

运行行为

Host 插件依赖 ctx.agents、ctx.commands 和 ctx.llm。它打开带版本号的 SQLite 数据库,维护只包含有效记忆版本的 FTS5 trigram 索引,注册面向用户的 /memory 操作、浏览器私有治理与快照传输,并在 agent/pre-step 条件式提供上下文。客户端只使用官方 DSH 的会话标题栏和输入框扩展位;当 DSH 声明了工作区会话行的附加扩展位时,侧边栏还会显示会话复选框和批量新建空间操作条,标题栏窗口始终作为兼容入口。插件自己的窗口提供跨工作区会话多选、逐消息选择、所选内容保存和发送前注入预览,无需修改 DSH 源码。

每个记忆版本都会记录空间、生命周期状态、版本链、来源会话 id 与标题、来源事件范围、创建时间、人工或模型提炼方式、保留的来源消息摘录,以及最近哪些回答接收了它。创建新版本会把同一版本链中原有有效版本标记为 superseded。回溯与注入只使用 active 版本;其他状态保留用于审计。

历史导入是可选操作。它会投影当前有效会话、排除推理内容和追加的插件上下文,使用配置的模型路由总结有界 transcript,并把结果保存为 model_extracted。再次导入会在该来源会话的生成摘要版本链中创建下一版本。人工记忆和其他来源会话不受影响。

来源与使用模型

产品不再使用一个读写权限,而是使用两种相互独立的关系:

关系 · 含义 · 不代表

记忆来源 · 该会话中经明确保存、导入或同步的内容可以进入空间。 · 自动复制该会话的历史或未来消息。

记忆使用者 · 该会话回答时可以使用空间中的有效记忆。 · 该会话可以贡献内容。

一个会话可以是来源、使用者、两者都是,或两者都不是。创建空间后,所有者默认以 automatic 方式使用它;只有在第一次明确保存、导入或连接来源后,所有者才成为来源。插件内的每次持久贡献都必须由用户直接操作;插件不会自动写入会话内容。这不防护无限制 Shell 或其他插件对同一文件的修改。

使用者可以选择一种回答时使用方式:

使用方式 · 行为

automatic · 自动准备匹配的有效记忆,用户仍可在输入框预览中关闭单条记忆。

confirm · 发送前显示匹配记忆,只有用户勾选的记忆才会进入提示词。

paused · 保留可见关系,但不检索或注入该空间。

所有者可以独立批量添加或移除来源与使用者。使用者可以暂停、恢复、改为发送前确认,或停止使用空间,这些操作不影响已贡献的记忆。来源可以停止贡献,并在保留、逻辑删除或清除插件应用层来源字段三种方式中处理以前的贡献。

体验受治理共享

1. 打开会话 A,并在会话标题栏选择 记忆空间。

2. 创建 Sellora。会话 A 成为所有者,并默认使用该空间。在提供工作区会话行扩展位的 DSH 中,也可以从侧边栏至少勾选两个会话并选择 新建记忆空间;第一个勾选的会话成为所有者。

3. 在管理器中选择 选择历史对话…,勾选已加载的用户或模型消息,再保存一条 constraint,例如“所有 UI 改造不得修改业务 API、路由、权限或数据结构”。先检查敏感内容提示。

4. 让会话 B 使用该记忆:打开 Sellora,选择 连接其他会话…,在跨工作区列表中找到 B,再选择 使用空间记忆 和自动、发送前确认或暂停方式。

5. 让会话 B 贡献内容:在同一窗口中选择 作为记忆来源。可选择总结并导入它的现有历史。不勾选时,既有历史和后续对话都不会被复制。

6. 在会话 B 中输入相关问题。发送前检查注入预览;自动记忆可以关闭,确认候选项必须主动勾选。

7. 在会话 A 中打开 Sellora。来源、使用者 和 记忆 三个页签会分别显示来源活动、回答时使用和版本记录。批量移除不会删除原始 DSH 会话。

只读会话分享仍是独立操作:打开 选择历史对话…,勾选消息、选择 只读会话链接,再复制生成的 URL。该 URL 只显示文本快照,不能把另一个会话连接到 Sellora。

生命周期与移除

记忆状态 · 回溯行为 · 含义

active · 可以使用 · 当前有效版本。

superseded · 排除 · 已被版本链中的另一版本替代。

disputed · 排除 · 存在冲突,需要用户解决。

expired · 排除 · 有效期结束后保留用于审计。

deleted · 排除 · 已逻辑删除并保留用于审计。

来源移除选择 · 已存内容 · 来源追溯

保留贡献 · 按当前生命周期状态保留 · 保留

删除贡献 · 标记为 deleted · 保留用于审计

清除来源 · 保留内容与生命周期 · 从插件当前表中移除会话、标题、事件范围和来源摘录

停止使用只会移除回答时访问。移除来源只会停止未来的明确贡献,并按所选方式处理以前的贡献。删除完整空间是独立的所有者操作。SQLite 空闲页、WAL/SHM、备份、DSH 会话日志和提供方记录仍可能保留相关数据;这些操作不是安全物理擦除。

命令

创建空间、改变关系、选择使用方式、清除来源和删除完整空间只能在 UI 中完成。/memory create、join、leave、purge 和 drop 会返回错误,因此模型生成或粘贴的命令文本无法改变治理状态。

命令 · 效果

/memory import-history <space> · 总结当前来源会话,并创建下一个生成摘要版本。

/memory remember <space> <type> <content> · 明确保存一条带命令事件来源的记忆;所有者首次贡献时会被记录为来源。

/memory forget <memory-id> · 把当前会话可以管理的记忆版本标记为 deleted。

/memory list · 列出因所有权、来源贡献或使用关系而可见的空间,并显示各自关系。

/memory show <space> · 显示可见的记忆版本及生命周期状态。

/memory preview <query> · 为诊断渲染有界自动上下文;输入框提供可交互预览。

记忆类型为 fact、decision、constraint、preference、task、artifact、issue、solution 和 temporary。

配置

字段 · 默认值 · 含义

databasePath · 必填;bundle 使用 profile:memory-spaces-v4.sqlite · 安装包会把文件解析到所属 DSH Profile 下。测试可使用 :memory:。

journalMode · wal · SQLite 日志模式:wal、delete、truncate 或 persist。

busyTimeoutMs · 5000 · 数据库被锁定时等待多久再让操作失败。

maxMemoryBytes · 8192 · 单个记忆版本的最大 UTF-8 字节数。

maxQueryBytes · 4096 · 从人类直接输入中保留用于检索的最大 UTF-8 字

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:2,最后更新 2026-09-26

链接

GitHub · Homepage · npm

同类插件