tools

package
v0.3.5 Latest Latest
Warning

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

Go to latest
Published: Feb 17, 2026 License: MIT Imports: 26 Imported by: 3

Documentation

Index

Constants

View Source
const MetadataFilenameSuffix = ".toolmeta.json"

MetadataFilenameSuffix 定义工具元数据文件的后缀

Variables

View Source
var (

	// ErrDownloadPaused 表示下载任务被手动暂停,可用于区分失败与暂停
	ErrDownloadPaused = errPaused
)
View Source
var ErrToolBusy = errors.New("tool is busy: another operation is in progress")

ErrToolBusy 表示同一工具目录已有其他操作持有锁

View Source
var ErrToolNotFound = &ToolError{Message: "tool not found"}

ErrToolNotFound 工具未找到错误

Functions

func AddReadOnlyRootFolder added in v0.3.0

func AddReadOnlyRootFolder(folder string)

AddReadOnlyRootFolder 追加一个只读根目录(在查找链末尾)。

func CleanupTrash added in v0.2.0

func CleanupTrash()

CleanupTrash removes any leftover .trash-* folders in the tool directory

func ClearAllDevToolOverrides added in v0.3.4

func ClearAllDevToolOverrides()

ClearAllDevToolOverrides 清除所有开发覆盖

func ClearDevToolOverride added in v0.3.4

func ClearDevToolOverride(toolName string)

ClearDevToolOverride 清除指定工具的开发覆盖

func GetDevToolOverride added in v0.3.4

func GetDevToolOverride(toolName string) string

GetDevToolOverride 获取开发工具覆盖路径 如果没有设置覆盖,返回空字符串

func GetReadOnlyRootFolders added in v0.3.0

func GetReadOnlyRootFolders() []string

GetReadOnlyRootFolders 返回当前配置的只读根目录列表。

func GetRootFolder added in v0.3.0

func GetRootFolder() string

GetRootFolder 返回可写入的根目录

func GetTmpRootFolderForExecPermission added in v0.3.1

func GetTmpRootFolderForExecPermission() string

GetTmpRootFolderForExecPermission 返回当前配置的临时执行目录

func HasDevToolOverride added in v0.3.4

func HasDevToolOverride(toolName string) bool

HasDevToolOverride 检查是否有开发覆盖

func LoadDevToolOverridesFromEnv added in v0.3.4

func LoadDevToolOverridesFromEnv()

LoadDevToolOverridesFromEnv 从环境变量加载开发工具覆盖 环境变量格式: REMOTETOOLS_DEV_<TOOLNAME>=<path> 例如: REMOTETOOLS_DEV_KLIVE=/path/to/klive.exe

func SetDevToolOverride added in v0.3.4

func SetDevToolOverride(toolName, exePath string)

SetDevToolOverride 设置开发工具覆盖 toolName: 工具名称 (如 "klive") exePath: 本地可执行文件的绝对路径

func SetDownloadLimitBPS added in v0.3.4

func SetDownloadLimitBPS(limit int64)

SetDownloadLimitBPS 设置下载速率上限(字节/秒)。传入 0 表示不限速,负值会当作 0。 该设置会覆盖环境变量 REMOTETOOLS_DOWNLOAD_LIMIT_BPS。

func SetReadOnlyRootFolders added in v0.3.0

func SetReadOnlyRootFolders(folders []string)

SetReadOnlyRootFolders 设置只读根目录列表(查找顺序按给定顺序)。

func SetRootFolder added in v0.3.0

func SetRootFolder(folder string)

SetRootFolder 设置可写入的根目录

func SetTmpRootFolderForExecPermission added in v0.3.1

func SetTmpRootFolderForExecPermission(folder string)

SetTmpRootFolderForExecPermission 设置在可写目录不可执行时用于运行的临时目录

Types

type API

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

func Get

func Get() *API

func (*API) AddToolConfig added in v0.3.5

func (p *API) AddToolConfig(cfg *config.ToolConfig)

AddToolConfig 直接将一个 ToolConfig 添加到当前配置中。 使用 toolName@version 作为 key;如果同 key 已存在则覆盖。 这是比 MergeConfigFromBytes 更轻量的方式,无需经过 JSON 序列化。

func (*API) DeleteAllExceptToolsInRoot added in v0.3.0

func (p *API) DeleteAllExceptToolsInRoot(toKeep []Tool) (deleted []string, err error)

