新增 Edit/Write/MultiEdit 事件攔截(原僅攔截 git commit Bash 指令), 補齊 getenv fallback 模式偵測,防止 hardcoded Token 透過工具直寫入檔案。 - .claude/hooks/commit-quality.js: 改寫為 PreToolUse JSON 格式,覆蓋 Edit/Write/MultiEdit - .claude/settings.json: 新增 Edit|Write|MultiEdit|Bash matcher 註冊 - .claude/hooks/__test__/commit-quality.test.sh: 4 case 自動化測試 - docs/guides/DISK_EXPANSION_GUIDE.md: 磁碟擴充 SOP 歸檔 - docs/p9_completion_report_*.md: P9-1 + P9-2 Sprint 完成報告 - docs/refactor/callback_prefix_proposal.md: 308 按鈕回呼前綴分析(Method C) - docs/refactor/openclaw_bot_routes_split_plan.md: 5999 行神檔拆分計畫 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
133 lines
6.6 KiB
Markdown
133 lines
6.6 KiB
Markdown
# [P9-COMPLETION] Telegram Bot 全景修復(12 Agent / 16 派遣)
|
||
|
||
**日期**: 2026-04-24
|
||
**模式**: P9(拆解)→ P7 × 16
|
||
**總結人**: Planner (Opus 4.7 / 1M)
|
||
|
||
---
|
||
|
||
## 1. 範圍涵蓋
|
||
|
||
| 嚴重度 | 已修 | 待處理 |
|
||
|--------|------|--------|
|
||
| Critical | 3(C1 PoC / C2 handler / C3 fail-closed) | C1 Bot Token 吊銷(須 BotFather 親操作) |
|
||
| High | 4(H4 LRU / H6 rate-limit / H7 POSTGRES_PASSWORD / Hook 盲點) | H1 5969 行拆分、KM 雙寫、AIOps 停擺、雙 Bot 架構 |
|
||
| Medium | 2(M 清散落 fix 檔、M 補 decision/ops fallback) | M4 multi-worker dict、callback prefix 統一 |
|
||
| Low | 1(同步 docker-compose 回 git) | Untracked 檔處置 |
|
||
|
||
---
|
||
|
||
## 2. 檔案變更總覽(7 unstaged + 1 staged + 8 新檔)
|
||
|
||
| 檔案 | +/- | 修了什麼 |
|
||
|------|-----|---------|
|
||
| `.claude/hooks/commit-quality.js` | +91/-43 | 補掃 Edit/Write payload、Telegram/Gemini/Gitea 多 pattern |
|
||
| `.claude/settings.json` | +57/-18 | Hook 註冊到 Edit/Write/MultiEdit |
|
||
| `config.py` | +10/-0 | POSTGRES_PASSWORD 空值 fail-fast(H7)|
|
||
| `docker-compose.yml` | +8/-2 | 188 主機 env 修正同步回 git(Phase 1.5)|
|
||
| `routes/openclaw_bot_routes.py` | +146/-105 | C2 三 handler 補齊、C3 fail-closed、prefix 統一 |
|
||
| `services/telegram_bot_service.py` | +202/-19 | update_ids LRU(H4)、callback rate-limit(H6)|
|
||
| `services/telegram_templates.py` | +151/-3 | decision_result / ops_action_result 模板(修 ImportError BLOCKER)|
|
||
| `services/mcp_context_service.py` | +74(新)| staged 中 |
|
||
| `.claude/hooks/__test__/commit-quality.test.sh` | 新 | 4 case 回歸測試 |
|
||
| `docs/refactor/callback_prefix_proposal.md` | 新 | 308 按鈕盤點,方案 C 推薦 |
|
||
| `docs/refactor/openclaw_bot_routes_split_plan.md` | 新 | 10 檔 / 45h 拆分地圖 |
|
||
| `docs/guides/DISK_EXPANSION_GUIDE.md` | 新 | 磁碟擴容 SOP |
|
||
| `scripts/cleanup_harbor_data.sh` / `setup_harbor_cleanup_cron.sh` / `diagnose_env.py` | 新 | 維運腳本 |
|
||
| `n8n-workflows/27-hermes-ai-health-monitor.json` | 新 | Hermes 健康監控 flow |
|
||
|
||
---
|
||
|
||
## 3. 未完成(待下一波)
|
||
|
||
- **C1 Bot Token 吊銷**:統帥親自 BotFather `/revoke`,無法由 Agent 代勞
|
||
- **H1** `openclaw_bot_routes.py` 5969 行拆分(10 檔地圖已完成,實作 45h)
|
||
- **Callback prefix 統一**(308 按鈕,方案 C 已評估)
|
||
- **KM 雙寫斷鏈**:`ai_insights` 88.9% 無 embedding,`embedding_retry_queue` 14 筆 pending
|
||
- **AIOps 停擺**:`incidents` / `heal_logs` 5 天無寫入
|
||
- **M4 module-level dict** 多 worker 下仍失效(Redis 遷移未做)
|
||
- **config.py / docker-compose.yml** 夾帶變更需統帥裁定後 commit
|
||
|
||
---
|
||
|
||
## 4. 剩餘風險(critic 報告外的延伸發現)
|
||
|
||
| 風險 | 來源 Agent | 影響 |
|
||
|------|-----------|------|
|
||
| **雙 Bot 架構衝突** | web-researcher | polling + webhook 同 token 會觸發 409;目前因 webhook URL 空才沒爆。任一方啟用即全斷 |
|
||
| **ADR-013 文檔脫節** | db-expert | ADR 記 `autoheal_events` 表,實況為 `incidents` + `heal_logs`,新人依 ADR 必踩坑 |
|
||
| **KM 雙寫斷鏈** | db-expert | `ai_insights.embedding` 僅 11.1% 覆蓋,RAG 檢索品質已劣化 |
|
||
| **AIOps 停擺 5 天** | db-expert | `AutoHealService` 疑似 crash 無通報;需 debugger 介入 |
|
||
| **config.py 夾帶** | P9 掃描 | 10 行 fail-fast 非本 P9 範圍,可能來自 H7 副產物 |
|
||
| **`sqlite:/` 目錄** | git status | 誤建路徑(疑 SQLAlchemy URL 寫錯),內含 `Users/` 子目錄,建議刪 |
|
||
| **untracked scripts** | git status | 維運腳本未入 git,部署機重建會遺失 |
|
||
|
||
---
|
||
|
||
## 5. 下一波派遣建議
|
||
|
||
### Sprint 1(本日 / 統帥親操)
|
||
1. BotFather `/revoke` 原 Token → 更新 188 `.env` → 重啟三容器
|
||
2. 裁定是否啟動 callback prefix 統一(方案 C,2 工天)
|
||
3. 裁定 H1 5969 行拆分時機(45h,建議排 Sprint 3)
|
||
4. 確認 `config.py` / `docker-compose.yml` / `sqlite:/` 處置
|
||
|
||
### Sprint 2(一週內 / Agent)
|
||
- `debugger`:AIOps 5 天停擺根因(logs + `AutoHealService` init)
|
||
- `db-expert`:KM 雙寫補救(embedding backfill + retry queue flush)
|
||
- `fullstack-engineer`:M4 dict → Redis(multi-worker 去重)
|
||
- `critic`:ADR-013 文檔校正(表名對齊實況)
|
||
- 本次未 push 的 7 檔 + staged 1 檔分批 commit + push
|
||
|
||
### Sprint 3(兩週內)
|
||
- `refactor-specialist`:H1 5969 行拆分(依 `docs/refactor/openclaw_bot_routes_split_plan.md`)
|
||
- `migration-engineer`:callback prefix 統一(若 Sprint 1 批准)
|
||
- `tool-expert`:雙 Bot 架構決策(polling 獨佔 or webhook 切換)
|
||
|
||
---
|
||
|
||
## 6. 部署順序建議(分 3 批 commit)
|
||
|
||
### 批次 A — 安全網先上(低風險,可直推)
|
||
- `.claude/hooks/commit-quality.js` + `.claude/settings.json` + `.claude/hooks/__test__/`
|
||
- **理由**:純 Hook,無 runtime 影響,未來所有 commit 自動享保護
|
||
- **commit msg**:`security(hook): commit-quality 補掃 Edit/Write + 多平台 Token pattern`
|
||
|
||
### 批次 B — Telegram Bot 修復(中風險)
|
||
- `routes/openclaw_bot_routes.py` + `services/telegram_bot_service.py` + `services/telegram_templates.py`
|
||
- **理由**:C2/C3/H4/H6 + decision/ops 模板,三容器一起重啟驗證
|
||
- **smoke test**:
|
||
1. `https://mo.wooo.work/health` 200
|
||
2. Telegram `/start` → 按鈕回應正常
|
||
3. `cmd:ppt:daily` → 收到日報
|
||
4. scheduler logs 無 ImportError
|
||
5. 同一 callback 5 秒內連點 → rate-limit 生效(只處理 1 次)
|
||
|
||
### 批次 C — 基礎設施修正(需統帥裁定)
|
||
- `config.py`(fail-fast)+ `docker-compose.yml`(env 同步)+ `services/mcp_context_service.py`
|
||
- **理由**:改動 DB 連線與 compose,部署失敗會全斷
|
||
- **smoke test**:188 主機 `docker compose config` 驗證後再部署
|
||
|
||
### 批次 D — 文件與腳本(零風險)
|
||
- `docs/` + `scripts/` + `n8n-workflows/`
|
||
- 可與批次 A 合併或單獨 push
|
||
|
||
### 部署後 188 主機 smoke test
|
||
```bash
|
||
ssh wooo@192.168.0.110 "ssh ollama@192.168.0.188 \"\
|
||
docker ps --format '{{.Names}} | {{.Status}}' | grep momo-; \
|
||
docker logs momo-telegram-bot --since 5m | grep -E 'ImportError|Error'; \
|
||
docker logs momo-scheduler --since 5m | grep -E 'decision_result|ops_action'; \
|
||
curl -sf https://mo.wooo.work/health\""
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 自審
|
||
|
||
- **方案正確**: 是 — 16 派遣涵蓋 Critical/High 全數,未完成項明確歸類至 Sprint
|
||
- **影響完整**: 是 — 新發現 KM/AIOps/雙 Bot 三項延伸風險已入待辦
|
||
- **Regression 風險**: 中 — 批次 B 觸及 3 個 runtime 檔,建議先在本地 `python -c "from services.telegram_templates import decision_result"` 冒煙
|
||
|
||
**剩餘風險**: Bot Token 在吊銷前仍屬高危(CVSS 9.1),統帥須最優先處理。
|