refactor(plugin_system): 移除对部分组件的局部状态支持

根据新的设计,某些组件类型,如 ROUTER、EVENT_HANDLER 和 PROMPT,不应再支持局部启用/禁用状态。这些组件的状态应该在全局范围内进行管理。

此更改包括:
- 在 `ComponentRegistry` 中引入 `_no_local_state_types` 集合,明确指定不支持局部状态的组件类型。
- 移除 `get_enabled_event_handlers` 和 `get_enabled_prompt_registry` 方法中的 `stream_id` 参数和局部状态检查逻辑,使其只返回全局启用的组件。

这一重构简化了状态管理逻辑,并使组件行为与设计意图保持一致。
This commit is contained in:
minecraft1024a
2025-11-22 11:24:26 +08:00
parent 30bf1f68b1
commit f3ae22d622

View File

@@ -111,6 +111,13 @@ class ComponentRegistry:
self._local_component_states: dict[str, dict[tuple[str, ComponentType], bool]] = {} self._local_component_states: dict[str, dict[tuple[str, ComponentType], bool]] = {}
"""stream_id -> {(component_name, component_type): enabled_status}""" """stream_id -> {(component_name, component_type): enabled_status}"""
logger.info("组件注册中心初始化完成") 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) info = self.get_component_info(handler_name, ComponentType.EVENT_HANDLER)
return info if isinstance(info, EventHandlerInfo) else None return info if isinstance(info, EventHandlerInfo) else None
def get_enabled_event_handlers(self, stream_id: str | None = None) -> dict[str, type[BaseEventHandler]]: def get_enabled_event_handlers(self) -> dict[str, type[BaseEventHandler]]:
"""获取启用的事件处理器, 可选地根据 stream_id 考虑局部状态""" """获取启用的事件处理器"""
all_handlers = self.get_event_handler_registry() if not hasattr(self, "_enabled_event_handlers"):
available_handlers = {} self._enabled_event_handlers: dict[str, type["BaseEventHandler"]] = {}
for name, handler_class in all_handlers.items(): return self._enabled_event_handlers.copy()
if self.is_component_available(name, ComponentType.EVENT_HANDLER, stream_id):
available_handlers[name] = handler_class
return available_handlers
# === Chatter 特定查询方法 === # === Chatter 特定查询方法 ===
def get_chatter_registry(self) -> dict[str, type[BaseChatter]]: def get_chatter_registry(self) -> dict[str, type[BaseChatter]]:
@@ -925,14 +929,11 @@ class ComponentRegistry:
self._prompt_registry: dict[str, type[BasePrompt]] = {} self._prompt_registry: dict[str, type[BasePrompt]] = {}
return self._prompt_registry.copy() return self._prompt_registry.copy()
def get_enabled_prompt_registry(self, stream_id: str | None = None) -> dict[str, type[BasePrompt]]: def get_enabled_prompt_registry(self) -> dict[str, type[BasePrompt]]:
"""获取启用的Prompt注册表, 可选地根据 stream_id 考虑局部状态""" """获取启用的Prompt注册表"""
all_prompts = self.get_prompt_registry() if not hasattr(self, "_enabled_prompt_registry"):
available_prompts = {} self._enabled_prompt_registry: dict[str, type[BasePrompt]] = {}
for name, prompt_class in all_prompts.items(): return self._enabled_prompt_registry.copy()
if self.is_component_available(name, ComponentType.PROMPT, stream_id):
available_prompts[name] = prompt_class
return available_prompts
def get_registered_prompt_info(self, prompt_name: str) -> PromptInfo | None: def get_registered_prompt_info(self, prompt_name: str) -> PromptInfo | None:
"""获取Prompt信息""" """获取Prompt信息"""