feat: 添加插件运行时配置类,增强会话令牌管理和插件目录支持

This commit is contained in:
DrSmoothl
2026-03-13 00:11:00 +08:00
parent 52e9d43a90
commit f3270d4d41
8 changed files with 156 additions and 25 deletions

View File

@@ -23,6 +23,7 @@ import time
from typing import Any
from src.common.logger import get_logger, initialize_logging
from src.plugin_runtime import ENV_IPC_ADDRESS, ENV_PLUGIN_DIRS, ENV_SESSION_TOKEN
from src.plugin_runtime.protocol.envelope import (
ComponentDeclaration,
Envelope,
@@ -413,9 +414,7 @@ def _isolate_sys_path(plugin_dirs: List[str]) -> None:
_ALLOWED_SRC_PREFIXES = ("src.plugin_runtime", "src.common")
def find_module(self, fullname, path=None):
if self._should_block(fullname):
return self
return None
return self if self._should_block(fullname) else None
def load_module(self, fullname):
raise ImportError(
@@ -427,10 +426,10 @@ def _isolate_sys_path(plugin_dirs: List[str]) -> None:
if not fullname.startswith("src.") or fullname == "src":
return False
# 放行白名单前缀
for prefix in self._ALLOWED_SRC_PREFIXES:
if fullname == prefix or fullname.startswith(prefix + "."):
return False
return True
return not any(
fullname == prefix or fullname.startswith(f"{prefix}.")
for prefix in self._ALLOWED_SRC_PREFIXES
)
sys.meta_path.insert(0, _PluginImportBlocker())
@@ -439,12 +438,12 @@ def _isolate_sys_path(plugin_dirs: List[str]) -> None:
async def _async_main() -> None:
"""异步主入口"""
host_address = os.environ.get("MAIBOT_IPC_ADDRESS", "")
session_token = os.environ.get("MAIBOT_SESSION_TOKEN", "")
plugin_dirs_str = os.environ.get("MAIBOT_PLUGIN_DIRS", "")
host_address = os.environ.get(ENV_IPC_ADDRESS, "")
session_token = os.environ.get(ENV_SESSION_TOKEN, "")
plugin_dirs_str = os.environ.get(ENV_PLUGIN_DIRS, "")
if not host_address or not session_token:
logger.error("缺少必要的环境变量: MAIBOT_IPC_ADDRESS, MAIBOT_SESSION_TOKEN")
logger.error(f"缺少必要的环境变量: {ENV_IPC_ADDRESS}, {ENV_SESSION_TOKEN}")
sys.exit(1)
plugin_dirs = [d for d in plugin_dirs_str.split(os.pathsep) if d]