manifestplugins

package
v0.16.0 Latest Latest
Warning

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

Go to latest
Published: Apr 24, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SaveState

func SaveState(path string, s *ManifestState) error

SaveState writes the manifest state to path atomically (write to .tmp then rename).

func StatePath

func StatePath(annaHome string) string

StatePath returns the path for the manifest state file.

func Validate

func Validate(m *Manifest) error

Types

type BinaryInstallState

type BinaryInstallState struct {
	Name        string    `json:"name"`
	Repo        string    `json:"repo"`
	Version     string    `json:"version"`
	InstalledAt time.Time `json:"installed_at"`
}

type BinaryReconcileResult

type BinaryReconcileResult struct {
	Name     string
	Version  string
	CacheHit bool
	Err      error
}

BinaryReconcileResult holds the result for a single binary within a plugin.

type Manifest

type Manifest struct {
	OAuthProviders []ManifestOAuthProvider `json:"oauth_providers,omitempty" yaml:"oauth_providers,omitempty"`
	Plugins        []ManifestPlugin        `json:"plugins" yaml:"plugins"`
}

func LoadBuiltin

func LoadBuiltin() (*Manifest, error)

func LoadUser

func LoadUser(path string) (*Manifest, error)

func Merge

func Merge(builtin, user *Manifest) *Manifest

Merge merges two Manifest values. Because Manifest.Enabled is bool (not *bool), user entries that omit enabled are treated as enabled=false. To preserve nil semantics, parse user YAML with LoadUserRaw and use MergeRaw.

func MergeRaw

func MergeRaw(builtin, user rawManifest) *Manifest

MergeRaw merges parsed raw manifests, preserving nil Enabled for correct inheritance.

type ManifestBinary

type ManifestBinary struct {
	Name    string `json:"name" yaml:"name"`
	Repo    string `json:"repo" yaml:"repo"`
	Version string `json:"version,omitempty" yaml:"version,omitempty"`
	BinPath string `json:"bin_path,omitempty" yaml:"bin_path,omitempty"` // subdir within archive containing the binary
	Exe     string `json:"exe,omitempty" yaml:"exe,omitempty"`           // binary name inside archive when it differs from Name
}

type ManifestOAuthFlow

type ManifestOAuthFlow struct {
	Type          string `json:"type" yaml:"type"`
	AuthURL       string `json:"auth_url,omitempty" yaml:"auth_url,omitempty"`
	DeviceAuthURL string `json:"device_auth_url,omitempty" yaml:"device_auth_url,omitempty"`
	TokenURL      string `json:"token_url" yaml:"token_url"`
	AuthStyle     string `json:"auth_style,omitempty" yaml:"auth_style,omitempty"`
}

type ManifestOAuthProvider

type ManifestOAuthProvider struct {
	ID       string              `json:"id" yaml:"id"`
	Scopes   []string            `json:"scopes" yaml:"scopes"`
	VaultKey string              `json:"vault_key" yaml:"vault_key"`
	Flows    []ManifestOAuthFlow `json:"flows" yaml:"flows"`
}

type ManifestPlugin

type ManifestPlugin struct {
	ID                       string               `json:"id" yaml:"id"`
	Kind                     string               `json:"kind" yaml:"kind"`
	Name                     string               `json:"name" yaml:"name"`
	DisplayName              string               `json:"display_name" yaml:"display_name"`
	Description              string               `json:"description" yaml:"description"`
	Enabled                  bool                 `json:"enabled" yaml:"enabled"`
	Binaries                 []ManifestBinary     `json:"binaries,omitempty" yaml:"binaries,omitempty"`
	Skills                   []ManifestSkill      `json:"skills,omitempty" yaml:"skills,omitempty"`
	SessionEnvs              []ManifestSessionEnv `json:"session_env,omitempty" yaml:"session_env,omitempty"`
	OAuthProvider            string               `json:"oauth_provider,omitempty" yaml:"oauth_provider,omitempty"`
	OAuthProviderConfigField string               `json:"oauth_provider_config_field,omitempty" yaml:"oauth_provider_config_field,omitempty"`
	OAuthProviderChoices     []string             `json:"oauth_provider_choices,omitempty" yaml:"oauth_provider_choices,omitempty"`
}

type ManifestSessionEnv

type ManifestSessionEnv struct {
	EnvVar   string `json:"env_var" yaml:"env_var"`
	Source   string `json:"source" yaml:"source"`
	Value    string `json:"value,omitempty" yaml:"value,omitempty"`
	Required bool   `json:"required,omitempty" yaml:"required,omitempty"`
}

type ManifestSkill

type ManifestSkill struct {
	Repo string `json:"repo" yaml:"repo"`
	Name string `json:"name" yaml:"name"`
}

type ManifestState

type ManifestState struct {
	UpdatedAt time.Time                     `json:"updated_at"`
	Plugins   map[string]PluginInstallState `json:"plugins"`
}

func LoadState

func LoadState(path string) (*ManifestState, error)

LoadState reads the manifest state file at path. If the file does not exist, an empty state is returned.

type PluginInstallState

type PluginInstallState struct {
	Binaries []BinaryInstallState `json:"binaries,omitempty"`
	Skills   []SkillInstallState  `json:"skills,omitempty"`
}

type PluginReconcileResult

type PluginReconcileResult struct {
	PluginID string
	Binaries []BinaryReconcileResult
	// Skills not yet implemented (bundled-only in v1), but reserved for future use
	Err error
}

PluginReconcileResult holds the result for a single plugin.

type ReconcileResult

type ReconcileResult struct {
	EnabledCount int
	// Per-plugin results, keyed by plugin ID
	Plugins map[string]PluginReconcileResult
}

ReconcileResult summarizes one reconcile run.

func Reconcile

func Reconcile(ctx context.Context, m *Manifest, annaHome string) ReconcileResult

Reconcile processes all enabled plugins in the manifest, downloading any binaries that are not already at the correct version according to the state file.

type SkillInstallState

type SkillInstallState struct {
	Repo        string    `json:"repo"`
	Name        string    `json:"name"`
	InstalledAt time.Time `json:"installed_at"`
}

Jump to

Keyboard shortcuts

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