把长期记忆注入每个会话,随时增删改查
28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add rickwindman/dsh-destinywind-memory该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
- 读取本地文件index.js:214
if (existsSync(marker)) return; - 读取本地文件index.js:224
if (existsSync(markdownFile)) { - 读取本地文件index.js:227
entries = parseLegacyMarkdown(readFileSync(markdownFile, 'utf8')); - 读取本地文件index.js:248
if (existsSync(file)) retireLegacyFile(file); - 发起网络请求client.js:16
const res = await fetch(`${API_BASE}/memories`, { headers: { accept: 'application/json' } }); - 发起网络请求client.js:27
const res = await fetch(`${API_BASE}/memories`, { - 发起网络请求client.js:39
const res = await fetch(`${API_BASE}/memories/${encodeURIComponent(id)}`, { method: 'DELETE' }); - 写入本地文件src/store-sqlite.js:60
if (!inMemory) mkdirSync(path.dirname(databaseFile), { recursive: true }); - 读取本地文件src/store-sqlite.js:177
if (existsSync(markerFile)) return []; - 读取本地文件src/store-sqlite.js:179
if (!existsSync(file)) continue; - 读取本地文件src/store-sqlite.js:181
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件src/store-sqlite.js:194
renameSync(file, `${file}.v1.bak`); - 写入本地文件src/store-sqlite.js:212
writeFileSync(markerFile, `migrated-to-sqlite ${new Date().toISOString()}\n`, 'utf8');
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:长期记忆库,注入每个会话的系统提示,设置页增删,HTTP API 改数 · DeepSeek Harness 的持久长期记忆库插件
README
由 DeepSeek 最新模型翻译生成dsh-destinywind-memory
在 DeepSeek Harness Web GUI 的设置面板中提供长期记忆库:SQLite 存储、正文原样存取、不受 Markdown 语法影响,并且用三层注入让智能体真的按记忆做事。
它做什么
- 设置面板新增「记忆」页(settings.section Slot,order: 16):紧跟在设置导航的「插件」页之下、排在「技能」页之上;可添加(带可选标签)、浏览、删除记忆条目,也可点「刷新」重新读取。
- 记忆保存在一个 SQLite 数据库里(memory.sqlite),正文按原样存取:写进去是什么,读出来就是什么。
- 每条记忆注入所有会话的系统提示词。
- 纯插件实现:不修改 DSH 任何其他文件。
为什么是 SQLite 而不是 Markdown
v1 用 memory.md 保存,靠 ## 标题划分条目。这带来一个会静默损坏数据的缺陷:
| 你写的正文 | v1 的后果 |
| 含一行以 ## 开头(如 ## 二级标题) | 该条被拆成两条,标题被吞掉 |
| 含形如 的注释 | 这一行的内容被当作真标签写回 |
| 含 ###、列表、引用、代码围栏 | 在无标题的宽松解析下可能被当成结构丢弃 |
数据库没有这个歧义:正文是一个不透明的值,任何解析器都不会再去解释它。所以从 v2 起改用 SQLite。
展开完整文档(README 剩余 1 节)
dsh-destinywind-memory
在 DeepSeek Harness Web GUI 的设置面板中提供长期记忆库:SQLite 存储、正文原样存取、不受 Markdown 语法影响,并且用三层注入让智能体真的按记忆做事。
它做什么
- 设置面板新增「记忆」页(settings.section Slot,order: 16):紧跟在设置导航的「插件」页之下、排在「技能」页之上;可添加(带可选标签)、浏览、删除记忆条目,也可点「刷新」重新读取。
- 记忆保存在一个 SQLite 数据库里(memory.sqlite),正文按原样存取:写进去是什么,读出来就是什么。
- 每条记忆注入所有会话的系统提示词。
- 纯插件实现:不修改 DSH 任何其他文件。
为什么是 SQLite 而不是 Markdown
v1 用 memory.md 保存,靠 ## 标题划分条目。这带来一个会静默损坏数据的缺陷:
| 你写的正文 | v1 的后果 |
| 含一行以 ## 开头(如 ## 二级标题) | 该条被拆成两条,标题被吞掉 |
| 含形如 的注释 | 这一行的内容被当作真标签写回 |
| 含 ###、列表、引用、代码围栏 | 在无标题的宽松解析下可能被当成结构丢弃 |
数据库没有这个歧义:正文是一个不透明的值,任何解析器都不会再去解释它。所以从 v2 起改用 SQLite。
存储格式
%USERPROFILE%\.dsh\destinywind-memory\memory.sqlite(DSH_HOME 环境变量可覆盖)
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- 条目 id,单调递增、删除后不复用 title TEXT NOT NULL DEFAULT '', -- 摘要,缺省取正文首句 text TEXT NOT NULL, -- 正文,原样保存 created_at TEXT NOT NULL DEFAULT (...) ) STRICT;
CREATE TABLE tags (
memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
tag TEXT NOT NULL,
position INTEGER NOT NULL, -- 保留标签书写顺序 PRIMARY KEY (memory_id, tag) ) STRICT;
- 数据库文件就是一个普通 SQLite 文件,可用任意 SQLite 客户端打开;运行中也可复制(WAL 模式下读不会阻塞写)。
- 上限:正文 8000 字符(超出截断)、标签最多 12 个、条目最多 1000。
- 不再有 Markdown 镜像文件。 memory.md 只作为升级迁移的输入读取一次,此后不再读写;升级时会改名为 memory.md.v1.bak 保留。
为什么智能体会按记忆做事
一条「请参考」的软措辞埋在系统提示中段,是模型最容易跳过的东西。本插件把记忆注入三个位置:
| 位置 | 内容 | 作用 |
| 系统提示 order: 216 | 全库,拆成「硬性约束(必须遵守)」与「背景知识(相关时参考)」两组 | 让「必须做的事」不会被当成背景资料读过去 |
| 运行时上下文 order: 100(user 角色快照) | 只有硬性约束 | user 角色的短指令比 system 长段落更被遵循;每轮刷新且不堆积 |
| 系统提示 order: 9999(末尾) | 一行「记忆核对」提醒 | 利用末尾位置(recency),提示动手前自检 |
哪条算「硬性约束」由插件判定:标签含「约束/规则/偏好/规范/要求」(或 constraint),或正文含「必须/禁止/不要/不得/务必/一定要/只能/只用/都要/偏好/约束/规则/规范」等词。想强制归类,就加一个 约束 标签。
末尾提醒可以用配置关掉:
config:
tailReminder: false
从 v1(Markdown / JSON)升级
v2 首次启动时会自动导入旧库,然后改名备份(不会丢记忆):
| 旧位置 | 处理 |
| destinywind-memory/memory.md(v1.1) | 解析后导入 SQLite,原文件改名为 memory.md.v1.bak |
| destinywind-memory/memory.json(v1.0) | 导入,原文件改名为 memory.json.v1.bak |
| hindsight-memory/memory.json(更早的插件名) | 同样导入,原文件改名备份 |
迁移只执行一次,用 .migrated-to-sqlite 标记文件记录。若数据库里已有条目,则不会把遗留文件合并进来(避免重复)。旧文件解析失败时原地保留,不会在背后改名。三者都不存在时以空库启动,且不会创建任何文件,直到第一次写入。
注意:从 v1 的 memory.md 导入时,上述 ## 缺陷已经发生过的损坏无法自动还原——被拆成两条的仍然是两条。导入后请检查一遍条目数是否符合预期。
HTTP API(可选)
设置页用的就是这套接口;你也可以在脚本里调用。
| 操作 | 请求 |
| 列表 | GET /dsh-destinywind-memory/memories → { ok, memories: [{id,title,text,tags}], file } |
| 新增 | POST /dsh-destinywind-memory/memories,body { text, title?, tags? }(标题缺省取正文首句) |
| 删除 | DELETE /dsh-destinywind-memory/memories/<id>,id 是数据库主键 |
端口按实际运行的 DSH Web 端口填(不一定是 3080):
$port = 19387 # 换成你的实际端口 $body = @{ text = '记忆正文'; tags = @('标签') } | ConvertTo-Jsonpowershell Invoke-RestMethod -Method POST -Uri "http://127.0.0.1:$port/dsh-destinywind-memory/memories"
-Body ([System.Text.Encoding]::UTF8.GetBytes($body))
-ContentType 'application/json; charset=utf-8'
新增条目的 id 由数据库自增分配;已有条目的 id 不会因为新增或删除而改变。
推荐写法
记忆库会进入每一个对话的系统提示,越短越好:
1. 约束型信息(「必须/禁止」类)直接写清楚,一行一条,可带 约束 标签。
2. 长知识写成技能,记忆里只留一句索引;技能正文放 %USERPROFILE%\.dsh\skills\<名字>\SKILL.md。
3. 更大的资料放磁盘文档,记忆里只给路径。
文件
| 路径 | 作用 |
| index.js | Host 半:SQLite 存储、旧库一次性迁移、HTTP 路由、系统提示词 section / 运行时上下文 / 末尾提醒 |
| src/store-sqlite.js | SQLite 存储层:建表、增删查、事务、WAL |
| client.js | Client 半:设置面板「记忆」页 UI |
| cordis.patch.yml | 把本插件插入 composition(含 tailReminder 配置示例) |
| locale/zh.json、locale/en.json | 插件元信息文案(中 / 英) |
| icon.svg | 插件图标(大脑剖面 + 记忆节点) |
| tests/store-sqlite.test.mjs | 存储层单测:特殊符号往返、id 语义、标签顺序、持久化 |
| tests/memory-bank.test.mjs | 端到端:迁移、HTTP API、三层注入 |
跑测试: powershell
node tests/store-sqlite.test.mjs
node tests/memory-bank.test.mjs
或
npm test
需要 Node ≥ 22.5(用到内置的 node:sqlite,无原生依赖)。
Host 侧改动(index.js、src/)重启 dsh web 生效;Client 侧改动(client.js)刷新页面(F5)即可。
安装与卸载
- 本插件声明了 dsh.bundle.patch,装完即生效。
- 从 GitHub 安装:plugin_manager { action: "install_bundle", target: "<owner>/<repo>" },安装后重启 dsh web。
- 卸载不会删除已存记忆:内容在 ~/.dsh/destinywind-memory/memory.sqlite,需要自行删除。
许可
MIT,见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
rickwindman/dsh-destinywind-memory
把长期记忆注入每个会话,随时增删改查
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,462已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,848已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,246已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 4,717已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,711已汉化DSH
71.1