sdk

package module
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Oct 14, 2025 License: Apache-2.0 Imports: 26 Imported by: 0

README ΒΆ

DevEx Plugin SDK

Go Version SDK Version License Plugin SDK

The official Software Development Kit for creating DevEx plugins. Provides common interfaces, utilities, and tools for building consistent, high-quality plugins across the DevEx ecosystem.

πŸš€ Features

  • πŸ”Œ Plugin Interface: Standard plugin contract and lifecycle management
  • βš™οΈ Configuration System: Unified configuration loading and validation
  • πŸ“Š Logging Framework: Structured logging with multiple output formats
  • πŸ§ͺ Testing Utilities: Mock helpers and test frameworks for plugin development
  • πŸ›‘οΈ Error Handling: Consistent error types and handling patterns
  • πŸ“¦ Package Management: Common utilities for different package managers

πŸ—οΈ SDK Architecture

Core Components
packages/shared/plugin-sdk/
β”œβ”€β”€ pkg/
β”‚   β”œβ”€β”€ interfaces/         # Plugin contracts and interfaces
β”‚   β”œβ”€β”€ config/            # Configuration management
β”‚   β”œβ”€β”€ logging/           # Logging and telemetry
β”‚   β”œβ”€β”€ errors/            # Error types and handling
β”‚   β”œβ”€β”€ testing/           # Testing utilities and mocks
β”‚   β”œβ”€β”€ utils/             # Common utilities
β”‚   └── types/             # Shared data structures
β”œβ”€β”€ examples/              # Example plugin implementations
β”œβ”€β”€ docs/                  # SDK documentation
└── go.mod                # Module definition
Plugin Interface
// Plugin defines the core plugin contract
type Plugin interface {
    // GetInfo returns plugin metadata
    GetInfo() PluginInfo

    // IsCompatible checks if plugin can run on current system
    IsCompatible() bool

    // Execute runs the plugin with given command and arguments
    Execute(ctx context.Context, command string, args []string) error

    // GetCommands returns list of supported commands
    GetCommands() []Command
}

// PluginInfo contains plugin metadata
type PluginInfo struct {
    Name        string            `json:"name"`
    Version     string            `json:"version"`
    Description string            `json:"description"`
    Author      string            `json:"author"`
    Website     string            `json:"website"`
    License     string            `json:"license"`
    Tags        []string          `json:"tags"`
    Platforms   []Platform        `json:"platforms"`
    Commands    []Command         `json:"commands"`
    Config      ConfigSchema      `json:"config"`
}

πŸ”§ Plugin Development

Creating a New Plugin
package main

import (
    "context"
    "github.com/jameswlane/devex/packages/shared/plugin-sdk/pkg/interfaces"
    "github.com/jameswlane/devex/packages/shared/plugin-sdk/pkg/config"
    "github.com/jameswlane/devex/packages/shared/plugin-sdk/pkg/logging"
)

type MyPlugin struct {
    config *config.Config
    logger logging.Logger
}

func (p *MyPlugin) GetInfo() interfaces.PluginInfo {
    return interfaces.PluginInfo{
        Name:        "my-plugin",
        Version:     "1.0.0",
        Description: "Example plugin implementation",
        Author:      "Your Name",
        License:     "Apache-2.0",
        Platforms:   []interfaces.Platform{interfaces.Linux, interfaces.MacOS},
        Commands: []interfaces.Command{
            {
                Name:        "install",
                Description: "Install packages",
                Usage:       "install [packages...]",
            },
        },
    }
}

func (p *MyPlugin) IsCompatible() bool {
    // Check if plugin can run on current system
    return p.checkSystemRequirements()
}

func (p *MyPlugin) Execute(ctx context.Context, command string, args []string) error {
    switch command {
    case "install":
        return p.handleInstall(ctx, args)
    case "remove":
        return p.handleRemove(ctx, args)
    default:
        return interfaces.ErrCommandNotFound
    }
}

func main() {
    plugin := &MyPlugin{
        config: config.Load("my-plugin"),
        logger: logging.New("my-plugin"),
    }

    interfaces.RunPlugin(plugin)
}
Configuration Management
// Load plugin configuration
cfg := config.Load("plugin-name")

// Get configuration values with defaults
port := cfg.GetIntWithDefault("server.port", 8080)
debug := cfg.GetBoolWithDefault("debug", false)
hosts := cfg.GetStringSlice("allowed.hosts")

// Validate configuration
if err := cfg.Validate(schema); err != nil {
    return fmt.Errorf("invalid configuration: %w", err)
}
Logging
// Create structured logger
logger := logging.New("plugin-name")

// Log with context
logger.Info("Starting plugin",
    logging.String("version", "1.0.0"),
    logging.Int("port", 8080),
)

logger.Error("Operation failed",
    logging.Error(err),
    logging.String("operation", "install"),
)

// Debug logging (respects debug configuration)
logger.Debug("Processing package",
    logging.String("package", "example"),
    logging.Duration("elapsed", elapsed),
)
Error Handling
import "github.com/jameswlane/devex/packages/shared/plugin-sdk/pkg/errors"

// Standard error types
var (
    ErrPackageNotFound = errors.New("package not found")
    ErrInvalidConfig   = errors.New("invalid configuration")
    ErrSystemIncompatible = errors.New("system not compatible")
)

// Create contextual errors
func (p *Plugin) installPackage(name string) error {
    if !p.packageExists(name) {
        return errors.Wrapf(ErrPackageNotFound, "package %s", name)
    }

    if err := p.download(name); err != nil {
        return errors.Wrapf(err, "failed to download %s", name)
    }

    return nil
}

πŸ§ͺ Testing

Testing Utilities
import (
    "testing"
    "github.com/jameswlane/devex/packages/shared/plugin-sdk/pkg/testing"
)

func TestPluginInstall(t *testing.T) {
    // Create test plugin instance
    plugin := testing.NewMockPlugin()

    // Set up test expectations
    plugin.ExpectCommand("install").
        WithArgs("example-package").
        Returns(nil)

    // Execute test
    err := plugin.Execute(context.Background(), "install", []string{"example-package"})
    assert.NoError(t, err)

    // Verify expectations
    plugin.AssertExpectations(t)
}

