plugin

package
v0.4.3 Latest Latest
Warning

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

Go to latest
Published: May 26, 2026 License: MIT Imports: 20 Imported by: 0

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

View Source
const (
	EventRegister    = "register"
	EventUnregister  = "unregister"
	EventStateChange = "state_change"
	EventEnable      = "enable"
	EventDisable     = "disable"
)

Registry event types

Variables

This section is empty.

Functions

func CheckUpgrade

func CheckUpgrade(current, latest string) bool

CheckUpgrade checks if there's an upgrade available

func CheckVersion

func CheckVersion(version, constraint string) bool

CheckVersion checks if a version satisfies a constraint

func CompareVersions

func CompareVersions(a, b string) int

CompareVersions compares two versions Returns: -1 if a < b, 0 if a == b, 1 if a > b

func CreateSamplePlugin

func CreateSamplePlugin(dir string) error

CreateSamplePlugin creates a sample plugin for demonstration

func DefaultRepositoryURL

func DefaultRepositoryURL() string

DefaultRepositoryURL returns the default plugin repository URL

func EnforceMemoryLimit

func EnforceMemoryLimit(memLimit int64) error

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

func FindPlugins(pluginsDir string) ([]string, error)

FindPlugins finds all potential plugins in a directory

func FormatConstraint

func FormatConstraint(constraint string) string

FormatConstraint formats a version constraint for display

func FormatVersion

func FormatVersion(version string) string

FormatVersion formats a version string for display

func GetPluginDir

func GetPluginDir() string

GetPluginDir returns the default plugin directory

func IsValidVersion

func IsValidVersion(version string) bool

IsValidVersion checks if a version string is valid semver

func IsValidVersionConstraint

func IsValidVersionConstraint(constraint string) bool

IsValidVersionConstraint checks if a version constraint is valid

func MergeConfig

func MergeConfig(base, override map[string]interface{}) map[string]interface{}

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

func (l *Loader) FindPlugins(dir string) ([]string, error)

FindPlugins discovers all potential plugins in a directory

func (*Loader) HotReload

func (l *Loader) HotReload(id string) error

HotReload reloads a plugin without restarting the application

func (*Loader) Load

func (l *Loader) Load(pluginPath string) error

Load loads a single plugin from a path

func (*Loader) LoadAll

func (l *Loader) LoadAll() error

LoadAll loads all plugins from configured directories

func (*Loader) LoadFromDirectory

func (l *Loader) LoadFromDirectory(dir string) error

LoadFromDirectory loads all plugins from a directory

func (*Loader) Unload

func (l *Loader) Unload(id string) error

Unload unloads a plugin

func (*Loader) Validate

func (l *Loader) Validate(pluginPath string) error

Validate checks if a plugin is valid without loading it

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

func (m *Manager) Disable(pluginID string) error

Disable disables a plugin

func (*Manager) Enable

func (m *Manager) Enable(pluginID string) error

Enable enables a plugin

func (*Manager) Get

func (m *Manager) Get(pluginID string) (Plugin, bool)

Get returns a plugin by ID

func (*Manager) GetEntry

func (m *Manager) GetEntry(pluginID string) (*PluginEntry, bool)

GetEntry returns a plugin entry by ID

func (*Manager) Install

func (m *Manager) Install(ctx context.Context, pluginID string) error

Install installs a plugin from the repository

func (*Manager) InstallFromURL

func (m *Manager) InstallFromURL(ctx context.Context, url string) error

InstallFromURL installs a plugin directly from a URL

func (*Manager) List

func (m *Manager) List() []*PluginEntry

List returns all plugins

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

func (m *Manager) Load(ctx context.Context, pluginID string) error

Load loads a single plugin

func (*Manager) LoadAll

func (m *Manager) LoadAll(ctx context.Context) error

LoadAll loads all plugins from the plugin directory

func (*Manager) Reload

func (m *Manager) Reload(ctx context.Context, pluginID string) error

Reload reloads a plugin

