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
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:
@@ -1,3 +1,48 @@
|
||||
## 2026-06-01|AI 自健診 W-1 SLO:auto_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-01|IwoooS 決策跑道
|
||||
|
||||
**背景**:
|
||||
|
||||
Reference in New Issue
Block a user