54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
"""插件 Skills 加载器 - Phase 9.2"""
|
|
|
|
from typing import Any
|
|
|
|
from app.agents.skills.metadata import SkillMetadata
|
|
from app.agents.plugins.manager import get_plugin_manager
|
|
|
|
|
|
class PluginSkillLoader:
|
|
"""插件 Skills 加载器
|
|
|
|
从已安装的插件中加载 Skills。
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.plugin_manager = get_plugin_manager()
|
|
|
|
def load_all(self) -> list[SkillMetadata]:
|
|
"""从所有已启用的插件加载 Skills
|
|
|
|
Returns:
|
|
Skill 元数据列表
|
|
"""
|
|
skills = []
|
|
|
|
for plugin in self.plugin_manager.list_plugins():
|
|
if not self.plugin_manager.is_enabled(plugin.id):
|
|
continue
|
|
|
|
# 从插件加载 Skills
|
|
plugin_skills = self._load_from_plugin(plugin)
|
|
skills.extend(plugin_skills)
|
|
|
|
return skills
|
|
|
|
def _load_from_plugin(self, plugin: Any) -> list[SkillMetadata]:
|
|
"""从单个插件加载 Skills"""
|
|
skills = []
|
|
|
|
for skill_name in plugin.skills:
|
|
skill = SkillMetadata(
|
|
name=f"{plugin.id}/{skill_name}",
|
|
description=f"Skill from plugin: {plugin.name}",
|
|
version=plugin.version,
|
|
author=plugin.author,
|
|
tags=["plugin", plugin.id],
|
|
content=f"# {skill_name}\n\nFrom plugin: {plugin.name}",
|
|
source="plugin",
|
|
source_id=plugin.id,
|
|
)
|
|
skills.append(skill)
|
|
|
|
return skills
|