DeleteAllExceptToolsInRoot 删除可写根目录中: - 对于非当前 OS 或 ARCH 的目录,直接整目录删除(不深入遍历)。 - 对于当前 OS/ARCH,仅保留 toKeep 中列出的 工具@版本,其余删除。 仅作用于可写根目录(GetRootFolder),不会触及只读根目录。 返回被删除的目录完整路径列表(可能是版本目录、架构目录或系统目录)。

func (*API) DeleteUnknownToolsInRoot added in v0.3.0

func (p *API) DeleteUnknownToolsInRoot() (deleted []string, err error)

DeleteUnknownToolsInRoot 清理可写根目录下的工具: - 对于非当前 OS 或 ARCH 的目录,直接整目录删除(不深入遍历)。 - 对于当前 OS/ARCH,删除所有不在当前配置(p.config)中的 工具@版本 目录。 仅作用于可写根目录(GetRootFolder),不会触及只读根目录。 返回被删除的目录完整路径列表(可能是版本目录、架构目录或系统目录)。

func (*API) GetConfig added in v0.2.0

func (p *API) GetConfig() config.Config

GetConfig returns the current configuration

func (*API) GetTool

func (p *API) GetTool(toolName string) (tool Tool, err error)

func (*API) GetToolAuto added in v0.2.0

func (p *API) GetToolAuto(toolName string, strategy AutoVersionStrategy) (tool Tool, err error)

GetToolAuto gets a tool with automatic version selection based on the strategy

func (*API) GetToolGroupPinnedVersion added in v0.3.5

func (p *API) GetToolGroupPinnedVersion(toolName string) string

GetToolGroupPinnedVersion 获取工具组当前锁定的版本。 返回空字符串表示未锁定。

func (*API) GetToolInstalled added in v0.2.0

func (p *API) GetToolInstalled(toolName string) (tool Tool, err error)

GetToolInstalled gets the highest installed version of a tool (for execution)

func (*API) GetToolLatest added in v0.2.0

func (p *API) GetToolLatest(toolName string) (tool Tool, err error)

GetToolLatest gets the latest version of a tool from config (for downloading)

func (*API) GetToolWithVersion added in v0.2.0

func (p *API) GetToolWithVersion(toolName, version string) (tool Tool, err error)

func (*API) GetWebUIAddresses added in v0.2.1

func (p *API) GetWebUIAddresses() (addresses []string, err error)

func (*API) GetWebUIPort added in v0.2.0

func (p *API) GetWebUIPort() int

GetWebUIPort returns the port the web UI server is running on Returns 0 if the server is not running

func (*API) GetWebUIStatus added in v0.2.0

func (p *API) GetWebUIStatus() webui.ServerStatus

GetWebUIStatus returns the current status of the web UI server

func (*API) IsToolGroupEnabled added in v0.3.4

func (p *API) IsToolGroupEnabled(toolName string) (bool, error)

IsToolGroupEnabled 返回整组工具当前是否处于启用状态。

func (*API) ListToolGroups added in v0.3.4

func (p *API) ListToolGroups() []ToolGroupSnapshot

ListToolGroups 返回当前已知的工具组快照列表,包含配置文件、已创建的组以及磁盘上残留的组元数据。

func (*API) LoadConfig

func (p *API) LoadConfig(path string) (err error)

func (*API) LoadConfigFromBytes added in v0.2.1

func (p *API) LoadConfigFromBytes(data []byte) (err error)

func (*API) MergeConfig added in v0.3.5

func (p *API) MergeConfig(path string) error

MergeConfig 从文件加载配置并合并到现有配置中。 如果同一个 toolName@version 在两个来源中都存在,后加载的覆盖先加载的。

func (*API) MergeConfigFromBytes added in v0.3.5

func (p *API) MergeConfigFromBytes(data []byte) error

MergeConfigFromBytes 从字节数据加载配置并合并到现有配置中。 如果同一个 toolName@version 在两个来源中都存在,后加载的覆盖先加载的。

func (*API) SetToolEnabled added in v0.3.4

func (p *API) SetToolEnabled(toolName, _ string, enabled bool) error

SetToolEnabled 兼容旧接口,内部转发到工具组级别的开关。

func (*API) SetToolGroupEnabled added in v0.3.4

func (p *API) SetToolGroupEnabled(toolName string, enabled bool) error

SetToolGroupEnabled 切换整组工具的启用状态。

func (*API) SetToolGroupPinnedVersion added in v0.3.5

func (p *API) SetToolGroupPinnedVersion(toolName string, version string) error

