Skip to content
Built 26/04/15 10:53commit de0ee65

自动巡检

中文 | English

全局配置

自动巡检使用全局配置:

text
~/.llm-wiki/config.json

现在推荐把共享默认值和具名任务拆开:

json
{
  "root": "/Users/bytedance/csh/llm-wiki",
  "scheduler": {
    "enabled": true,
    "codex_path": "/Users/bytedance/.nvm/versions/node/v23.11.1/bin/codex",
    "log_dir": "/Users/bytedance/.llm-wiki/logs",
    "max_runtime_minutes": 20
  },
  "schedulers": {
    "content_patrol": {
      "interval_minutes": 30,
      "label": "com.bytedance.llmwiki.maintenance.content",
      "prompt": "$llm-wiki 对这个 vault 做一次内容巡检..."
    },
    "taxonomy_patrol": {
      "interval_minutes": 1440,
      "label": "com.bytedance.llmwiki.maintenance.taxonomy",
      "max_runtime_minutes": 45,
      "prompt": "$llm-wiki 对这个 vault 做一次目录结构巡检..."
    }
  }
}

说明:

  • scheduler 是共享默认配置块。
  • schedulers 是多个具名任务,每个任务会继承 scheduler,再覆盖自己的差异字段。
  • 旧的单 scheduler 写法仍然兼容,但新配置更推荐用具名任务。

推荐拆分

建议拆成两个定时任务:

  • content_patrol 每 30 分钟一轮,专注于新增或变更 raw/ 内容的整合、翻译漂移、index/log 漂移,以及明显缺失的 cross-links。
  • taxonomy_patrol 每天一轮,专门按 llm-wiki 的 taxonomy 规则检查整个项目的目录结构,只在结构确实开始漂移时才做重组。

这样可以让高频巡检保持保守,把更重的目录结构整理留到低频任务中处理。

调整巡检间隔

改这里:

text
~/.llm-wiki/config.json

修改对应任务:

json
"schedulers": {
  "content_patrol": {
    "interval_minutes": 30
  },
  "taxonomy_patrol": {
    "interval_minutes": 1440
  }
}

例子:

  • 30:每 30 分钟一轮
  • 60:每小时一轮
  • 120:每 2 小时一轮
  • 1440:每天一轮

改完任意调度字段之后,都要重装 launch agents:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py install

这是必须的,因为 launchd 会把每个 plist 的 StartInterval 固化下来,不会自动热更新。

常用命令

查看所有任务状态:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py status

查看单个任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py status taxonomy_patrol

立即跑所有启用任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py run-now

立即跑单个任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py run-now content_patrol

安装或重装所有启用任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py install

安装或重装单个任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py install taxonomy_patrol

卸载所有已配置任务:

bash
python3 /Users/bytedance/csh/llm-wiki/.codex/skills/llm-wiki/scripts/manage_launch_agent.py uninstall

每个任务检查什么

content_patrol 应该专注于:

  • 新增或变更的 raw 内容
  • 需要先做 OCR 再综合的截图密集型来源
  • wiki/source/raw 链接失效
  • raw 内部因路径变更导致的导航链接失效
  • 缺失或 stale 的翻译 sibling
  • raw markdown 渲染隐患,例如损坏的链接、blob: 临时嵌入、未闭合 HTML 标签,或暴露在代码语境外的尖括号占位符
  • index.mdindex.zh.mdlog.md 漂移
  • 明显缺失的 cross-links

如果这些问题明显只是语法层损伤,content_patrol 应该在同一轮里直接修复,而不是只做报告。

taxonomy_patrol 应该专注于:

  • raw/ 是否已经平铺到难以导航
  • 某个 raw/source family 是否已经清晰到值得单独收成子树
  • wiki 中是否已经出现清晰的主题家族、来源家族或导航切片,适合集中归类
  • 页面或 raw 移动后的全局链接修复
  • 目录移动后的双语 sibling 修复
  • taxonomy 变更引起的 overview、index 和 source-page 导航漂移

真正的主触发信号应该是 family 边界是否清晰、目录是否好导航,而不是机械地等目录计数过线。taxonomy 任务仍然应保持保守,不做没有必要的重排。

防重入

防重入现在按任务分开。

如果上一轮 content_patrol 还在跑,下一轮 content_patrol 会跳过;但只要 taxonomy_patrol 自己的锁是空闲的,它仍然可以运行。每个任务都有自己独立的:

  • lock 文件
  • 结构化 state 文件
  • 最终摘要文件

如果某个任务超时或失败:

  • status 会明确显示该任务的状态
  • 同一个任务的下一轮会收到上一次的摘要和日志摘录作为 continuation context
  • 下一轮可以沿着未完成工作继续,而不是盲目从零开始

自动巡检日志

日志根目录仍然在:

text
~/.llm-wiki/logs/

单任务兼容模式保持旧布局:

text
~/.llm-wiki/logs/2026-04-08/
  maintenance-20260408-150012.log
  maintenance-20260408-150012-last-message.txt

具名任务模式会按任务分目录:

text
~/.llm-wiki/logs/content-patrol/2026-04-09/
  maintenance-content-patrol-20260409-132143.log
  maintenance-content-patrol-20260409-132143-last-message.txt

~/.llm-wiki/logs/taxonomy-patrol/2026-04-09/
  maintenance-taxonomy-patrol-20260409-090001.log
  maintenance-taxonomy-patrol-20260409-090001-last-message.txt

state 文件也会按任务拆开,例如:

text
~/.llm-wiki/content-patrol-state.json
~/.llm-wiki/taxonomy-patrol-state.json

这样可以直接看出是哪条维护链路运行了、做了什么,以及到底是哪一条链路需要关注。