用 Markdown 存储跨会话记忆,让智能体记住项目规则
29.4/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add huangjua/dsh-local-memory该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包@dsh-external/dsh-local-memory(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 08:28:22
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 42 处,展示前 38 条)
- 写入本地文件src/config.ts:86
mkdirSync(resolved.memoryRoot, { recursive: true }) - 读取本地文件src/config.ts:90
if (!existsSync(full)) { - 写入本地文件src/config.ts:91
mkdirSync(full, { recursive: true }) - 读取本地文件src/config.ts:98
if (!existsSync(metaFile)) { - 写入本地文件src/config.ts:104
writeFileSync(metaFile, JSON.stringify(meta, null, 2) + '\n', 'utf8') - 读取本地文件src/config.ts:108
meta = JSON.parse(readFileSync(metaFile, 'utf8')) as MemoryMeta - 写入本地文件src/db-core.ts:131
renameSync(dbPath, dbPath + '.corrupt-' + ts) - 写入本地文件src/db-core.ts:132
try { renameSync(dbPath + '-wal', dbPath + '-wal.corrupt-' + ts) } catch { } - 写入本地文件src/db-core.ts:133
try { renameSync(dbPath + '-shm', dbPath + '-shm.corrupt-' + ts) } catch { } - 读取本地文件src/memory/approval.ts:174
try { ids = readdirSync(base) } catch { } - 读取本地文件src/memory/approval.ts:179
try { names = readdirSync(dir) } catch { continue } - 读取本地文件src/memory/approval.ts:186
try { st = statSync(full) } catch { } - 删除本地文件src/memory/approval.ts:192
unlinkSync(full) - 读取本地文件src/memory/approval.ts:278
if (!existsSync(dir)) return [] - 读取本地文件src/memory/approval.ts:282
names = readdirSync(dir) - 读取本地文件src/memory/approval.ts:289
const rec = JSON.parse(readFileSync(join(dir, name), 'utf8')) as PendingRecord - 删除本地文件src/memory/approval.ts:315
unlinkSync(path) - 写入本地文件src/memory/entries.ts:213
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件src/memory/entries.ts:216
writeFileSync(tmp, content, 'utf8') - 写入本地文件src/memory/entries.ts:217
renameSync(tmp, path) - 删除本地文件src/memory/entries.ts:219
try { unlinkSync(tmp) } catch { } - 写入本地文件src/memory/entries.ts:249
mkdirSync(dirname(lockPath), { recursive: true }) - 读取本地文件src/memory/entries.ts:259
const st = statSync(lockPath) - 删除本地文件src/memory/entries.ts:261
try { unlinkSync(lockPath) } catch { } - 删除本地文件src/memory/entries.ts:278
try { unlinkSync(lockPath) } catch { } - 读取本地文件src/memory/entries.ts:373
if (!existsSync(path)) return { raw: '', ok: true } - 读取本地文件src/memory/entries.ts:376
const buf = readFileSync(path) - 写入本地文件src/memory/entries.ts:420
writeFileSync(bakPath, raw, 'utf8') - 写入本地文件src/memory/entries.ts:482
mkdirSync(this.memoryDir, { recursive: true }) - 读取本地文件src/memory/memoryDb.ts:573
try { return readdirSync(dir) } catch { return [] } - 读取本地文件src/memory/memoryDb.ts:583
try { if (statSync(p).isFile()) out.push({ path: p, kind: 'workspace', scopeId: id }) } catch { } - 读取本地文件src/memory/memoryDb.ts:1115
try { raw = readFileSync(path, 'utf8') } catch { return } - 读取本地文件src/memory/memoryDb.ts:1165
try { dbBytes = statSync(dbPath).size } catch { } - 读取本地文件src/memory/memoryTools.ts:580
if (existsSync(path)) { - 读取本地文件src/memory/memoryTools.ts:581
try { existing = readFileSync(path, 'utf8') } catch { - 读取本地文件src/memory/memoryTools.ts:880
try { mtime = statSync(f.path).mtimeMs } catch { continue } - 读取本地文件src/memory/memoryTools.ts:883
try { content = readFileSync(f.path, 'utf8') } catch { continue } - 读取本地文件src/memory/snapshot.ts:145
try { return readFileSync(p, 'utf8') } catch { return '' }
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cosmokit@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools@deepseek-ai/dsh-workspace@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 跨会话持久记忆
- Markdown存储记忆
- SQLite镜像自愈
🧠 给 DSH 智能体提供跨会话持久本地记忆(Markdown 单一事实源 + 自愈 SQLite 镜像)
README
由 DeepSeek 最新模型翻译生成🧠 dsh-local-memory
为 DSH 智能体提供跨会话的持久本地记忆 100% 本地 • Markdown 即真相 • 自愈 SQLite 镜像 • 前缀缓存友好
功能 • 快速开始 • DSH Power Suite • 工具 • 架构 • 简体中文
💡 为什么需要 dsh-local-memory?
DSH 智能体天生无状态。每开一个新会话都从零开始,你不得不反复交代项目规则、环境配置和编码偏好。
dsh-local-memory 给智能体装上真正属于你的长期记忆:
- 📝 Markdown 是唯一真相来源:所有记忆都以纯 .md 文件存放在 ~/.dsh/memory/ 下。你可以直接查看、编辑,或用 Git 做版本管理。
- ⚡ 零缓存未命中:按会话冻结快照(WeakMap<Session, ...>),保持逐字节的前缀缓存稳定,省 token,响应更快。
- 🔒 100% 本地,失败即关闭:不会泄露到云端。工作区边界严格对照官方工作区注册表校验。
- 🛡️ 分阶段写入审批:修改全局配置档必须由用户明确确认(memory_pending approve),防止模型幻觉乱改。
展开完整文档(README 剩余 1 节)
🧠 dsh-local-memory 为 DSH 智能体提供跨会话的持久本地记忆 100% 本地 • Markdown 即真相 • 自愈 SQLite 镜像 • 前缀缓存友好 功能 • 快速开始 • DSH Power Suite • 工具 • 架构 • 简体中文 💡 为什么需要 dsh-local-memory? DSH 智能体天生无状态。每开一个新会话都从零开始,你不得不反复交代项目规则、环境配置和编码偏好。 dsh-local-memory 给智能体装上真正属于你的长期记忆: - 📝 Markdown 是唯一真相来源:所有记忆都以纯 .md 文件存放在 ~/.dsh/memory/ 下。你可以直接查看、编辑,或用 Git 做版本管理。 - ⚡ 零缓存未命中:按会话冻结快照(WeakMap<Session, ...>),保持逐字节的前缀缓存稳定,省 token,响应更快。 - 🔒 100% 本地,失败即关闭:不会泄露到云端。工作区边界严格对照官方工作区注册表校验。 - 🛡️ 分阶段写入审批:修改全局配置档必须由用户明确确认(memory_pending approve),防止模型幻觉乱改。 🚀 快速开始 安装 In your DSH plugin environment dev_inject_plugin @dsh-external/dsh-local-memory 典型使用流程 1. 让智能体记住:「记住,我们项目用 pnpm 和严格 TypeScript。」 2. 审阅待写入记忆:运行 /local-memory,或通过 memory_pending 批准待写入条目。 3. 无缝召回:任何新会话里,智能体都会自动拿到冻结的记忆上下文,无需额外提示词。 🧩 DSH Power Suite 本插件属于 DSH Agent Power Suite —— 4 个模块化、零硬依赖的插件,组成完整的开发者工作流闭环: flowchart LR M["🧠 dsh-local-memory(1. Remember rules & prefs)"] --> E["⚡ dsh-context-economy(2. Save 80%+ tokens reading code)"] E --> A["🛡️ dsh-evidence(3. Tamper-proof audit receipts)"] A --> S["🔍 dsh-session-index(4. CJK search & bookmarks)"] S --> M style M fill:#e8f4fd,stroke:#2b7de9,stroke-width:2px style E fill:#eef9f2,stroke:#1e8e3e,stroke-width:2px style A fill:#fef7e0,stroke:#f29900,stroke-width:2px style S fill:#f3e8fd,stroke:#8430ce,stroke-width:2px | 插件 | 在套件中的角色 | 与本地记忆的协同 | | 🧠 dsh-local-memory | 记忆层(当前) | 整理持久化的长期知识、开发者配置档和工作区约定。 | | ⚡ dsh-context-economy | 上下文经济 | 把读代码的 token 砍掉 80–93%,给记忆快照留出充足的提示词预算。 | | 🛡️ dsh-evidence | 审计与回执 | 为执行运行生成 SHA256 回执,让记忆条目落在可验证的证据上。 | | 🔍 dsh-session-index | 会话搜索 | 为原始 .jsonl.zstd 日志建索引,支持中日韩文字。记忆整理归这里,日志搜索归那里。 | 📖 深入阅读与参考 🛠️ 可用工具与命令(8 个工具 + 1 个命令) 工具 | 工具 | 说明 | 作用域 / 动作 | | memory_write | 新增记忆条目 | 用户/配置档 ➡️ 暂存;工作区 ➡️ 直接写入 | | memory_update | 通过 memoryId 或 oldText 修订条目 | 原先的活跃条目标记为 superseded | | memory_forget | 从活跃记忆中移除条目 | 替换为最小墓碑记录 | | memory_pending | 管理暂存的审批 | list、approve、reject | | memory_append_daily| 向每日笔记追加带时间戳的块 | 只追加的工作区草稿本 | | memory_search | 用 FTS5 trigram 搜索记忆 | 自动预同步改动过的 Markdown | | memory_status | 详细文件计数、活跃条目、数据库大小 | 只读诊断 | | memory_distill | 收集候选每日笔记用于蒸馏 | 只读 + 状态元数据 | 用户命令 - /local-memory feedback <receipt-id> bundle <helpful|harmful>:对记忆投递回执提交反馈。 📁 架构与存储布局 ~/.dsh/memory/ ├── user/ # User-level profile & global memories (MEMORY.md / USER.md) ├── workspaces/<WorkspaceId>/ # Workspace-scoped memories (MEMORY.md) ├── daily/<WorkspaceId>/ # Daily scratch notes (YYYY-MM-DD.md) ├── summaries/ # Distilled summaries ├── pending/memory/ # Staged write approvals ├── index/memory.sqlite # Derived FTS5 SQLite index mirror (Schema v12) └── meta.json # Metadata & version tracking 关键架构不变量: - Markdown 是唯一事实来源:所有文本和元数据都放在 .md 文件里。 - SQLite 是可丢弃的副本:一旦损坏,SQLite 会通过 buildMemoryIndex 从 Markdown 自动恢复。 - 搜索前增量同步:memory_search 按 content_hash 即时同步改动过的文件。 ⚖️ 设计取舍与边界 | 优势 | 取舍 / 边界 | | SSOT/副本分离,确保零数据丢失 | Schema v12 迁移链需要严格维护 | | 双通道:冻结快照 + 实时工具搜索 | 绑定本机(无云同步) | | 严格的工作区故障关闭隔离 | 索引含明文(不要在不可信的共享机器上使用) | | 566 个测试用例,覆盖全面 | forget 只移除活跃表面,不做物理磁盘粉碎 | 🧪 构建与测试 Install dependencies pnpm install --frozen-lockfile Build TypeScript to lib/ bash scripts/build.sh Typecheck & Run test suite npm run typecheck npm test 🙏 致谢与参考 - Hermes Agent(Nous Research,MIT):entries.ts、threat.ts、approval.ts 改编自 memory_tool、threat_patterns、write_approval。 - 官方 dsh-plan-mode(MIT):WeakMap<Session, ...> 冻结 + systemPrompt.section 动态服务商模式。 - Jesse-njx/dsh-memory(MIT):托管条目内联 HTML 头部元数据格式。 - ben7am1n/dsh-memory(MIT):Live Context 测试框架架构。 属于 DSH Agent Power Suite。基于 BSD-3-Clause 许可。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
huangjua/dsh-local-memory
用 Markdown 存储跨会话记忆,让智能体记住项目规则
相关插件 · 对话 / 记忆
上下文中枢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
这是你的仓库?认领条目