func TestConfigurationLoading(t *testing.T) {
    // Create temporary config for testing
    configPath := testing.CreateTempConfig(t, map[string]interface{}{
        "debug": true,
        "timeout": 30,
    })
    defer os.Remove(configPath)

    // Load and test configuration
    cfg := config.LoadFromPath(configPath)
    assert.True(t, cfg.GetBool("debug"))
    assert.Equal(t, 30, cfg.GetInt("timeout"))
}
Mock Implementations
// Mock plugin for testing
type MockPlugin struct {
    testing.MockPlugin
    commands map[string]func([]string) error
}

// Mock configuration for testing
cfg := testing.NewMockConfig(map[string]interface{}{
    "api_key": "test-key",
    "endpoint": "https://api.example.com",
})

πŸ“š Plugin Types

Package Manager Plugins
type PackageManager interface {
    Plugin

    // Package operations
    Install(ctx context.Context, packages []string) error
    Remove(ctx context.Context, packages []string) error
    Update(ctx context.Context) error
    Search(ctx context.Context, query string) ([]Package, error)

    // Repository management
    AddRepository(ctx context.Context, repo Repository) error
    RemoveRepository(ctx context.Context, name string) error
}
Desktop Environment Plugins
type DesktopEnvironment interface {
    Plugin

    // Theme and appearance
    ApplyTheme(ctx context.Context, theme Theme) error
    SetWallpaper(ctx context.Context, path string) error

    // Configuration
    SetSetting(ctx context.Context, key, value string) error
    GetSetting(ctx context.Context, key string) (string, error)
}
System Tool Plugins
type SystemTool interface {
    Plugin

    // Tool-specific operations
    Configure(ctx context.Context, config ToolConfig) error
    GetStatus(ctx context.Context) (ToolStatus, error)

    // Service management
    Start(ctx context.Context) error
    Stop(ctx context.Context) error
    Restart(ctx context.Context) error
}

πŸš€ Quick Start

Plugin Development Template
# Create new plugin from template
devex create-plugin --name my-plugin --type package-manager

# Directory structure created:
my-plugin/
β”œβ”€β”€ main.go              # Plugin entry point
β”œβ”€β”€ config/             # Default configurations
β”œβ”€β”€ internal/           # Internal implementation
β”œβ”€β”€ go.mod             # Go module
β”œβ”€β”€ go.sum             # Dependencies
β”œβ”€β”€ README.md          # Plugin documentation
└── Taskfile.yml       # Build tasks
Build and Test
# Build plugin
task build

# Run tests
task test

# Run integration tests
task test:integration

# Install locally for testing
task install

# Package for distribution
task package

πŸ”§ Configuration Schema

Plugin Metadata
# plugin.yaml
name: "my-plugin"
version: "1.0.0"
description: "Example plugin"
author: "Your Name"
license: "Apache-2.0"
website: "https://example.com"

platforms:
  - linux
  - macos

commands:
  - name: "install"
    description: "Install packages"
    usage: "install [packages...]"
    flags:
      - name: "force"
        description: "Force installation"
        type: "bool"

config_schema:
  type: "object"
  properties:
    debug:
      type: "boolean"
      default: false
    timeout:
      type: "integer"
      default: 30

πŸ“Š Versioning and Compatibility

SDK Versioning
  • Major: Breaking API changes
  • Minor: New features, backward compatible
  • Patch: Bug fixes and improvements
Plugin Compatibility Matrix
sdk_version: "0.1.0"
compatible_devex_versions:
  - ">=2.0.0"
  - "<3.0.0"

minimum_requirements:
  go_version: "1.24"
  os_support: ["linux", "macos", "windows"]

🀝 Contributing

Development Guidelines
  1. Follow Go conventions: Use standard Go code style
  2. Write tests: Maintain >80% test coverage
  3. Document APIs: Include comprehensive documentation
  4. Version carefully: Follow semantic versioning
  5. Consider backward compatibility: Avoid breaking changes
Plugin Submission
  1. Implement required interfaces
  2. Add comprehensive tests
  3. Include documentation and examples
  4. Submit plugin for review
  5. Maintain plugin after acceptance

πŸ“„ License

Licensed under the Apache-2.0 License.


Documentation ΒΆ

Overview ΒΆ

Package sdk provides core functionality for DevEx plugin development and management Version: v0.1.0 - improved error handling and timeout configuration

Package sdk provides security testing utilities for DevEx plugins

Index ΒΆ

Constants ΒΆ

View Source
const (
	DefaultBaseURL             = "https://registry.devex.sh"
	DefaultTimeout             = 30 * time.Second
	DefaultUserAgent           = "devex-cli/1.0"
	DefaultSearchLimit         = 100
	DefaultCacheTTL            = 5 * time.Minute
	MaxPluginNameLength        = 100
	DefaultMaxIdleConns        = 10
	DefaultMaxIdleConnsPerHost = 2
	DefaultIdleConnTimeout     = 30 * time.Second
)

Constants for default configuration values

Variables ΒΆ

View Source
var RegexValidationPatterns = struct {
	SafeFilename       *regexp.Regexp
	SafeURL            *regexp.Regexp
	SafeCommand        *regexp.Regexp
	SafeEnvironmentVar *regexp.Regexp
}{
	SafeFilename:       regexp.MustCompile(`^[a-zA-Z0-9._-]+$`),
	SafeURL:            regexp.MustCompile(`^https?://[a-zA-Z0-9.-]+(/[a-zA-Z0-9._/-]*)?(\?[a-zA-Z0-9=&_-]*)?$`),
	SafeCommand:        regexp.MustCompile(`^[a-zA-Z0-9\s./=_-]+$`),
	SafeEnvironmentVar: regexp.MustCompile(`^[A-Z_][A-Z0-9_]*$`),
}

RegexValidationPatterns provides regex patterns for common validation scenarios

Functions ΒΆ

func CommandExists ΒΆ

func CommandExists(cmd string) bool

CommandExists checks if a command exists in PATH

func DefaultUpdateCallback ΒΆ

func DefaultUpdateCallback(status UpdateStatus)

DefaultUpdateCallback provides a simple console output callback

func ExecCommandOutputWithContext ΒΆ added in v0.0.2

func ExecCommandOutputWithContext(ctx context.Context, name string, args ...string) (string, error)

ExecCommandOutputWithContext executes a command and returns output with context support

func ExecCommandOutputWithTimeout ΒΆ added in v0.0.2

func ExecCommandOutputWithTimeout(timeout time.Duration, name string, args ...string) (string, error)

