plugin

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Handshake = goplugin.HandshakeConfig{
	ProtocolVersion: 1,
	MagicCookieKey:  "COMPLYCTL_PLUGIN",

	MagicCookieValue: "ddff478d-578e-4d9d-8253-35e8ebf548d2",
}

Handshake is the shared complytime that plugins must match to connect.

View Source
var SupportedPlugins = map[string]goplugin.Plugin{
	"evaluator": &GRPCEvaluatorPlugin{},
}

SupportedPlugins is the plugin type map used when creating go-plugin clients.

Functions

func Serve

func Serve(impl Plugin)

Serve starts the plugin process. Plugin authors call this from main(). A JSON logger is created at Trace level so every message reaches the client; the client-side logger level controls what is actually written.

Types

type AssessmentConfiguration

type AssessmentConfiguration struct {
	PlanID        string
	RequirementID string
	Parameters    map[string]string
	// EvaluatorID is used for routing to the correct plugin. It is not
	// serialized over gRPC — routing is handled by the plugin manager.
	EvaluatorID string
}

AssessmentConfiguration binds a requirement ID to its plan and parameters.

type AssessmentLog

type AssessmentLog struct {
	RequirementID string
	Steps         []Step
	Message       string
	Confidence    ConfidenceLevel
}

AssessmentLog holds the evaluation result for a single requirement.

type Client

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

Client provides gRPC communication with a plugin subprocess managed by hashicorp/go-plugin.

func NewClient

func NewClient(executablePath string, logger hclog.Logger) (*Client, error)

func (*Client) Close

func (c *Client) Close()

func (*Client) Describe

func (c *Client) Describe(ctx context.Context, req *DescribeRequest) (*DescribeResponse, error)

func (*Client) Generate

func (c *Client) Generate(ctx context.Context, req *GenerateRequest) (*GenerateResponse, error)

func (*Client) Scan

func (c *Client) Scan(ctx context.Context, req *ScanRequest) (*ScanResponse, error)

type ConfidenceLevel

type ConfidenceLevel int32

ConfidenceLevel indicates the evaluator's confidence in an assessment result. Mirrors go-gemara ConfidenceLevel enum values (1:1 mapping).

const (
	ConfidenceLevelNotSet       ConfidenceLevel = 0
	ConfidenceLevelUndetermined ConfidenceLevel = 1
	ConfidenceLevelLow          ConfidenceLevel = 2
	ConfidenceLevelMedium       ConfidenceLevel = 3
	ConfidenceLevelHigh         ConfidenceLevel = 4
)

type DescribeRequest

type DescribeRequest struct{}

DescribeRequest is sent to discover plugin identity and requirements.

type DescribeResponse

type DescribeResponse struct {
	Healthy                 bool
	Version                 string
	ErrorMessage            string
	RequiredGlobalVariables []string
	RequiredTargetVariables []string
}

DescribeResponse reports plugin identity, health, version, and declared variable requirements used by doctor diagnostics (R51).

type Discovery

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

Discovery scans a directory for plugin executables matching the naming convention.

func NewDiscovery

func NewDiscovery(pluginDir string) *Discovery

func (*Discovery) DiscoverPlugins

func (d *Discovery) DiscoverPlugins() ([]PluginInfo, error)

DiscoverPlugins scans the user plugin directory and the system-wide provider directory for executables matching the naming convention. User-directory providers take precedence over system-installed ones.

type GRPCEvaluatorPlugin

type GRPCEvaluatorPlugin struct {
	goplugin.Plugin
	Impl Plugin
}

GRPCEvaluatorPlugin implements hashicorp/go-plugin.GRPCPlugin for the evaluator service.

func (*GRPCEvaluatorPlugin) GRPCClient

func (p *GRPCEvaluatorPlugin) GRPCClient(_ context.Context, _ *goplugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error)

func (*GRPCEvaluatorPlugin) GRPCServer

func (p *GRPCEvaluatorPlugin) GRPCServer(_ *goplugin.GRPCBroker, s *grpc.Server) error

type GenerateRequest

type GenerateRequest struct {
	GlobalVariables map[string]string
	Configuration   []AssessmentConfiguration
	TargetVariables map[string]string
}

GenerateRequest carries assessment plan configuration to a plugin. See R48: three-tier variable model.

type GenerateResponse

type GenerateResponse struct {
	Success      bool
	ErrorMessage string
}

GenerateResponse confirms whether policy preparation succeeded.

type LoadedPlugin

type LoadedPlugin struct {
	Info   PluginInfo
	Client *Client
}

LoadedPlugin pairs discovery metadata with a live gRPC client.

func (*LoadedPlugin) GetClient

func (p *LoadedPlugin) GetClient() Plugin

type Manager

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

Manager handles plugin discovery, lifecycle, and request routing.

func NewManager

func NewManager(pluginDir string, logger hclog.Logger) (*Manager, error)

func (*Manager) Cleanup

func (m *Manager) Cleanup()

Cleanup kills all managed plugin subprocesses. Call via defer after LoadPlugins.

func (*Manager) GetPlugin

func (m *Manager) GetPlugin(evaluatorID string) (*LoadedPlugin, error)

func (*Manager) ListPlugins

func (m *Manager) ListPlugins() []*LoadedPlugin

func (*Manager) LoadPlugins

func (m *Manager) LoadPlugins() error

LoadPlugins discovers plugins via executable naming convention and verifies each via Describe RPC before registering.

func (*Manager) RouteGenerate

func (m *Manager) RouteGenerate(ctx context.Context, evaluatorID string, globalVars, targetVars map[string]string, configs []AssessmentConfiguration) error

RouteGenerate dispatches a GenerateRequest to the plugin matching evaluatorID. globalVars carries workspace-level variables; targetVars carries per-target variables from the three-tier model (R48).

func (*Manager) RouteScan

func (m *Manager) RouteScan(ctx context.Context, evaluatorID string, targets []Target) ([]AssessmentLog, error)

RouteScan dispatches a ScanRequest to the plugin matching evaluatorID. The provider evaluates all requirements from Generate-time state — no requirement IDs are sent over the wire. See R47: specs/001-gemara-native-workflow/research.md

type Plugin

type Plugin interface {
	Describe(ctx context.Context, req *DescribeRequest) (*DescribeResponse, error)
	Generate(ctx context.Context, req *GenerateRequest) (*GenerateResponse, error)
	Scan(ctx context.Context, req *ScanRequest) (*ScanResponse, error)
}

Plugin is the interface that plugin authors implement for evaluation RPCs.

type PluginInfo

type PluginInfo struct {
	PluginID       string
	EvaluatorID    string
	ExecutablePath string
}

PluginInfo holds the identity and filesystem path of a discovered plugin.

type Result

type Result int32

Result is the outcome of a single assessment step.

const (
	ResultUnspecified Result = 0
	ResultPassed      Result = 1
	ResultFailed      Result = 2
	ResultSkipped     Result = 3
	ResultError       Result = 4
)

type ScanRequest

type ScanRequest struct {
	Targets []Target
}

ScanRequest carries targets to evaluate. The scanning provider evaluates all requirements from Generate-time state. See R47: specs/001-gemara-native-workflow/research.md

type ScanResponse

type ScanResponse struct {
	Assessments []AssessmentLog
}

ScanResponse carries assessment results from a plugin scan.

type Step

type Step struct {
	Name    string
	Result  Result
	Message string
}

Step is one discrete check within an assessment.

type Target

type Target struct {
	TargetID  string
	Variables map[string]string
}

Target identifies a system or environment to scan, with plugin-specific variables.

Jump to

Keyboard shortcuts

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