READMESource: main@4063849f
知识库自动化插件(kb-automation)
把 F:/test/11/1.md 里的任务做成一个可重复执行的 DSH 工具:kb_automate。v2 起多一个 board 阶段,把每日/每周的例行任务整理成任务看板卡片方案。
从 GitHub 安装(另一台电脑)
git clone https://github.com/dravelin/kb-automation.git D:/dsh-plugins/kb-automation改
cordis.patch.yml里的vault(知识库路径),然后:{ "action": "install_bundle", "target": "D:/dsh-plugins/kb-automation" }详细步骤与排错见 INSTALL.md。
| 阶段 | 对应 1.md | 做什么 |
|---|---|---|
init |
第一段 | 校验/创建六个中文目录(含 03 提炼笔记/{概念,方法,案例})、06 系统配置/笔记模板.md、06 系统配置/知识库规范.md,并输出目录树 |
collect |
第二段 | 用 ctx.web 检索 AI Agent / AI 价格优惠 / AI 生产案例,模型筛选 3~7 篇,写成 status: inbox 的收件箱笔记 |
process |
第三段 | 读规范 → 原文存档到 02 原始资料 → 拆原子笔记到 03 提炼笔记 → 打三维标签 → 链接进 04 主题索引 → 原笔记改 processed → 删除 01 收件箱 里已归档的那份副本(拆解失败的留在收件箱待人工处理) |
inspect |
第四段 | 补标签/摘要、给重复笔记的合并建议、查外链、算本周新增与主题分布,写周报到 05 我的产出 |
board |
— | 只返回建卡方案:每日「收集 + 提炼」与每周「巡检 + 周报」两张卡片(id/标题/描述/自包含 prompt/cron),不写任何文件 |
all |
— | 依次执行前四个阶段(不含 board) |
status |
— | 只读体检:各目录篇数、收件箱待处理清单、任务文件是否存在 |
01 收件箱 与 02 原始资料
01 收件箱是「还等着提炼的原始文章」暂存区:既放插件自动收集的文章,也放你自己从网页存下来直接丢进去的.md。没有 frontmatter 也行,插件会补上日期与 frontmatter。- 文件名统一是收录日
YYYY-MM-DD-标题.md;文章自己的发布日期存在 frontmatter 的published字段里,不会被收录日顶掉。 process把原文搬进02 原始资料之后,就删掉01 收件箱里的那份副本(02里已有同名文件时同样删)。这是搬移,不是合并。- 拆解失败的笔记留在
01 收件箱等人工处理,不删。 02/03/04/05里的文件永不删除、永不合并。
工具参数
{
"stage": "init | collect | process | inspect | board | all | status | selftest",
"vault": "F:/dataobs",
"topics": ["AI Agent 最新进展"],
"limit": 6
}
vault省略时取插件配置vault(默认F:/dataobs)。topics只对collect生效,覆盖配置里的检索词。limit对collect是本次最多收录篇数(1–7),对process是本次最多处理篇数。board不读不写文件;返回的cards[].prompt已经带上vault,可直接交给建卡会话。
配置
cordis.patch.yml 里的 config:
| 字段 | 默认值 | 说明 |
|---|---|---|
vault |
F:/dataobs |
知识库根目录;调用时可用 vault 参数覆盖 |
taskFile |
F:/test/11/1.md |
任务说明文件,status 阶段检查它是否存在 |
maxCollect |
6 |
collect 默认收录上限 |
topics |
见 src/collect.js 的 DEFAULT_TOPICS |
检索词 |
linkCheckLimit |
20 |
inspect 每次最多验证多少条外链 |
maxAgeDays |
2 |
collect 丢弃早于 N 天的内容(按页面上的首个日期判断) |
fetchMode |
auto |
auto 先走 ctx.web.fetch、被拒再直连;web 只走 harness;direct 只直连 |
heuristicFallback |
false |
设为 true 才允许模型失败时按规则猜着拆(默认不拆,留在收件箱) |
board 阶段:建卡
看板插件的 cordis 服务 taskBoard 只暴露 registerExtension / isExtensionEnabled,没有建卡 API,所以 kb_automate 只能算出卡片方案,真正的建卡要由 DSH 会话调工具完成:
kb_automate {"stage":"board","vault":"F:/dataobs"}
→ cards[0] = daily / cron 0 8 * * * (每日 08:00 收集 + 提炼)
→ cards[1] = weekly / cron 0 9 * * 1 (每周一 09:00 巡检 + 周报)
拿到返回值后,让会话逐张建卡并挂定时:
{ "title": "知识库日常:收集 + 提炼", "description": "<cards[0].description>", "prompt": "<cards[0].prompt>" }
{ "taskId": "<上一步返回的卡片 id>", "enabled": true, "mode": "cron", "cron": "0 8 * * *", "timeZone": "Asia/Shanghai" }
{ "title": "知识库周检:巡检 + 周报", "description": "<cards[1].description>", "prompt": "<cards[1].prompt>" }
{ "taskId": "<上一步返回的卡片 id>", "enabled": true, "mode": "cron", "cron": "0 9 * * 1", "timeZone": "Asia/Shanghai" }
task_board_create 建卡、task_board_schedule 挂 cron,两条 cron 分别是 0 8 * * * 与 0 9 * * 1(时区 Asia/Shanghai)。board 阶段本身不写任何文件。
v2 变更(1.1.0 → 2.0.0)
破坏性的语义变化,升级前先看这一节:
process现在会删文件。 归档成功后,01 收件箱里那份副本会被删除(02 原始资料已有同名文件时也删)。1.1.0 里它是整份留在收件箱只改status,所以收件箱会一直堆积。01 收件箱的定义收窄成「待提炼暂存区」。 不再是长期存档目录;想长期留的原文在02 原始资料。同时允许直接丢入没有 frontmatter 的.md,插件补日期与 frontmatter。- 归档不再「已存在就跳过」。 同名已存在时仍会删掉收件箱副本,避免重复堆积;
02里的旧文件不被覆盖。 - 新增
board阶段(枚举、参数说明、返回值契约)与对应的渲染。 - 删除边界文案重写:旧的「永不删除、永不合并」绝对说法改为「只删除
01 收件箱里已归档成功的副本」;02/03/04/05仍然永不删除、永不合并。 - 版本号
1.1.0→2.0.0,BUILD同步为kb-automation@2.0.0。
实现要点
- 模型参与判断,插件负责落地。 选篇、摘要、拆解用
ctx.llm(走当前 profile 默认模型),文件命名、frontmatter 字段顺序、标签维度、去重、索引插入都由代码确定性完成,所以重复执行不会产生格式漂移。 - 宁可不动,也不乱拆。 模型没给出合法结果时,收件箱笔记原样保留并在
kept里写原因;原子笔记还要过校验(标题 ≥4 字、摘要 ≥20 字、正文 ≥60 字、不能是「价格」「发布」「待核实」这类小节名),不合格一律拒收。 - 只删已归档的收件箱副本。
process是搬移:归档成功后删掉01 收件箱里那份;02 原始资料已有同名文件时同样删并记录。除此之外不删除、不合并任何文件,已存在的原始存档与原子笔记一律不覆盖。 - 幂等。 目录、模板、规范已存在时不改写;收件箱里
status不是inbox的笔记不会被重复处理;已存在的原子笔记/MOC 链接会去重。 - 空文件与信息不足的笔记按 1.md 的约束留在收件箱,并在结果的
kept里注明原因。 - 文件操作直接走 Host 的
node:fs(目录创建、原子写入),检索走ctx.web,模型走ctx.llm,不额外拉依赖。
分发
INSTALL.md 是给另一台机器的安装说明;打包命令:
tar -a -c -f kb-automation-2.0.0.zip -C <父目录> kb-automation
解压后把 cordis.patch.yml 里的 vault / taskFile 改成目标机器的路径,再 plugin_manager install_bundle。
安全边界
inspect对重复笔记只输出"合并建议清单",不删不改;外链只做 HTTP 状态检查,不抓正文判定内容是否被替换。- 所有新增内容都写进六个目录内部,不在仓库外落文件;插件自身代码放在
.kb-automation/(Obsidian 不索引点开头目录)。
开发
node --check index.js
node test/smoke.mjs # frontmatter 往返、命名规则、MOC 插入、目录树
No comments yet. Be the first to write one.