ExecCommandOutputWithTimeout executes a command and returns output with timeout

func ExecCommandOutputWithTimeoutAndOperation ΒΆ added in v0.0.2

func ExecCommandOutputWithTimeoutAndOperation(timeout time.Duration, operation string, name string, args ...string) (string, error)

ExecCommandOutputWithTimeoutAndOperation executes a command and returns output with timeout and operation context

func ExecCommandWithContext ΒΆ added in v0.0.2

func ExecCommandWithContext(ctx context.Context, useSudo bool, name string, args ...string) error

ExecCommandWithContext executes a command with context support for cancellation

func ExecCommandWithTimeout ΒΆ added in v0.0.2

func ExecCommandWithTimeout(timeout time.Duration, useSudo bool, name string, args ...string) error

ExecCommandWithTimeout executes a command with a specific timeout

func ExecCommandWithTimeoutAndOperation ΒΆ added in v0.0.2

func ExecCommandWithTimeoutAndOperation(timeout time.Duration, operation string, useSudo bool, name string, args ...string) error

ExecCommandWithTimeoutAndOperation executes a command with timeout and operation context

func FileExists ΒΆ

func FileExists(path string) bool

FileExists checks if a file exists

func HandleArgs ΒΆ

func HandleArgs(plugin Plugin, args []string)

HandleArgs provides standard argument handling for plugins

func IsDownloadError ΒΆ

func IsDownloadError(err error) bool

IsDownloadError checks if an error is a DownloadError

func IsRoot ΒΆ

func IsRoot() bool

IsRoot checks if the current user is root

func IsSecurityTestPassing ΒΆ added in v0.0.2

func IsSecurityTestPassing(summary TestResultSummary, minimumPassRate float64) bool

IsSecurityTestPassing determines if security tests meet minimum standards

func IsTimeoutError ΒΆ added in v0.0.2

func IsTimeoutError(err error) bool

IsTimeoutError checks if an error is a TimeoutError

func NormalizeTimeout ΒΆ added in v0.0.2

func NormalizeTimeout(timeout time.Duration, operationType string) time.Duration

NormalizeTimeout ensures timeout is within reasonable bounds

func ParseUpdateInterval ΒΆ

func ParseUpdateInterval(interval string) (time.Duration, error)

ParseUpdateInterval parses a duration string for update intervals

func PrintSecurityTestReport ΒΆ added in v0.0.2

func PrintSecurityTestReport(summary TestResultSummary) string

PrintSecurityTestReport prints a formatted security test report

func RequireSudo ΒΆ

func RequireSudo() bool

RequireSudo checks if sudo is required and available

func RunCommand ΒΆ

func RunCommand(name string, args ...string) (string, error)

RunCommand runs a command and returns its output

func SafeGetEnv ΒΆ added in v0.0.2

func SafeGetEnv(name string) (string, error)

SafeGetEnv safely retrieves an environment variable with validation

func SafeGetEnvWithDefault ΒΆ added in v0.0.2

func SafeGetEnvWithDefault(name, defaultValue string) (string, error)

SafeGetEnvWithDefault safely retrieves an environment variable with default and validation

func SanitizeEnvVarForLogging ΒΆ added in v0.0.2

func SanitizeEnvVarForLogging(name, value string) string

SanitizeEnvVarForLogging sanitizes a single environment variable for logging

func SanitizeEnvironmentForLogging ΒΆ added in v0.0.2

func SanitizeEnvironmentForLogging(env []string) []string

SanitizeEnvironmentForLogging removes sensitive environment variables for logging

func ValidateEnvironmentVariable ΒΆ added in v0.0.2

func ValidateEnvironmentVariable(name, value string) error

ValidateEnvironmentVariable validates a specific environment variable value

func ValidateSecurityTestResults ΒΆ added in v0.0.2

func ValidateSecurityTestResults(results []SecurityTestResult) (bool, []string)

ValidateSecurityTestResults checks if security tests passed (all patterns blocked)

func ValidateTimeout ΒΆ added in v0.0.2

func ValidateTimeout(timeout time.Duration, operationType string) error

ValidateTimeout validates a specific timeout duration

func ValidateTimeoutConfig ΒΆ added in v0.0.2

func ValidateTimeoutConfig(config TimeoutConfig) error

ValidateTimeoutConfig validates a timeout configuration

Types ΒΆ

type AdvancedPatternGenerator ΒΆ added in v0.0.2

type AdvancedPatternGenerator struct{}

AdvancedPatternGenerator generates sophisticated attack patterns

func NewAdvancedPatternGenerator ΒΆ added in v0.0.2

func NewAdvancedPatternGenerator() *AdvancedPatternGenerator

NewAdvancedPatternGenerator creates a generator for complex attack patterns

func (*AdvancedPatternGenerator) BoundaryTestPatterns ΒΆ added in v0.0.2

func (g *AdvancedPatternGenerator) BoundaryTestPatterns() []string

BoundaryTestPatterns generates edge case patterns for boundary testing

func (*AdvancedPatternGenerator) GenerateObfuscatedCommands ΒΆ added in v0.0.2

func (g *AdvancedPatternGenerator) GenerateObfuscatedCommands() []string

GenerateObfuscatedCommands creates obfuscated versions of dangerous commands

func (*AdvancedPatternGenerator) GeneratePolyglotPayloads ΒΆ added in v0.0.2

func (g *AdvancedPatternGenerator) GeneratePolyglotPayloads() []string

GeneratePolyglotPayloads creates payloads that work across multiple contexts

func (*AdvancedPatternGenerator) ProtocolConfusionPatterns ΒΆ added in v0.0.2

func (g *AdvancedPatternGenerator) ProtocolConfusionPatterns() []string

ProtocolConfusionPatterns generates protocol confusion attack patterns

func (*AdvancedPatternGenerator) TimeBasedPatterns ΒΆ added in v0.0.2

func (g *AdvancedPatternGenerator) TimeBasedPatterns() []string

TimeBasedPatterns generates patterns for time-based attacks

type BackgroundUpdater ΒΆ

type BackgroundUpdater struct {
	// contains filtered or unexported fields
}

BackgroundUpdater handles automatic plugin updates in the background

func NewBackgroundUpdater ΒΆ

func NewBackgroundUpdater(downloader *Downloader, manager *ExecutableManager) *BackgroundUpdater

