fix(api): route auto repair docker restart through mcp
Some checks failed
CD Pipeline / tests (push) Successful in 1m21s
Code Review / ai-code-review (push) Successful in 13s
run-migration / migrate (push) Successful in 9s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled

This commit is contained in:
Your Name
2026-06-01 14:35:06 +08:00
parent ea8e2b1106
commit 2faa167ed2
5 changed files with 503 additions and 6 deletions

View File

@@ -1,3 +1,48 @@
## 2026-06-01AI 自健診 W-1 SLOauto_execute_success_rate 修復
**背景**
- Telegram 出現 `META-20260601130436`「飛輪核心異常」W-1 SLO 違反 `auto_execute_success_rate`
- production `/api/v1/ai/slo` 顯示 7 日自動執行成功率約 `83.3%`,低於 `85%` 門檻recent `auto_repair_executions` 指向 `PB-20260420-3F9C4C` 反覆失敗。
**根因**
- `Docker 容器 healthcheck 失敗` PlayBook 使用 legacy 指令:
`ssh {host} 'docker inspect {container} --format="{{.State.Health.Status}}" && docker restart {container}'`
- 只讀診斷已能走 `auto_repair_executor/ssh_diagnose/read` MCP Gateway但此寫入指令沒有安全轉譯落到 `HostRepairAgent.repair_by_uri()` 後被拒絕為 `unsupported scheme`
- production MCP grant 顯示 `auto_repair_executor` 只有 `ssh_diagnose/read``ssh_docker_restart/write` 僅授權 `approval_executor`,與 PlayBook `requires_approval=false` 的低/中風險自動修復意圖不一致。
**本次調整**
- `apps/api/src/services/auto_repair_service.py`
- 新增安全 legacy SSH write 路由:只允許簡單 `docker restart <container>``{container}` placeholder且必須能解析出安全 container name。
- 將該路由轉進 AwoooP MCP Gateway `ssh_docker_restart/write`,注入 `trust_score=0.85`、MCP audit context、`auto_repair_executor` agent 與 deterministic run id。
- 對 write scope 先投影短效 Gate 5 key `approved:auto_repair_policy``requires_approval=true` 時仍 fail-closed不會繞過人工審批。
- 保留 read-only `ssh_diagnose` 原路徑;含 command substitution、pipe、fallback shell、systemd/prune 的複雜命令仍拒絕自動寫入。
- `apps/api/migrations/awooop_awoooi_mcp_auto_repair_executor_docker_restart_2026-06-01.sql`
- 將 `auto_repair_executor` agent contract 升到 v1.1。
- 僅新增 `ssh_docker_restart/write` grant邊界寫入 contract只允許安全 Docker container restart其他寫入工具仍不授權。
- `apps/api/tests/test_auto_repair_service.py`
- 補上 write MCP route、複雜 shell 封鎖與 Gate 5 approval projection 測試。
**驗證**
```text
PYTHONPATH=apps/api python -m py_compile apps/api/src/services/auto_repair_service.py
DATABASE_URL=sqlite+aiosqlite:///:memory: PYTHONPATH=apps/api python -m pytest apps/api/tests/test_auto_repair_service.py -q
→ 26 passed
DATABASE_URL=sqlite+aiosqlite:///:memory: PYTHONPATH=apps/api python -m pytest apps/api/tests/test_auto_repair_service.py apps/api/tests/test_approval_execution_mcp_audit.py -q
→ 29 passed
production owner-fallback rollback check:
apps/api/migrations/awooop_awoooi_mcp_auto_repair_executor_docker_restart_2026-06-01.sql
→ migration rollback syntax ok with owner fallback
```
**進度邊界**
- 本輪修的是 W-1 的已知 executor gap避免後續同一 PlayBook 再產生 `unsupported_action_scheme`
- 歷史 7 日 SLO 會等舊失敗列被新成功列稀釋或滾出視窗才完全回綠;部署後需監看下一輪 `auto_repair_executions` 是否出現 `SUCCESS: mcp:ssh_docker_restart` 與 AwoooP MCP Gateway audit。
## 2026-06-01IwoooS 決策跑道
**背景**