Files
watchdog-discord-route/README.md

361 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# watchdog-discord-route
> **繁體中文 / English bilingual README (same file)**
這個 repo 是一個可攜式 OpenClaw skill bundle用於打通並驗證 **watchdog-b → owner-facing Discord** 回報鏈路。
This repo is a portable OpenClaw skill bundle to deliver and verify the **watchdog-b → owner-facing Discord** reporting route.
---
## TL;DR 最短安裝(建議) / Quick Install (recommended)
### 1) 安裝 bundle + 建立設定檔 / Install + create config
```bash
./scripts/install_watchdog_bundle.sh --install-env-example
mkdir -p ~/.config/openclaw && cp ~/.config/openclaw/watchdog-b.env.example ~/.config/openclaw/watchdog-b.env
```
### 2) 設定 Discord 目標(必要) / Set Discord target (required)
`WATCHDOG_B_OWNER_REPORT_TARGET` 改成真的 channel id不要留 placeholder
Replace `WATCHDOG_B_OWNER_REPORT_TARGET` with a real channel id (do not keep the placeholder):
```bash
sed -i 's#^WATCHDOG_B_OWNER_REPORT_TARGET=.*#WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID#' ~/.config/openclaw/watchdog-b.env
```
### 3) Bootstrap通過後才開 timer / Bootstrap (enable timer only after pass)
```bash
./scripts/bootstrap_watchdog_bundle.sh
systemctl --user daemon-reload
systemctl --user enable --now openclaw-watchdog-b.timer
```
### 4)(可選)跑 E2E 驗證 / (Optional) run E2E verification
```bash
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
```
---
## 安裝流程圖 / Install Flow
```mermaid
flowchart TD
A[取得 repo / bundle] --> B[install_watchdog_bundle.sh --install-env-example]
B --> C[建立 ~/.config/openclaw/watchdog-b.env]
C --> D[設定 WATCHDOG_B_OWNER_REPORT_TARGET]
D --> E[bootstrap_watchdog_bundle.sh]
E --> F{Bootstrap 通過?}
F -- 否 / No --> G[修正 env/runtime/path 後重跑 bootstrap]
G --> E
F -- 是 / Yes --> H[systemctl --user enable --now openclaw-watchdog-b.timer]
H --> I[可選verify_watchdog_b_e2e.sh]
```
---
## 這是用來做什麼的 / What this is for
### 中文
用這個 bundle 來:
- 在新主機快速部署 watchdog-b`systemd --user timer`
- 驗證 owner-facing Discord 訊息是否真的送達
- 修復 `owner_report_*` routing 路徑錯誤
- 刷新 live bundle`~/.openclaw/workspace/scripts/watchdog-b/`
### English
Use this bundle to:
- deploy watchdog-b on a new OpenClaw host (via `systemd --user timer`)
- verify owner-facing Discord delivery end-to-end
- fix broken `owner_report_*` routing / path issues
- refresh the live install under `~/.openclaw/workspace/scripts/watchdog-b/`
---
## 包含內容 / Included
- Skill doc: `SKILL.md`
- Scripts: `scripts/*.sh`, `scripts/*.py`, `scripts/watchdog-b.env.example`
- systemd user units: `scripts/openclaw-watchdog-b.service`, `scripts/openclaw-watchdog-b.timer`
- References: `references/*.md`
---
## 重要設定(單一來源) / Single source of config
設定檔 / Config file:
- `~/.config/openclaw/watchdog-b.env`
最低必填 / Minimum required:
```bash
WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID
```
可選(只有 host 上真的存在該 agent id 才設)/ Optional (only set if the agent id exists on the host):
```bash
WATCHDOG_B_MAIN_AGENT_ID=backend
```
未設定時stalled/idle 的 main-agent nudge 會被 skip避免因 `Unknown agent id` 直接 fail。
If unset, stalled/idle main-agent nudge is skipped to avoid `Unknown agent id` failures.
---
## 驗收/證據標準 / Evidence Standard
請把「成功」拆成三層,不要混為一談:
- **transport accepted**send API 回傳成功/有 message id
- **channel-readable**:可以從 target channel 讀回
- **human-confirmed**Eric 確認在 Discord 看到
Do not collapse “success” into one claim:
- **transport accepted**: send returned success / message id
- **channel-readable**: message can be read back from the target channel
- **human-confirmed**: Eric confirmed it is visible in Discord
最低 E2E 成功訊號 / Minimum E2E success signals:
- `~/.clawteam/owner-reports/pending/` pending created
- pending moved into `~/.clawteam/owner-reports/sent/`
- Discord send success / message id
- artifacts written under `state/watchdog-b-verify-e2e/<run-id>/`
---
## 已知故障排查 FAQ雙語對照 / Troubleshooting FAQ (bilingual)
### Q1中文
**錯誤:** `can't open file .../scripts/scripts/owner_report_producer.py`
**原因:** notifier 使用了錯誤的 base path。
**正確路徑:** `.../scripts/watchdog-b/owner_report_producer.py`
**處理:** 先強制刷新 bundle再跑 bootstrap
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
```
### Q1 (English)
**Error:** `can't open file .../scripts/scripts/owner_report_producer.py`
**Cause:** the notifier is using a wrong base path.
**Correct path:** `.../scripts/watchdog-b/owner_report_producer.py`
**Fix:** force refresh the bundle, then rerun bootstrap:
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
```
---
### Q2中文
**錯誤:** `bootstrap_watchdog_bundle.sh``owner-reporting-system root missing`
**原因:** host 上仍是舊版 bootstrap期待舊的 live tree
**處理:** 刷新 bundle 之後再 bootstrap
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
```
**期待行為:** bootstrap 只檢查 `scripts/watchdog-b/*.py`,不再要求獨立的 `owner-reporting-system/` 目錄。
### Q2 (English)
**Error:** `bootstrap_watchdog_bundle.sh` says `owner-reporting-system root missing`
**Cause:** you are still running an older bootstrap that expects the legacy live tree.
**Fix:** refresh the bundle, then rerun bootstrap:
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
```
**Expected behavior:** bootstrap validates only the installed live bundle under `scripts/watchdog-b/*.py` and no longer requires a separate `owner-reporting-system/` directory.
---
### Q3中文
**錯誤:** `Unknown agent id "main"`
**原因:** 某些路徑stalled/idle嘗試 nudge hard-coded `main`,但該 host 上不存在。
**處理:**
- 最保守:不要設定 `WATCHDOG_B_MAIN_AGENT_ID`(讓它自動 skip
- 或:設定為 host 上真的存在的 agent id例如 `backend`
```bash
WATCHDOG_B_MAIN_AGENT_ID=backend
```
### Q3 (English)
**Error:** `Unknown agent id "main"`
**Cause:** stalled/idle path attempted to nudge a hard-coded `main`, which does not exist on this host.
**Fix:**
- safest: leave `WATCHDOG_B_MAIN_AGENT_ID` unset (it will be skipped)
- or set it to a real host-local agent id (e.g. `backend`)
```bash
WATCHDOG_B_MAIN_AGENT_ID=backend
```
---
### Q4中文
**問題:** `~/.config/openclaw/watchdog-b.env` 不存在
**原因:** 只有產生 example但沒有建立 live env。
**處理:**
```bash
mkdir -p ~/.config/openclaw
cp ~/.config/openclaw/watchdog-b.env.example ~/.config/openclaw/watchdog-b.env
```
然後至少設定:
```bash
WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID
```
### Q4 (English)
**Problem:** `~/.config/openclaw/watchdog-b.env` does not exist
**Cause:** the example exists, but the live env file was never created.
**Fix:**
```bash
mkdir -p ~/.config/openclaw
cp ~/.config/openclaw/watchdog-b.env.example ~/.config/openclaw/watchdog-b.env
```
Then set at least:
```bash
WATCHDOG_B_OWNER_REPORT_TARGET=channel:YOUR_DISCORD_CHANNEL_ID
```
---
### Q5中文
**問題:** bootstrap 通過,但 Discord 還是沒送到
**檢查順序:**
1. `WATCHDOG_B_OWNER_REPORT_TARGET` 是否真實(不是 placeholder
2. `pending/` 是否有檔、是否有進 `sent/`
3. send 是否只有 transport accepted有 message id但其實你看不到非 channel-readable
4. `state/watchdog-b-verify-e2e/<run-id>/` artifacts 是否齊全
**建議動作:**
```bash
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
```
### Q5 (English)
**Problem:** bootstrap passes, but Discord delivery still fails
**Check in order:**
1. `WATCHDOG_B_OWNER_REPORT_TARGET` is real (not placeholder)
2. a pending file exists and moves from `pending/` to `sent/`
3. distinguish transport accepted (message id) vs channel-readable visibility
4. verify artifacts exist under `state/watchdog-b-verify-e2e/<run-id>/`
**Suggested action:**
```bash
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
```
---
### Q6中文
**問題:** timer active / service success但 owner-facing route 仍不通
**解釋:** timer 代表排程活著,不代表鏈路通。仍需以 verify/evidence 為準。
### Q6 (English)
**Problem:** timer is active / service is successful, but owner-facing route still doesnt work
**Explanation:** a live scheduler does not guarantee the delivery chain works. Verify using E2E evidence.
---
### Q7中文
**問題:** 我該 rerun install 還是只跑 verify
**規則:**
- scripts/env/units 可能舊了 → rerun **install**
- 要做 host readiness 檢查 → rerun **bootstrap**
- 安裝都在,只需要新證據 → rerun **verify**
**實務順序:**
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
```
### Q7 (English)
**Problem:** should I rerun install or just rerun verify?
**Rule:**
- scripts/env/units may be stale → rerun **install**
- need host readiness validation → rerun **bootstrap**
- install is fine, need fresh evidence → rerun **verify**
**Practical order:**
```bash
./scripts/install_watchdog_bundle.sh --install-env-example --force
./scripts/bootstrap_watchdog_bundle.sh
cd ~/.openclaw/workspace/scripts/watchdog-b
./verify_watchdog_b_e2e.sh
```
---
## Safety / 清理規則
- **不要刪** `~/.clawteam/owner-reports/sent/` 歷史(除非明確要求)
- **不要刪** `state/watchdog-b/notify-state.json`(除非做 hard reset
---
## Repo
- https://gitea.cowbay.org/openclaw/watchdog-discord-route