NewBackgroundUpdater creates a new background updater

func (*BackgroundUpdater) AddUpdateCallback ΒΆ

func (bu *BackgroundUpdater) AddUpdateCallback(callback UpdateCallback)

AddUpdateCallback adds a callback to be called on updates

func (*BackgroundUpdater) CheckForUpdatesNow ΒΆ

func (bu *BackgroundUpdater) CheckForUpdatesNow(ctx context.Context) error

CheckForUpdatesNow immediately checks for and applies updates

func (*BackgroundUpdater) GetLastUpdateTime ΒΆ

func (bu *BackgroundUpdater) GetLastUpdateTime() time.Time

GetLastUpdateTime returns the last update check time

func (*BackgroundUpdater) IsRunning ΒΆ

func (bu *BackgroundUpdater) IsRunning() bool

IsRunning returns whether the updater is currently running

func (*BackgroundUpdater) SetUpdateInterval ΒΆ

func (bu *BackgroundUpdater) SetUpdateInterval(interval time.Duration)

SetUpdateInterval sets the update check interval

func (*BackgroundUpdater) Start ΒΆ

func (bu *BackgroundUpdater) Start(ctx context.Context) error

Start starts the background updater

func (*BackgroundUpdater) Stop ΒΆ

func (bu *BackgroundUpdater) Stop()

Stop stops the background updater

type BasePlugin ΒΆ

type BasePlugin struct {
	// contains filtered or unexported fields
}

BasePlugin provides common functionality for plugins

func NewBasePlugin ΒΆ

func NewBasePlugin(info PluginInfo) *BasePlugin

NewBasePlugin creates a new base plugin

func (*BasePlugin) GetLogger ΒΆ added in v0.0.2

func (p *BasePlugin) GetLogger() Logger

GetLogger returns the plugin's logger

func (*BasePlugin) GetTimeout ΒΆ added in v0.0.2

func (p *BasePlugin) GetTimeout(operationType string) time.Duration

GetTimeout returns the appropriate timeout for an operation type

func (*BasePlugin) GetTimeouts ΒΆ added in v0.0.2

func (p *BasePlugin) GetTimeouts() TimeoutConfig

GetTimeouts returns the plugin's timeout configuration

func (*BasePlugin) Info ΒΆ

func (p *BasePlugin) Info() PluginInfo

Info returns the plugin information

func (*BasePlugin) OutputPluginInfo ΒΆ

func (p *BasePlugin) OutputPluginInfo()

OutputPluginInfo outputs plugin info as JSON (for --plugin-info)

func (*BasePlugin) SetLogger ΒΆ added in v0.0.2

func (p *BasePlugin) SetLogger(logger Logger)

SetLogger sets a custom logger for the plugin

func (*BasePlugin) SetTimeouts ΒΆ added in v0.0.2

func (p *BasePlugin) SetTimeouts(timeouts TimeoutConfig)

SetTimeouts sets custom timeout configuration for the plugin

type Cache ΒΆ added in v0.0.2

type Cache interface {
	// Get retrieves a value from the cache
	Get(key string) (interface{}, bool)

	// Set stores a value in the cache with a TTL
	Set(key string, value interface{})

	// Delete removes a value from the cache
	Delete(key string)

	// Clear removes all values from the cache
	Clear()

	// Close stops background processes and cleans up resources
	Close()
}

Cache defines the interface for caching registry data

type CacheEntry ΒΆ added in v0.0.2

type CacheEntry struct {
	Value     interface{}
	ExpiresAt time.Time
}

CacheEntry represents a cached item with expiration

type CacheMetrics ΒΆ added in v0.0.2

type CacheMetrics struct {
	// contains filtered or unexported fields
}

CacheMetrics tracks cache performance using atomic operations

type DefaultLogger ΒΆ

type DefaultLogger struct {
	// contains filtered or unexported fields
}

DefaultLogger provides basic console logging for plugins

func (*DefaultLogger) Debug ΒΆ

func (l *DefaultLogger) Debug(msg string, keyvals ...any)

Debug implements Logger interface

func (*DefaultLogger) Error ΒΆ

func (l *DefaultLogger) Error(msg string, err error, keyvals ...any)

Error implements Logger interface

func (*DefaultLogger) ErrorMsg ΒΆ

func (l *DefaultLogger) ErrorMsg(msg string, args ...any)

ErrorMsg implements Logger interface

func (*DefaultLogger) Info ΒΆ

func (l *DefaultLogger) Info(msg string, keyvals ...any)

Info implements Logger interface

func (*DefaultLogger) Printf ΒΆ

func (l *DefaultLogger) Printf(format string, args ...any)

Printf implements Logger interface

func (*DefaultLogger) Println ΒΆ

func (l *DefaultLogger) Println(msg string, args ...any)

Println implements Logger interface

func (*DefaultLogger) Success ΒΆ

func (l *DefaultLogger) Success(msg string, args ...any)

Success implements Logger interface

func (*DefaultLogger) Warn ΒΆ

func (l *DefaultLogger) Warn(msg string, keyvals ...any)

Warn implements Logger interface

func (*DefaultLogger) Warning ΒΆ

func (l *DefaultLogger) Warning(msg string, args ...any)

Warning implements Logger interface

type DesktopPlugin ΒΆ

type DesktopPlugin interface {
	Plugin

	// IsAvailable Desktop-specific methods
	IsAvailable() bool
	GetDesktopEnvironment() string
}

DesktopPlugin interface for desktop environment plugins

type DownloadError ΒΆ

type DownloadError struct {
	Plugin string
	Err    error
}

DownloadError represents an error that occurred during plugin download

func GetDownloadErrors ΒΆ

func GetDownloadErrors(err error) []*DownloadError

GetDownloadErrors extracts all DownloadErrors from a MultiError

func (*DownloadError) Error ΒΆ

func (e *DownloadError) Error() string

func (*DownloadError) Unwrap ΒΆ

func (e *DownloadError) Unwrap() error

Unwrap returns the underlying error for error wrapping support

type DownloadStrategy ΒΆ

type DownloadStrategy int

DownloadStrategy defines how to handle download failures

const (
	// ContinueOnError continues downloading other plugins if one fails
	ContinueOnError DownloadStrategy = iota
	// FailOnError stops downloading if any plugin fails
	FailOnError
	// RequireCritical only fails if critical plugins fail
	RequireCritical
)

type Downloader ΒΆ

