fix(acp): preserve session MCP toolsets across model switches
This commit is contained in:
@@ -341,9 +341,13 @@ class HermesACPAgent(SlashCommandsMixin, acp.Agent):
|
||||
endpoint = {
|
||||
"base_url": getattr(state.agent, "base_url", None), "api_mode": getattr(state.agent, "api_mode", None)
|
||||
}
|
||||
# ACP-provided MCP servers live only on the running agent's toolsets (``_register_session_mcp_servers``);
|
||||
# a rebuild that re-derived them from config would silently drop every session MCP tool (#42719).
|
||||
state.agent = self.session_manager._make_agent(
|
||||
session_id=state.session_id, cwd=state.cwd, model=new_model,
|
||||
requested_provider=target_provider, **endpoint,
|
||||
enabled_toolsets=getattr(state.agent, "enabled_toolsets", None),
|
||||
disabled_toolsets=getattr(state.agent, "disabled_toolsets", None),
|
||||
)
|
||||
self.session_manager.save_session(state.session_id)
|
||||
return current_provider, target_provider, new_model
|
||||
|
||||
@@ -373,7 +373,10 @@ class SessionManager:
|
||||
# ---- internal -----------------------------------------------------------
|
||||
|
||||
def _make_agent(self, *, session_id: str, cwd: str, model: str | None = None,
|
||||
requested_provider: str | None = None, base_url: str | None = None, api_mode: str | None = None):
|
||||
requested_provider: str | None = None, base_url: str | None = None, api_mode: str | None = None,
|
||||
enabled_toolsets: list[str] | None = None, disabled_toolsets: list[str] | None = None):
|
||||
"""``enabled_toolsets``/``disabled_toolsets`` carry a live session's toolsets into a rebuild; ``None`` derives
|
||||
them from the config-declared MCP servers (fresh session)."""
|
||||
if self._agent_factory is not None:
|
||||
return self._agent_factory()
|
||||
|
||||
@@ -395,7 +398,9 @@ class SessionManager:
|
||||
]
|
||||
kwargs = {
|
||||
"platform": "acp", "quiet_mode": True, "session_id": session_id, "session_db": self._get_db(),
|
||||
"enabled_toolsets": _expand_acp_enabled_toolsets(["hermes-acp"], mcp_server_names=configured_mcp_servers),
|
||||
"enabled_toolsets": (list(enabled_toolsets) if enabled_toolsets is not None
|
||||
else _expand_acp_enabled_toolsets(["hermes-acp"], mcp_server_names=configured_mcp_servers)),
|
||||
"disabled_toolsets": list(disabled_toolsets) if disabled_toolsets is not None else None,
|
||||
"model": model or default_model,
|
||||
"cwd": cwd,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user