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

Obsidian 记忆库 MengXinSu/dsh-viya-memory

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

给 DeepSeek Harness 的本地长期记忆 —— 卡片就是 Markdown 文件,存在你自己的…

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MengXinSu/dsh-viya-memory
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包viya-memory(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 16:17:13

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件
查看扫描证据(共 50 处,展示前 16 条)
  • 读取本地文件
    lib/index.js:157
    if (!fs.existsSync(basePath)) return basePath
  • 读取本地文件
    lib/index.js:162
    if (!fs.existsSync(next)) return next
  • 读取本地文件
    lib/index.js:837
    if (!samePath && fs.existsSync(newPath)) {
  • 读取本地文件
    lib/index.js:851
    const stat = fs.statSync(card.path)
  • 读取本地文件
    lib/index.js:860
    const after = fs.statSync(card.path)
  • 删除本地文件
    lib/index.js:862
    try { fs.rmSync(newPath, { force: true }) } catch { }
  • 删除本地文件
    lib/index.js:865
    fs.rmSync(card.path, { force: true })
  • 读取本地文件
    lib/index.js:887
    const st = fs.statSync(other.path)
  • 写入本地文件
    lib/index.js:932
    fs.mkdirSync(root, { recursive: true })
  • 写入本地文件
    lib/index.js:1147
    fs.mkdirSync(path.join(root, dirName), { recursive: true })
  • 写入本地文件
    lib/index.js:1234
    fs.mkdirSync(targetDir, { recursive: true })
  • 写入本地文件
    lib/index.js:1254
    fs.copyFileSync(candidate, dest, fs.constants.COPYFILE_EXCL)
  • 写入本地文件
    lib/index.js:1279
    fs.mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/index.js:1287
    fs.writeFileSync(tmp, content, 'utf8')
  • 删除本地文件
    lib/index.js:1291
    try { fs.unlinkSync(tmp) } catch { }
  • 删除本地文件
    lib/index.js:2321
    fs.rmSync(card.path, { force: true })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 本地长期记忆
  • 卡片存为Markdown

DeepSeek Harness 的本地长期记忆插件:卡片以 Markdown 存在你自己的 Obsidian vault 里

README

由 DeepSeek 最新模型翻译生成
viya-memory 给 DeepSeek Harness 的本地长期记忆 —— 卡片就是 Markdown 文件,存在你自己的 Obsidian vault 里。 一个 DSH host 插件:单文件、零构建、零外部依赖(只用 DSH 自带的 @deepseek-ai/schemastery),提供七个记忆工具,卡片以 Markdown + YAML frontmatter + [[]] 双链 落盘。 save · search · read · update · link · forget · stats English: A local long-term memory plugin for DeepSeek Harness. Cards are plain Markdown files in your own Obsidian vault — graph, backlinks, search and manual editing come for free. Seven model-facing tools, no database, no background process, no lock-in. 亮点 - 数据是你的:卡片就是 .md 文件,Obsidian 打开就能看、能改、能看图谱。不锁死在任何应用里。
展开完整文档(README 剩余 1 节)
viya-memory

给 DeepSeek Harness 的本地长期记忆 —— 卡片就是 Markdown 文件,存在你自己的 Obsidian vault 里。

一个 DSH host 插件:单文件、零构建、零外部依赖(只用 DSH 自带的 @deepseek-ai/schemastery),提供七个记忆工具,卡片以 Markdown + YAML frontmatter + [[]] 双链 落盘。

save · search · read · update · link · forget · stats

English: A local long-term memory plugin for DeepSeek Harness. Cards are plain Markdown files in
your own Obsidian vault — graph, backlinks, search and manual editing come for free. Seven model-facing tools, no database, no background process, no lock-in.

亮点

- 数据是你的:卡片就是 .md 文件,Obsidian 打开就能看、能改、能看图谱。不锁死在任何应用里。
- 关系白送:memory_link 往两张卡各写一条 [[双链]],要么两边都写、要么都不写,不留单向边。
- 不怕误删:删除是两步的——不带 confirm: true 只返回预览,一个字节都不动;默认软删进 _trashed/。
- 不覆盖你的手改:写入前比对 mtime,你在 Obsidian 里改过的卡不会被旧内容冲掉;你手写的 aliases、cssclasses 等字段逐字保留。
- 自动补 aliases:卡的文件名是 slug 版(标题-变成-这样.md)、标题是空格版,而卡之间的边又按标题记——少一行 aliases,[[卡片标题]] 在 Obsidian 里就解析不了(插件的死链判据认标题,所以从插件侧看不见)。写入时自动补;手写过 aliases 的卡绝不覆盖,标题含 | # [ ] 时跳过(那几种写在 [[]] 里本来就会被截断);想彻底关掉,手写一行任意 aliases 即可。
- 不让密钥入库:正文、标题、tags、keywords、关系说明命中密钥特征就拒绝写入(库常常会同步到网盘 / 手机)。
- 关得住:save / update / link / forget 只认库内,路径穿越、junction 绕路都会被拒。
- 调用即走:没有定时器、子进程、监听,不驻留后台;写入原子(临时文件 → rename)。1000 张卡规模下实测单次调用约 50–100ms(本机自测,非基准测试)。

安装

dsh plugin --profile <你的 profile 名> add github:MengXinSu/dsh-viya-memory

装完必须配置 library,否则第一次调用会直接报错——这是刻意的,免得卡片被静默写进意外目录。
host 插件改动后需重启 DSH 才生效。

配置

在 profile 的 cordis.patch.yml 里:

- id: viya-memory
name: viya-memory
config:
必填:你的 Obsidian vault 绝对路径 library: '/home/you/Obsidian/MyVault' # Windows: 'D:\Obsidian\MyVault'

| 键 | 默认 | 说明 |
| library | (必填) | vault 绝对路径 |
| userFile | 空(回落 <vault>/user.md) | 常驻 system prompt 的那份文件 |
| softLimit | 1000 | 正文软限(字),超了只提示、不拦 |
| hardLimit | 4000 | 正文硬限(字),超了报错 |
| searchBudget | 2000 | 检索结果总字符预算,超出的条目降级为截短摘要 |
| sensitiveScan | true | 写入前扫描密钥特征 |

七个工具

| 工具 | 参数(加粗必填) | 行为 |
| memory_save | title · content · kind · tags · keywords · importance · links · severity · occurred_at | 新建一张卡;同名卡已存在时,内容高度重合就跳过,否则另起 ## 更新 YYYY-MM-DD 一节追加。正文里的本地图片搬进 _assets/ 并原地改写引用 |
| memory_search | query · limit · tags · threshold · start_time · end_time | 返回标题 + 路径 + 标签 + 摘要。空格或 \| 分关键词(AND), 通配,只传 返回全部;默认 10 条、无上限 |
| memory_read | title / path(二选一) | 全文 + status / updated / links + 附件绝对路径;找不到时附最多 3 个相近标题 |
| memory_update | title · content · tags · status · importance · keywords · occurred_at | 给哪个改哪个,created 不动、updated 自动刷新 |
| memory_link | source · target · type · weight · description | 两张卡各写一条关系边(related / causes / explains / part_of / contradicts) |
| memory_forget | title · confirm · permanent | 两步删:先预览(删哪张、谁引用了它),confirm: true 才软删;permanent: true 真删,同样要确认 |
| memory_stats | (无) | 只读体检:卡数 / 分布 / 超长卡 / 死链 / 库外链接 / 重名卡 / 回收站 |

user.md:唯一常驻 prompt 的东西

<vault>/user.md 会被注入 system prompt 末尾——这是插件唯一常驻上下文的部分,只放低频变化的东西:称呼、禁忌、偏好。它由你手写,插件不提供写入工具(模型不该有权改你的规矩)。改完下一次请求即生效——每次组装 system prompt 都现读该文件,不缓存。

目录结构

<你的 vault>/ ├── user.md # 常驻 prompt(你手写) ├── 03-Knowledge/ # 默认目录(可建子文件夹,最深 8 层) ├── 02-Projects/ 04-Content/ 05-Prompts/ 06-Business/ 07-Tools/ 08-Mistakes/ ├── _assets/<卡片名>/ # 卡片引用的图片 └── _trashed/ # 软删的卡(恢复 = 拖回原目录)

kind 走三道闸匹配目录(精确 → 归一化 → 互为子串),都不中才新建 NN-slug 一级目录并在返回里报备。
_ / . 前缀目录(_trashed、_assets、.git、.obsidian)是保留区,不算卡目录。

行为细则(几个不写下来一定会踩的地方)

- 标签与关键词:tags: [a, b] 与标量 tags: a 都认;值里可带逗号(序列化自动加引号)、换行会压成空格。关键词中英文逗号都算分隔。
- frontmatter 兼容:认行尾注释 # …、块标量 | / >、CRLF、BOM;status 大小写不敏感。
- 文件名只是存储:Windows 非法字符(* : ? / \ " < > |)转成全角同形字,文件名可读;按字节截断到 150;撞名自动让位成 名-2.md。判重看标题,不看文件名。
- 路径口径:相对路径以库根为基准(与 Obsidian 一致)。memory_read 可读库外文件(看附件用);其余工具只认库内。路径形式的 title 只能写进卡目录或其子目录。
- 回收站:save / update / link 看不见回收站里的卡;往已标 deleted 的同名卡追加会报错,要先改回 approved 或换标题。
- 边的来源:frontmatter links 是声明过的边;正文里的 [[X]] 是派生边,不写回 frontmatter(正文删掉就没了);![[嵌入]] 不算边;同目标同类型只留一条。换 type 会把 weight / description 重置为默认值,除非同一次调用里显式给出。
- 删除预览的引用数按 Obsidian 口径:标题、文件名、目录前缀、锚点 / 别名都认,大小写不敏感。
- 图片:只搬明确的图片扩展名;代码块和行内代码里的图片语法不算图片;同名不同内容的图另起名字,不覆盖。
- 追加更新:kind 跟着卡的实际目录走;传了 occurred_at 就采用,不传保留原值。

测试

node --test tests/selftest.mjs

146 项,全部走真实执行路径(mock 一个 ctx 调 apply(),捕获实际注册的工具再真的调用):frontmatter 往返、 slug 与撞名、kind 三道闸、长度闸、敏感扫描、图片搬运、检索与预算降级、七个工具的完整行为、路径夹取与 junction、删除硬闸、user.md 注入,以及真文件系统端到端冒烟。

大部分用例是被测出来的 bug 反向补的回归;关键修复都做过变异验证(故意改坏 → 确认测试报警 → 恢复比对哈希)。

踩过的两个坑

1. cordis 的服务访问必须先声明 inject。 apply() 用了 ctx.systemPrompt 却没写进 inject,插件整条不激活——不报错,只是一个工具都没注册。mock 的 ctx 是普通对象,自测全绿也抓不到。
2. schemastery 的 .volatile() 字段是盒子对象。 解析后是 { get() } 而不是值:String(库路径) 得到 "[object Object]",数字阈值全变 NaN 比较、静默失效。

两条都补成了防复发自测。

碎碎念

调研了 23 款现成的记忆插件,然后忘了当初为什么要调研 —— 直接自己写了一个。

—— viya

致谢

感谢 Ww 为本项目的开发与测试提供了模型支持。

本项目由作者与 AI 协作完成:

- DeepSeek V4.1 Flash —— 从零写出第一版,陪作者一起干到凌晨;
- Claude Opus 5.5(Anthropic)—— 负责后续的代码审查、安全加固与测试补全。

License

MIT
预览分享卡片长什么样 ↓MengXinSu/dsh-viya-memory
分享 · DeepSeek Harness Hub
MengXinSu/dsh-viya-memory

给 DeepSeek Harness 的本地长期记忆 —— 卡片就是 Markdown 文件,存在你自己的…

这是你的仓库?认领条目

回到顶部