type Downloader struct {
	// contains filtered or unexported fields
}

Downloader handles secure plugin downloading from registry with verification

func NewDownloader ΒΆ

func NewDownloader(registryURL, pluginDir string) *Downloader

NewDownloader creates a new plugin downloader with default security settings

func NewSecureDownloader ΒΆ

func NewSecureDownloader(config DownloaderConfig) *Downloader

NewSecureDownloader creates a downloader with custom security configuration

func (*Downloader) DownloadPluginWithContext ΒΆ

func (d *Downloader) DownloadPluginWithContext(ctx context.Context, pluginName string) error

DownloadPluginWithContext downloads a plugin with context for cancellation

func (*Downloader) DownloadRequiredPluginsWithContext ΒΆ

func (d *Downloader) DownloadRequiredPluginsWithContext(ctx context.Context, requiredPlugins []string) error

DownloadRequiredPluginsWithContext downloads all required plugins with context support

func (*Downloader) DownloadRequiredPluginsWithContextAndOptions ΒΆ

func (d *Downloader) DownloadRequiredPluginsWithContextAndOptions(ctx context.Context, requiredPlugins []string, criticalPlugins []string) error

DownloadRequiredPluginsWithContextAndOptions downloads plugins with full control

func (*Downloader) GetAvailablePlugins ΒΆ

func (d *Downloader) GetAvailablePlugins(ctx context.Context) (map[string]PluginMetadata, error)

GetAvailablePlugins returns available plugins from registry with caching

func (*Downloader) SearchPlugins ΒΆ

func (d *Downloader) SearchPlugins(ctx context.Context, query string) (map[string]PluginMetadata, error)

SearchPlugins searches for plugins by query with caching

func (*Downloader) SetLogger ΒΆ

func (d *Downloader) SetLogger(logger Logger)

SetLogger allows setting a custom logger for the downloader

func (*Downloader) SetSilent ΒΆ

func (d *Downloader) SetSilent(silent bool)

SetSilent enables/disables silent mode for the default logger

func (*Downloader) SetStrategy ΒΆ

func (d *Downloader) SetStrategy(strategy DownloadStrategy)

SetStrategy sets the download strategy

type DownloaderConfig ΒΆ

type DownloaderConfig struct {
	RegistryURL      string
	PluginDir        string
	CacheDir         string
	VerifyChecksums  bool
	VerifySignatures bool
	PublicKeyPath    string
	Strategy         DownloadStrategy
}

DownloaderConfig configures the plugin downloader

type EnvVarConfig ΒΆ added in v0.0.2

type EnvVarConfig struct {
	Name         string
	Severity     EnvVarSeverity
	Description  string
	AllowEmpty   bool
	ValidateFunc func(string) error
}

EnvVarConfig represents validation configuration for an environment variable

type EnvVarSeverity ΒΆ added in v0.0.2

type EnvVarSeverity int

EnvVarSeverity represents the security risk level of environment variables

const (
	// EnvVarSafe indicates the variable is generally safe to use
	EnvVarSafe EnvVarSeverity = iota
	// EnvVarWarning indicates the variable may pose security risks
	EnvVarWarning
	// EnvVarDangerous indicates the variable poses significant security risks
	EnvVarDangerous
	// EnvVarBlocked indicates the variable should never be used
	EnvVarBlocked
)

type ExecutableManager ΒΆ

type ExecutableManager struct {
	// contains filtered or unexported fields
}

ExecutableManager manages plugin executables with caching and timeouts

func NewExecutableManager ΒΆ

func NewExecutableManager(pluginDir string) *ExecutableManager

NewExecutableManager creates a new executable manager with caching

func (*ExecutableManager) DiscoverPlugins ΒΆ

func (em *ExecutableManager) DiscoverPlugins() error

DiscoverPlugins discovers and caches plugins in the plugin directory

func (*ExecutableManager) DiscoverPluginsWithContext ΒΆ

func (em *ExecutableManager) DiscoverPluginsWithContext(ctx context.Context) error

DiscoverPluginsWithContext discovers plugins with context support

func (*ExecutableManager) ExecutePlugin ΒΆ

func (em *ExecutableManager) ExecutePlugin(pluginName string, args []string) error

ExecutePlugin executes a plugin with given arguments and timeout

func (*ExecutableManager) GetPluginDir ΒΆ

func (em *ExecutableManager) GetPluginDir() string

GetPluginDir returns the plugin directory

func (*ExecutableManager) InstallPlugin ΒΆ

func (em *ExecutableManager) InstallPlugin(sourcePath, pluginName string) error

InstallPlugin installs a plugin from a source path

func (*ExecutableManager) ListPlugins ΒΆ

func (em *ExecutableManager) ListPlugins() map[string]PluginMetadata

ListPlugins returns installed plugins with caching

func (*ExecutableManager) ListPluginsWithContext ΒΆ added in v0.0.5

func (em *ExecutableManager) ListPluginsWithContext(ctx context.Context) map[string]PluginMetadata

ListPluginsWithContext returns installed plugins with caching and context support

func (*ExecutableManager) RegisterCommands ΒΆ

func (em *ExecutableManager) RegisterCommands(rootCmd interface{}) error

RegisterCommands registers plugin commands (placeholder)

func (*ExecutableManager) RemovePlugin ΒΆ

func (em *ExecutableManager) RemovePlugin(pluginName string) error

RemovePlugin removes a plugin executable

type GPGVerifier ΒΆ

type GPGVerifier struct {
	// contains filtered or unexported fields
}

GPGVerifier handles GPG signature verification for plugins

func NewGPGVerifier ΒΆ

func NewGPGVerifier() *GPGVerifier

NewGPGVerifier creates a new GPG verifier

func (*GPGVerifier) LoadPublicKey ΒΆ

func (v *GPGVerifier) LoadPublicKey(keyPath string) error

LoadPublicKey loads a public key from file or URL

func (*GPGVerifier) LoadPublicKeyFromKeyserver ΒΆ

func (v *GPGVerifier) LoadPublicKeyFromKeyserver(keyID string) error

LoadPublicKeyFromKeyserver loads a public key from a keyserver

func (*GPGVerifier) VerifySignature ΒΆ

func (v *GPGVerifier) VerifySignature(filePath, signaturePath string) error

VerifySignature verifies a GPG signature for a file

func (*GPGVerifier) VerifySignatureFromURL ΒΆ

