Notes and todos as plain Markdown files in your workspace: type /ml plus a sentence to jot into today's journal; todos come in three flavors — deadline, sleep-until-a-date (auto-wakes when due), and anytime; /ml view fuzzy-opens any file with a few keystrokes. Zero tokens throughout — nothing goes through the model, and your notes stay ordinary local files that git and any editor can read.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:warmwine/dsh-memoryleak
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
MemoryLeak:本地知识库/笔记本插件,数据模型优先、格式可扩展。 好记性不如烂笔头,有了memoryleak你就不会memoryleak 实现大量工具对知识库和本地笔记本进行管理,本地文件优先
更新历史见 CHANGELOG.md
这是什么
MemoryLeak 是 DeepSeek Harness(DSH)的记事本插件:把「随手记一笔」和「结构化待办」放进你的工作区本身(Markdown 文件),而不是某个应用的数据库里。绝大多数操作都是斜杠命令——不经过 LLM,零 token,毫秒级。
核心场景:
- 记一笔:
/ml 修好了登录页的样式—— 写进工作区根目录的日志(2026-08-16.md)或周志(2026W33.md)的## MemoryLeak模块 - 待办管理:
/ml todo add(固定表单选类型/优先级)→/ml todo list(sleep 型到日自动唤醒)→/ml todo d 3(按序号完成)/u(撤销) - 快速查看:
/ml view <片段>模糊匹配打开任意工作区文件;手动输入时输入框上方弹实时候选卡(↑↓/Tab/Enter,VSCode Ctrl+P 手感)
命令与入口一览
| 命令 / 入口 | 作用 | token 消耗 |
|---|---|---|
/ml help(或 h) |
命令一览:全部命令与效果的汇总说明(命令菜单里的注册描述也导向这里) | 0 |
/ml <文本> |
记一笔:写入工作区根目录的日志/周志 ## MemoryLeak 模块(不存在则按模板新建文件) |
0(命令面,不过模型) |
/ml view [文件名片段](或 v) |
快速查看:无参数 = 当前日志/周志;带片段 = VSCode Ctrl+P 风格模糊匹配工作区文件(唯一强匹配直接打开,多候选列出供加长片段消歧) | 0 |
手动输入 /ml view <片段> |
实时候选卡:输入框上方弹出过滤候选(焦点留在输入框,打字即过滤),当前日志/周志默认置顶(标「· 当前」),↑↓ 切换高亮、Tab 补全文件名进草稿、Enter 直接打开高亮项、Esc 关闭 | 0 |
命令菜单选中 /ml |
快速打开面板(popupSelect):同款候选卡,弹窗内搜索、Enter 打开 | 0 |
/ml todo add <文本>(或 n) |
加结构化待办:固定格式提问类型(deadline/sleep/anytime)与重要程度(紧急/中等/低),deadline/sleep 再问日期;写入日志/周志的 ## Todo 模块(建在 ## MemoryLeak 之后) |
0(提问为固定表单,不过模型) |
/ml todo list(或 l) |
扫描当前工作区 Markdown 待办(默认过滤可在设置改),默认隐藏未唤醒的 sleep 型,按文件分组返回;到日的 sleep 自动唤醒(源文件转写为 active)并显示 ☀ 计数;每条带序号,供 d <n> 寻址 |
0(命令面,不过模型) |
/ml todo list all / open / done |
同上,指定状态;all 同时包含未唤醒的 sleep 型 |
0 |
/ml todo list <关键词> |
同上,按关键词过滤(大小写不敏感,可与状态词组合) | 0 |
/ml todo d <n>(或 done <n>) |
切换最近一次 l 结果中第 n 条的完成态(序号是 l 作用域的;未 l 先报错提示) | 0 |
/ml todo u(或 undo) |
撤销最近一次 d(可连续撤销,LIFO;d 之后该行被外部修改则拒绝撤销) |
0 |
/ml todo |
省略操作默认 l,等价 /ml todo l |
0 |
| 设置窗口「MemoryLeak」分区 | 读写扫描扩展名、排除目录、上限、默认过滤词、日志模式与模板(/api/memoryleak/* HTTP 路由) |
0 |
日志与待办的文件格式
日志/周志(按设置的「日志模式」选择):
start: 2026-08-10 ← 仅周志模板默认带(ISO 周一起止)
end: 2026-08-16
## MemoryLeak ← /ml <文本> 的记录区(无则自动创建)
- 上午重构了扫描器
- 下午修了候选卡错位
## Todo ← /ml todo add 的落点(永远在 MemoryLeak 之后)
- [ ] (ml:deadline 2026-09-01 urgent) 完成设计稿
- [ ] (ml:sleep 2026-12-01 low) 学一遍内部源码
- [ ] (ml:anytime medium) 整理收藏夹
- [x] (ml:active low) 复盘一次上线
结构化待办四种类型(## Todo 模块内,/ml todo 系列的读写契约):
| 类型 | 日期 | 行为 |
|---|---|---|
deadline |
必填 | 固定截止日,列表徽章 [截止 2026-09-01·紧急] |
sleep |
必填 | 唤醒日前 list 默认隐藏;到日(含当天)自动唤醒 |
anytime |
无 | 随时记录,徽章 [随时·中等] |
active |
无 | sleep 唤醒后的落盘形态(list 时源文件转写,三重校验防误写),徽章 [唤醒·低] |
优先级:urgent(紧急)/ medium(中等)/ low(低)。属性块损坏的行自动降级为普通待办(不丢数据)。
安装(本机 DSH)
dsh plugin --profile web add link:<本仓库路径>
# 重启 dsh web 后生效;卸载:dsh plugin --profile web remove dsh-memoryleak
安装 (Github)
dsh plugin --profile web add github:warmwine/dsh-memoryleak
# 重启 dsh web 后生效;卸载:dsh plugin --profile web remove dsh-memoryleak
架构一览
src/core/ 纯域(零依赖,vitest 直测)
errors.js Typed errors + let-it-crash invariant
todo-item.js Value Object:构造即校验、构造即冻结(含 meta)
formats/ Strategy:markdown-checkbox + memoryleak-todo(结构化)
registry.js Registry:注册期契约校验 + priority + 可逆注册
filter.js Specification:TodoQuery(status/text/today/sleep 谓词)
fuzzy.js 模糊匹配:子序列评分 DP + resolveViewTarget 四态解析
journal.js 日志/周志:ISO 周、模板渲染、模块插入、行切换/替换(纯函数)
file-source.js Port:FileSource 契约(DIP)
walk-policy.js 共享遍历策略(node/memory 同语义)
scan.js 扫描器:Registry + FileSource → 冻结的 ScanReport
render.js 渲染器:TUI 文本(命令卡片)+ JSON(AI 预留契约)
command.js /ml 文法(journal/todo/view/help 四家族)+ renderMlHelp
src/adapters/ node(真实 fs)/ memory(测试·预览)双适配器
src/settings-schema.js schemastery schema + 默认值(settings.yaml 段)
src/journal.js 宿主胶水:定位/读建/写回、唤醒转写、行切换、文件清单
src/routes.js /api/memoryleak/* 同源 JSON 桥(settings/formats/files)
src/index.js 宿主半:组装根(/ml 命令、设置命名空间、路由)
src/client.js 浏览器半:设置窗口 + 命令卡片展开视图 + 实时候选卡
设计模式与 let-it-crash 故障分级见 docs/DEVELOPMENT.md。
开发
pnpm install
pnpm test # vitest 全量(240 个)
pnpm run test:watch
- 纯域零依赖直测;适配器跑真实 tmpdir;宿主半用伪 ctx 端到端
- 回归守卫:宿主源码所有
ctx.<service>访问逐一断言在 inject 声明中(Guard 缺口桩测不出,静态锁死) - 每个 bug 一个回归测试;提交信息
<scope>: <what>
为 AI 预留的接缝(已就位、暂未启用)
- 新待办格式 = 新
TodoFormatStrategy,注册即生效,扫描器零改动; - 结构化消费 =
renderTodoJson(report, query)的稳定 JSON 契约; - 结构化过滤 =
TodoQuery(action/status/text/limit/today)数据模型。
已知行为
新会话 blank 状态(DSH 上游设计,非本插件缺陷):发出第一条 LLM 消息前会话不挂载对话时间线——此时执行 /ml,结果不会立即显示(官方 /plan、/goal 同样如此);发出第一条消息后,历史命令卡片随时间线补显。命令事件已持久化,不会丢失。
License
MIT
Links
More in this category
superdesigndev/treg★ 425
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
Lum1104/dsh-browser★ 198
Chrome sidebar extension that lets DSH operate your browser directly, no vision capabilities required.
zhaoolee/notes★ 142
Export DSH conversations as Smartisan Notes-style PNGs, or create and update Markdown notes in a configured account-scoped workspace.
liustack/modsearch★ 111
Web search bridge for text-only agents: ask the web or X, get structured JSON evidence (search, fetch, citations).
taxueseek/argo★ 91
Search built for agents: multilingual coverage across web, academic, code, shopping, finance, news, and encyclopedias.
Vladimir-Human/ru-marketplace-mcp#dsh★ 63
Skills and optional MCP rows for ten Russian marketplaces: price comparison across Wildberries, Detsky Mir and Yandex Market, plus per-source search, product cards and reviews. The 13 skills load on install; both MCP rows stay disabled until RU_MARKETPLACE_MCP_DIR points at a local clone, which needs Python 3.12+ and uv.