跳转至

myopenclaw v0.2.3

补丁版本(2026-11-09):道元新增论文清单每日对账 —— 已入库 Zotero 的请求自动撤销, 清单不再堆积已完成的条目。不改 dailyinfo,不改队列 schema/MCP 工具。

本版变更

论文清单每日自动清理(道元)

  • 新增 no-agent cron paper-queue-sync:每日 07:20(北京) 取清单活跃行 → 按标题在 Zotero 里查询 → 命中即调 paper_queue_cancel 撤销 (撤销 ≠ 删除:行保留、可重新入队)
  • 匹配判据(保守):归一化后完全相等,或较短者是较长者的前缀且覆盖 ≥ 90%; 只认学术条目类型(排除 webpage / note / attachment 等), Erratum: / Reply to: 这类前后缀条目不会误清原论文
  • arXiv 行额外用 arXiv 号查询(arXiv.<id>.pdf 附件 → 解析父条目再比标题), 自动归一化 arXiv: 前缀与 v2 版本号
  • fail-closed:清单/搜索任一失败 → 本次不撤销任何条目、exit 1, Hermes 把 watchdog 告警投到道元私聊;清单响应被截断也直接失败,不静默漏清
  • 无命中 → stdout 为空 → 完全静默;有清理 → 一条消息列出题目 + Zotero item key
  • --dry-run:只打印将清理项,不撤销(首次上线人眼核对用)
  • start.sh 抽出 install_hermes_profile_script / ensure_daoyuan_script_cron, 与 dailyinfo-digest 共用安装/注册/漂移修正逻辑(dailyinfo 行为不变)
  • 停用:清空 .env 的 PAPER_QUEUE_MCP_URL 后跑 start.sh,会移除既有 job; 临时关闭也可 hermes -p daoyuan cron remove paper-queue-sync

文档 / skill

  • docs/paper-queue.md 新增「每日自动清理」章节(判据 / 边界 / 验证 / 关闭)
  • docs/scheduling.md 增加 07:20 条目与检查清单
  • skills/paper-queue/SKILL.md 提示道元:条目可能已被自动清理,不要声称是它下载/入库的
  • CLAUDE.md / README.md 同步

升级注意

  1. 无新增环境变量:沿用 PAPER_QUEUE_MCP_URL / PAPER_QUEUE_DAOYUAN_TOKEN; Zotero 地址仍是容器内 http://zotero-mcp:8002/mcp
  2. 重跑 ./scripts/start.sh 即安装脚本并注册 paper-queue-sync(幂等,漂移会自动修正)
  3. 建议先手工 dry-run 核对命中项:
    docker compose exec -T hermes-daoyuan /opt/hermes/.venv/bin/python \
      /opt/data/profiles/daoyuan/scripts/paper_queue_sync.py --dry-run
    

验收

  • pytest tests/:1086 passed
  • mkdocs build --strict:通过
  • 真机:dry-run 命中 22 篇(随后批量入库再命中 9 篇);两次真实运行共撤销 31 条,清单活跃行 36 → 5;飞书私聊收到汇总,执行台账 delivery_outcome=delivered
  • 幂等复跑:再次 dry-run 空输出(无命中);start.sh 二次运行显示 「已存在且配置一致」

已知边界

  • 只按标题匹配:当前 zotero_search(Zotero quick search,titleCreatorYear) 搜不到 DOI;用户复述/翻译过的标题不会命中(宁可漏清、次日重试)
  • 只处理 Owen 自己的行(token 绑定);历史 zhao 行不动
  • cancelled_by 不区分人工撤销与自动清理;审计线索 = 每日清理消息(含 Zotero key)
  • hermes -p daoyuan cron runs paper-queue-sync
  • 活跃行超过服务端单次响应上限(按当前行宽估算约 169 条)时任务会响亮失败 (truncated → exit 1),而不是静默只清理一部分;分页留作后续工作