func (v *GPGVerifier) VerifySignatureFromURL(filePath, signatureURL string) error

VerifySignatureFromURL downloads and verifies a signature from a URL

type Logger ΒΆ

type Logger interface {
	Printf(format string, args ...any)
	Println(msg string, args ...any)
	Success(msg string, args ...any)
	Warning(msg string, args ...any)
	ErrorMsg(msg string, args ...any)
	Info(msg string, keyvals ...any)
	Warn(msg string, keyvals ...any)
	Error(msg string, err error, keyvals ...any)
	Debug(msg string, keyvals ...any)
}

Logger interface for plugin SDK logging Plugins can provide their own logger implementation or use a default

func NewDefaultLogger ΒΆ

func NewDefaultLogger(silent bool) Logger

NewDefaultLogger creates a new default logger

type MemoryCache ΒΆ added in v0.0.2

type MemoryCache struct {
	// contains filtered or unexported fields
}

MemoryCache implements an in-memory cache with TTL support

func NewMemoryCache ΒΆ added in v0.0.2

func NewMemoryCache(ttl time.Duration) *MemoryCache

NewMemoryCache creates a new memory cache with the specified TTL

func (*MemoryCache) Clear ΒΆ added in v0.0.2

func (c *MemoryCache) Clear()

Clear removes all values from the cache

func (*MemoryCache) Close ΒΆ added in v0.0.2

func (c *MemoryCache) Close()

Close stops the cleanup goroutine and marks the cache as closed

func (*MemoryCache) Delete ΒΆ added in v0.0.2

func (c *MemoryCache) Delete(key string)

Delete removes a value from the cache

func (*MemoryCache) Get ΒΆ added in v0.0.2

func (c *MemoryCache) Get(key string) (interface{}, bool)

Get retrieves a value from the cache

func (*MemoryCache) GetEvictions ΒΆ added in v0.0.2

func (c *MemoryCache) GetEvictions() int64

GetEvictions returns the number of cache evictions

func (*MemoryCache) GetHits ΒΆ added in v0.0.2

func (c *MemoryCache) GetHits() int64

GetHits returns the number of cache hits

func (*MemoryCache) GetMetrics ΒΆ added in v0.0.2

func (c *MemoryCache) GetMetrics() CacheMetrics

GetMetrics returns cache performance metrics as a consistent snapshot

func (*MemoryCache) GetMisses ΒΆ added in v0.0.2

func (c *MemoryCache) GetMisses() int64

GetMisses returns the number of cache misses

func (*MemoryCache) Set ΒΆ added in v0.0.2

func (c *MemoryCache) Set(key string, value interface{})

Set stores a value in the cache with the configured TTL

func (*MemoryCache) SetWithTTL ΒΆ added in v0.0.2

func (c *MemoryCache) SetWithTTL(key string, value interface{}, ttl time.Duration)

SetWithTTL stores a value in the cache with a custom TTL

type MultiError ΒΆ

type MultiError struct {
	Errors []error
}

MultiError represents multiple errors that occurred

func (*MultiError) Add ΒΆ

func (e *MultiError) Add(err error)

Add adds an error to the MultiError

func (*MultiError) Error ΒΆ

func (e *MultiError) Error() string

func (*MultiError) HasErrors ΒΆ

func (e *MultiError) HasErrors() bool

HasErrors returns true if there are any errors

func (*MultiError) Unwrap ΒΆ

func (e *MultiError) Unwrap() []error

type PackageManagerPlugin ΒΆ

type PackageManagerPlugin struct {
	*BasePlugin
	// contains filtered or unexported fields
}

PackageManagerPlugin provides common functionality for package manager plugins

func NewPackageManagerPlugin ΒΆ

func NewPackageManagerPlugin(info PluginInfo, managerCommand string) *PackageManagerPlugin

NewPackageManagerPlugin creates a new package manager plugin

func (*PackageManagerPlugin) EnsureAvailable ΒΆ

func (p *PackageManagerPlugin) EnsureAvailable()

EnsureAvailable ensures the package manager is available or exits with an error

func (*PackageManagerPlugin) ExecManagerCommand ΒΆ added in v0.0.2

func (p *PackageManagerPlugin) ExecManagerCommand(operation string, useSudo bool, args ...string) error

ExecManagerCommand executes a package manager command with timeout

func (*PackageManagerPlugin) ExecManagerCommandOutput ΒΆ added in v0.0.2

func (p *PackageManagerPlugin) ExecManagerCommandOutput(operation string, args ...string) (string, error)

ExecManagerCommandOutput executes a package manager command and returns output with timeout

func (*PackageManagerPlugin) IsAvailable ΒΆ

func (p *PackageManagerPlugin) IsAvailable() bool

IsAvailable checks if the package manager is available on the system

type PlatformBinary ΒΆ

type PlatformBinary struct {
	URL      string `json:"url"`
	Checksum string `json:"checksum"`
	Size     int64  `json:"size"`
	OS       string `json:"os"`
	Arch     string `json:"arch"`
}

PlatformBinary represents a binary for a specific platform

type Plugin ΒΆ

type Plugin interface {
	Info() PluginInfo
	Execute(command string, args []string) error
}

Plugin interface for implementing plugins

type PluginCommand ΒΆ

type PluginCommand struct {
	Name        string            `json:"name"`
	Description string            `json:"description"`
	Usage       string            `json:"usage"`
	Flags       map[string]string `json:"flags,omitempty"`
}

PluginCommand represents a command provided by a plugin

type PluginInfo ΒΆ

type PluginInfo struct {
	Name        string          `json:"name"`
	Version     string          `json:"version"`
	Description string          `json:"description"`
	Commands    []PluginCommand `json:"commands"`
	Author      string          `json:"author,omitempty"`
	Repository  string          `json:"repository,omitempty"`
	Tags        []string        `json:"tags,omitempty"`
	// Timeout configuration for plugin operations
	Timeouts TimeoutConfig `json:"timeouts,omitempty"`
}

PluginInfo represents the standard plugin information

type PluginMetadata ΒΆ

type PluginMetadata struct {
	PluginInfo
	Path      string                    `json:"path"`
	Platforms []string                  `json:"platforms,omitempty"` // Supported platforms (OS names)
	Binaries  map[string]PlatformBinary `json:"binaries,omitempty"`  // Platform-specific binaries (e.g., "linux-amd64")
	Priority  int                       `json:"priority,omitempty"`  // Installation priority
	Type      string                    `json:"type,omitempty"`      // Plugin type (package-manager, desktop, etc.)
}

