manifestplugins

package
v0.37.0 Latest Latest
Warning

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

Go to latest
Published: May 22, 2026 License: AGPL-3.0 Imports: 20 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(stellaHome 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"`
	Tool        string    `json:"tool"`
	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 is the binary name written to $STELLA_HOME/bin/.
	Name string `json:"name" yaml:"name"`

	// Tool is the mise tool key, e.g.:
	//   uv   bun   github:cli/cli   pipx:mypy   npm:serve   http:sentinel
	Tool string `json:"tool" yaml:"tool"`

	// Version to install; defaults to "latest" when omitted.
	Version string `json:"version,omitempty" yaml:"version,omitempty"`

	// Options are mise tool options, using the same names as mise.toml.
	Options map[string]any `json:"options,omitempty" yaml:",inline"`
}

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"`
	PKCE          bool   `json:"pkce,omitempty" yaml:"pkce,omitempty"`
}

type ManifestOAuthProvider

type ManifestOAuthProvider struct {
	ID           string              `json:"id" yaml:"id"`
	Icon         string              `json:"icon,omitempty" yaml:"icon,omitempty"`
	Scopes       []string            `json:"scopes" yaml:"scopes"`
	VaultKey     string              `json:"vault_key" yaml:"vault_key"`
	Flows        []ManifestOAuthFlow `json:"flows" yaml:"flows"`
	ClientID     string              `json:"client_id,omitempty" yaml:"client_id,omitempty"`
	ClientSecret string              `json:"client_secret,omitempty" yaml:"client_secret,omitempty"`
}

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"`
	Prompt        string               `json:"prompt,omitempty" yaml:"prompt,omitempty"`
	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"`
}

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, stellaHome 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