把约定与教训存入数据库,每次会话自动带回模型眼前
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-xiaoyi/jiyijiushiguang该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 68 处,展示前 36 条)
- 读取本地文件memory/dsh-zstd-extract.js:16
const buf = fs.readFileSync(src); - 写入本地文件memory/dsh-zstd-extract.js:36
fs.writeFileSync(dst, all); - 读取本地文件memory/plugin/index.mjs:130
if (c && existsSync(c)) { chosen = c; break } - 读取本地文件memory/plugin/index.mjs:138
const require_stat = function (f) { return statSync(f) } - 读取本地文件memory/plugin/index.mjs:141
if (!f || !existsSync(f)) return 'missing' - 读取本地文件memory/plugin/index.mjs:189
const b = readFileSync(new URL(import.meta.url)) - 执行外部命令固定命令memory/plugin/index.mjs:201
const r2 = spawnSync('whoami', ['/groups', '/fo', 'csv', '/nh'], { encoding: 'utf8', timeout: 4000 }) - 写入本地文件memory/plugin/index.mjs:244
try { if (logPath) writeFileSync(logPath, line, { flag: 'a' }) } catch (e) { } - 写入本地文件memory/plugin/index.mjs:246
try { if ((msg.indexOf('INJECT-') === 0 || msg.indexOf('SEMANTIC-') === 0 || msg.indexOf('PATH-') === 0 || msg.indexOf('CONVENTIONS-') === 0) && injec - 读取本地文件memory/plugin/index.mjs:255
if (!existsSync(replicaPath)) { - 读取本地文件memory/plugin/index.mjs:261
let rawText = readFileSync(replicaPath, 'utf8') - 删除本地文件memory/plugin/index.mjs:310
try { rmSync(coreOut, { force: true }) } catch (e) {} - 执行外部命令来自配置/变量memory/plugin/index.mjs:312
rr = spawnSync(powershell, ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', coreRulesPath, '-Tier', 'core', '-OutFile', coreOut], { encoding: 'ut - 执行外部命令固定命令memory/plugin/index.mjs:370
const res = spawnSync('curl.exe', ['-s', '--max-time', '12', '-X', 'POST', ollamaUrl + '/api/embed', - 写入本地文件memory/plugin/index.mjs:878
writeFileSync(tPath, title, 'utf8') - 写入本地文件memory/plugin/index.mjs:879
writeFileSync(bPath, body, 'utf8') - 写入本地文件memory/plugin/index.mjs:890
writeFileSync(sPath, machine, 'utf8') - 写入本地文件memory/plugin/index.mjs:898
writeFileSync(wPath, '\uFEFF' + ps, 'utf8') - 执行外部命令来自配置/变量memory/plugin/index.mjs:900
const child = spawn(powershell, ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', wPath], { stdio: 'ignore', windowsHide: true - 删除本地文件递归memory/plugin/index.mjs:903
try { rmSync(dir, { recursive: true, force: true }) } catch (e) { } - 删除本地文件递归memory/plugin/index.mjs:907
try { rmSync(dir, { recursive: true, force: true }) } catch (e) { } - 读取本地文件memory/plugin/verify.mjs:45
const replicaPath = candidates.find((p) => { try { return existsSync(p) } catch (e) { return false } }) - 读取本地文件memory/plugin/verify.mjs:48
for (const c of candidates) console.log(' ' + (existsSync(c) ? '[有] ' : '[无] ') + c) - 删除本地文件memory/plugin/verify.mjs:69
try { rmSync(probeLog, { force: true }) } catch (e) { } - 写入本地文件memory/plugin/verify.mjs:76
writeFileSync(stubCli, ['$ErrorActionPreference = "SilentlyContinue"', 'exit 0'].join('\r\n'), 'utf8') - 读取本地文件memory/plugin/verify.mjs:104
try { tailLog = readFileSync(probeLog, 'utf8') } catch (e) { } - 删除本地文件memory/plugin/verify.mjs:113
try { rmSync(spoolLog, { force: true }) } catch (e) { } - 删除本地文件memory/plugin/verify.mjs:114
try { rmSync(spoolPath, { force: true }) } catch (e) { } - 读取本地文件memory/plugin/verify.mjs:120
try { armedLog = readFileSync(spoolLog, 'utf8') } catch (e) { } - 读取本地文件memory/plugin/verify.mjs:166
let raw = readFileSync(replicaPath, 'utf8') - 删除本地文件memory/plugin/verify.mjs:213
try { rmSync(out, { force: true }) } catch (e) { } - 执行外部命令固定命令memory/plugin/verify.mjs:214
const r = spawnSync('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', - 读取本地文件memory/plugin/verify.mjs:216
if (!r || r.status !== 0 || !existsSync(out)) return null - 删除本地文件memory/plugin/verify.mjs:319
try { rmSync(probeLog, { force: true }) } catch (e) { } - 删除本地文件memory/plugin/verify.mjs:347
try { rmSync(argsPath, { force: true }) } catch (e) { } - 写入本地文件memory/plugin/verify.mjs:348
writeFileSync(stubPath, [
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(123 字)↓
记忆旧时光 · Long-term memory for DeepSeek Harness:把每次定下的事存进你自己的数据库,每次会话开局把该记得的放回它眼前。支持 SQL Server / MySQL / SQLite 三种后端(同一份引擎)。
README
由 DeepSeek 最新模型翻译生成记忆旧时光(jiyijiushiguang)
让 DSH 记住你们定过的约定。 会话再长,也不用重新解释一遍。
一个最小可用的长期记忆层:把对话与决定存进你自己的数据库,并在每次会话开局,把「该记得的东西」自动放到模型眼前 —— 而不是指望它恰好没被上下文截断。
第一次读到这里,不必一次记住;先照着跑一遍,遇到问题再回来查对应那一节。
后端成熟度(2026-10-24)
- SQL Server:功能 ✅ / 长期运行 ✅ 已验证(生产环境连续数周)
- MySQL(5.7 / 8.0):功能 ✅(15 命令 + 独立断言)/ 长期运行 ⚠️ 未验证
- SQLite(3.33+):功能 ✅(同上)/ 长期运行 ⚠️ 未验证
也就是说:MySQL 与 SQLite 后端现在就能用,但「连续跑几周不出问题」还没有时间证明。
细节见 docs/16-long-term-notes。
它解决什么问题
单个 DSH 聊久了会开始「忘记」:昨天定过的规则、上周踩过的坑、你反复纠正的那几条。
这不是模型变笨,是每次会话只看得到最近一小段上下文,而那段里没有你们定过的东西。
展开完整文档(README 剩余 1 节)
记忆旧时光(jiyijiushiguang)
让 DSH 记住你们定过的约定。 会话再长,也不用重新解释一遍。
一个最小可用的长期记忆层:把对话与决定存进你自己的数据库,并在每次会话开局,把「该记得的东西」自动放到模型眼前 —— 而不是指望它恰好没被上下文截断。
第一次读到这里,不必一次记住;先照着跑一遍,遇到问题再回来查对应那一节。
后端成熟度(2026-10-24)
- SQL Server:功能 ✅ / 长期运行 ✅ 已验证(生产环境连续数周)
- MySQL(5.7 / 8.0):功能 ✅(15 命令 + 独立断言)/ 长期运行 ⚠️ 未验证
- SQLite(3.33+):功能 ✅(同上)/ 长期运行 ⚠️ 未验证
也就是说:MySQL 与 SQLite 后端现在就能用,但「连续跑几周不出问题」还没有时间证明。
细节见 docs/16-long-term-notes。
它解决什么问题
单个 DSH 聊久了会开始「忘记」:昨天定过的规则、上周踩过的坑、你反复纠正的那几条。
这不是模型变笨,是每次会话只看得到最近一小段上下文,而那段里没有你们定过的东西。
本项目做三件事:
1. 存:会话、消息、决定、教训都进数据库(可追溯、可回滚、可备份)
2. 取:按关键词 + IDF(稀有词加权)检索,不用语义模型也能答到点上
3. 放:每轮会话自动注入「强制指令 + 相关旧记忆 + 关键约定全文 + 定义型记忆」
环境要求
PowerShell 5.1+(Windows 10 / 11 / Server 2016 及以上系统自带) Node.js(只有注入插件需要) SQL Server(Express 免费版即可)—— 建表时需要一次 sysadmin Windows 7 用户:需先装 WMF 5.1(系统自带的是 PowerShell 2.0),否则脚本无法运行
一键安装(三个后端任选)
SQLite(零安装,最省事) powershell -ExecutionPolicy Bypass -File .\ops\install.ps1 -Provider sqlite -SqliteDb C:\dsh-mem\data\dsh-mem.db MySQL(口令放文件,别上命令行) powershell -ExecutionPolicy Bypass -File .\ops\install.ps1 -Provider mysql -MySqlServer 127.0.0.1,3306 -MySqlPasswordFile C:\temp\pw.txt SQL Server(默认) powershell -ExecutionPolicy Bypass -File .\ops\install.ps1 -Provider sqlserver -SqlServer 127.0.0.1,1433 -Database DSHMemory
给智能体/自动化用的详细步骤与判定标准见 AGENTS.md。
下面是 SQL Server 的手动步骤(其它后端见 docs/13、docs/14)。
5 分钟跑起来(Windows + SQL Server)
0) 前置:Windows + PowerShell 5.1+ + SQL Server(Express 免费版即可)
1) 复制配置并改连接串
mkdir C:\dsh-mem
Copy-Item examples\config.example.json C:\dsh-mem\dsh-mem.config.json
notepad C:\dsh-mem\dsh-mem.config.json
2) 建库建表(需要 SQL sysadmin,一次性)先建库:CREATE DATABASE DSHMemory;
foreach ($f in Get-ChildItem sql\sqlserver\.sql | Sort-Object Name) {
sqlcmd -E -d DSHMemory -i $f.FullName
}
3) 装注入插件(这一步才是"记忆真的进到会话里"的关键) $pd = Join-Path $env:USERPROFILE '.dsh\profiles\desktop' New-Item -ItemType Directory -Path (Join-Path $pd 'node_modules') -Force | Out-Null cmd /c mklink /D "$pd\node_modules\dsh-memory-bridge" "$PWD\memory\plugin" 然后在 $pd\package.json 的 dependencies 里加一行: "dsh-memory-bridge": "link:<仓库路径>\memory\plugin" ★ 重启 DSH(不重启 = 插件不加载,而且不会报错,最容易被忽略)
4) 体检 powershell -File ops\doctor.ps1 -ConfigPath C:\dsh-mem\dsh-mem.config.json
5) 存一条、再搜回来 powershell -File memory\dsh-mem.ps1 save -Title "第一条记忆" -Body "你好" -Scope global powershell -File memory\dsh-mem.ps1 search 记忆
跑通之后,下一次会话你应该能看到注入段落里出现「关键约定」与「自动检索」。
记忆是怎么"保持新鲜"的(重要)
注入插件读的是一份离线副本(JSON),不是每次都查库。所以刷新机制必须有人负责:
方式 A(推荐,开箱即用):ops\install.ps1 -RegisterTasks → 注册两个计划任务:DSH_MemReplica(每 1 分钟导出副本)、DSH_MemSync(每 3 分钟导入新会话)
方式 B(不注册任务也行):插件会在副本过期(默认 180 秒)时自己在后台触发一次刷新 → 效果略慢一拍,但零配置
本仓库不包含任何常驻服务/闭源程序:刷新要么靠计划任务,要么靠插件自触发,二选一即可。
MySQL 版怎么装(v0.3.3 · 5.7 / 8.0 已验证;长期运行未验证)
版本要求:MySQL 5.6.4+(推荐 5.7 / 8.0;8.4+ 见下方"认证插件"一行)实测环境:MySQL 8.0.12 / Windows。MariaDB 理论可用但未测。
细节见 docs/13-mysql-compatibility.md
1) 建库(utf8mb4 必须显式) mysql -uroot -p -e "CREATE DATABASE dsh_memory CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
2) 建账号(只给这个库的权限)认证插件按你的版本选:≤8.3 用 mysql_native_password;8.4+ 默认禁用该插件,去掉 IDENTIFIED WITH 让它用默认插件 mysql -uroot -p -e "CREATE USER 'dsh'@'%' IDENTIFIED WITH mysql_native_password BY '你的强口令'; GRANT ALL PRIVILEGES ON dsh_memory. TO 'dsh'@'%'; FLUSH PRIVILEGES;"
3) 建表(按编号执行;连接时把会话时区设为 UTC) for f in sql/mysql/0*.sql; do mysql --defaults-extra-file=my.cnf --init-command="SET time_zone='+00:00'" dsh_memory < "$f" done
4) 验收 mysql --defaults-extra-file=my.cnf -t dsh_memory < sql/mysql/009-verify.sql
⚠ 安全:账号、端口、备份、字符集这几件事请先看 docs/12-mysql-security。
SQLite 版的边界更物理(文件权限就是全部安全边界),见 docs/14-sqlite。
验收时请按 docs/15-verification-checklist 自己查库 —— 引擎说「OK」不算证据。
打算长期运行的话,先看 docs/16-long-term-notes(哪些能放心用、哪些还没验证、小机器怎么配)。
实测环境:MySQL 8.0.12(Windows),10 张表 + 6 个只追加触发器全部建成; UPDATE/DELETE messages 会被触发器拦住(SQLSTATE 45000),UPDATE memories 正常放行。
目录
memory\ 引擎(dsh-mem.ps1)+ 注入插件(plugin\)+ 约定模板(conventions.example.md) sql\ 建表脚本,按数据库分目录:sqlserver\ · mysql\ · sqlite\(三套都已验证) ops\ install.ps1(一键装)/ doctor.ps1(体检)/ secret-scan.ps1(发布前扫描) examples\ config.example.json(占位值) docs\ 为什么做 / 记忆设计(含三层缺陷复盘)/ 复盘集 / 权限与安全软件
数据库支持(重要)
| 数据库 | 功能 | 长期运行 | 适合谁 |
| SQL Server | ✅ v0.1.0 | ✅ 已验证(生产连续数周) | 已有 SQL Server 授权的人 |
| MySQL 5.7 / 8.0 | ✅ v0.3.3(15 命令 + 独立断言) | ⚠️ 未做长期测试 | 多机共享、又不想买 SQL Server 授权的人 |
| SQLite 3.33+ | ✅ v0.3.3(15 命令 + 独立断言) | ⚠️ 未做长期测试 | 单机用户:零安装、零授权、一个文件 |
我们自己的集群仍跑 SQL Server,不切换;SQLite/MySQL 会作为独立版本开发、测试通过后再发布。
这样每个版本都能"下载就能用",而不是让用户自己改连接字符串和方言。
边界(说清楚,避免误解)
- 记忆库里的数据不随仓库发布;仓库只有代码、结构与模板。
- 这是 v0.2.2(experimental):接口可能变,重要环境请先备份。
- 检索是关键词 + IDF,不是语义向量(向量表已留好,后续可接)。
权限与安全软件
装不动、或被杀软拦?看 docs/08-permissions-and-antivirus:里面列了每一步需要什么权限(建表 sysadmin、插件要 profile 写权限…),以及 360 / Defender 常见拦截点与"加白名单而不是关防护"的做法。
文档
| 文件 | 内容 |
| docs/00-why | 我们为什么做这个(含三次失败) |
| docs/02-memory-design | 注入四段、为什么必须 IDF、三层缺陷复盘 |
| docs/04-postmortems | 真实事故与修法 |
| docs/08-permissions-and-antivirus | 权限要求 + 安全软件拦截 |
| docs/ROADMAP | 接下来做什么(SQLite / MySQL / 向量检索) |
| docs/09-file-map | 每个文件是干什么的 |
许可与署名
MIT。作者:小易
致谢
这套东西起于一个很朴素的问题:"你怎么又忘了?" 如果你也在解决同一类问题,希望这里踩过的坑能帮你少走几步。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dsh-xiaoyi/jiyijiushiguang
把约定与教训存入数据库,每次会话自动带回模型眼前
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目