- 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
+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
+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