- DSH
- 0.1.0-rc.8
- 风险
- medium
Wenmai 适合解决什么问题
Wenmai(文脉)是一个面向文字工作者的 DeepSeek Harness 社区插件。它把本地 Markdown 原文复制进只追加的 raw/ 区域,再由 Agent 整理为带 [[wikilinks]] 的概念页、实体页、索引和日志,适合查询“这个选题以前写过没有”、整理成稿以及生成本地关联图。
本文在 2026 年 8 月 22 日审阅了仓库版本 0.1.0、MIT 许可证、README、工具定义和文件读写代码。作者文档明确使用 DSH 0.1.0-rc.8;52DSH 当前上游基线是 0.1.1-rc.2,但编辑部没有在该新版本中实际安装,所以不能宣称已兼容 0.1.1-rc.2。
| 项目 | 审计结果 |
|---|---|
| 分发方式 | GitHub 源码,本次核验时没有同名 npm 包 |
| 插件版本 | 0.1.0 |
| 作者文档使用的 DSH | 0.1.0-rc.8 |
| 许可证 | MIT |
| 默认数据目录 | ~/wenmai |
| 主要读写 | 当前工作区、额外 sourceRoots、文脉目录 |
| 网络依赖 | 插件本身以本地文件为主;模型 Provider 仍可能接收上下文 |
| 编辑验证 | 已审阅源码,未执行安装与端到端验收 |
数据是怎样流动的
Wenmai 不是向量数据库,也不会自动抓取网页或解析 PDF。它的主要工作流是:
本地 Markdown 成稿
→ wenmai_ingest 复制到 raw/
→ wenmai_write 编译 concepts/ 与 entities/
→ 更新 index.md 和 log.md
→ wenmai_search / wenmai_read 查询
→ 按需生成 graph.html
raw/ 被设计为原文留档区,插件规则禁止 wenmai_write 修改这里。纠错和补充应写进编译页。这个约束便于保留证据链,但它不是操作系统级不可变保护:拥有文件系统权限的其他程序或用户仍然可以修改文件。
安装前先固定源码版本
Wenmai 当前通过 GitHub 本地路径安装。为了避免默认分支后续变化,先检出本文审阅的 commit:
git clone https://github.com/chrislee121/wenmai.git
cd wenmai
git checkout 44e84de0cc2c52a120c1e40b121a543f23f7d934
检查 package.json、prepare 和依赖后再安装构建。仓库的 prepare 会执行 TypeScript 编译:
corepack enable
pnpm install
pnpm test
pnpm build
然后把本地目录加入 Web Profile。作者文档使用 DSH 0.1.0-rc.8:
npx --yes @deepseek-ai/dsh@0.1.0-rc.8 \
plugin --profile web add "$(pwd)"
npx --yes @deepseek-ai/dsh@0.1.0-rc.8 \
--profile web --dump-config
npx --yes @deepseek-ai/dsh@0.1.0-rc.8 web
预期在配置输出中看到 dsh-wenmai 层和 id: wenmai。不要为了追新而直接把命令改成最新版;应先在独立 Profile 中验证 0.1.1-rc.2 的兼容性。
第一次初始化
启动 DSH Web UI 后,先在左上角选择一个明确的文稿目录作为工作区。不要选择整个家目录。然后对 Agent 说:
用 wenmai_init 初始化文脉,领域是“个人文字工作:文章、脚本、文案和文档”。
初始化后可以检查:
/wenmai status
/wenmai lint
/wenmai orient
预期 ~/wenmai 中出现 SCHEMA.md、index.md、log.md、raw/ 以及编译页目录。若机器上没有 ~/wenmai、但存在旧的 ~/tongjian,仓库文档说明插件可能沿用旧目录,升级前要先确认实际数据根。
三个日常使用场景
检查选题是否写过
对 Agent 说:
用 wenmai_written 查一下“DSH Telegram 插件”以前写过没有。
wenmai_written 会搜索编译页,也会查看当前工作区及额外 sourceRoots 中的 Markdown 文件名和标题。它解决的是本地内容防撞,不等于互联网检索。
收录一篇成稿
给出明确的本地路径和材料类型:
把
/path/to/article.md以 articles 类型 ingest 进文脉,再编译为概念页并更新索引。
推荐顺序是 ingest、搜索已有实体或概念、write、更新索引并写日志。不要让 Agent 直接修改 raw/。
生成关联图
/wenmai graph
插件会在数据根写出自包含的 graph.html。关联图读取编译页的 Wiki 链接,也可以纳入工作区和 sourceRoots 中的 Markdown。大型目录应按需生成,不要每轮会话都运行。
文件权限与隐私边界
Wenmai 的核心风险不是远程账号,而是本地文件访问范围:
- 默认读取当前 DSH 工作区;
- 可读取配置中的额外
sourceRoots; - 默认写入
~/wenmai; wenmai_ingest会复制原文;wenmai_write会创建或修改编译页、索引和日志;wenmai_graph会写出 HTML 并可能调用系统浏览器打开。
不要把 /Users/你的名字、整个文档目录或包含客户资料的上级目录加入 sourceRoots。插件代码主要在本地处理 Markdown,但 Agent 为了总结、分类或回答问题,可能把读取到的正文发送给当前模型 Provider。本地存储不自动等于数据不会离开电脑。
如果工作区包含隐私、商业秘密或未公开稿件,应先选择本地模型或确认远程 Provider 的数据政策,并使用独立测试副本。更完整的边界说明见安全工作区指南。
如何验收
安装后至少完成以下检查:
--dump-config只新增预期的 Wenmai 配置层。/wenmai status显示的数据根和扫描路径正确。- 用测试 Markdown 验证 ingest 后原文复制到
raw/。 wenmai_write拒绝把目标路径写到raw/。wenmai_lint能报告断链、孤儿页和原文哈希漂移,但不自动修改。- 未配置的目录不能被
wenmai_written或wenmai_search扫描。 - 生成的
graph.html不包含测试范围之外的文件名和内容。
52DSH 尚未完成这些运行测试,因此本文不能作为生产兼容保证。
卸载为什么不会删除知识库
使用作者文档对应的 Profile 卸载:
npx --yes @deepseek-ai/dsh@0.1.0-rc.8 \
plugin --profile web remove dsh-wenmai
卸载后重新运行 --dump-config,确认配置层消失。仓库明确说明卸载插件不会删除 ~/wenmai 数据,这有利于回滚,也意味着敏感原文和编译页仍然留在磁盘。需要清理时应先备份、确认真实数据根,再单独处理,不能把“插件已卸载”当作“数据已删除”。
如果你的需求更偏向会话记忆而不是成稿编译,应先比较其他 LLM Wiki 实现,不要只根据名称相似就重复安装多个能扫描同一目录的插件。
来源与维护信息
本文根据以下原始资料整理。版本变化后,请以官方资料和页面标注的验证日期为准。
- https://x.com/ChrisLee207/status/2090851372061319632
- https://github.com/chrislee121/wenmai/tree/44e84de0cc2c52a120c1e40b121a543f23f7d934
- https://github.com/chrislee121/wenmai/blob/44e84de0cc2c52a120c1e40b121a543f23f7d934/README.md
- https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.1.0-rc.8/apps/cli/README.zh.md