SetToolGroupPinnedVersion 设置工具组的锁定版本。 传入空字符串表示取消锁定,恢复自动版本选择。

func (*API) StartWebUI added in v0.2.0

func (p *API) StartWebUI(port int) error

StartWebUI starts the web UI server If port is 0, a random available port will be chosen

func (*API) StopWebUI added in v0.2.0

func (p *API) StopWebUI() error

StopWebUI stops the web UI server

type AutoVersionStrategy added in v0.2.0

type AutoVersionStrategy int

AutoVersionStrategy defines the strategy for automatic version selection

const (
	// AutoVersionPreferInstalled prefers the highest installed version, falls back to latest available
	AutoVersionPreferInstalled AutoVersionStrategy = iota
	// AutoVersionLatestAvailable always uses the latest version from config
	AutoVersionLatestAvailable
	// AutoVersionOnlyInstalled only uses installed versions, returns error if none installed
	AutoVersionOnlyInstalled
)

type BaseTool

type BaseTool struct {
	*config.ToolConfig
}

func NewBaseTool

func NewBaseTool(config *config.ToolConfig) *BaseTool

func (*BaseTool) CreateExecuteCmd

func (p *BaseTool) CreateExecuteCmd(args ...string) (cmd *exec.Cmd, err error)

func (*BaseTool) DoesToolExist

func (p *BaseTool) DoesToolExist() bool

DoesToolExist 在候选根目录中检查是否已存在

func (*BaseTool) ExecAndGetInfoString added in v0.2.1

func (p *BaseTool) ExecAndGetInfoString() string

ExecAndGetInfoString 运行配置中的 PrintInfoCmd(若存在)并返回其标准输出作为描述信息。 若未配置或工具不存在,则返回空字符串。

func (*BaseTool) Execute

func (p *BaseTool) Execute(args ...string) (err error)

func (*BaseTool) GetExecFolder added in v0.3.1

func (p *BaseTool) GetExecFolder() string

GetExecFolder 返回执行所用目录:当可写目录不可执行且配置了临时执行目录时,返回临时目录中的副本路径

func (*BaseTool) GetPrintInfoCmd added in v0.2.1

func (p *BaseTool) GetPrintInfoCmd() []string

func (*BaseTool) GetRootFolder added in v0.3.0

func (p *BaseTool) GetRootFolder() string

GetResolvedEntryPath 若在候选目录中找到,返回实际存在的入口路径;否则返回空字符串 GetRootFolder 返回该工具被发现时所在的根目录(只读根或可写根)。若未发现返回空字符串

func (*BaseTool) GetToolFolder

func (p *BaseTool) GetToolFolder() string

GetToolFolder 返回该工具实际所在的目录;若未找到则返回空字符串

func (*BaseTool) GetToolFolderPath added in v0.3.0

func (p *BaseTool) GetToolFolderPath(rootFolder string) string

func (*BaseTool) GetToolName added in v0.3.0

func (p *BaseTool) GetToolName() string

GetToolName 返回工具名称

func (*BaseTool) GetToolPath

func (p *BaseTool) GetToolPath() string

GetToolPath 若存在于任意候选目录,则返回实际存在的入口路径;否则返回可写目录中的预期路径

func (*BaseTool) GetVersion

func (p *BaseTool) GetVersion() string

func (*BaseTool) GetWritableToolFolder added in v0.3.0

func (p *BaseTool) GetWritableToolFolder() string

GetWritableToolFolder 返回用于安装/卸载的可写目录(不做存在性判断)

func (*BaseTool) Install

func (p *BaseTool) Install() error

func (*BaseTool) IsFromReadOnlyRootFolder added in v0.3.0

func (p *BaseTool) IsFromReadOnlyRootFolder() bool

IsFromReadOnlyRootFolder 返回是否来自只读根目录

func (*BaseTool) Uninstall added in v0.2.0

func (p *BaseTool) Uninstall() error

Uninstall removes the tool by moving it to a trash folder and then deleting it

type DevTool added in v0.3.4

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

DevTool 开发工具包装器,实现 Tool 接口

func NewDevTool added in v0.3.4

func NewDevTool(toolName, exePath string) *DevTool

NewDevTool 创建开发工具实例

func (*DevTool) CreateExecuteCmd added in v0.3.4

func (d *DevTool) CreateExecuteCmd(args ...string) (cmd *exec.Cmd, err error)

func (*DevTool) DoesToolExist added in v0.3.4

func (d *DevTool) DoesToolExist() bool

