🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

记忆回溯 adithyanraj03/dsh-memory-recall

DeepSeek Harness
adithyanraj0339 天前有提交已提供中文文档扫描:含敏感能力

让模型记住你的偏好并回顾过往对话

29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add adithyanraj03/dsh-memory-recall
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · chat
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 39 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 17 条)
  • 发起网络请求
    lib/client.js:410
    const res = await fetch(BASE + "/recall?callId=" + encodeURIComponent(callId), { headers: { accept: "application/json" } });
  • 发起网络请求
    lib/client.js:518
    const res = await fetch(BASE + path, { headers: { accept: "application/json", "content-type": "application/json" }, ...init });
  • 发起网络请求
    lib/client.js:1313
    const res = await fetch(BASE + "/chats?session=" + encodeURIComponent(sessionId || ""), { signal, headers: { accept: "application/json" } });
  • 读取本地文件
    src/store.js:93
    const saved = JSON.parse(readFileSync(this.settingsPath(), 'utf8'));
  • 写入本地文件
    src/store.js:120
    await mkdir(this.dir, { recursive: true });
  • 写入本地文件
    src/store.js:123
    await writeFile(temp, `${JSON.stringify({ limits: this.limits }, null, 2)}\n`, 'utf8');
  • 写入本地文件
    src/store.js:124
    await rename(temp, path);
  • 删除本地文件
    src/store.js:136
    await unlink(this.settingsPath());
  • 读取本地文件
    src/store.js:163
    return parseEntries(await readFile(this.pathFor(target), 'utf8'));
  • 读取本地文件
    src/store.js:179
    this.entries[target] = parseEntries(readFileSync(this.pathFor(target), 'utf8'));
  • 写入本地文件
    src/store.js:195
    await mkdir(this.dir, { recursive: true });
  • 写入本地文件
    src/store.js:198
    await writeFile(temp, entries.length ? `${joinEntries(entries)}\n` : '', 'utf8');
  • 写入本地文件
    src/store.js:199
    await rename(temp, path);
  • 发起网络请求
    src/recall-tool.js:128
    const outcome = await approval.request({
  • 读取本地文件
    src/dsh-tools.js:23
    const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
  • 读取本地文件
    src/dsh-tools.js:43
    if (existsSync(join(candidate, 'package.json'))) {
  • 读取本地文件
    src/dsh-tools.js:46
    if (existsSync(entry)) return entry;
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 维护用户配置档
  • 记录模型笔记
  • 检索历史对话

给 dsh 做持久记忆,风格仿 Hermes Agent:一个记忆工具,维护用户配置档和模型自己的笔记,每次对话都作为带日志的上下文消息送达,另有 session_search 检索历史对话,需经审批提示词放行。

README

由 DeepSeek 最新模型翻译生成
dsh-memory-recall language style license node dsh runtime tests 一个 DeepSeek Harness 插件,以 Hermes Agent 的风格为模型赋予记忆能力:它对你和你的项目的了解会延续到每一次新对话中,并且它可以回顾你之前的对话——但仅在你允许之后。 一切都留在你的机器上。 两个小文本文件、dsh 自带的会话索引,没有嵌入向量,没有服务,没有遥测。 记忆面板:模型的笔记,带有预算条和内联编辑 它做六件事: - 一个 memory 工具——模型维护两个简短文件:一份用户画像(你是谁、你喜欢怎样工作)和它自己的笔记(环境事实、约定、经验教训)。每次对话都会带上这两者,作为一条你可以在对话中看到的上下文消息——在开始时,以及在变更或压缩之后再次出现。 - 消息框中的 🧠 按钮——当此对话有记忆时亮起,没有记忆时变暗,当记忆自上次以来发生变化时呈琥珀色;点击它可查看此对话正在使用什么。 - 一个 session_search 工具——模型会读取你之前的对话来回答“上次我们决定了什么?”。dsh 自带的审批提示会先询问你,并说明它想查找什么。 - 对话中的 🧠 已保存到记忆提示——每次保存都会显示变更了什么以及记忆有多满,因此不会有任何东西在你背后被记住。
展开完整文档(README 剩余 1 节)
dsh-memory-recall

language style license node dsh runtime tests

一个 DeepSeek Harness 插件,以 Hermes Agent 的风格为模型赋予记忆能力:它对你和你的项目的了解会延续到每一次新对话中,并且它可以回顾你之前的对话——但仅在你允许之后。

一切都留在你的机器上。 两个小文本文件、dsh 自带的会话索引,没有嵌入向量,没有服务,没有遥测。

记忆面板:模型的笔记,带有预算条和内联编辑

它做六件事:

- 一个 memory 工具——模型维护两个简短文件:一份用户画像(你是谁、你喜欢怎样工作)和它自己的笔记(环境事实、约定、经验教训)。每次对话都会带上这两者,作为一条你可以在对话中看到的上下文消息——在开始时,以及在变更或压缩之后再次出现。
- 消息框中的 🧠 按钮——当此对话有记忆时亮起,没有记忆时变暗,当记忆自上次以来发生变化时呈琥珀色;点击它可查看此对话正在使用什么。
- 一个 session_search 工具——模型会读取你之前的对话来回答“上次我们决定了什么?”。dsh 自带的审批提示会先询问你,并说明它想查找什么。
- 对话中的 🧠 已保存到记忆提示——每次保存都会显示变更了什么以及记忆有多满,因此不会有任何东西在你背后被记住。
- 侧边栏 🧠 记忆面板——所有保存的内容,分两个标签页,支持编辑、删除、添加和搜索。
- @ 菜单中的对话和工作区——按工作区分组,显示其真实标题,因此你可以把一个对话交给模型,或将其搜索指向某个工作区。

安装

需要一个可正常工作的 dsh(0.1.5 或更高版本),并带有 web profile。

dsh plugin --profile web add dsh-memory-recall
dsh --profile web

或者从 GitHub 或本地文件夹安装:

dsh plugin --profile web add github:adithyanraj03/dsh-memory-recall
dsh plugin --profile web add /path/to/dsh-memory-recall

然后,如果 dsh 已在运行,请重启 dsh(dsh --profile web),并强制刷新浏览器(Ctrl+Shift+R / Cmd+Shift+R)——普通刷新可能会提供缓存的客户端 bundle。🧠 记忆会出现在侧边栏底部。

开启 dsh 的全文搜索(推荐)

session_search 使用 dsh 自带的会话索引,而 dsh 默认将其关闭。将以下内容添加到你的 profile 的 cordis.patch.yml(~/.dsh/profiles/web/cordis.patch.yml)中:

- id: session-query-sqlite
config:
path: '/absolute/path/to/.dsh/session-search.db'
openAt: first-search

first-search 仅在首次搜索时打开索引;文件路径则让它在重启后依然保留。索引派生自你的会话日志,因此删除该文件只会付出重建的代价。覆盖项会替换该行的整个配置——两个键都要保留。

没有它,session_search 仍然可用:它会退回到对你最近 150 个聊天进行字面扫描——更慢且无排序——并在其卡片中说明这一点。

你会得到什么

可延续的记忆

直接说就行。模型会保存之后重要的内容——你使用 PowerShell、某台服务器在另一台机器上、文档构建会因末尾冒号而失败——每次保存都会出现在聊天中。点击它即可查看具体改了什么,以及该存储有多满:

聊天中的保存:一条新增笔记和一条更新的个人资料条目,各带有其预算

笔记的全部五种状态:保存中、已保存、已更新、已满——正在腾出空间,以及被安全扫描阻止的写入

你也可以直接要求:“记住我更喜欢简短回答”、“忘掉我使用 npm”。

记忆会以上下文消息的形式到达模型——在聊天中记录为 🧠 Memory loaded——在它首次回答之前,并在任何内容发生变化或对话被压缩后再次发送,因此聊天中途所做的保存会从下一步起在同一个聊天中被使用。系统提示只保留简短的操作说明,它从不改变,因此 dsh 的提示缓存得以保持。

回顾更早的聊天

提到更早的对话——“我们关于回滚决定了什么?”、“像上次那样做”——模型就会调用 session_search。dsh 的批准提示会接管消息框,显示它想读取的内容,例如 在你的更早聊天中搜索“deploy rollback”。,并带有 Allow 和 Deny。它找到的聊天会出现在一张卡片中,每个都带有日期、匹配行和打开链接:

一张回忆卡片:为“deploy rollback”找到的三个更早聊天,带有匹配行

它返回聊天的实际消息——没有摘要,没有编造——截断到约 9,000 个字符,因此一次搜索不会淹没上下文。发起提问的聊天和子代理会话永远不会成为结果。

Memory 面板

🧠 Memory,位于侧边栏底部、⏱️ Scheduled 上方(当两者都安装时),打开所有被保留的内容:

- Notes 和 Profile 标签页,各带有一个圆环和一个显示其有多满的进度条。
- 就地编辑或删除任何条目(悬停其上),删除时有内联确认。
- 自己添加条目,并在某个标签页有几条内容后搜索。
- ⚙ Display settings——按浏览器分别开启或关闭消息框中的 🧠 按钮以及 @ 中的聊天和工作区。
- 侧边栏折叠时,它会像 Settings 一样变成一个单独的图标。

浅色主题下的 Profile 标签页你在这里所做的编辑是你自己的话,因此不会被扫描(参见安全),但它们仍然遵守预算。对文件的手动编辑会立即显示在面板中,并在打开的聊天中从它们的下一步开始显示。

@ 菜单中的聊天和工作区

在消息框中输入 @。在 dsh 自己的文件和文件夹下方,你的聊天会按工作区分组列出,位于侧边栏显示的标题下:

- 仅 @ — 此工作区及其最近的聊天,然后是工作区及所有其他工作区以及它们各自包含的聊天数量,最后是不属于任何工作区的聊天。
- @ + 文本 — 匹配的工作区,然后是它们工作区标题下匹配的聊天。
- 在工作区上按 Tab 或点击箭头 — 显示其所有聊天,并带有一个所有工作区的返回路径。

选择一个聊天,dsh 会将其只读快照附加到你的消息中,正如它自己的 @ 聊天行所做的那样——无需搜索,也无需权限提示,因为是你选择的。选择一个工作区,它会以 [workspace "Web Search" — /path/to/Web Search] 的形式传递给模型;随后 session_search 只搜索该工作区的聊天(一如既往,先询问)。

每个聊天都会获得一个可读的名称——它的标题,或者如果它从未有过标题,则是其第一条消息的开头。子代理会话会被排除在外,且没有任何数量上限为 50。这些行取代了 dsh 自己扁平的 @ 聊天列表,而其文件行保持不变;dsh 没有为此提供开关,因此插件会包装其 @ 来源,并在卸载时恢复它。

询问的工作方式

- 读取较早的聊天会先询问,通过 dsh 自己的批准提示。
- 一次允许涵盖该回复。 搜索之后通常会紧接着更仔细地读取最佳匹配项;为一个问题询问两次是噪音。该权限在回复结束时终止,因此下一个问题会再次询问。
- 拒绝意味着不读取任何内容,并且模型会被告知在该回复中不要再询问。如果提示被撤回(你停止了回复)或无法询问任何人,也不会读取任何内容。
- 保存到记忆不会询问——它始终显示在聊天中,并且可以在记忆面板中撤销。这与 Hermes Agent 的默认行为一致。

如果 dsh 在 danger-full-access 模式下运行,其批准策略为 never,这会拒绝每一个批准请求而不提示——因此在那里回忆会被拒绝。如果你希望在该模式下无需询问即可回忆,请设置 askBeforeRecall: false。

模型会得到什么

分为两部分,以便 dsh 的提示缓存得以保留:

1. 操作方法——一段简短、不变的系统提示说明,介绍记忆的工作方式。它是提示前缀中唯一的记忆,因此永远不会使缓存失效。
2. 记忆本身——一条上下文消息,在聊天中记录为 🧠 Memory loaded,两个存储区按照 Hermes 渲染它们的方式呈现:

══════════════════════════════════════════════
USER PROFILE (who the user is) [14% — 189/1,375 chars] ══════════════════════════════════════════════ Works on Windows 11 in PowerShell; projects live under D:/code. § Prefers short answers with the command first, explanation after.

预算刻意设得很小——2,200 字符的笔记和 1,375 字符的档案,这是 Hermes 的默认值,合计大约 900 个 token——因为它们要在每次聊天中付费。当存储已满时,会导致其溢出的保存会被整体拒绝,绝不会被截断;模型会看到这些条目,并在一批中整合,合并或丢弃过时的条目并添加新条目,然后对照最终大小进行检查。如果你宁愿每次聊天支付更多,可以用 limits(见下文)提高预算。

子代理会话不会收到该消息;它们是模型自己的工作进程。

配置

全部可选,位于配置文件的 cordis.patch.yml 中此插件的行上:

- id: dsh-memory-recall
config:
limits:
memory: 4000
user: 1375

| 键 | 默认值 | 含义 |
| dir | ~/.dsh/dsh-memory-recall | USER.md 和 MEMORY.md 所在的位置 |
| limits | {memory: 2200, user: 1375} | 笔记和档案的字符预算 |
| recall | true | false 会移除 session_search 并保留记忆 |
| askBeforeRecall | true | false 会在不询问的情况下读取更早的聊天 |

覆盖会替换该行的整个配置,因此请重新声明你设置的每个键。更改后请重启 dsh。

安全

记忆会被重新读取到每个未来的聊天中,因此被投毒的条目会持续指示模型,直到有人将其删除。模型所做的每次写入都会被扫描,以查找提示注入和窃取信息的措辞——忽略之前的指令、不要告诉用户、将机密通过管道发送到 URL、SSH 密钥、对 dsh 自身配置的编辑、隐藏的 Unicode——并会连同原因一起被拒绝。这些模式来自 Hermes Agent。

其他防护措施:

- 更改会先重新读取文件,因此手动编辑绝不会被过时的副本覆盖;写入是原子的,并且一次只进行一次。
- 替换和移除需要一段对某个条目唯一的文本;有歧义的会被拒绝,而不是猜测。
- 一批操作要么全部成功,要么全部失败。

工作原理

- 宿主侧(src/index.js、src/inject.js):注册 memory 和 session_search 工具,在 agent/session-start 时在每个新的顶层聊天的系统提示中保留一段简短的操作说明,并在每个模型步骤之前(agent/pre-step)当聊天尚未看到当前记忆时,将其作为已记录上下文消息追加到该步骤的消息中——在开始时、更改后以及压缩后。它在 /plugin-data/dsh-memory-recall/ 下提供面板的路由。召回通过 dsh 的 sessionQuery 服务及其 approval 服务进行;不与网络通信。

- 客户端(lib/client.js,纯 JavaScript,无需构建步骤):聊天内的 chip 和 recall 卡片通过 tool.call.toolview 插槽替换 dsh 自身针对这两个工具的行;🧠 Memory loaded / reloaded / updated 行是一个 conversation.chat.node,它以优先级 −10 遮蔽插件自身的上下文消息,并委托所有其他行;🧠 按钮挂载到 conversation.input.right;面板挂载到 sidebar.footer.action;@ 行是一个 inputTriggers 源。
- 文件:

~/.dsh/dsh-memory-recall/USER.md 用户配置文件 ~/.dsh/dsh-memory-recall/MEMORY.md 模型的笔记

纯文本,条目之间以仅含 § 的一行分隔——与 Hermes 相同的格式,可读且可手动编辑。

要求

- dsh 0.1.5 或更高版本,并带有 web 配置文件
- Node 22+
- 无运行时依赖——客户端 bundle 仅需要 react

致谢

该设计——两个有界存储、每个聊天冻结的快照、针对最终预算的批量规则、session_search 的形态、以 § 分隔的文件以及威胁模式——来自 Nous Research 的 Hermes Agent(MIT)。大脑图标来自 Lucide(ISC)和 Phosphor(MIT)。

许可证

MIT——请参阅 LICENSE 文件,其中也包含 Hermes Agent、Lucide 和 Phosphor 的声明。
预览分享卡片长什么样 ↓adithyanraj03/dsh-memory-recall
分享 · DeepSeek Harness Hub
adithyanraj03/dsh-memory-recall

让模型记住你的偏好并回顾过往对话

这是你的仓库?认领条目

回到顶部