devtools

package
v0.16.8 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2026 License: MIT Imports: 28 Imported by: 0

Documentation

Overview

Package devtools installs and resolves language servers and debug adapters managed by Wingman. Managed tools live directly below WINGMAN_HOME/tools; each tool has one active installation which is replaced on update.

Index

Constants

This section is empty.

Variables

View Source
var ErrInstallRequired = errors.New("managed tool installation requires confirmation")

ErrInstallRequired means an update-only request encountered a missing tool.

Functions

func Disabled

func Disabled() bool

Disabled reports whether automatic installation is turned off. Existing managed tools continue to resolve; only installations and updates stop.

func IsUnavailable

func IsUnavailable(err error) bool

func ToolLabel

func ToolLabel(id string) string

ToolLabel returns the user-facing name stored with a managed tool's recipe. Unknown IDs are returned unchanged so callers always have useful text.

func ToolLabels

func ToolLabels(ids []string) []string

ToolLabels maps stable catalog IDs to their user-facing names.

func UnavailableTools

func UnavailableTools(err error) []string

UnavailableTools returns the stable tool IDs from a possibly joined update error. Callers can present a concise notice without exposing installer logs.

Types

type Manager

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

Manager owns the latest-only managed tool directory.

func New

func New() (*Manager, error)

New creates a manager rooted at WINGMAN_HOME/tools.

func (*Manager) CanManage

func (m *Manager) CanManage(command string) bool

CanManage reports whether command has a curated latest-version recipe.

func (*Manager) Resolve

func (m *Manager) Resolve(command string) string

Resolve returns a command only from a complete managed installation.

func (*Manager) Root

func (m *Manager) Root() string

Root returns the directory containing managed tools.

func (*Manager) Status added in v0.16.4

func (m *Manager) Status(ctx context.Context, requirements []Requirement) ([]ToolStatus, error)

Status uses the same managed-only resolution as discovery and launch.

func (*Manager) ToolDir

func (m *Manager) ToolDir(id string) string

ToolDir returns a complete managed installation for adapters that need bundled files in addition to an executable availability token.

func (*Manager) Update

func (m *Manager) Update(ctx context.Context, requirements []Requirement, progress ...func(Progress)) (bool, error)

Update installs the latest release for every selected requirement. A fresh installation is checked at most once per day; failed checks are retried after a short backoff. Successful updates replace the prior directory and remove it rather than accumulating versions.

func (*Manager) UpdateOnDemand added in v0.16.4

func (m *Manager) UpdateOnDemand(ctx context.Context, requirements []Requirement, install bool, progress ...func(Progress)) (bool, error)

UpdateOnDemand checks for updates during an explicit user action. It keeps the daily refresh interval. Missing tools require install=true, which also allows immediate retries after a failed installation.

type Progress

type Progress struct {
	Tool    string        `json:"tool"`
	Label   string        `json:"label"`
	Phase   ProgressPhase `json:"phase"`
	Current int           `json:"current"`
	Total   int           `json:"total"`
}

Progress identifies the managed tool currently being checked, installed, or updated.

type ProgressPhase added in v0.15.1

type ProgressPhase string

ProgressPhase describes what the managed-tool updater is doing. Checking is intentionally distinct from installation so status surfaces do not imply that a fresh installation is being replaced on every startup.

const (
	ProgressChecking   ProgressPhase = "checking"
	ProgressInstalling ProgressPhase = "installing"
	ProgressUpdating   ProgressPhase = "updating"
)

type Requirement

type Requirement struct {
	Alternatives         []string
	Workspace            string
	Projects             []string
	MinimumMajorVersions map[string]int
}

Requirement lists equivalent commands in preference order. The first command with a managed recipe selects the package to install or update.

type ToolStatus added in v0.16.4

type ToolStatus struct {
	Tool              string `json:"tool"`
	Label             string `json:"label"`
	Installed         bool   `json:"installed"`
	Installable       bool   `json:"installable"`
	UnavailableReason string `json:"unavailable_reason,omitempty"`
}

ToolStatus describes an installation without downloading or changing tools.

type UnavailableError

type UnavailableError struct {
	Tool string
	Err  error
}

UnavailableError means no usable copy of a required tool remains after an automatic installation failure. Refresh failures for an existing copy do not use this type.

func (*UnavailableError) Error

func (e *UnavailableError) Error() string

func (*UnavailableError) Unwrap

func (e *UnavailableError) Unwrap() error

Jump to

Keyboard shortcuts

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