Files
hermes-skills/skills/legal/contract-editor/references/auto-notify-queue-routing.md
T

2.3 KiB

auto_notify_new_file.sh 架构:入队模式 vs 直接执行模式

根因(2026-06-30)

auto_notify_new_file.sh 原本自己启动 uwf thread exec -c 5(前台模式)来执行合同审查 workflow。 但 hermes ACP 适配器在前台模式下有 asyncio stdin 注册 bug(KeyError: '0 is not registered'), 导致每次 spawn hermes acp 子进程都立即失败,日志中全是 agent command failed (uwf-hermes)

对比contract-queue-runner.sh 使用 uwf thread exec --background 模式,正常工作。

当前架构(2026-06-30 修复后)

企微收到文件
  → auto_notify_new_file.sh (inotifywait 监控)
    → 识别 sender (邱律师=QiuTing)
    → 上传 Nextcloud 待审查/
    → 入队 /tmp/contract-queue/manifest.txt
    → 检查 contract-queue-runner.sh 是否在运行,不在则启动
      → contract-queue-runner.sh 串行执行(--background 模式)
        → uwf thread start + thread exec --background
        → uwf-hermes → hermes acp(正常)

关键文件

文件 路径 职责
auto_notify ~/.hermes/scripts/auto_notify_new_file.sh 监控文件到达、上传、入队
queue runner ~/.hermes/skills/devops/uwf/scripts/contract-queue-runner.sh 串行执行 workflow
watchdog ~/.hermes/scripts/contract-queue-watchdog.sh 每20分钟检查卡住的 thread
auto_notify watchdog ~/.hermes/scripts/auto_notify_watchdog.sh 每5分钟检查 auto_notify 进程

禁止回退

绝不可把 auto_notify 改回自己启动 uwf thread exec 的模式。前台模式有 ACP stdin bug, 只有 --background 模式能正常工作。如果未来需要修改 auto_notify 的 workflow 启动逻辑, 必须通过 contract-queue-runner 间接执行。

入队逻辑

# 入队到 contract-queue
cp "$filepath" "$QUEUE_DIR/${orig_name}"

# 追加到 manifest(去重)
if ! grep -qFx "$orig_name" "$QUEUE_DIR/manifest.txt" 2>/dev/null; then
    echo "$orig_name" >> "$QUEUE_DIR/manifest.txt"
fi

# 检查 queue runner 是否在运行,不在则启动
if ! ps aux | grep -q "[c]ontract-queue-runner"; then
    nohup bash "$HOME/.hermes/skills/devops/uwf/scripts/contract-queue-runner.sh" >> "$QUEUE_DIR/queue.log" 2>&1 &
fi