mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-12 05:40:58 +00:00
chore(agent-runner): remove comment-only churn
This commit is contained in:
@@ -30,7 +30,7 @@ class MCPSessionStatus(enum.Enum):
|
|||||||
|
|
||||||
|
|
||||||
class RuntimeMCPSession:
|
class RuntimeMCPSession:
|
||||||
"""Runtime MCP session."""
|
"""运行时 MCP 会话"""
|
||||||
|
|
||||||
ap: app.Application
|
ap: app.Application
|
||||||
|
|
||||||
@@ -384,12 +384,12 @@ class RuntimeMCPSession:
|
|||||||
return info
|
return info
|
||||||
|
|
||||||
async def shutdown(self):
|
async def shutdown(self):
|
||||||
"""Close the session and release resources."""
|
"""关闭会话并清理资源"""
|
||||||
try:
|
try:
|
||||||
# Signal the lifecycle task to exit.
|
# 设置shutdown事件,通知lifecycle任务退出
|
||||||
self._shutdown_event.set()
|
self._shutdown_event.set()
|
||||||
|
|
||||||
# Wait for the lifecycle task with a bounded timeout.
|
# 等待lifecycle任务完成(带超时)
|
||||||
if self._lifecycle_task and not self._lifecycle_task.done():
|
if self._lifecycle_task and not self._lifecycle_task.done():
|
||||||
try:
|
try:
|
||||||
await asyncio.wait_for(self._lifecycle_task, timeout=5.0)
|
await asyncio.wait_for(self._lifecycle_task, timeout=5.0)
|
||||||
@@ -448,9 +448,9 @@ class RuntimeMCPSession:
|
|||||||
|
|
||||||
# @loader.loader_class('mcp')
|
# @loader.loader_class('mcp')
|
||||||
class MCPLoader(loader.ToolLoader):
|
class MCPLoader(loader.ToolLoader):
|
||||||
"""MCP tool loader.
|
"""MCP 工具加载器。
|
||||||
|
|
||||||
This loader owns all active MCP server connections.
|
在此加载器中管理所有与 MCP Server 的连接。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sessions: dict[str, RuntimeMCPSession]
|
sessions: dict[str, RuntimeMCPSession]
|
||||||
@@ -505,14 +505,14 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
self.ap.logger.debug(f'Started MCP server {server_config["name"]}({server_config["uuid"]})')
|
self.ap.logger.debug(f'Started MCP server {server_config["name"]}({server_config["uuid"]})')
|
||||||
|
|
||||||
async def load_mcp_server(self, server_config: dict) -> RuntimeMCPSession:
|
async def load_mcp_server(self, server_config: dict) -> RuntimeMCPSession:
|
||||||
"""Load an MCP server into the runtime.
|
"""加载 MCP 服务器到运行时
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
server_config: Server config dict. Must include:
|
server_config: 服务器配置字典,必须包含:
|
||||||
- name: Server name.
|
- name: 服务器名称
|
||||||
- mode: Connection mode (stdio/sse/http).
|
- mode: 连接模式 (stdio/sse/http)
|
||||||
- enable: Whether the server is enabled.
|
- enable: 是否启用
|
||||||
- extra_args: Optional extra config.
|
- extra_args: 额外的配置参数 (可选)
|
||||||
"""
|
"""
|
||||||
uuid_ = server_config.get('uuid')
|
uuid_ = server_config.get('uuid')
|
||||||
is_transient = False
|
is_transient = False
|
||||||
@@ -560,7 +560,7 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
return all_functions
|
return all_functions
|
||||||
|
|
||||||
async def has_tool(self, name: str) -> bool:
|
async def has_tool(self, name: str) -> bool:
|
||||||
"""Return whether a loaded MCP tool exists."""
|
"""检查工具是否存在"""
|
||||||
for session in self.sessions.values():
|
for session in self.sessions.values():
|
||||||
for function in session.get_tools():
|
for function in session.get_tools():
|
||||||
if function.name == name:
|
if function.name == name:
|
||||||
@@ -583,7 +583,7 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
async def invoke_tool(self, name: str, parameters: dict, query: pipeline_query.Query | None) -> typing.Any:
|
async def invoke_tool(self, name: str, parameters: dict, query: pipeline_query.Query | None) -> typing.Any:
|
||||||
"""Invoke a loaded MCP tool."""
|
"""执行工具调用"""
|
||||||
for session in self.sessions.values():
|
for session in self.sessions.values():
|
||||||
for function in session.get_tools():
|
for function in session.get_tools():
|
||||||
if function.name == name:
|
if function.name == name:
|
||||||
@@ -599,7 +599,7 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
raise ValueError(f'Tool not found: {name}')
|
raise ValueError(f'Tool not found: {name}')
|
||||||
|
|
||||||
async def remove_mcp_server(self, server_name: str):
|
async def remove_mcp_server(self, server_name: str):
|
||||||
"""Remove an MCP server from the runtime."""
|
"""移除 MCP 服务器"""
|
||||||
if server_name not in self.sessions:
|
if server_name not in self.sessions:
|
||||||
self.ap.logger.warning(f'MCP server {server_name} not found in sessions, skipping removal')
|
self.ap.logger.warning(f'MCP server {server_name} not found in sessions, skipping removal')
|
||||||
return
|
return
|
||||||
@@ -609,24 +609,24 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
self.ap.logger.info(f'Removed MCP server: {server_name}')
|
self.ap.logger.info(f'Removed MCP server: {server_name}')
|
||||||
|
|
||||||
def get_session(self, server_name: str) -> RuntimeMCPSession | None:
|
def get_session(self, server_name: str) -> RuntimeMCPSession | None:
|
||||||
"""Get an MCP session by server name."""
|
"""获取指定名称的 MCP 会话"""
|
||||||
return self.sessions.get(server_name)
|
return self.sessions.get(server_name)
|
||||||
|
|
||||||
def has_session(self, server_name: str) -> bool:
|
def has_session(self, server_name: str) -> bool:
|
||||||
"""Return whether a session exists for the server name."""
|
"""检查是否存在指定名称的 MCP 会话"""
|
||||||
return server_name in self.sessions
|
return server_name in self.sessions
|
||||||
|
|
||||||
def get_all_server_names(self) -> list[str]:
|
def get_all_server_names(self) -> list[str]:
|
||||||
"""Return all loaded MCP server names."""
|
"""获取所有已加载的 MCP 服务器名称"""
|
||||||
return list(self.sessions.keys())
|
return list(self.sessions.keys())
|
||||||
|
|
||||||
def get_server_tool_count(self, server_name: str) -> int:
|
def get_server_tool_count(self, server_name: str) -> int:
|
||||||
"""Return the number of tools exposed by one MCP server."""
|
"""获取指定服务器的工具数量"""
|
||||||
session = self.get_session(server_name)
|
session = self.get_session(server_name)
|
||||||
return len(session.get_tools()) if session else 0
|
return len(session.get_tools()) if session else 0
|
||||||
|
|
||||||
def get_all_servers_info(self) -> dict[str, dict]:
|
def get_all_servers_info(self) -> dict[str, dict]:
|
||||||
"""Return runtime information for all loaded MCP servers."""
|
"""获取所有服务器的信息"""
|
||||||
info = {}
|
info = {}
|
||||||
for server_name, session in self.sessions.items():
|
for server_name, session in self.sessions.items():
|
||||||
tools = session.get_tools()
|
tools = session.get_tools()
|
||||||
@@ -640,7 +640,7 @@ class MCPLoader(loader.ToolLoader):
|
|||||||
return info
|
return info
|
||||||
|
|
||||||
async def shutdown(self):
|
async def shutdown(self):
|
||||||
"""Shut down all MCP sessions."""
|
"""关闭所有工具"""
|
||||||
self.ap.logger.info('Shutting down all MCP sessions...')
|
self.ap.logger.info('Shutting down all MCP sessions...')
|
||||||
for server_name, session in list(self.sessions.items()):
|
for server_name, session in list(self.sessions.items()):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import typing
|
|||||||
|
|
||||||
|
|
||||||
def import_modules_in_pkg(pkg: typing.Any) -> None:
|
def import_modules_in_pkg(pkg: typing.Any) -> None:
|
||||||
"""Import all Python modules inside a package.
|
"""
|
||||||
|
导入一个包内的所有模块
|
||||||
Args:
|
Args:
|
||||||
pkg: Package object to import from.
|
pkg: 要导入的包对象
|
||||||
"""
|
"""
|
||||||
pkg_path = os.path.dirname(pkg.__file__)
|
pkg_path = os.path.dirname(pkg.__file__)
|
||||||
import_dir(pkg_path)
|
import_dir(pkg_path)
|
||||||
|
|||||||
Reference in New Issue
Block a user