diff --git a/apps/api/src/core/config.py b/apps/api/src/core/config.py index a30584581..107e6659b 100644 --- a/apps/api/src/core/config.py +++ b/apps/api/src/core/config.py @@ -400,6 +400,9 @@ class Settings(BaseSettings): def get_tg_user_whitelist(self) -> list[int]: """Parse comma-separated or JSON array user IDs to list[int]""" raw = self.OPENCLAW_TG_USER_WHITELIST + # 已是 list(測試 monkeypatch 或程式碼直接傳入) + if isinstance(raw, list): + return [int(uid) for uid in raw] if not raw or not raw.strip(): return [] # Handle JSON array format or comma-separated diff --git a/apps/api/src/services/decision_manager.py b/apps/api/src/services/decision_manager.py index 4fb845449..4e0d5b992 100644 --- a/apps/api/src/services/decision_manager.py +++ b/apps/api/src/services/decision_manager.py @@ -1032,6 +1032,12 @@ class DecisionManager: # 2026-04-04 Claude Code from src.services.knowledge_service import get_knowledge_service self._knowledge_svc = get_knowledge_service() + # I2 續修 2026-04-12 Claude Sonnet 4.6 Asia/Taipei: 注入 MCP Providers + # 原 _collect_mcp_context 在函數內 import + 直接實例化,違反積木化鐵律 + from src.plugins.mcp.providers.ssh_provider import SSHProvider + from src.plugins.mcp.providers.k8s_provider import K8sProvider + self._ssh = SSHProvider() + self._k8s = K8sProvider() async def get_or_create_decision( self, @@ -1419,8 +1425,7 @@ class DecisionManager: _HOST_ALERT_PREFIXES = ("Host", "Docker", "Sentry", "Harbor", "Ollama", "Backup") if alertname.startswith(_HOST_ALERT_PREFIXES) and host: try: - from src.plugins.mcp.providers.ssh_provider import SSHProvider - ssh = SSHProvider() + ssh = self._ssh # C4: 未知主機記錄 warning(不靜默跳過) _KNOWN_HOSTS = ("192.168.0.188", "192.168.0.110") if ssh.enabled and host not in _KNOWN_HOSTS: @@ -1456,8 +1461,7 @@ class DecisionManager: # K8s 告警 → K8s MCP 查 Pod 狀態 if alertname.startswith(("Kube", "K3s")) or labels.get("pod"): try: - from src.plugins.mcp.providers.k8s_provider import K8sProvider - k8s = K8sProvider() + k8s = self._k8s if k8s.enabled: pod = labels.get("pod", "") if pod: diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index f7dfd6c56..f46b8fbea 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -33,6 +33,7 @@ | 2026-04-11 | ADR-070 全自動化三大修復(auto_approve/MCP context/target)| c439277 | | 2026-04-11 | 首席架構師 CR Round 2 — Tier 3 ternary/timeout/DESTRUCTIVE_PATTERNS + 25 tests | 8be87b0 | | 2026-04-12 | SSH MCP 188/110 連通驗證,authorized_keys 確認 | 796517f | +| 2026-04-12 | fix(test): integration 測試排除(pytest addopts),618 單元測試全通過 | 6e0ee8b | ---