cli/pkg/plugin/plugin.go

55 lines
1.6 KiB
Go
Raw Normal View History

// Package plugin provides a plugin system for the core CLI.
//
// Plugins extend the CLI with additional commands and functionality.
// They are distributed as GitHub repositories and managed via a local registry.
//
// Plugin lifecycle:
// - Install: Download from GitHub, validate manifest, register
// - Init: Parse manifest and prepare plugin
// - Start: Activate plugin functionality
// - Stop: Deactivate and clean up
// - Remove: Unregister and delete files
package plugin
import "context"
// Plugin is the interface that all plugins must implement.
type Plugin interface {
// Name returns the plugin's unique identifier.
Name() string
// Version returns the plugin's semantic version.
Version() string
// Init prepares the plugin for use.
Init(ctx context.Context) error
// Start activates the plugin.
Start(ctx context.Context) error
// Stop deactivates the plugin and releases resources.
Stop(ctx context.Context) error
}
// BasePlugin provides a default implementation of Plugin.
// Embed this in concrete plugin types to inherit default behaviour.
type BasePlugin struct {
PluginName string
PluginVersion string
}
// Name returns the plugin name.
func (p *BasePlugin) Name() string { return p.PluginName }
// Version returns the plugin version.
func (p *BasePlugin) Version() string { return p.PluginVersion }
// Init is a no-op default implementation.
func (p *BasePlugin) Init(_ context.Context) error { return nil }
// Start is a no-op default implementation.
func (p *BasePlugin) Start(_ context.Context) error { return nil }
// Stop is a no-op default implementation.
func (p *BasePlugin) Stop(_ context.Context) error { return nil }