func (*DevTool) ExecAndGetInfoString added in v0.3.4

func (d *DevTool) ExecAndGetInfoString() string

func (*DevTool) Execute added in v0.3.4

func (d *DevTool) Execute(args ...string) error

func (*DevTool) GetExecFolder added in v0.3.4

func (d *DevTool) GetExecFolder() string

func (*DevTool) GetInstallSource added in v0.3.4

func (d *DevTool) GetInstallSource() string

func (*DevTool) GetPrintInfoCmd added in v0.3.4

func (d *DevTool) GetPrintInfoCmd() []string

func (*DevTool) GetRootFolder added in v0.3.4

func (d *DevTool) GetRootFolder() string

func (*DevTool) GetToolFolder added in v0.3.4

func (d *DevTool) GetToolFolder() string

func (*DevTool) GetToolName added in v0.3.4

func (d *DevTool) GetToolName() string

func (*DevTool) GetToolPath added in v0.3.4

func (d *DevTool) GetToolPath() string

func (*DevTool) GetVersion added in v0.3.4

func (d *DevTool) GetVersion() string

func (*DevTool) Install added in v0.3.4

func (d *DevTool) Install() error

func (*DevTool) IsFromReadOnlyRootFolder added in v0.3.4

func (d *DevTool) IsFromReadOnlyRootFolder() bool

func (*DevTool) Uninstall added in v0.3.4

func (d *DevTool) Uninstall() error

type DevToolOverride added in v0.3.4

type DevToolOverride struct {
	ToolName string // 工具名称
	ExePath  string // 本地可执行文件路径
}

DevToolOverride 定义开发工具覆盖配置

type DownloadProcess added in v0.3.4

type DownloadProcess struct {
	CurrentDownloadURLIndex int      `json:"currentDownloadUrlIndex,omitempty"`
	FileSize                int64    `json:"fileSize,omitempty"`
	Status                  string   `json:"status,omitempty"`
	AttemptIndex            int      `json:"attemptIndex,omitempty"`
	TotalAttempts           int      `json:"totalAttempts,omitempty"`
	CurrentURL              string   `json:"currentUrl,omitempty"`
	FailedURLs              []string `json:"failedUrls,omitempty"`
	AllURLs                 []string `json:"allUrls,omitempty"`
}

DownloadProcess 记录最近一次下载的状态

type DownloadProgress added in v0.2.0

type DownloadProgress struct {
	TotalBytes      int64
	DownloadedBytes int64
	Speed           float64 // bytes per second
	Status          string  // downloading, extracting, completed, failed
	Error           error
	AttemptIndex    int      // 当前尝试的第几个源(1-based)
	TotalAttempts   int      // 总源数
	CurrentURL      string   // 当前下载的 URL
	FailedURLs      []string // 已失败的 URL 列表
	AllURLs         []string // 所有候选 URL(按尝试顺序)
}

DownloadProgress represents the download progress information

type DownloadedTool

type DownloadedTool struct {
	*BaseTool
	// contains filtered or unexported fields
}

DownloadedTool 是带有下载能力的工具实现

func NewDownloadTool

func NewDownloadTool(conf *config.ToolConfig, group *ToolGroup) *DownloadedTool

func (*DownloadedTool) GetDownloadProcess added in v0.3.4

func (p *DownloadedTool) GetDownloadProcess() DownloadProcess

GetDownloadProcess 返回最近一次下载进度的快照

func (*DownloadedTool) GetInstallSource added in v0.2.1

func (p *DownloadedTool) GetInstallSource() string

func (*DownloadedTool) GetMetadataSnapshot added in v0.3.4

func (p *DownloadedTool) GetMetadataSnapshot() *ToolMetadata

GetMetadataSnapshot 返回元数据的拷贝,供 UI 展示

func (*DownloadedTool) GetPartialDownloadInfo added in v0.2.0

func (p *DownloadedTool) GetPartialDownloadInfo() (int64, int64, error)

GetPartialDownloadInfo returns downloaded size of temp file and last known total size

func (*DownloadedTool) Install

func (p *DownloadedTool) Install() error

func (*DownloadedTool) IsEnabled added in v0.3.4

func (p *DownloadedTool) IsEnabled() bool

func (*DownloadedTool) Pause added in v0.2.0

func (p *DownloadedTool) Pause() error

Pause signals the current download loop to stop gracefully

func (*DownloadedTool) SetEnabled added in v0.3.4

func (p *DownloadedTool) SetEnabled(enabled bool) error