func (*Manager) RunWithSandbox

func (m *Manager) RunWithSandbox(ctx context.Context, pluginID string, input interface{}) (interface{}, error)

RunWithSandbox executes a plugin with sandbox restrictions

func (*Manager) Search

func (m *Manager) Search(ctx context.Context, query string) ([]PluginManifest, error)

Search searches for plugins in the repository

func (*Manager) Uninstall

func (m *Manager) Uninstall(pluginID string) error

Uninstall uninstalls a plugin

func (*Manager) Unload

func (m *Manager) Unload(pluginID string) error

Unload unloads a plugin

func (*Manager) Update

func (m *Manager) Update(ctx context.Context, pluginID string) error

Update updates a plugin from the repository

type ManagerConfig

type ManagerConfig struct {
	PluginDir     string
	CacheDir      string
	AllowNetwork  bool
	EnableSandbox bool
}

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 NewRegistry

func NewRegistry() *Registry

NewRegistry creates a new plugin registry

func (*Registry) Categories

func (r *Registry) Categories() []string

Categories returns all unique categories

func (*Registry) Count

func (r *Registry) Count() int

Count returns the number of registered plugins

func (*Registry) CountByState

func (r *Registry) CountByState() map[PluginState]int

CountByState returns plugin count by state

func (*Registry) Disable

func (r *Registry) Disable(id string) error

Disable disables a plugin

func (*Registry) Enable

func (r *Registry) Enable(id string) error

Enable enables a plugin

func (*Registry) Get

func (r *Registry) Get(id string) (Plugin, bool)

Get retrieves a plugin by ID

func (*Registry) GetDependents

func (r *Registry) GetDependents(id string) []string

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

func (r *Registry) Register(plugin Plugin) error

Register registers a plugin with the registry

func (*Registry) RegisterListener

func (r *Registry) RegisterListener(listener RegistryListener)

RegisterListener registers a registry event listener

func (*Registry) ResolveDependencies

func (r *Registry) ResolveDependencies(id string) error

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

func (r *Registry) Tags() []string

Tags returns all unique tags

func (*Registry) Unregister

func (r *Registry) Unregister(id string) error

Unregister unregisters a plugin

func (*Registry) UnregisterListener

func (r *Registry) UnregisterListener(listener RegistryListener)

UnregisterListener unregisters a registry event listener

func (*Registry) UpdateRefCount

func (r *Registry) UpdateRefCount(id string, delta int)

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

func (*Repository) Uninstall

func (r *Repository) Uninstall(pluginID string, pluginDir string) error

Uninstall removes a plugin from the local directory

func (*Repository) Update

func (r *Repository) Update(pluginID string, currentVersion string, targetDir string) (bool, string, error)

Update checks for and installs updates

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

func (*Sandbox) FilterEnv

func (s *Sandbox) FilterEnv(env []string) []string

FilterEnv filters environment variables based on whitelist

func (*Sandbox) IsActive

func (s *Sandbox) IsActive() bool

IsActive returns whether the sandbox is currently active

func (*Sandbox) RunWithSandbox

func (s *Sandbox) RunWithSandbox(ctx context.Context, input interface{}) (interface{}, error)

RunWithSandbox executes the plugin with sandbox restrictions

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 (t *ShellTool) Description() string

func (*ShellTool) Execute

func (t *ShellTool) Execute(ctx context.Context, args map[string]interface{}) (interface{}, error)

func (*ShellTool) Name

func (t *ShellTool) Name() string

func (*ShellTool) Parameters

func (t *ShellTool) Parameters() map[string]interface{}

func (*ShellTool) Schema

func (t *ShellTool) Schema() map[string]interface{}

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

type UpdateInfo struct {
	PluginID   string
	CurrentVer string
	NewVersion string
}

UpdateInfo contains update information for a plugin

type VersionConstraint

type VersionConstraint struct {
	Operator string
	Major    int
	Minor    *int
	Patch    *int
}

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

Jump to

Keyboard shortcuts

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