refactor(agent): MCP 서버 제거 → CLI 도구 직접 실행 전환 + Wiki 도구 추가
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
모든 역할이 gemini-3-flash-preview 모델을 사용하며,
|
||||
역할별 thinkingBudget을 동적으로 조절합니다.
|
||||
MCP 서버 없이 CLI 도구를 직접 실행하는 구조입니다.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
@@ -29,16 +30,7 @@ ROLE_THINKING: dict[str, int] = {
|
||||
}
|
||||
DEFAULT_THINKING = 4096
|
||||
|
||||
# 역할별 MCP 서버 접근 허용 목록
|
||||
# agent만 외부 도구 사용 가능, 나머지 역할은 텍스트 전용
|
||||
ROLE_MCP_ACCESS: dict[str, list[str]] = {
|
||||
"agent": ["anime", "infra"],
|
||||
"coder": [],
|
||||
"planner": [],
|
||||
"reviewer": [],
|
||||
"summarizer": [],
|
||||
"unified": [],
|
||||
}
|
||||
|
||||
|
||||
# 동시 호출 제한 (Gemini AI Ultra 120RPM 고려)
|
||||
_semaphore = asyncio.Semaphore(4)
|
||||
@@ -73,30 +65,9 @@ class GeminiCaller:
|
||||
"--approval-mode", "yolo"]
|
||||
return ["gemini", "--model", GEMINI_MODEL, "--approval-mode", "yolo"]
|
||||
|
||||
# MCP 서버 설정 (홈 레벨에 등록)
|
||||
_MCP_SERVERS = {
|
||||
"anime": {
|
||||
"command": str(Path(sys.executable)),
|
||||
"args": [str(PROJECT_ROOT / "mcp_servers" / "anime_server.py")],
|
||||
"cwd": str(PROJECT_ROOT),
|
||||
"trust": True,
|
||||
},
|
||||
"infra": {
|
||||
"command": str(Path(sys.executable)),
|
||||
"args": [str(PROJECT_ROOT / "mcp_servers" / "infra_server.py")],
|
||||
"cwd": str(PROJECT_ROOT),
|
||||
"trust": True,
|
||||
},
|
||||
}
|
||||
|
||||
def _set_thinking_budget(self, role: str):
|
||||
"""역할별 thinkingBudget + MCP 서버 설정을 settings.json에 반영.
|
||||
|
||||
MCP 서버는 ROLE_MCP_ACCESS에 따라 역할별로 필터링됩니다.
|
||||
agent 역할만 MCP 도구에 접근 가능하고, 나머지 역할은 제거됩니다.
|
||||
"""
|
||||
"""역할별 thinkingBudget을 settings.json에 반영."""
|
||||
budget = ROLE_THINKING.get(role, DEFAULT_THINKING)
|
||||
allowed_mcp = ROLE_MCP_ACCESS.get(role, [])
|
||||
try:
|
||||
if _SETTINGS_PATH.exists():
|
||||
settings = json.loads(_SETTINGS_PATH.read_text(encoding="utf-8"))
|
||||
@@ -110,22 +81,14 @@ class GeminiCaller:
|
||||
thinking = default.setdefault("thinkingConfig", {})
|
||||
thinking["thinkingBudget"] = budget
|
||||
|
||||
# MCP 서버 — 역할별 접근 제어
|
||||
mcp_servers = settings.setdefault("mcpServers", {})
|
||||
for name, cfg in self._MCP_SERVERS.items():
|
||||
if name in allowed_mcp:
|
||||
mcp_servers[name] = cfg
|
||||
else:
|
||||
mcp_servers.pop(name, None)
|
||||
# MCP 서버 제거 (CLI 직접 실행으로 전환)
|
||||
settings.pop("mcpServers", None)
|
||||
|
||||
_SETTINGS_PATH.write_text(
|
||||
json.dumps(settings, indent=2, ensure_ascii=False),
|
||||
encoding="utf-8",
|
||||
)
|
||||
logger.debug(
|
||||
f"settings.json 업데이트: role={role}, budget={budget}, "
|
||||
f"mcp={allowed_mcp or 'none'}"
|
||||
)
|
||||
logger.debug(f"settings.json 업데이트: role={role}, budget={budget}")
|
||||
except Exception as e:
|
||||
logger.warning(f"settings.json 업데이트 실패 (role={role}): {e}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user