"""插件运行时工具 Provider。""" from __future__ import annotations from typing import Optional from src.core.tooling import ToolExecutionContext, ToolExecutionResult, ToolInvocation, ToolProvider, ToolSpec from .component_query import component_query_service class PluginToolProvider(ToolProvider): """将插件 Tool 与兼容旧 Action 暴露为统一工具 Provider。""" provider_name = "plugin_runtime" provider_type = "plugin" async def list_tools(self) -> list[ToolSpec]: """列出插件运行时当前可用的工具声明。""" return list(component_query_service.get_llm_available_tool_specs().values()) async def invoke( self, invocation: ToolInvocation, context: Optional[ToolExecutionContext] = None, ) -> ToolExecutionResult: """执行插件工具或兼容旧 Action 的工具调用。 Args: invocation: 工具调用请求。 context: 执行上下文。 Returns: ToolExecutionResult: 工具执行结果。 """ return await component_query_service.invoke_tool_as_tool( invocation=invocation, context=context, ) async def close(self) -> None: """关闭 Provider。 插件运行时工具 Provider 不持有独立资源。 """