go/pkg/plugin/plugin.go

55 lines
1.6 KiB
Go
Raw Normal View History

feat: infrastructure packages and lint cleanup (#281) * ci: consolidate duplicate workflows and merge CodeQL configs Remove 17 duplicate workflow files that were split copies of the combined originals. Each family (CI, CodeQL, Coverage, PR Build, Alpha Release) had the same job duplicated across separate push/pull_request/schedule/manual trigger files. Merge codeql.yml and codescan.yml into a single codeql.yml with a language matrix covering go, javascript-typescript, python, and actions — matching the previous default setup coverage. Remaining workflows (one per family): - ci.yml (push + PR + manual) - codeql.yml (push + PR + schedule, all languages) - coverage.yml (push + PR + manual) - alpha-release.yml (push + manual) - pr-build.yml (PR + manual) - release.yml (tag push) - agent-verify.yml, auto-label.yml, auto-project.yml Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * 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> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:34:43 +00:00
// 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 }