baa-conductor

git clone 

commit
f4a1c8d
parent
c42fb56
author
im_wower
date
2026-03-30 03:00:06 +0800 CST
feat: enhance watchdog logging for a11y_msg and check cycles

- a11y_msg.sh: log START/OK/FAIL with tab name, message content, and
  exit codes; detect tab-not-found and keystroke failures separately
- watchdog.sh: log full CHECK state (status, idle, timeout, tab, wake_at,
  max_wake) every cycle; capture a11y_msg.sh exit code on renewal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 files changed,  +31, -9
M tools/watchdog/a11y_msg.sh
+23, -3
 1@@ -3,17 +3,23 @@
 2 # 用法: a11y_msg.sh <标签页全名> <消息>
 3 # 示例: a11y_msg.sh "OpenClaw的GUI控制机制 - Claude" "续命消息"
 4 
 5+SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
 6+LOG="${SCRIPT_DIR}/watchdog.log"
 7+
 8 TAB_NAME="$1"
 9 shift
10 MSG="$*"
11 
12 if [ -z "$TAB_NAME" ] || [ -z "$MSG" ]; then
13     echo "用法: $0 <标签页全名> <消息>"
14+    echo "[$(date)] A11Y_MSG FAIL: missing args (tab='$TAB_NAME' msg='$MSG')" >> "$LOG"
15     exit 1
16 fi
17 
18+echo "[$(date)] A11Y_MSG START: tab='$TAB_NAME' msg='$MSG'" >> "$LOG"
19+
20 # 1. 切标签页(全名匹配)
21-osascript -e "tell application \"Safari\"
22+TAB_RESULT=$(osascript -e "tell application \"Safari\"
23     repeat with w in windows
24         repeat with t in tabs of w
25             if name of t is \"$TAB_NAME\" then
26@@ -24,7 +30,13 @@ osascript -e "tell application \"Safari\"
27         end repeat
28     end repeat
29     return \"not found\"
30-end tell" 2>/dev/null
31+end tell" 2>/dev/null)
32+
33+if [ "$TAB_RESULT" != "matched" ]; then
34+    echo "[$(date)] A11Y_MSG FAIL: tab not found '$TAB_NAME'" >> "$LOG"
35+    echo "FAIL: tab not found [$TAB_NAME]"
36+    exit 2
37+fi
38 
39 sleep 1
40 
41@@ -37,5 +49,13 @@ osascript -e 'tell application "System Events" to tell process "Safari"
42     delay 0.5
43     keystroke return
44 end tell' 2>/dev/null
45+SEND_RC=$?
46 
47-echo "SENT to [$TAB_NAME]"
48+if [ $SEND_RC -eq 0 ]; then
49+    echo "[$(date)] A11Y_MSG OK: sent to '$TAB_NAME'" >> "$LOG"
50+    echo "SENT to [$TAB_NAME]"
51+else
52+    echo "[$(date)] A11Y_MSG FAIL: keystroke failed rc=$SEND_RC tab='$TAB_NAME'" >> "$LOG"
53+    echo "FAIL: keystroke error [$TAB_NAME]"
54+    exit 3
55+fi
M tools/watchdog/watchdog.sh
+8, -6
 1@@ -64,9 +64,16 @@ PYEOF
 2         continue
 3     fi
 4 
 5+    # 每次检查记录完整状态
 6+    echo "[$(date)] CHECK: status=$ST idle=${IDLE}s timeout=${TOUT}s tab='$TAB' need=$NEED wake_at=$WAKE max_wake=$MAXW reason='$REASON'" >> "$LOG"
 7+
 8     if [ "$NEED" = "yes" ]; then
 9         echo "[$(date)] RENEWAL: $REASON" >> "$LOG"
10         bash "${SCRIPT_DIR}/a11y_msg.sh" "$TAB" "$MSG"
11+        A11Y_RC=$?
12+        if [ $A11Y_RC -ne 0 ]; then
13+            echo "[$(date)] RENEWAL FAILED: a11y_msg.sh exited with rc=$A11Y_RC" >> "$LOG"
14+        fi
15         python3 << PYEOF2
16 import json, time
17 d = json.load(open("$HEARTBEAT"))
18@@ -76,11 +83,6 @@ d["wake_at"] = 0
19 d["max_wake_at"] = 0
20 json.dump(d, open("$HEARTBEAT", "w"))
21 PYEOF2
22-        echo "[$(date)] RENEWED" >> "$LOG"
23-    else
24-        extra = ""
25-        [ "$WAKE" != "0" ] && extra=" wake_at=$WAKE"
26-        [ "$MAXW" != "0" ] && extra="$extra max=$MAXW"
27-        echo "[$(date)] OK: status=$ST idle=${IDLE}s/${TOUT}s$extra" >> "$LOG"
28+        echo "[$(date)] RENEWED (a11y_rc=$A11Y_RC)" >> "$LOG"
29     fi
30 done