Phase 7: Built-in Hooks (audit_log, dangerous_confirmation, security_scan) Phase 8: Plugin system (PluginManager, PluginSandbox, PluginManifest) Phase 9: Skills registry (SkillRegistry, local/plugin/MCP loaders) Phase 10: TeamLeader, RemoteTransport, BackgroundTaskManager
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
"""插件清单定义 - 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)
|