Files
NebulaShell/oss/plugin/manager.py
qwen.ai[bot] a00fd9ebcf Title: 添加成就系统和隐藏命令功能
Key features implemented:
- 新增oss/core/achievements.py实现配置验证与完整性检查模块,包含验证规则、缓存机制和成就解锁系统
- 新增oss/core/__init__.py作为核心模块入口,提供Context和验证器接口
- 修改oss/cli.py添加隐藏命令前缀支持(!!),实现内部调试命令和随机提示功能
- 修改oss/plugin/manager.py集成插件数量和启动速度成就检查
- 修改oss/config/config.py添加配置修改记录成就跟踪
- 更新.gitignore优化Python项目忽略文件配置

整体实现了完整的成就系统架构,支持隐藏命令交互和多种验证规则,并在系统各组件中集成成就解锁逻辑。
2026-04-26 09:22:49 +08:00

95 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""插件管理器 - 只加载 plugin-loader其他所有插件由 plugin-loader 插件自行管理"""
from typing import Any, Optional
from oss.plugin.loader import PluginLoader
# 深度隐藏的成就系统导入
try:
from oss.core.achievements import get_validator
_ACHIEVEMENTS_ENABLED = True
except ImportError:
_ACHIEVEMENTS_ENABLED = False
class PluginManager:
"""极简插件管理器
遵循「最小化核心框架」设计哲学:
- 核心框架只负责加载 plugin-loader 插件
- 所有其他插件HTTP、WebSocket、Dashboard 等)都由 plugin-loader 插件扫描和加载
- store/@{FutureOSS}/ 是唯一的插件来源
"""
def __init__(self):
self.loader = PluginLoader()
self.plugin_loader: Optional[Any] = None
def load(self):
"""仅加载 plugin-loader 核心插件
plugin-loader 插件会负责:
1. 扫描 store/@{FutureOSS}/ 目录
2. 加载所有启用的插件
3. 处理依赖关系
4. 执行 PL 注入机制
"""
# 只加载 plugin-loader其他所有插件都由它来管理
pl_info = self.loader.load_core_plugin("plugin-loader")
if pl_info:
self.plugin_loader = pl_info["instance"]
# 隐藏成就:深海潜水员 - 当加载插件管理器时解锁
if _ACHIEVEMENTS_ENABLED:
try:
validator = get_validator()
validator.unlock("deep_diver")
except Exception:
pass
def start(self):
"""启动 plugin-loader它会初始化并启动所有其他插件"""
import time
start_time = time.time()
if self.plugin_loader:
# plugin-loader.init() 会扫描并加载 store/ 中的所有插件
self.plugin_loader.init()
# plugin-loader.start() 会按依赖顺序启动所有插件
self.plugin_loader.start()
# 计算启动时间并检查速度成就
elapsed_ms = (time.time() - start_time) * 1000
if _ACHIEVEMENTS_ENABLED:
try:
validator = get_validator()
validator.check_startup_speed(elapsed_ms)
# 检查插件数量成就
if hasattr(self.plugin_loader, 'manager') and hasattr(self.plugin_loader.manager, 'plugins'):
plugin_count = len(self.plugin_loader.manager.plugins)
validator.check_plugin_count(plugin_count)
except Exception:
pass
def stop(self):
"""停止所有插件(由 plugin-loader 统一管理)"""
if self.plugin_loader:
try:
self.plugin_loader.stop()
except KeyboardInterrupt:
print("[PluginManager] 用户中断停止过程")
except Exception as e:
import traceback
print(f"[PluginManager] 停止插件时出错:{type(e).__name__}: {e}")
traceback.print_exc()
# 隐藏成就:崩溃幸存者 - 如果正常停止则不解锁,只有异常停止才可能解锁
# 这里我们记录停止事件,用于将来可能的连续运行成就
if _ACHIEVEMENTS_ENABLED:
try:
validator = get_validator()
# 记录会话结束
validator.track_progress("session_end")
except Exception:
pass