"""插件清单定义 - Phase 8.1""" from dataclasses import dataclass, field from typing import Any @dataclass class PluginManifest: """插件清单 定义插件的元数据和接口。 """ id: str # 唯一标识 name: str # 显示名称 version: str # 版本号 description: str # 描述 author: str = "" # 作者 homepage: str = "" # 主页 license: str = "MIT" # 许可证 # 插件类型 plugin_type: str = "tool" # tool, hook, skill, all # 入口点 main: str = "index.py" # 主入口文件 hooks: list[str] = field(default_factory=list) # 提供的 Hook 列表 tools: list[str] = field(default_factory=list) # 提供的工具列表 skills: list[str] = field(default_factory=list) # 提供的 Skills 列表 # 依赖 dependencies: dict[str, str] = field(default_factory=dict) # pip 依赖 peer_dependencies: dict[str, str] = field(default_factory=dict) # 对等依赖 # 权限要求 permissions: list[str] = field(default_factory=list) # 需要的权限 allowed_paths: list[str] = field(default_factory=list) # 允许访问的路径 denied_paths: list[str] = field(default_factory=list) # 禁止访问的路径 # 网络权限 network_allowed: bool = False # 是否允许网络访问 allowed_hosts: list[str] = field(default_factory=list) # 允许访问的 host # 配置 config_schema: dict[str, Any] = field(default_factory=dict) # 配置 schema def to_dict(self) -> dict[str, Any]: return { "id": self.id, "name": self.name, "version": self.version, "description": self.description, "author": self.author, "homepage": self.homepage, "license": self.license, "plugin_type": self.plugin_type, "main": self.main, "hooks": self.hooks, "tools": self.tools, "skills": self.skills, "dependencies": self.dependencies, "peer_dependencies": self.peer_dependencies, "permissions": self.permissions, "allowed_paths": self.allowed_paths, "denied_paths": self.denied_paths, "network_allowed": self.network_allowed, "allowed_hosts": self.allowed_hosts, "config_schema": self.config_schema, } @classmethod def from_dict(cls, data: dict[str, Any]) -> "PluginManifest": return cls(**data)