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

忆织 QuaonY/dsh-mem-weave

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

让 AI 记住你的偏好与项目,开新会话无需重述

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 55 处,展示前 50 条)
  • 读取本地文件
    bench/run.ts:30
    return JSON.parse(readFileSync(join(__dirname, "seed.json"), "utf8")) as Seed;
  • 读取本地文件
    bench/run.ts:35
    return JSON.parse(readFileSync(join(__dirname, "terms.json"), "utf8")) as Record<string, string[]>;
  • 写入剪贴板
    src/client/persona.ts:930
    void navigator.clipboard?.writeText(text)?.then(() => flash(t("persona.copy", state.lang) + " ok", "ok"));
  • 读取本地文件
    src/host/location.ts:30
    if (!existsSync(file)) return "";
  • 读取本地文件
    src/host/location.ts:31
    const raw = JSON.parse(readFileSync(file, "utf8")) as { dataDir?: unknown };
  • 写入本地文件
    src/host/location.ts:39
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    src/host/location.ts:41
    writeFileSync(tmp, JSON.stringify(value, null, 2), "utf8");
  • 写入本地文件
    src/host/location.ts:42
    renameSync(tmp, file);
  • 删除本地文件
    src/host/location.ts:50
    rmSync(pointerFile(), { force: true });
  • 读取本地文件
    src/host/location.ts:76
    if (!existsSync(file)) return {};
  • 读取本地文件
    src/host/location.ts:77
    const raw = JSON.parse(readFileSync(file, "utf8")) as unknown;
  • 读取本地文件
    src/host/logger.ts:73
    size = statSync(f).size;
  • 读取本地文件
    src/host/logger.ts:85
    for (const n of readdirSync(this.dir)) {
  • 读取本地文件
    src/host/logger.ts:100
    for (const n of readdirSync(this.dir)) {
  • 删除本地文件
    src/host/logger.ts:104
    unlinkSync(join(this.dir, n));
  • 写入本地文件
    src/host/logger.ts:120
    mkdirSync(this.dir, { recursive: true });
  • 写入本地文件
    src/host/logger.ts:127
    appendFileSync(this.currentFile(), line, "utf8");
  • 执行外部命令来自配置/变量
    src/host/pick-dir.ts:32
    child = spawn(cmd, args, { windowsHide: true, stdio: ["ignore", "pipe", "pipe"] });
  • 读取本地文件
    src/host/pick-dir.ts:84
    const start = initial && existsSync(initial) ? initial : "";
  • 读取本地文件
    src/host/service.ts:1379
    const st = statSync(path);
  • 读取本地文件
    src/host/service.ts:1382
    const raw = JSON.parse(readFileSync(path, "utf8")) as unknown;
  • 写入本地文件
    src/host/service.ts:1813
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    src/host/service.ts:1815
    if (existsSync(targetDb)) {
  • 读取本地文件
    src/host/service.ts:2316
    return readdirSync(dir)
  • 读取本地文件
    src/host/service.ts:2320
    const st = statSync(p);
  • 读取本地文件
    src/host/service.ts:2360
    for (const name of readdirSync(join(this.env.dataDir, "import-undo"))) {
  • 写入本地文件
    src/store/db.ts:38
    mkdirSync(dataDir, { recursive: true });
  • 读取本地文件
    src/store/db.ts:101
    if (!existsSync(source)) throw new Error("backup file not found");
  • 写入本地文件
    src/store/db.ts:103
    copyFileSync(source, staging);
  • 删除本地文件
    src/store/db.ts:107
    rmSync(file + "-wal", { force: true });
  • 删除本地文件
    src/store/db.ts:108
    rmSync(file + "-shm", { force: true });
  • 写入本地文件
    src/store/db.ts:110
    renameSync(staging, file);
  • 删除本地文件
    src/store/db.ts:119
    rmSync(staging, { force: true });
  • 读取本地文件
    src/store/db.ts:125
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
  • 写入本地文件
    src/store/db.ts:125
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
  • 写入本地文件
    src/store/mirror.ts:145
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    src/store/mirror.ts:164
    prev = existsSync(path) ? readFileSync(path, "utf8") : null;
  • 读取本地文件
    src/store/mirror.ts:164
    prev = existsSync(path) ? readFileSync(path, "utf8") : null;
  • 写入本地文件
    src/store/mirror.ts:170
    writeFileSync(path, parts[i], "utf8");
  • 读取本地文件
    src/store/mirror.ts:179
    for (const n of readdirSync(dir)) {
  • 删除本地文件
    src/store/mirror.ts:182
    rmSync(join(dir, n), { force: true });
  • 读取本地文件
    src/store/mirror.ts:196
    if (!existsSync(dir)) return removed;
  • 读取本地文件
    src/store/mirror.ts:198
    for (const n of readdirSync(dir)) {
  • 删除本地文件
    src/store/mirror.ts:200
    rmSync(join(dir, n), { force: true });
  • 读取本地文件
    src/store/mirror.ts:216
    if (!existsSync(path)) break;
  • 读取本地文件
    src/store/quote.ts:181
    workspaces = readdirSync(sessionsDir);
  • 读取本地文件
    src/store/quote.ts:188
    sids = readdirSync(join(sessionsDir, ws));
  • 读取本地文件
    src/store/quote.ts:196
    names = readdirSync(dir);
  • 读取本地文件
    src/store/quote.ts:204
    const st = statSync(path);
  • 读取本地文件
    src/store/quote.ts:255
    jsonl = decodeZstdConcat(readFileSync(f.path));
扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-typert-protocol
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(182 字)↓

忆织 MemWeave(dsh-mem-weave) —— 把记忆编织进人格(记忆 × 人格一体 DSH 插件)让 AI 记住你是谁、在做的项目、踩过的坑和答应过的事,开新会话不用重新认识你。记忆像人一样有轻重、会淡忘、能被唤醒,每轮只带上用得上的那部分,Token 用量也不会随着记忆增多而快速增长。改人格、改规则、处理冲突都由你决定,改错能撤销,数据全在本机。

README

由 DeepSeek 最新模型翻译生成
忆织 MemWeave 忆织 MemWeave(dsh-mem-weave)—— 把记忆编织进人格(记忆 × 人格一体 DSH 插件) 忆织是 DeepSeek Harness(DSH)的记忆与人格插件。 装上以后,AI 会记住你是谁、你们在做什么项目、它踩过什么坑、答应过你什么事。开新会话不用重新认识你。用得越久,它越了解你,每轮消耗的 token 却不会越来越多。 亮点 - 越用越久,token 不涨:每轮注入有固定上限,只带这一轮用得上的记忆。 - 像人一样遗忘:不常用的慢慢淡出,常用的越记越牢,你本人的信息永远不会忘。 - 你说了算:AI 只能写记忆、提建议,改人格、改规则、处理冲突、永久删除都只能由你来做。 - 改错能撤销:写入、修改、合并、整理都能在 24 小时内一键撤回,全程有审计记录。 - 不乱记:密钥、令牌、密码会被直接拦下;重复的会自动合并;互相矛盾的会先冻结,等你判断。 - 有人格:自称、称呼、性格、语气都能设置,内置两套原创人格。 - 记得约定和日子:到期的约定、生日、纪念日、农历节日都会提前想起来。 - 数据在本机:一个 SQLite 文件,不联网、不上传,可以一键备份。 - 轻:没有运行时依赖,安装包约 170 KB。
展开完整文档(README 剩余 1 节)
忆织 MemWeave

忆织 MemWeave(dsh-mem-weave)—— 把记忆编织进人格(记忆 × 人格一体 DSH 插件)

忆织是 DeepSeek Harness(DSH)的记忆与人格插件。

装上以后,AI 会记住你是谁、你们在做什么项目、它踩过什么坑、答应过你什么事。开新会话不用重新认识你。用得越久,它越了解你,每轮消耗的 token 却不会越来越多。

亮点

- 越用越久,token 不涨:每轮注入有固定上限,只带这一轮用得上的记忆。
- 像人一样遗忘:不常用的慢慢淡出,常用的越记越牢,你本人的信息永远不会忘。
- 你说了算:AI 只能写记忆、提建议,改人格、改规则、处理冲突、永久删除都只能由你来做。
- 改错能撤销:写入、修改、合并、整理都能在 24 小时内一键撤回,全程有审计记录。
- 不乱记:密钥、令牌、密码会被直接拦下;重复的会自动合并;互相矛盾的会先冻结,等你判断。
- 有人格:自称、称呼、性格、语气都能设置,内置两套原创人格。
- 记得约定和日子:到期的约定、生日、纪念日、农历节日都会提前想起来。
- 数据在本机:一个 SQLite 文件,不联网、不上传,可以一键备份。
- 轻:没有运行时依赖,安装包约 170 KB。

它是怎么做到的

每轮只带一小部分

记忆库可以一直变大,但每轮注入的上限不变:

| 时机 | 注入内容 | 默认上限 |
| 会话第一轮 | 人格 + 记忆快照(你是谁、规则、关系、项目) | 4000 字 |
| 之后每轮 | 新增或改动的记忆 | 1200 字 |
| 之后每轮 | 和当前话题相关的记忆 | 900 字 |

没轮到的记忆不会丢,下次话题对上了照样能找回来。上限可以在界面里调。

像人一样遗忘

遗忘只影响记忆排第几,不删数据。

- 会淡忘:记忆按层设置半衰期,话题 30 天,事实 90 天,项目 180 天,你本人的信息和教训 365 天。
- 越用越牢:经常用到的记忆,半衰期最多延长到 8 倍。
- 不翻来覆去:同一条记忆短时间内被反复想起,排名会往后放,给别的记忆让位置。
- 会收拾:
- 很久没用过的零散记忆,合并成一条摘要。
- 做完放了半年的项目,整个收起来。
- 收起来的原文都能找回。

该记住的不会忘

- 你是谁:偏好、习惯、身份、规则、关系每次开会话都会带上,永远不会被收起来。
- 在做的项目:只要项目还在推进,它的约定一条都不会被收起来。
- 没到期的约定和纪念日:一直保留,到日子就会想起来。

安装

需要 DSH,不用另装 Node.js,DSH 自带的就能跑。

在 Releases 页面找到最新的版本,把下面命令里的 <版本> 换成它(页面上标着 v0.7.12 的话,就填 0.7.12):

dsh plugin --profile desktop add https://github.com/QuaonY/dsh-mem-weave/releases/download/v<版本>/dsh-mem-weave-<版本>.tgz

--profile 填你在用的 profile,桌面端一般是 desktop,网页版是 web。tgz 已经下载到本地的话,也可以直接填文件路径:

dsh plugin --profile desktop add file:<tgz 的完整路径>

装完重启 DSH,默认配置就能用。卸载把 add 换成 remove dsh-mem-weave。

记忆库默认放在 $DSH_HOME/memweave/memweave.db,可以在界面「备份 → 存储位置」里迁移。

用起来

界面

DSH 里有八个页面:

| 页面 | 用途 |
| 总览 | 状态、待办、最近动作 |
| 人格 | 编辑人格、应用预设、回滚版本 |
| 记忆 | 浏览、搜索、编辑记忆,设置约定和纪念日 |
| 候选与冲突 | 确认 AI 想写的内容,处理冲突 |
| 注入与预算 | 调整上限,查看每轮实际注入了什么 |
| 治理与审计 | 撤销操作、查看记录 |
| 备份 | 备份、恢复、导入导出 |
| 高级 | 遗忘、召回、敏感词等细项 |

每轮对话结束后,对话里会显示一张小卡片,告诉你这轮记了什么。

内置人格

- 小满(大肥鱼):傲娇、话多、贪吃的鲸鱼娘助手。
- 林禾·夜班修理铺:安静、话少的夜班修理铺店主。

两套人格都讲究活人感:说话有节奏、有主见,不说客套话。她们不会编造自己的经历,你认真问身份时,会如实说自己是 AI。

记忆分层

| 层 | 放什么 |
| soul | 关系状态 |
| user | 你的偏好、习惯、身份 |
| rules | 必须遵守的规则(只能由人写) |
| project | 项目约定和进展 |
| fact | 客观事实 |
| lesson | 踩过的坑、被纠正的做法 |
| topic | 话题、整理出来的摘要 |

给 AI 的工具

插件给 AI 提供 20 个 weave_* 工具,用来记忆、检索、整理和提建议。AI 只能调用权限范围内的,涉及人格、规则和裁决的操作会被拒绝。

对话里也可以直接输入命令,不消耗 token:

/weave status | reload | preset <id> | strict on|off | dream

开发

pnpm build # 构建 lib/
pnpm typecheck # 类型检查
pnpm test # 运行测试
pnpm pack # 打成本地 tgz,用来自己安装
pnpm weave status # 命令行运维

| 目录 | 内容 |
| src/core | 渲染、分词、打分、日历 |
| src/store | 数据库、写入把关、整理 |
| src/host | 插件入口、服务、AI 工具 |
| src/client | 界面 |
| src/presets | 内置人格 |
| test / bench | 测试、召回基准 |

安全说明

- 界面里的写入、裁决、设置操作只允许人来做,AI 调用时固定以 agent 身份执行。
- 这条限制依赖宿主不让 AI 或其他插件直接调用本插件的远程接口。
- 数据库、日志、镜像等目录只能在配置文件里改,界面和远程调用改不了。
- 注入内容会清理特殊括号和换行,防止伪造段落。
- 日志不记录记忆正文。

许可

MIT © 2026 Quaon
预览分享卡片长什么样 ↓QuaonY/dsh-mem-weave
分享 · DeepSeek Harness Hub
QuaonY/dsh-mem-weave

让 AI 记住你的偏好与项目,开新会话无需重述

回到顶部