新增 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>
6.6 KiB
6.6 KiB
[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.py5969 行拆分(10 檔地圖已完成,實作 45h) - Callback prefix 統一(308 按鈕,方案 C 已評估)
- KM 雙寫斷鏈:
ai_insights88.9% 無 embedding,embedding_retry_queue14 筆 pending - AIOps 停擺:
incidents/heal_logs5 天無寫入 - 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(本日 / 統帥親操)
- BotFather
/revoke原 Token → 更新 188.env→ 重啟三容器 - 裁定是否啟動 callback prefix 統一(方案 C,2 工天)
- 裁定 H1 5969 行拆分時機(45h,建議排 Sprint 3)
- 確認
config.py/docker-compose.yml/sqlite:/處置
Sprint 2(一週內 / Agent)
debugger:AIOps 5 天停擺根因(logs +AutoHealServiceinit)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:
https://mo.wooo.work/health200- Telegram
/start→ 按鈕回應正常 cmd:ppt:daily→ 收到日報- scheduler logs 無 ImportError
- 同一 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
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),統帥須最優先處理。