Documentation
¶
Overview ¶
Package plugin provides a comprehensive plugin system for extending go-magic with features including registry, lifecycle management, sandbox isolation, version management, and repository support.
Index ¶
- Constants
- func CheckUpgrade(current, latest string) bool
- func CheckVersion(version, constraint string) bool
- func CompareVersions(a, b string) int
- func CreateSamplePlugin(dir string) error
- func DefaultRepositoryURL() string
- func EnforceMemoryLimit(memLimit int64) error
- func EnforceTimeout(ctx context.Context, timeout time.Duration) (context.Context, context.CancelFunc)
- func EnsurePluginDir() error
- func FindPlugins(pluginsDir string) ([]string, error)
- func FormatConstraint(constraint string) string
- func FormatVersion(version string) string
- func GetPluginDir() string
- func IsValidVersion(version string) bool
- func IsValidVersionConstraint(constraint string) bool
- func MergeConfig(base, override map[string]interface{}) map[string]interface{}
- func SaveManifest(path string, manifest *PluginManifest) error
- func SortPluginInfos(infos []*PluginInfo)
- func ValidateManifest(m *PluginManifest) error
- type BinaryPlugin
- type CommandSpec
- type ConfigField
- type ConfigManager
- func (cm *ConfigManager) DeleteConfig(pluginID, key string) error
- func (cm *ConfigManager) ExportConfig() ([]byte, error)
- func (cm *ConfigManager) GetConfig(pluginID string) map[string]interface{}
- func (cm *ConfigManager) GetDefault(pluginID, key string) (interface{}, bool)
- func (cm *ConfigManager) GetRawConfig(pluginID string) map[string]interface{}
- func (cm *ConfigManager) GetSchema(pluginID string) []ConfigField
- func (cm *ConfigManager) HasSchema(pluginID string) bool
- func (cm *ConfigManager) ImportConfig(data []byte) error
- func (cm *ConfigManager) ListConfigKeys(pluginID string) []string
- func (cm *ConfigManager) RegisterSchema(pluginID string, fields []ConfigField)
- func (cm *ConfigManager) ResetConfig(pluginID string) error
- func (cm *ConfigManager) SetConfig(pluginID string, config map[string]interface{}) error
- func (cm *ConfigManager) SetDefault(pluginID, key string, value interface{})
- type Context
- type Dependency
- type FlagSpec
- type LifecycleEvent
- type LifecycleHook
- type LifecycleHookRegistration
- type LifecyclePlugin
- type Loader
- func (l *Loader) FindPlugins(dir string) ([]string, error)
- func (l *Loader) HotReload(id string) error
- func (l *Loader) Load(pluginPath string) error
- func (l *Loader) LoadAll() error
- func (l *Loader) LoadFromDirectory(dir string) error
- func (l *Loader) Unload(id string) error
- func (l *Loader) Validate(pluginPath string) error
- type LoaderConfig
- type Logger
- type Manager
- func (m *Manager) CheckUpdates() ([]UpdateInfo, error)
- func (m *Manager) Disable(pluginID string) error
- func (m *Manager) Enable(pluginID string) error
- func (m *Manager) Get(pluginID string) (Plugin, bool)
- func (m *Manager) GetEntry(pluginID string) (*PluginEntry, bool)
- func (m *Manager) Install(ctx context.Context, pluginID string) error
- func (m *Manager) InstallFromURL(ctx context.Context, url string) error
- func (m *Manager) List() []*PluginEntry
- func (m *Manager) ListByCategory(category string) []*PluginEntry
- func (m *Manager) ListByTag(tag string) []*PluginEntry
- func (m *Manager) Load(ctx context.Context, pluginID string) error
- func (m *Manager) LoadAll(ctx context.Context) error
- func (m *Manager) Reload(ctx context.Context, pluginID string) error
- func (m *Manager) RunWithSandbox(ctx context.Context, pluginID string, input interface{}) (interface{}, error)
- func (m *Manager) Search(ctx context.Context, query string) ([]PluginManifest, error)
- func (m *Manager) Uninstall(pluginID string) error
- func (m *Manager) Unload(pluginID string) error
- func (m *Manager) Update(ctx context.Context, pluginID string) error
- type ManagerConfig
- type Plugin
- type PluginEntry
- type PluginIndex
- type PluginInfo
- type PluginManifest
- type PluginState
- type PluginType
- type Registry
- func (r *Registry) Categories() []string
- func (r *Registry) Count() int
- func (r *Registry) CountByState() map[PluginState]int
- func (r *Registry) Disable(id string) error
- func (r *Registry) Enable(id string) error
- func (r *Registry) Get(id string) (Plugin, bool)
- func (r *Registry) GetDependents(id string) []string
- func (r *Registry) GetEntry(id string) (*PluginEntry, bool)
- func (r *Registry) GetInfo(id string) (*PluginInfo, bool)
- func (r *Registry) List() []*PluginManifest
- func (r *Registry) ListByCategory(category string) []*PluginManifest
- func (r *Registry) ListByTag(tag string) []*PluginManifest
- func (r *Registry) ListEntries() []*PluginEntry
- func (r *Registry) ListInfos() []*PluginInfo
- func (r *Registry) Register(plugin Plugin) error
- func (r *Registry) RegisterListener(listener RegistryListener)
- func (r *Registry) ResolveDependencies(id string) error
- func (r *Registry) Search(query string) []*PluginManifest
- func (r *Registry) SetState(id string, state PluginState) error
- func (r *Registry) Tags() []string
- func (r *Registry) Unregister(id string) error
- func (r *Registry) UnregisterListener(listener RegistryListener)
- func (r *Registry) UpdateRefCount(id string, delta int)
- type RegistryEventBus
- type RegistryListener
- type Repository
- func (r *Repository) GetPluginInfo(pluginID string) (*PluginManifest, error)
- func (r *Repository) Install(pluginID string, version string, targetDir string) error
- func (r *Repository) InstallFromURL(pluginURL string, targetDir string) error
- func (r *Repository) ListAvailable() ([]PluginManifest, error)
- func (r *Repository) ListByCategory(category string) ([]PluginManifest, error)
- func (r *Repository) ListCategories() ([]string, error)
- func (r *Repository) Search(query string) ([]PluginManifest, error)
- func (r *Repository) Uninstall(pluginID string, pluginDir string) error
- func (r *Repository) Update(pluginID string, currentVersion string, targetDir string) (bool, string, error)
- type RepositoryIndex
- type ResourceSpec
- type Sandbox
- type SandboxConfig
- type SandboxManager
- func (sm *SandboxManager) CreateSandbox(plugin Plugin) *Sandbox
- func (sm *SandboxManager) GetDefaultConfig() *SandboxConfig
- func (sm *SandboxManager) GetSandbox(pluginID string) (*Sandbox, bool)
- func (sm *SandboxManager) ListActive() []string
- func (sm *SandboxManager) RemoveSandbox(pluginID string)
- func (sm *SandboxManager) SetDefaultConfig(config *SandboxConfig)
- type ScriptPlugin
- type ShellPlugin
- type ShellTool
- type SimpleLogger
- type UpdateInfo
- type VersionConstraint
- type VersionManager
- func (vm *VersionManager) AddVersion(pluginID, version string)
- func (vm *VersionManager) CheckUpgrade(pluginID, currentVersion string) (bool, string)
- func (vm *VersionManager) Clear(pluginID string)
- func (vm *VersionManager) GetCompatible(pluginID, constraint string) (string, bool)
- func (vm *VersionManager) GetLatest(pluginID string) (string, bool)
- func (vm *VersionManager) GetVersions(pluginID string) []string
- func (vm *VersionManager) ListAll() map[string][]string
- func (vm *VersionManager) RemoveVersion(pluginID, version string)
Constants ¶
const ( EventRegister = "register" EventUnregister = "unregister" EventStateChange = "state_change" EventEnable = "enable" EventDisable = "disable" )
Registry event types
Variables ¶
This section is empty.
Functions ¶
func CheckUpgrade ¶
CheckUpgrade checks if there's an upgrade available
func CheckVersion ¶
CheckVersion checks if a version satisfies a constraint
func CompareVersions ¶
CompareVersions compares two versions Returns: -1 if a < b, 0 if a == b, 1 if a > b
func CreateSamplePlugin ¶
CreateSamplePlugin creates a sample plugin for demonstration
func DefaultRepositoryURL ¶
func DefaultRepositoryURL() string
DefaultRepositoryURL returns the default plugin repository URL
func EnforceMemoryLimit ¶
EnforceMemoryLimit is a no-op placeholder for actual memory enforcement In a real implementation, this would use cgroups or similar
func EnforceTimeout ¶
func EnforceTimeout(ctx context.Context, timeout time.Duration) (context.Context, context.CancelFunc)
EnforceTimeout creates a context with timeout
func EnsurePluginDir ¶
func EnsurePluginDir() error
EnsurePluginDir ensures the plugin directory exists
func FindPlugins ¶
FindPlugins finds all potential plugins in a directory
func FormatConstraint ¶
FormatConstraint formats a version constraint for display
func FormatVersion ¶
FormatVersion formats a version string for display
func IsValidVersion ¶
IsValidVersion checks if a version string is valid semver
func IsValidVersionConstraint ¶
IsValidVersionConstraint checks if a version constraint is valid
func MergeConfig ¶
MergeConfig merges two configurations, with override taking precedence
func SaveManifest ¶
func SaveManifest(path string, manifest *PluginManifest) error
SaveManifest saves a plugin manifest to file
func SortPluginInfos ¶
func SortPluginInfos(infos []*PluginInfo)
SortPluginInfos sorts plugin info slice by name
func ValidateManifest ¶
func ValidateManifest(m *PluginManifest) error
ValidateManifest validates a plugin manifest
Types ¶
type BinaryPlugin ¶
type BinaryPlugin struct {
// contains filtered or unexported fields
}
BinaryPlugin implements a binary plugin
func (*BinaryPlugin) Execute ¶
func (p *BinaryPlugin) Execute(cmd string, args []string) (interface{}, error)
Execute runs the binary with arguments
func (*BinaryPlugin) Initialize ¶
func (p *BinaryPlugin) Initialize(ctx *Context) error
Initialize initializes the plugin
func (*BinaryPlugin) Manifest ¶
func (p *BinaryPlugin) Manifest() *PluginManifest
Manifest returns the plugin manifest
func (*BinaryPlugin) Shutdown ¶
func (p *BinaryPlugin) Shutdown() error
Shutdown shuts down the plugin
type CommandSpec ¶
type CommandSpec struct {
Name string `json:"name"` // Command name
Description string `json:"description"` // Command description
Arguments []string `json:"arguments"` // Argument names
Flags []FlagSpec `json:"flags"` // Available flags
}
CommandSpec defines a command provided by the plugin
type ConfigField ¶
type ConfigField struct {
Key string `json:"key"` // Field key
Type string `json:"type"` // Field type (string, int, bool, etc.)
Default interface{} `json:"default"` // Default value
Description string `json:"description"` // Field description
Required bool `json:"required"` // Is required
Options []string `json:"options"` // Allowed values for enum
Min *float64 `json:"min,omitempty"` // Minimum for numbers
Max *float64 `json:"max,omitempty"` // Maximum for numbers
Pattern string `json:"pattern"` // Regex pattern for strings
Sensitive bool `json:"sensitive"` // Is sensitive (password, etc.)
EnvVar string `json:"env_var"` // Environment variable fallback
}
ConfigField represents a configuration field schema
type ConfigManager ¶
type ConfigManager struct {
// contains filtered or unexported fields
}
ConfigManager manages plugin configurations
func NewConfigManager ¶
func NewConfigManager(configDir string) (*ConfigManager, error)
NewConfigManager creates a new configuration manager
func (*ConfigManager) DeleteConfig ¶
func (cm *ConfigManager) DeleteConfig(pluginID, key string) error
DeleteConfig removes a configuration key
func (*ConfigManager) ExportConfig ¶
func (cm *ConfigManager) ExportConfig() ([]byte, error)
ExportConfig exports configuration for all plugins
func (*ConfigManager) GetConfig ¶
func (cm *ConfigManager) GetConfig(pluginID string) map[string]interface{}
GetConfig returns configuration for a plugin
func (*ConfigManager) GetDefault ¶
func (cm *ConfigManager) GetDefault(pluginID, key string) (interface{}, bool)
GetDefault returns the default value for a key
func (*ConfigManager) GetRawConfig ¶
func (cm *ConfigManager) GetRawConfig(pluginID string) map[string]interface{}
GetRawConfig returns the raw (user-set) configuration without defaults
func (*ConfigManager) GetSchema ¶
func (cm *ConfigManager) GetSchema(pluginID string) []ConfigField
GetSchema returns the configuration schema for a plugin
func (*ConfigManager) HasSchema ¶
func (cm *ConfigManager) HasSchema(pluginID string) bool
HasSchema returns true if plugin has a registered schema
func (*ConfigManager) ImportConfig ¶
func (cm *ConfigManager) ImportConfig(data []byte) error
ImportConfig imports configuration from JSON
func (*ConfigManager) ListConfigKeys ¶
func (cm *ConfigManager) ListConfigKeys(pluginID string) []string
ListConfigKeys lists all configuration keys for a plugin
func (*ConfigManager) RegisterSchema ¶
func (cm *ConfigManager) RegisterSchema(pluginID string, fields []ConfigField)
RegisterSchema registers a configuration schema for a plugin
func (*ConfigManager) ResetConfig ¶
func (cm *ConfigManager) ResetConfig(pluginID string) error
ResetConfig resets plugin config to defaults
func (*ConfigManager) SetConfig ¶
func (cm *ConfigManager) SetConfig(pluginID string, config map[string]interface{}) error
SetConfig sets configuration for a plugin
func (*ConfigManager) SetDefault ¶
func (cm *ConfigManager) SetDefault(pluginID, key string, value interface{})
SetDefault sets a default value for a configuration key
type Context ¶
type Context struct {
PluginID string // Plugin ID
HomeDir string // User home directory
WorkingDir string // Current working directory
Environment []string // Environment variables
DataDir string // Plugin data directory
CacheDir string // Plugin cache directory
ConfigDir string // Plugin config directory
Config map[string]interface{} // Plugin configuration
SessionID string // Current session ID
UserID string // Current user ID
Logger Logger // Plugin logger
Metadata map[string]interface{} // Additional metadata
}
Context provides context to plugins
type Dependency ¶
type Dependency struct {
ID string `json:"id"` // Plugin ID
Version string `json:"version"` // Version constraint
Optional bool `json:"optional"` // Is this optional
}
Dependency represents a plugin dependency
type FlagSpec ¶
type FlagSpec struct {
Name string `json:"name"` // Flag name
Short string `json:"short"` // Short flag
Description string `json:"description"` // Flag description
Default string `json:"default"` // Default value
Type string `json:"type"` // Flag type
}
FlagSpec defines a command flag
type LifecycleEvent ¶
type LifecycleEvent string
LifecycleEvent represents plugin lifecycle events
const ( EventOnLoad LifecycleEvent = "on_load" EventOnUnload LifecycleEvent = "on_unload" EventOnEnable LifecycleEvent = "on_enable" EventOnDisable LifecycleEvent = "on_disable" EventOnSessionStart LifecycleEvent = "on_session_start" EventOnSessionEnd LifecycleEvent = "on_session_end" EventOnLLMCall LifecycleEvent = "on_llm_call" EventOnToolCall LifecycleEvent = "on_tool_call" EventOnError LifecycleEvent = "on_error" EventOnConfigChange LifecycleEvent = "on_config_change" )
type LifecycleHook ¶
type LifecycleHook func(ctx *Context, event LifecycleEvent, data interface{}) error
LifecycleHook defines a lifecycle hook function
type LifecycleHookRegistration ¶
type LifecycleHookRegistration struct {
Event LifecycleEvent
Priority int // Higher priority runs first
Handler LifecycleHook
}
LifecycleHookRegistration describes a lifecycle hook
type LifecyclePlugin ¶
type LifecyclePlugin interface {
Plugin
// OnLifecycle is called for lifecycle events
OnLifecycle(ctx *Context, event LifecycleEvent, data interface{}) error
// RegisterLifecycleHooks returns hooks this plugin provides
RegisterLifecycleHooks() []LifecycleHookRegistration
}
LifecyclePlugin extends Plugin with lifecycle support
type Loader ¶
type Loader struct {
// contains filtered or unexported fields
}
Loader handles plugin loading from various sources
func NewLoader ¶
func NewLoader(registry *Registry, config *LoaderConfig) *Loader
NewLoader creates a new plugin loader
func (*Loader) FindPlugins ¶
FindPlugins discovers all potential plugins in a directory
func (*Loader) LoadFromDirectory ¶
LoadFromDirectory loads all plugins from a directory
type LoaderConfig ¶
type LoaderConfig struct {
PluginDir string // Directory to load plugins from
AllowedDirs []string // Additional allowed directories
AutoEnable bool // Auto-enable loaded plugins
ValidateDeps bool // Validate dependencies on load
LoadBuiltins bool // Load built-in plugins
BuiltinDir string // Built-in plugins directory
PreloadHooks []string // Hooks to preload
}
LoaderConfig holds loader configuration
func DefaultLoaderConfig ¶
func DefaultLoaderConfig() *LoaderConfig
DefaultLoaderConfig returns default loader configuration
type Logger ¶
type Logger interface {
Debug(msg string, args ...interface{})
Info(msg string, args ...interface{})
Warn(msg string, args ...interface{})
Error(msg string, args ...interface{})
}
Logger provides logging interface for plugins
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager provides high-level plugin management
func NewManager ¶
func NewManager(config *ManagerConfig) (*Manager, error)
NewManager creates a new plugin manager
func (*Manager) CheckUpdates ¶
func (m *Manager) CheckUpdates() ([]UpdateInfo, error)
CheckUpdates checks for plugin updates
func (*Manager) GetEntry ¶
func (m *Manager) GetEntry(pluginID string) (*PluginEntry, bool)
GetEntry returns a plugin entry by ID
func (*Manager) InstallFromURL ¶
InstallFromURL installs a plugin directly from a URL
func (*Manager) ListByCategory ¶
func (m *Manager) ListByCategory(category string) []*PluginEntry
ListByCategory returns plugins by category
func (*Manager) ListByTag ¶
func (m *Manager) ListByTag(tag string) []*PluginEntry
ListByTag returns plugins by tag
func (*Manager) RunWithSandbox ¶
func (m *Manager) RunWithSandbox(ctx context.Context, pluginID string, input interface{}) (interface{}, error)
RunWithSandbox executes a plugin with sandbox restrictions
type ManagerConfig ¶
ManagerConfig holds manager configuration
func DefaultManagerConfig ¶
func DefaultManagerConfig() *ManagerConfig
DefaultManagerConfig returns default manager configuration
type Plugin ¶
type Plugin interface {
// Manifest returns the plugin manifest
Manifest() *PluginManifest
// Initialize initializes the plugin with configuration
Initialize(ctx *Context) error
// Execute runs a command with arguments
Execute(cmd string, args []string) (interface{}, error)
// Shutdown gracefully shuts down the plugin
Shutdown() error
}
Plugin represents a loaded plugin instance
type PluginEntry ¶
type PluginEntry struct {
Plugin Plugin
Manifest *PluginManifest
State PluginState
Info *PluginInfo
RefCount int // Number of other plugins depending on this
// contains filtered or unexported fields
}
PluginEntry represents a registered plugin entry
type PluginIndex ¶
type PluginIndex struct {
// contains filtered or unexported fields
}
PluginIndex provides fast lookup by various criteria
type PluginInfo ¶
type PluginInfo struct {
ID string `json:"id"`
Name string `json:"name"`
Version string `json:"version"`
Description string `json:"description"`
State PluginState `json:"state"`
Author string `json:"author"`
Category string `json:"category"`
Tags []string `json:"tags"`
StateInfo string `json:"state_info"` // Additional state info
EnabledAt *time.Time `json:"enabled_at"` // When enabled
DisabledAt *time.Time `json:"disabled_at"` // When disabled
LoadedAt *time.Time `json:"loaded_at"` // When loaded
UnloadedAt *time.Time `json:"unloaded_at"` // When unloaded
ErrorMsg string `json:"error_msg"` // Error message if state is error
Permissions []string `json:"permissions"` // Permissions granted
Commands []string `json:"commands"` // Available commands
Hooks []string `json:"hooks"` // Registered hooks
Dependents []string `json:"dependents"` // Plugins depending on this
Dependencies []string `json:"dependencies"` // Plugins this depends on
Config map[string]interface{} `json:"config"` // Current config
}
PluginInfo represents detailed runtime information about a plugin
type PluginManifest ¶
type PluginManifest struct {
ID string `json:"id"` // Unique identifier (kebab-case)
Name string `json:"name"` // Display name
Version string `json:"version"` // Semantic version
Description string `json:"description"` // Brief description
LongDesc string `json:"long_desc"` // Detailed description
Author string `json:"author"` // Author name
AuthorEmail string `json:"author_email"` // Author email
License string `json:"license"` // License type
Homepage string `json:"homepage"` // Plugin homepage
Repository string `json:"repository"` // Source repository
Tags []string `json:"tags"` // Searchable tags
Category string `json:"category"` // Plugin category
APIVersion string `json:"api_version"` // go-magic API version
MinAppVersion string `json:"min_app_version"` // Minimum go-magic version
Type PluginType `json:"type"` // Plugin implementation type
Entrypoint string `json:"entrypoint"` // Main entry file (default)
Entrypoints map[string]string `json:"entrypoints"` // Platform-specific entrypoints (key: GOOS, e.g. "windows", "darwin", "linux")
EntrypointWindows string `json:"entrypoint_windows"` // Shortcut for entrypoints.windows
Permissions []string `json:"permissions"` // Required permissions
Dependencies []Dependency `json:"dependencies"` // Plugin dependencies
ConfigSchema []ConfigField `json:"config_schema"` // Configuration schema
Commands []CommandSpec `json:"commands"` // CLI commands
Hooks []string `json:"hooks"` // Lifecycle hooks
Events []string `json:"events"` // Published events
Resources []ResourceSpec `json:"resources"` // Bundled resources
CreatedAt string `json:"created_at"` // Creation timestamp
UpdatedAt string `json:"updated_at"` // Last update timestamp
}
PluginManifest represents the complete manifest of a plugin
func LoadManifest ¶
func LoadManifest(path string) (*PluginManifest, error)
LoadManifest loads a plugin manifest from file
type PluginState ¶
type PluginState string
PluginState represents the state of a plugin
const ( StateUnloaded PluginState = "unloaded" StateLoading PluginState = "loading" StateLoaded PluginState = "loaded" StateEnabled PluginState = "enabled" StateDisabled PluginState = "disabled" StateError PluginState = "error" )
type PluginType ¶
type PluginType string
PluginType represents the type of plugin implementation
const ( TypeGo PluginType = "go" // Go plugin (.so) TypeScript PluginType = "script" // Script plugin (shell, python, etc.) TypeBinary PluginType = "binary" // Standalone binary TypeWasm PluginType = "wasm" // WebAssembly plugin TypeHTTP PluginType = "http" // HTTP-based remote plugin )
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry manages plugin registration and discovery
func (*Registry) Categories ¶
Categories returns all unique categories
func (*Registry) CountByState ¶
func (r *Registry) CountByState() map[PluginState]int
CountByState returns plugin count by state
func (*Registry) GetDependents ¶
GetDependents returns plugins that depend on this one
func (*Registry) GetEntry ¶
func (r *Registry) GetEntry(id string) (*PluginEntry, bool)
GetEntry retrieves a plugin entry by ID
func (*Registry) GetInfo ¶
func (r *Registry) GetInfo(id string) (*PluginInfo, bool)
GetInfo retrieves plugin info by ID
func (*Registry) List ¶
func (r *Registry) List() []*PluginManifest
List returns all registered plugin manifests
func (*Registry) ListByCategory ¶
func (r *Registry) ListByCategory(category string) []*PluginManifest
ListByCategory returns plugins in a category
func (*Registry) ListByTag ¶
func (r *Registry) ListByTag(tag string) []*PluginManifest
ListByTag returns plugins with a tag
func (*Registry) ListEntries ¶
func (r *Registry) ListEntries() []*PluginEntry
ListEntries returns all registered plugin entries
func (*Registry) ListInfos ¶
func (r *Registry) ListInfos() []*PluginInfo
ListInfos returns all plugin info entries
func (*Registry) RegisterListener ¶
func (r *Registry) RegisterListener(listener RegistryListener)
RegisterListener registers a registry event listener
func (*Registry) ResolveDependencies ¶
ResolveDependencies resolves plugin dependencies
func (*Registry) Search ¶
func (r *Registry) Search(query string) []*PluginManifest
Search searches plugins by name, description, or tags
func (*Registry) SetState ¶
func (r *Registry) SetState(id string, state PluginState) error
SetState sets the plugin state
func (*Registry) Unregister ¶
Unregister unregisters a plugin
func (*Registry) UnregisterListener ¶
func (r *Registry) UnregisterListener(listener RegistryListener)
UnregisterListener unregisters a registry event listener
func (*Registry) UpdateRefCount ¶
UpdateRefCount updates the reference count for dependencies
type RegistryEventBus ¶
type RegistryEventBus struct {
// contains filtered or unexported fields
}
RegistryEventBus notifies on registry changes
type RegistryListener ¶
type RegistryListener interface {
OnPluginRegistered(plugin *PluginManifest)
OnPluginUnregistered(id string)
OnPluginStateChanged(id string, oldState, newState PluginState)
OnPluginEnabled(id string)
OnPluginDisabled(id string)
}
RegistryListener receives registry events
type Repository ¶
type Repository struct {
// contains filtered or unexported fields
}
Repository provides remote plugin discovery and installation
func NewRepository ¶
func NewRepository(baseURL string) (*Repository, error)
NewRepository creates a new repository client
func (*Repository) GetPluginInfo ¶
func (r *Repository) GetPluginInfo(pluginID string) (*PluginManifest, error)
GetPluginInfo returns plugin information from the repository
func (*Repository) Install ¶
func (r *Repository) Install(pluginID string, version string, targetDir string) error
Install downloads and installs a plugin from the repository
func (*Repository) InstallFromURL ¶
func (r *Repository) InstallFromURL(pluginURL string, targetDir string) error
InstallFromURL installs a plugin directly from a URL
func (*Repository) ListAvailable ¶
func (r *Repository) ListAvailable() ([]PluginManifest, error)
ListAvailable returns all available plugins from the repository
func (*Repository) ListByCategory ¶
func (r *Repository) ListByCategory(category string) ([]PluginManifest, error)
ListByCategory returns plugins in a category
func (*Repository) ListCategories ¶
func (r *Repository) ListCategories() ([]string, error)
ListCategories returns available plugin categories
func (*Repository) Search ¶
func (r *Repository) Search(query string) ([]PluginManifest, error)
Search searches for plugins by query
type RepositoryIndex ¶
type RepositoryIndex struct {
UpdatedAt string `json:"updated_at"`
Plugins []PluginManifest `json:"plugins"`
}
RepositoryIndex represents the cached plugin index
type ResourceSpec ¶
type ResourceSpec struct {
Name string `json:"name"` // Resource name
Type string `json:"type"` // Resource type (data, template, etc.)
Path string `json:"path"` // Relative path in plugin
MimeType string `json:"mime_type"` // MIME type
}
ResourceSpec defines a bundled resource
type Sandbox ¶
type Sandbox struct {
// contains filtered or unexported fields
}
Sandbox provides security isolation for plugins
func NewSandbox ¶
func NewSandbox(plugin Plugin, config *SandboxConfig) *Sandbox
NewSandbox creates a new sandbox for a plugin
type SandboxConfig ¶
type SandboxConfig struct {
Timeout time.Duration // Execution timeout
MemLimit int64 // Memory limit in bytes (0 = unlimited)
CPUQuota int // CPU quota percentage (0 = unlimited)
AllowNetwork bool // Allow network access
FilesystemRead []string // Allowed read paths
FilesystemWrite []string // Allowed write paths
EnvWhitelist []string // Allowed environment variables
}
SandboxConfig holds sandbox configuration
func DefaultSandboxConfig ¶
func DefaultSandboxConfig() *SandboxConfig
DefaultSandboxConfig returns default sandbox configuration
type SandboxManager ¶
type SandboxManager struct {
// contains filtered or unexported fields
}
SandboxManager manages multiple sandboxes
func NewSandboxManager ¶
func NewSandboxManager(config *SandboxConfig) *SandboxManager
NewSandboxManager creates a new sandbox manager
func (*SandboxManager) CreateSandbox ¶
func (sm *SandboxManager) CreateSandbox(plugin Plugin) *Sandbox
CreateSandbox creates a sandbox for a plugin
func (*SandboxManager) GetDefaultConfig ¶
func (sm *SandboxManager) GetDefaultConfig() *SandboxConfig
GetDefaultConfig returns the default sandbox configuration
func (*SandboxManager) GetSandbox ¶
func (sm *SandboxManager) GetSandbox(pluginID string) (*Sandbox, bool)
GetSandbox returns a sandbox for a plugin
func (*SandboxManager) ListActive ¶
func (sm *SandboxManager) ListActive() []string
ListActive returns all active sandboxes
func (*SandboxManager) RemoveSandbox ¶
func (sm *SandboxManager) RemoveSandbox(pluginID string)
RemoveSandbox removes a sandbox
func (*SandboxManager) SetDefaultConfig ¶
func (sm *SandboxManager) SetDefaultConfig(config *SandboxConfig)
SetDefaultConfig sets the default sandbox configuration
type ScriptPlugin ¶
type ScriptPlugin struct {
// contains filtered or unexported fields
}
ScriptPlugin implements a script-based plugin
func (*ScriptPlugin) Execute ¶
func (p *ScriptPlugin) Execute(cmd string, args []string) (interface{}, error)
Execute runs a script command
func (*ScriptPlugin) Initialize ¶
func (p *ScriptPlugin) Initialize(ctx *Context) error
Initialize initializes the plugin
func (*ScriptPlugin) Manifest ¶
func (p *ScriptPlugin) Manifest() *PluginManifest
Manifest returns the plugin manifest
func (*ScriptPlugin) Shutdown ¶
func (p *ScriptPlugin) Shutdown() error
Shutdown shuts down the plugin
type ShellPlugin ¶
type ShellPlugin struct {
// contains filtered or unexported fields
}
func NewShellPlugin ¶
func NewShellPlugin() *ShellPlugin
func (*ShellPlugin) Description ¶
func (p *ShellPlugin) Description() string
func (*ShellPlugin) Initialize ¶
func (p *ShellPlugin) Initialize() error
func (*ShellPlugin) Name ¶
func (p *ShellPlugin) Name() string
func (*ShellPlugin) Shutdown ¶
func (p *ShellPlugin) Shutdown() error
func (*ShellPlugin) Tools ¶
func (p *ShellPlugin) Tools() []tool.Tool
func (*ShellPlugin) Version ¶
func (p *ShellPlugin) Version() string
type ShellTool ¶
type ShellTool struct {
// contains filtered or unexported fields
}
func (*ShellTool) Description ¶
func (*ShellTool) Parameters ¶
type SimpleLogger ¶
type SimpleLogger struct {
// contains filtered or unexported fields
}
SimpleLogger implements Logger using fmt
func NewSimpleLogger ¶
func NewSimpleLogger(prefix string) *SimpleLogger
NewSimpleLogger creates a new simple logger
func (*SimpleLogger) Debug ¶
func (l *SimpleLogger) Debug(msg string, args ...interface{})
func (*SimpleLogger) Error ¶
func (l *SimpleLogger) Error(msg string, args ...interface{})
func (*SimpleLogger) Info ¶
func (l *SimpleLogger) Info(msg string, args ...interface{})
func (*SimpleLogger) Warn ¶
func (l *SimpleLogger) Warn(msg string, args ...interface{})
type UpdateInfo ¶
UpdateInfo contains update information for a plugin
type VersionConstraint ¶
VersionConstraint represents a version constraint
func ParseVersionConstraint ¶
func ParseVersionConstraint(constraint string) (*VersionConstraint, error)
ParseVersionConstraint parses a version constraint string
func (*VersionConstraint) Matches ¶
func (vc *VersionConstraint) Matches(version string) bool
Matches checks if a version matches this constraint
type VersionManager ¶
type VersionManager struct {
// contains filtered or unexported fields
}
VersionManager handles plugin version management
func NewVersionManager ¶
func NewVersionManager() *VersionManager
NewVersionManager creates a new version manager
func (*VersionManager) AddVersion ¶
func (vm *VersionManager) AddVersion(pluginID, version string)
AddVersion adds a version to a plugin
func (*VersionManager) CheckUpgrade ¶
func (vm *VersionManager) CheckUpgrade(pluginID, currentVersion string) (bool, string)
CheckUpgrade checks if there's an upgrade available
func (*VersionManager) Clear ¶
func (vm *VersionManager) Clear(pluginID string)
Clear removes all versions for a plugin
func (*VersionManager) GetCompatible ¶
func (vm *VersionManager) GetCompatible(pluginID, constraint string) (string, bool)
GetCompatible returns the best compatible version for a constraint
func (*VersionManager) GetLatest ¶
func (vm *VersionManager) GetLatest(pluginID string) (string, bool)
GetLatest returns the latest version for a plugin
func (*VersionManager) GetVersions ¶
func (vm *VersionManager) GetVersions(pluginID string) []string
GetVersions returns all versions for a plugin
func (*VersionManager) ListAll ¶
func (vm *VersionManager) ListAll() map[string][]string
ListAll lists all plugin versions
func (*VersionManager) RemoveVersion ¶
func (vm *VersionManager) RemoveVersion(pluginID, version string)
RemoveVersion removes a version from a plugin