From 75cd50ee0f2daff6aef647a7b17471731da55992 Mon Sep 17 00:00:00 2001 From: DrSmoothl <1787882683@qq.com> Date: Fri, 20 Mar 2026 22:35:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E5=AE=9E=E7=8E=B0=E6=B3=A8=E5=86=8C=E5=92=8C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=A4=84=E7=90=86=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugin_runtime/capabilities/registry.py | 9 ++++----- src/plugin_runtime/host/capability_service.py | 15 +++++---------- src/plugin_runtime/runner/runner_main.py | 7 +++++-- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/plugin_runtime/capabilities/registry.py b/src/plugin_runtime/capabilities/registry.py index ead5876a..96b190b4 100644 --- a/src/plugin_runtime/capabilities/registry.py +++ b/src/plugin_runtime/capabilities/registry.py @@ -1,6 +1,7 @@ -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING from src.common.logger import get_logger +from src.plugin_runtime.host.capability_service import CapabilityImpl from src.plugin_runtime.host.supervisor import PluginSupervisor if TYPE_CHECKING: @@ -12,17 +13,15 @@ logger = get_logger("plugin_runtime.integration") def register_capability_impls(manager: "PluginRuntimeManager", supervisor: PluginSupervisor) -> None: """向指定 Supervisor 注册主程序提供的能力实现。""" cap_service = supervisor.capability_service - rpc_server = supervisor.rpc_server - def _register(name: str, impl: Any) -> None: - """注册单个能力实现及其 RPC 入口。 + def _register(name: str, impl: CapabilityImpl) -> None: + """注册单个能力实现。 Args: name: 能力名称。 impl: 能力实现函数。 """ cap_service.register_capability(name, impl) - rpc_server.register_method(name, cap_service.handle_capability_request) _register("send.text", manager._cap_send_text) _register("send.emoji", manager._cap_send_emoji) diff --git a/src/plugin_runtime/host/capability_service.py b/src/plugin_runtime/host/capability_service.py index 761b20ca..0ff31fe1 100644 --- a/src/plugin_runtime/host/capability_service.py +++ b/src/plugin_runtime/host/capability_service.py @@ -56,19 +56,14 @@ class CapabilityService: 校验权限后调用对应实现。 """ plugin_id = envelope.plugin_id - payload = envelope.payload if isinstance(envelope.payload, dict) else {} try: - req = CapabilityRequestPayload.model_validate(payload) - capability = req.capability - args = req.args - except Exception: - capability = envelope.method - raw_args = payload.get("args", payload) - args = raw_args if isinstance(raw_args, dict) else {} + req = CapabilityRequestPayload.model_validate(envelope.payload) + except Exception as exc: + return envelope.make_error_response(ErrorCode.E_BAD_PAYLOAD.value, f"能力调用 payload 非法: {exc}") - if not capability: - return envelope.make_error_response(ErrorCode.E_BAD_PAYLOAD.value, "能力调用缺少 capability") + capability = req.capability + args = req.args # 1. 权限校验 allowed, reason = self._authorization.check_capability(plugin_id, capability) diff --git a/src/plugin_runtime/runner/runner_main.py b/src/plugin_runtime/runner/runner_main.py index 771e685f..bf36a05c 100644 --- a/src/plugin_runtime/runner/runner_main.py +++ b/src/plugin_runtime/runner/runner_main.py @@ -237,9 +237,12 @@ class PluginRunner: f"插件 {bound_plugin_id} 尝试以 {plugin_id} 身份发起 RPC,已强制绑定回自身身份" ) resp = await rpc_client.send_request( - method=method, + method="cap.call", plugin_id=bound_plugin_id, - payload=payload or {}, + payload={ + "capability": method, + "args": payload or {}, + }, ) # 从响应信封中提取业务结果 if resp.error: