From f3ae22d622909172abdaa1711cd857fa6274dead Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sat, 22 Nov 2025 11:24:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor(plugin=5Fsystem):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=AF=B9=E9=83=A8=E5=88=86=E7=BB=84=E4=BB=B6=E7=9A=84=E5=B1=80?= =?UTF-8?q?=E9=83=A8=E7=8A=B6=E6=80=81=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据新的设计,某些组件类型,如 ROUTER、EVENT_HANDLER 和 PROMPT,不应再支持局部启用/禁用状态。这些组件的状态应该在全局范围内进行管理。 此更改包括: - 在 `ComponentRegistry` 中引入 `_no_local_state_types` 集合,明确指定不支持局部状态的组件类型。 - 移除 `get_enabled_event_handlers` 和 `get_enabled_prompt_registry` 方法中的 `stream_id` 参数和局部状态检查逻辑,使其只返回全局启用的组件。 这一重构简化了状态管理逻辑,并使组件行为与设计意图保持一致。 --- src/plugin_system/core/component_registry.py | 33 ++++++++++---------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/plugin_system/core/component_registry.py b/src/plugin_system/core/component_registry.py index bb2e7a18e..6b0a90363 100644 --- a/src/plugin_system/core/component_registry.py +++ b/src/plugin_system/core/component_registry.py @@ -111,6 +111,13 @@ class ComponentRegistry: self._local_component_states: dict[str, dict[tuple[str, ComponentType], bool]] = {} """stream_id -> {(component_name, component_type): enabled_status}""" logger.info("组件注册中心初始化完成") + self._no_local_state_types: set[ComponentType] = { + ComponentType.ROUTER, + ComponentType.EVENT_HANDLER, + ComponentType.ROUTER, + ComponentType.PROMPT, + # 根据设计,COMMAND 和 PLUS_COMMAND 也不应支持局部状态 + } # == 注册方法 == @@ -888,14 +895,11 @@ class ComponentRegistry: info = self.get_component_info(handler_name, ComponentType.EVENT_HANDLER) return info if isinstance(info, EventHandlerInfo) else None - def get_enabled_event_handlers(self, stream_id: str | None = None) -> dict[str, type[BaseEventHandler]]: - """获取启用的事件处理器, 可选地根据 stream_id 考虑局部状态""" - all_handlers = self.get_event_handler_registry() - available_handlers = {} - for name, handler_class in all_handlers.items(): - if self.is_component_available(name, ComponentType.EVENT_HANDLER, stream_id): - available_handlers[name] = handler_class - return available_handlers + def get_enabled_event_handlers(self) -> dict[str, type[BaseEventHandler]]: + """获取启用的事件处理器""" + if not hasattr(self, "_enabled_event_handlers"): + self._enabled_event_handlers: dict[str, type["BaseEventHandler"]] = {} + return self._enabled_event_handlers.copy() # === Chatter 特定查询方法 === def get_chatter_registry(self) -> dict[str, type[BaseChatter]]: @@ -925,14 +929,11 @@ class ComponentRegistry: self._prompt_registry: dict[str, type[BasePrompt]] = {} return self._prompt_registry.copy() - def get_enabled_prompt_registry(self, stream_id: str | None = None) -> dict[str, type[BasePrompt]]: - """获取启用的Prompt注册表, 可选地根据 stream_id 考虑局部状态""" - all_prompts = self.get_prompt_registry() - available_prompts = {} - for name, prompt_class in all_prompts.items(): - if self.is_component_available(name, ComponentType.PROMPT, stream_id): - available_prompts[name] = prompt_class - return available_prompts + def get_enabled_prompt_registry(self) -> dict[str, type[BasePrompt]]: + """获取启用的Prompt注册表""" + if not hasattr(self, "_enabled_prompt_registry"): + self._enabled_prompt_registry: dict[str, type[BasePrompt]] = {} + return self._enabled_prompt_registry.copy() def get_registered_prompt_info(self, prompt_name: str) -> PromptInfo | None: """获取Prompt信息"""