6.1 KiB
6.1 KiB
| name | version | date | description | category | trigger |
|---|---|---|---|---|---|
| knowledge-vault-curation | 1.1.0 | 2026-09-10(+凭证扫描的内容级/历史级修正) | Use when 笔记库/vault 乱、编码乱码、凭证散落。整理与结构守护。 | devops | 知识库膨胀、目录编码混乱、项目混入笔记库、凭证散落、插件冗余、定期结构体检 |
知识库 vault 整理与结构守护
适用于长期由多个 agent(或多人)写入的 markdown 知识库(Obsidian 等)。 日常散落文件/根目录卫生另有机制:
file-resource-management(含 resource-watchdog)。 实战配方与代码:references/obsidian-vault-cleanup-recipe.md;体检脚本:scripts/mc-structure-check.py(含内容级密钥扫描 +--secrets-only)。 凭证已进 git 历史怎么清 →git-repo-hygiene§5 + 其references/secret-purge-from-history.md。
结构分离原则(vault 只放笔记)
| 内容 | 去处 | 理由 |
|---|---|---|
| 笔记 | vault(按 agent/人分区,各自 PARA) | 可检索、可进知识图谱 |
| 代码项目 | ~/projects/<name>/ |
独立 git/构建,不污染 vault |
| 凭证 | 一个总库文件(如 牧尘/claw/key.md) |
单一事实来源;所在目录 gitignore,永不入库 |
| 备份/运行时产物 | ~/.hermes/backups/ 或 archive |
不是知识 |
整理五步(按此顺序,不要跳)
- 摸全景 — 逐一级目录统计文件数/体积/二级分布。必须看全部 agent 分区,不能只看自己的(第一版只分析了一个分区 → 被纠正"其他文件夹都没有分析")。
- 编码变体合并 — 同一逻辑目录可能被多代脚本写成 N 个编码形式(
织忆同萦/ZhiyiSync/zhiyi-sync/zhi-yi-tong-bu/%E7%BB%87.../\u7ec7.../双重编码/乱码汉字)。归一化(unquote + unicode_escape + latin1→utf8)后合成一个目录,按内容 md5 去重,同名不同内容加后缀绝不丢数据。 - 项目迁出 — 按特征文件识别(Dockerfile/Makefile/go.mod/Cargo.toml/package.json/pyproject.toml)。迁前
grep -rl <旧路径>定位引用 → mv → 更新引用 → 修绝对路径软链 → 跑真实命令验证(含解释器路径)。 - 凭证集中 — 见下节。
- 固化防护 — 结构体检脚本 + 周期 cron(watchdog 语义:干净静默)。
凭证治理(单一事实来源)
- 流程:全库正则扫描 → 提取去重 → 合并进总库(结构化分节)→ 原处脱敏。
- ⚠️ 是"集中"不是"删除":"密钥凭证要提取出来集中管理,方便查询使用"(牧尘 2026-09-10,第一版方案写"删除"被否——删了就查不到了)。
- 只脱敏文本笔记(.md/.txt):
.env/config.yaml/.json里的是运行时依赖,markdown 式替换会破坏语法 → 移出或用 env 引用。 - 先甄别误报再入库:全库命中绝大多数是文档/源码里的示例 key;真凭证按来源文件 + 上下文定位用途。
- 一个凭证常有多份副本(日记/备份/备忘/图谱节点)→ 汇总后回查残留,最终只应剩总库 + 尚未迁移的备份。
- ⚠️ 扫文件名 ≠ 扫凭证(2026-09-10 事故根因):体检脚本第一版只匹配文件名里的
sk-/tskey-,于是 4 个真密钥全从眼皮底下过(小唯/.env、opencode.jsonc、legacyconfig.yaml、织忆镜像 2 个文件)。必须扫文件内容,并用负向断言(?<![A-Za-z0-9_-])防误伤https://x.com/task-driven-…这类 URL 片段。已内置进scripts/mc-structure-check.py。 - ⚠️ 扫描范围要含所有 agent 子树 + git 历史:「凭证集中」第一版漏扫
小唯/子树;历史里那个「全库快照」commit 还躺着工作区早已删除的 3 个密钥(Agnes / DeepSeek / Gitee AI)。工作区干净 ≠ 历史干净 → 入库过的按git-repo-hygiene§5 扫历史 blob。 - 总库目录必须进白名单:故意存明文的总库(
牧尘/claw/)不白名单 → 每日 watchdog 天天误报 → 误报多了整条告警就被忽略。 - gitignore ≠ 不同步:总库所在目录已 gitignore,但 Obsidian remotely-save / 网盘客户端不认 gitignore,总库仍会进 WebDAV。这个暴露面要主动告知用户,由其决定是否接受。
- 落地护栏:体检脚本加内容级扫描 + 每日
--secrets-onlycron(watchdog 语义:干净静默,命中才报);顺手清理其他散落明文(本次另在牧尘/xiaoxuedate/话术.md捞到一处明文 tskey)。
插件分诊(Obsidian)
判据:重复的删一个、一次性的删、缺外部依赖的删、其余留(实测 25→17,启用 18→13)。
⚠️ 启用列表用的是 manifest 里的 id,不是插件目录名(obsidian-pkmer 目录 ↔ pkmer id 不一致)→ 按目录名删完会留下失效条目。正确:读每个 manifest.json 的 id,再与 community-plugins.json 求交集。
铁律
- 历史记录永不改:
sessions/logs/dump-*cron/output/— 批量替换/脱敏必须排除。 - 排除匹配别用带尾斜杠的片段去比
os.walk的 root('/sessions/' in root恒 False,该排除的没排除)。 - 破坏性/大批量操作先备份再执行(
cp -r到~/.hermes/archive/<name>-backup),报告时给出备份路径。 - vault 里的项目迁移后要回填引用:
~/.hermes/scripts+skills/+MEMORY.md(会话历史不动)。 - 整理完必须跑一次体检脚本 + 报出前后文件数/体积,用真实命令输出作证。
归档历史
- 2026-09-10 首次整理(mc):~10,000 → 2,520 文件 / 1.1GB → 171MB;13 个编码变体合并;6 处项目迁出;27 个凭证集中;插件 25→17;结构体检脚本 + 周 cron 落地。
- 2026-09-10 P0 返工:凭证集中漏了内容级扫描 +
小唯/子树 + git 历史 → 4 个真密钥已推 Gitea。补:内容级扫描(含白名单 /--secrets-only)+ 每日 cron + 历史 filter-repo 三段式清除。教训:集中化的扫描口径和集中化本身一样重要。