PluginMetadata represents plugin metadata with path and platform information

type PluginRegistry ΒΆ

type PluginRegistry struct {
	BaseURL     string                    `json:"base_url"`
	Version     string                    `json:"version"`
	LastUpdated time.Time                 `json:"last_updated"`
	Plugins     map[string]PluginMetadata `json:"plugins"`
}

PluginRegistry represents the plugin registry structure

type Registry ΒΆ added in v0.0.2

type Registry interface {
	// GetRegistry fetches the complete plugin registry
	GetRegistry(ctx context.Context) (*PluginRegistry, error)

	// GetPlugin fetches detailed information about a specific plugin
	GetPlugin(ctx context.Context, pluginName string) (*PluginMetadata, error)

	// SearchPlugins searches for plugins by name or tags with optional limit
	SearchPlugins(ctx context.Context, query string, tags []string, limit int) ([]PluginMetadata, error)
}

Registry defines the interface for plugin registry operations. This interface allows for easy testing and mocking of registry functionality.

type RegistryClient ΒΆ

type RegistryClient struct {
	// contains filtered or unexported fields
}

RegistryClient provides simple, read-only access to the plugin registry API. This client connects to a simplified registry API that does not require authentication. It implements the Registry interface for easy testing and mocking.

func NewRegistryClient ΒΆ

func NewRegistryClient(config RegistryConfig) (*RegistryClient, error)

NewRegistryClient creates a new registry client for simple, read-only access. This client connects to a simplified registry API without authentication.

func (*RegistryClient) GetPlugin ΒΆ

func (c *RegistryClient) GetPlugin(ctx context.Context, pluginName string) (*PluginMetadata, error)

GetPlugin fetches detailed information about a specific plugin

func (*RegistryClient) GetRegistry ΒΆ

func (c *RegistryClient) GetRegistry(ctx context.Context) (*PluginRegistry, error)

GetRegistry fetches the complete plugin registry with caching

func (*RegistryClient) SearchPlugins ΒΆ

func (c *RegistryClient) SearchPlugins(ctx context.Context, query string, tags []string, limit int) ([]PluginMetadata, error)

SearchPlugins searches for plugins by name or tags with optimized indexing and caching

type RegistryConfig ΒΆ

type RegistryConfig struct {
	BaseURL             string        // Base URL of the registry API (defaults to DefaultBaseURL)
	Timeout             time.Duration // HTTP timeout (defaults to DefaultTimeout)
	UserAgent           string        // User agent string (defaults to DefaultUserAgent)
	CacheTTL            time.Duration // Cache TTL (defaults to DefaultCacheTTL)
	Logger              Logger        // Logger for debugging (optional)
	MaxIdleConns        int           // Maximum idle connections (defaults to 10)
	MaxIdleConnsPerHost int           // Maximum idle connections per host (defaults to 2)
	IdleConnTimeout     time.Duration // Idle connection timeout (defaults to 30s)
}

RegistryConfig configures the registry client for simple, read-only access

type RegistryDownloader ΒΆ added in v0.0.2

type RegistryDownloader struct {
	*Downloader
	// contains filtered or unexported fields
}

Enhanced Downloader with registry client

func NewRegistryDownloader ΒΆ added in v0.0.2

func NewRegistryDownloader(config DownloaderConfig, registryConfig RegistryConfig) (*RegistryDownloader, error)

NewRegistryDownloader creates a downloader with registry access

func (*RegistryDownloader) GetAvailablePlugins ΒΆ added in v0.0.2

func (rd *RegistryDownloader) GetAvailablePlugins(ctx context.Context) (map[string]PluginMetadata, error)

GetAvailablePlugins fetches all available plugins from the registry

func (*RegistryDownloader) GetPluginDetails ΒΆ added in v0.0.2

func (rd *RegistryDownloader) GetPluginDetails(ctx context.Context, pluginName string) (*PluginMetadata, error)

GetPluginDetails returns detailed plugin information from the registry API

func (*RegistryDownloader) SearchPlugins ΒΆ added in v0.0.2

func (rd *RegistryDownloader) SearchPlugins(ctx context.Context, query string) (map[string]PluginMetadata, error)

SearchPlugins searches for plugins using the registry API

type RegistryDownloaderInterface ΒΆ added in v0.0.2

type RegistryDownloaderInterface interface {
	// GetAvailablePlugins fetches all available plugins from the registry
	GetAvailablePlugins(ctx context.Context) (map[string]PluginMetadata, error)

	// SearchPlugins searches for plugins by query string
	SearchPlugins(ctx context.Context, query string) (map[string]PluginMetadata, error)

	// GetPluginDetails fetches detailed information about a specific plugin
	GetPluginDetails(ctx context.Context, pluginName string) (*PluginMetadata, error)
}

RegistryDownloaderInterface defines the interface for registry-aware downloaders

type RegistryError ΒΆ added in v0.0.2

type RegistryError struct {
	HTTPStatus int
	Message    string
	Err        error
}

RegistryError represents an error from the registry API

func (*RegistryError) Error ΒΆ added in v0.0.2

func (e *RegistryError) Error() string

func (*RegistryError) Unwrap ΒΆ added in v0.0.2

func (e *RegistryError) Unwrap() error

type RegistryResponse ΒΆ added in v0.0.2

type RegistryResponse struct {
	BaseURL     string                    `json:"base_url"`
	Version     string                    `json:"version"`
	LastUpdated string                    `json:"last_updated"`
	Plugins     map[string]PluginMetadata `json:"plugins"`
}

Simple registry response structure

type SearchIndex ΒΆ added in v0.0.2

type SearchIndex struct {
	// contains filtered or unexported fields
}

SearchIndex provides efficient searching capabilities with pre-sorted data

type SecurityIssue ΒΆ added in v0.0.2

type SecurityIssue struct {
	Type        string
	Severity    string
	Description string
	Variable    string
}

SecurityIssue represents a security issue found during environment validation

func CheckEnvironmentSecurity ΒΆ added in v0.0.2

func CheckEnvironmentSecurity() []SecurityIssue

CheckEnvironmentSecurity performs a comprehensive security check of environment variables

type SecurityTestResult ΒΆ added in v0.0.2

