plugin

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2026 License: GPL-3.0 Imports: 17 Imported by: 0

Documentation

Overview

Package plugin 提供外部插件的发现、加载和生命周期管理 插件是独立的可执行文件,通过 Unix Socket HTTP 与 RDE 主进程通信

Index

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) Discover

func (m *Manager) Discover() error

Discover 扫描插件目录,读取各插件的 manifest.json

func (*Manager) FrontendMiddleware

func (m *Manager) FrontendMiddleware() gin.HandlerFunc

FrontendMiddleware 返回插件前端路由中间件 处理 /app/* 路由,代理到对应插件的前端服务

func (*Manager) GetPluginApps

func (m *Manager) GetPluginApps() []PluginAppInfo

GetPluginApps 获取所有运行中插件提供的前端应用 返回的列表用于前端动态注册插件应用到桌面环境

func (*Manager) GetPlugins

func (m *Manager) GetPlugins() []Info

GetPlugins 获取所有插件信息(用于 API 响应)

func (*Manager) GetPublicRoutes

func (m *Manager) GetPublicRoutes() []string

GetPublicRoutes 返回所有插件声明的不需要认证的路由

func (*Manager) HandleAPIRequest

func (m *Manager) HandleAPIRequest(c *gin.Context) bool

HandleAPIRequest 处理插件 API 请求 如果请求匹配到插件路由则代理并返回 true,否则返回 false

func (*Manager) HasPlugins

func (m *Manager) HasPlugins() bool

HasPlugins 检查是否有已加载的插件

func (*Manager) Middleware

func (m *Manager) Middleware() gin.HandlerFunc

Middleware 返回 Gin 中间件,动态匹配插件 API 路由并代理请求 使用中间件而非静态路由注册,支持热插拔场景下的动态路由

func (*Manager) StartAll

func (m *Manager) StartAll()

StartAll 启动所有已发现的插件

func (*Manager) StartWatching

func (m *Manager) StartWatching()

StartWatching 启动 fsnotify 监听插件目录 在插件目录下出现新子目录时自动加载并启动,子目录删除时自动停止并卸载

func (*Manager) Stop

func (m *Manager) Stop()

Stop 停止所有插件

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

type PluginAppInfo struct {
	PluginID string    `json:"plugin_id"`
	App      PluginApp `json:"app"`
}

PluginAppInfo 插件应用信息(用于前端发现)

type State

type State string

State 插件运行状态

const (
	StateStopped  State = "stopped"
	StateStarting State = "starting"
	StateRunning  State = "running"
	StateError    State = "error"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL