cli/pkg/plugin/plugin.go
Snider 8f036518fa feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)

Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.

Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00

54 lines
1.6 KiB
Go

// 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 }