Key features implemented: - Updated package metadata and dependencies in PKG-INFO, setup files - Added main.py entry point for backward compatibility with README launch method - Enhanced CLI with config options, system info command, and proper signal handling - Implemented minimal PluginManager loading only plugin-loader core plugin - Refactored PluginLoader to follow minimal core design, removed sandbox/isolation complexity - Updated auto-dependency plugin with safer PL injection mechanism and disabled pl_injection - Removed legacy plugin files (firewall, frp_proxy, ftp_server, multi_lang_deploy, ops_toolbox, security_gateway) as functionality moved to core plugin system - Improved gitignore with comprehensive ignore patterns The changes implement a minimal core framework design where only the plugin-loader is directly loaded by the core, with all other plugins managed through the PL injection mechanism, significantly simplifying the architecture.
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
"""能力注册表"""
|
|
from typing import Any, Optional
|
|
from .proxy import PermissionError
|
|
|
|
|
|
class CapabilityRegistry:
|
|
"""能力注册表"""
|
|
|
|
def __init__(self, permission_check: bool = True):
|
|
self.providers: dict[str, dict[str, Any]] = {}
|
|
self.consumers: dict[str, list[str]] = {}
|
|
self.permission_check = permission_check
|
|
|
|
def register_provider(self, capability: str, plugin_name: str, instance: Any):
|
|
"""注册能力提供者"""
|
|
self.providers[capability] = {
|
|
"plugin": plugin_name,
|
|
"instance": instance,
|
|
}
|
|
if capability not in self.consumers:
|
|
self.consumers[capability] = []
|
|
|
|
def register_consumer(self, capability: str, plugin_name: str):
|
|
"""注册能力消费者"""
|
|
if capability not in self.consumers:
|
|
self.consumers[capability] = []
|
|
if plugin_name not in self.consumers[capability]:
|
|
self.consumers[capability].append(plugin_name)
|
|
|
|
def get_provider(self, capability: str, requester: str = "",
|
|
allowed_plugins: list[str] = None) -> Optional[Any]:
|
|
"""获取能力提供者实例(带权限检查)"""
|
|
if capability not in self.providers:
|
|
return None
|
|
|
|
if self.permission_check and allowed_plugins is not None:
|
|
provider_name = self.providers[capability]["plugin"]
|
|
if (provider_name != requester and
|
|
provider_name not in allowed_plugins and
|
|
"*" not in allowed_plugins):
|
|
raise PermissionError(
|
|
f"插件 '{requester}' 无权使用能力 '{capability}'"
|
|
)
|
|
|
|
return self.providers[capability]["instance"]
|
|
|
|
def has_capability(self, capability: str) -> bool:
|
|
return capability in self.providers
|
|
|
|
def get_consumers(self, capability: str) -> list[str]:
|
|
return self.consumers.get(capability, [])
|