refactor(decision_manager): I2 DI 化 MCP Providers + fix config list type bug
- DecisionManager.__init__ 注入 SSHProvider/K8sProvider,移除函數內 import+實例化 - config.get_tg_user_whitelist() 支援 list 輸入(monkeypatch/直接傳入),修復 AttributeError - LOGBOOK 更新(test fix 6e0ee8b) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user