func (*DownloadedTool) SetProgressCallback added in v0.2.0

func (p *DownloadedTool) SetProgressCallback(callback ProgressCallback)

SetProgressCallback sets a callback function to receive progress updates

func (*DownloadedTool) Uninstall added in v0.3.4

func (p *DownloadedTool) Uninstall() error

Uninstall 移除工具并清空下载进度元数据

type ProgressCallback added in v0.2.0

type ProgressCallback func(progress DownloadProgress)

ProgressCallback is called during download to report progress

type Tool

type Tool interface {
	DoesToolExist() bool
	Install() error
	Uninstall() error
	Execute(args ...string) error
	CreateExecuteCmd(args ...string) (cmd *exec.Cmd, err error)
	GetVersion() string
	// GetToolName 返回工具名称(如 "dotnet")
	GetToolName() string
	// GetToolFolder 返回该工具实际所在的目录(若未发现,返回空字符串)
	GetToolFolder() string
	// GetToolPath 返回实际可执行入口路径;若不存在则返回空字符串
	GetToolPath() string
	// GetExecFolder 返回执行使用的目录;当可写目录不可执行时,可能为临时目录
	GetExecFolder() string
	GetInstallSource() string
	ExecAndGetInfoString() string
	GetPrintInfoCmd() []string
	// IsFromReadOnlyRootFolder 返回该工具是否是从只读目录(ReadOnlyRootFolders)中识别到
	IsFromReadOnlyRootFolder() bool
	// GetRootFolder 返回该工具所属的根目录(只读根或可写根)。若未发现,返回空字符串
	GetRootFolder() string
}

type ToolError added in v0.3.4

type ToolError struct {
	Message string
}

ToolError 工具错误

func (*ToolError) Error added in v0.3.4

func (e *ToolError) Error() string

type ToolGroup added in v0.3.4

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

ToolGroup 管理同名不同版本工具的共享状态(例如启用/禁用)。

func (*ToolGroup) GetPinnedVersion added in v0.3.5

func (g *ToolGroup) GetPinnedVersion() string

GetPinnedVersion 返回当前锁定的版本;为空表示未锁定。

func (*ToolGroup) IsEnabled added in v0.3.4

func (g *ToolGroup) IsEnabled() bool

IsEnabled 返回工具组当前是否启用;读取失败时默认返回 true。

func (*ToolGroup) Name added in v0.3.4

func (g *ToolGroup) Name() string

Name 返回工具组名称。

func (*ToolGroup) SetEnabled added in v0.3.4

func (g *ToolGroup) SetEnabled(enabled bool) error

SetEnabled 更新工具组的启用状态,仅当状态发生改变时才写入磁盘。

func (*ToolGroup) SetPinnedVersion added in v0.3.5

func (g *ToolGroup) SetPinnedVersion(version string) error

SetPinnedVersion 设置锁定版本。传入空字符串表示取消锁定。 仅当值发生变化时才写入磁盘。

func (*ToolGroup) Snapshot added in v0.3.4

func (g *ToolGroup) Snapshot() ToolGroupSnapshot

Snapshot 返回当前工具组的只读快照,用于对外展示。

type ToolGroupMetadata added in v0.3.4

type ToolGroupMetadata struct {
	ToolName  string `json:"toolName"`
	IsEnabled bool   `json:"isEnabled"`
	// PinnedVersion 锁定使用的版本。为空表示使用自动版本选择策略。
	// 设置后,GetToolAuto 会优先使用此版本(如果该版本在配置中存在)。
	PinnedVersion string `json:"pinnedVersion,omitempty"`
}

ToolGroupMetadata 表示工具组级别的元数据,记录启用状态和版本锁定信息。

type ToolGroupSnapshot added in v0.3.4

type ToolGroupSnapshot struct {
	ToolName      string `json:"toolName"`
	IsEnabled     bool   `json:"isEnabled"`
	PinnedVersion string `json:"pinnedVersion,omitempty"`
}

ToolGroupSnapshot 用于向外部暴露工具组的关键信息。

type ToolMetadata added in v0.3.4

type ToolMetadata struct {
	DownloadURL     []string        `json:"downloadUrl,omitempty"`
	PathToEntry     string          `json:"pathToEntry,omitempty"`
	PrintInfoCmd    []string        `json:"printInfoCmd,omitempty"`
	DownloadProcess DownloadProcess `json:"downloadProcess"`
}

ToolMetadata 记录工具当前配置、启用状态与下载进度

Jump to

Keyboard shortcuts

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