type SecurityTestResult struct {
	TestName     string
	Pattern      string
	Blocked      bool
	ErrorMessage string
}

SecurityTestResult represents the result of a security test

type SecurityTestSuite ΒΆ added in v0.0.2

type SecurityTestSuite struct {
	// Shell metacharacter injection patterns
	ShellMetacharacters []string

	// Command substitution attack patterns
	CommandSubstitutionPatterns []string

	// Path traversal attack patterns
	PathTraversalPatterns []string

	// Environment variable injection patterns
	EnvVarInjectionPatterns []string

	// Null byte injection patterns
	NullBytePatterns []string

	// Unicode and encoding attack patterns
	UnicodeAttackPatterns []string

	// Argument splitting attack patterns
	ArgumentSplittingPatterns []string

	// Script injection patterns
	ScriptInjectionPatterns []string

	// Network-based injection patterns
	NetworkInjectionPatterns []string

	// Process manipulation patterns
	ProcessManipulationPatterns []string
}

SecurityTestSuite provides comprehensive security testing patterns for plugins

func NewSecurityTestSuite ΒΆ added in v0.0.2

func NewSecurityTestSuite() *SecurityTestSuite

NewSecurityTestSuite creates a new comprehensive security test suite

func (*SecurityTestSuite) TestArgumentSplitting ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestArgumentSplitting(validator func(string) error) []SecurityTestResult

TestArgumentSplitting tests argument splitting and parsing attacks

func (*SecurityTestSuite) TestCommandInjection ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestCommandInjection(validator func(string) error) []SecurityTestResult

TestCommandInjection comprehensively tests command injection prevention

func (*SecurityTestSuite) TestPathInjection ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestPathInjection(validator func(string) error) []SecurityTestResult

TestPathInjection tests path traversal and file system injection prevention

func (*SecurityTestSuite) TestPatternValidation ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestPatternValidation(validator func(string) error, patterns []string, testName string) []SecurityTestResult

TestPatternValidation tests that validation functions properly reject malicious patterns

func (*SecurityTestSuite) TestURLInjection ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestURLInjection(validator func(string) error) []SecurityTestResult

TestURLInjection tests URL-based injection prevention

func (*SecurityTestSuite) TestUnicodeInjection ΒΆ added in v0.0.2

func (s *SecurityTestSuite) TestUnicodeInjection(validator func(string) error) []SecurityTestResult

TestUnicodeInjection tests Unicode and encoding-based attacks

type SystemGPGVerifier ΒΆ

type SystemGPGVerifier struct {
	// contains filtered or unexported fields
}

SystemGPGVerifier uses system GPG for verification (fallback)

func NewSystemGPGVerifier ΒΆ

func NewSystemGPGVerifier() (*SystemGPGVerifier, error)

NewSystemGPGVerifier creates a GPG verifier using system gpg command

func (*SystemGPGVerifier) ImportPublicKey ΒΆ

func (v *SystemGPGVerifier) ImportPublicKey(keyPath string) error

ImportPublicKey imports a public key using system GPG

func (*SystemGPGVerifier) VerifyDetachedSignature ΒΆ

func (v *SystemGPGVerifier) VerifyDetachedSignature(filePath, signaturePath string) error

VerifyDetachedSignature verifies a detached signature using system GPG

type TestResultSummary ΒΆ added in v0.0.2

type TestResultSummary struct {
	TotalTests     int
	PassedTests    int
	FailedTests    int
	FailedPatterns []string
	PassRate       float64
}

TestResultSummary provides a summary of security test results

func SummarizeResults ΒΆ added in v0.0.2

func SummarizeResults(results []SecurityTestResult) TestResultSummary

SummarizeResults creates a summary of security test results

type TimeoutConfig ΒΆ added in v0.0.2

type TimeoutConfig struct {
	// Default timeout for all operations
	Default time.Duration `json:"default"`
	// Install operation timeout
	Install time.Duration `json:"install"`
	// Update operation timeout
	Update time.Duration `json:"update"`
	// Upgrade operation timeout
	Upgrade time.Duration `json:"upgrade"`
	// Search operation timeout
	Search time.Duration `json:"search"`
	// Network operation timeout
	Network time.Duration `json:"network"`
	// Build operation timeout
	Build time.Duration `json:"build"`
	// Shell command timeout
	Shell time.Duration `json:"shell"`
}

TimeoutConfig represents timeout configuration for different operation types

func DefaultTimeouts ΒΆ added in v0.0.2

func DefaultTimeouts() TimeoutConfig

DefaultTimeouts provides sensible default timeout values

func TimeoutConfigFromDefaults ΒΆ added in v0.0.2

func TimeoutConfigFromDefaults(overrides map[string]time.Duration) TimeoutConfig

TimeoutConfigFromDefaults creates a timeout config with specific overrides

func (TimeoutConfig) GetTimeout ΒΆ added in v0.0.2

func (tc TimeoutConfig) GetTimeout(operationType string) time.Duration

GetTimeout returns the appropriate timeout for an operation type

type TimeoutError ΒΆ added in v0.0.2

type TimeoutError struct {
	Command   string
	Args      []string
	Timeout   time.Duration
	Operation string
}

TimeoutError represents a command execution timeout error

func GetTimeoutError ΒΆ added in v0.0.2

func GetTimeoutError(err error) *TimeoutError

GetTimeoutError extracts TimeoutError from error chain

func (*TimeoutError) Error ΒΆ added in v0.0.2

func (e *TimeoutError) Error() string

type UpdateCallback ΒΆ

type UpdateCallback func(status UpdateStatus)

UpdateCallback is called when plugin updates occur

type UpdateStatus ΒΆ

type UpdateStatus struct {
	PluginName string
	Success    bool
	Error      error
	OldVersion string
	NewVersion string
	UpdatedAt  time.Time
}

UpdateStatus represents the status of a plugin update

type UpdaterConfig ΒΆ

type UpdaterConfig struct {
	Enabled          bool   `json:"enabled"`
	UpdateInterval   string `json:"update_interval"` // e.g., "24h", "12h"
	AutoApplyUpdates bool   `json:"auto_apply_updates"`
	NotifyOnUpdates  bool   `json:"notify_on_updates"`
	QuietMode        bool   `json:"quiet_mode"`
}

UpdaterConfig represents configuration for the background updater

Jump to

Keyboard shortcuts

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