Documentation
¶
Overview ¶
Package plugin 提供外部插件的发现、加载和生命周期管理 插件是独立的可执行文件,通过 Unix Socket HTTP 与 RDE 主进程通信
Index ¶
- type Info
- type Manager
- func (m *Manager) APIHandler() gin.HandlerFunc
- func (m *Manager) Discover() error
- func (m *Manager) FrontendMiddleware() gin.HandlerFunc
- func (m *Manager) GetPluginApps() []PluginAppInfo
- func (m *Manager) GetPlugins() []Info
- func (m *Manager) GetPublicRoutes() []string
- func (m *Manager) HandleAPIRequest(c *gin.Context) bool
- func (m *Manager) HasPlugins() bool
- func (m *Manager) Middleware() gin.HandlerFunc
- func (m *Manager) StartAll()
- func (m *Manager) StartWatching()
- func (m *Manager) Stop()
- type Manifest
- type PluginApp
- type PluginAppInfo
- type State
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Info ¶
type Info struct {
Manifest Manifest `json:"manifest"`
State State `json:"state"`
Socket string `json:"socket"`
PID int `json:"pid,omitempty"`
Error string `json:"error,omitempty"`
StartedAt *time.Time `json:"started_at,omitempty"`
}
Info 插件运行时信息(用于 API 响应)
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager 插件管理器 负责发现、启动、停止插件,以及路由代理
func NewManager ¶
func NewManager(pluginDir, socketDir, dataDir, baseDir string, debug bool, logger *zap.Logger) *Manager
NewManager 创建插件管理器
func (*Manager) APIHandler ¶
func (m *Manager) APIHandler() gin.HandlerFunc
APIHandler 返回插件 API 路由处理器 作为 catch-all 路由使用,处理所有未被模块路由匹配的 API 请求
func (*Manager) FrontendMiddleware ¶
func (m *Manager) FrontendMiddleware() gin.HandlerFunc
FrontendMiddleware 返回插件前端路由中间件 处理 /app/* 路由,代理到对应插件的前端服务
func (*Manager) GetPluginApps ¶
func (m *Manager) GetPluginApps() []PluginAppInfo
GetPluginApps 获取所有运行中插件提供的前端应用 返回的列表用于前端动态注册插件应用到桌面环境
func (*Manager) GetPublicRoutes ¶
GetPublicRoutes 返回所有插件声明的不需要认证的路由
func (*Manager) HandleAPIRequest ¶
HandleAPIRequest 处理插件 API 请求 如果请求匹配到插件路由则代理并返回 true,否则返回 false
func (*Manager) Middleware ¶
func (m *Manager) Middleware() gin.HandlerFunc
Middleware 返回 Gin 中间件,动态匹配插件 API 路由并代理请求 使用中间件而非静态路由注册,支持热插拔场景下的动态路由
func (*Manager) StartWatching ¶
func (m *Manager) StartWatching()
StartWatching 启动 fsnotify 监听插件目录 在插件目录下出现新子目录时自动加载并启动,子目录删除时自动停止并卸载
type Manifest ¶
type Manifest struct {
// ID 插件唯一标识符,如 "premium", "my-plugin"
ID string `json:"id"`
// Name 插件显示名称
Name string `json:"name"`
// Version 插件版本(语义化版本)
Version string `json:"version"`
// Description 插件描述
Description string `json:"description,omitempty"`
// Binary 可执行文件名,默认 "plugin"
Binary string `json:"binary,omitempty"`
// MinRDEVersion 要求的最低 RDE 版本
MinRDEVersion string `json:"min_rde_version,omitempty"`
// Routes 插件处理的路由前缀列表,如 ["/android/*", "/vm/*"]
// 这些路由将被注册到 /api/v1 组下
Routes []string `json:"routes"`
// PublicRoutes 不需要认证的路由前缀
PublicRoutes []string `json:"public_routes,omitempty"`
// RequiresLicense 是否需要许可证
RequiresLicense bool `json:"requires_license,omitempty"`
// Apps 插件提供的前端应用列表
// 每个应用将在桌面环境中显示为独立的可启动应用
// 前端资源由插件进程自行服务(通过路由代理)
Apps []PluginApp `json:"apps,omitempty"`
}
Manifest 描述插件的能力和元数据 每个插件目录下必须包含一个 manifest.json 文件
type PluginApp ¶
type PluginApp struct {
// ID 应用唯一标识(在桌面环境中的 appId)
ID string `json:"id"`
// Name 应用显示名称
Name string `json:"name"`
// Icon 应用图标(URL 路径或 Iconify 名称,如 "/icons/ai-assistant.svg" 或 "mdi:robot")
Icon string `json:"icon"`
// FrontendRoute 前端资源的完整路由路径
// 例如 "/app/ai/" 表示前端 SPA 入口在 /app/ai/
FrontendRoute string `json:"frontend_route"`
// Category 应用在开始菜单中的分类
// 可选值: system, productivity, multimedia, network, tools, other
Category string `json:"category,omitempty"`
// DefaultWidth 默认窗口宽度
DefaultWidth int `json:"default_width,omitempty"`
// DefaultHeight 默认窗口高度
DefaultHeight int `json:"default_height,omitempty"`
// MinWidth 最小窗口宽度
MinWidth int `json:"min_width,omitempty"`
// MinHeight 最小窗口高度
MinHeight int `json:"min_height,omitempty"`
// Singleton 是否只允许打开一个实例
Singleton bool `json:"singleton,omitempty"`
// Permissions 应用需要的权限列表
Permissions []string `json:"permissions,omitempty"`
}
PluginApp 描述插件提供的一个前端应用
type PluginAppInfo ¶
PluginAppInfo 插件应用信息(用于前端发现)