Documentation
¶
Index ¶
- Constants
- Variables
- func AddReadOnlyRootFolder(folder string)
- func CleanupTrash()
- func ClearAllDevToolOverrides()
- func ClearDevToolOverride(toolName string)
- func GetDevToolOverride(toolName string) string
- func GetReadOnlyRootFolders() []string
- func GetRootFolder() string
- func GetTmpRootFolderForExecPermission() string
- func HasDevToolOverride(toolName string) bool
- func LoadDevToolOverridesFromEnv()
- func SetDevToolOverride(toolName, exePath string)
- func SetDownloadLimitBPS(limit int64)
- func SetReadOnlyRootFolders(folders []string)
- func SetRootFolder(folder string)
- func SetTmpRootFolderForExecPermission(folder string)
- type API
- func (p *API) AddToolConfig(cfg *config.ToolConfig)
- func (p *API) DeleteAllExceptToolsInRoot(toKeep []Tool) (deleted []string, err error)
- func (p *API) DeleteUnknownToolsInRoot() (deleted []string, err error)
- func (p *API) GetConfig() config.Config
- func (p *API) GetTool(toolName string) (tool Tool, err error)
- func (p *API) GetToolAuto(toolName string, strategy AutoVersionStrategy) (tool Tool, err error)
- func (p *API) GetToolGroupPinnedVersion(toolName string) string
- func (p *API) GetToolInstalled(toolName string) (tool Tool, err error)
- func (p *API) GetToolLatest(toolName string) (tool Tool, err error)
- func (p *API) GetToolWithVersion(toolName, version string) (tool Tool, err error)
- func (p *API) GetWebUIAddresses() (addresses []string, err error)
- func (p *API) GetWebUIPort() int
- func (p *API) GetWebUIStatus() webui.ServerStatus
- func (p *API) IsToolGroupEnabled(toolName string) (bool, error)
- func (p *API) ListToolGroups() []ToolGroupSnapshot
- func (p *API) LoadConfig(path string) (err error)
- func (p *API) LoadConfigFromBytes(data []byte) (err error)
- func (p *API) MergeConfig(path string) error
- func (p *API) MergeConfigFromBytes(data []byte) error
- func (p *API) SetToolEnabled(toolName, _ string, enabled bool) error
- func (p *API) SetToolGroupEnabled(toolName string, enabled bool) error
- func (p *API) SetToolGroupPinnedVersion(toolName string, version string) error
- func (p *API) StartWebUI(port int) error
- func (p *API) StopWebUI() error
- type AutoVersionStrategy
- type BaseTool
- func (p *BaseTool) CreateExecuteCmd(args ...string) (cmd *exec.Cmd, err error)
- func (p *BaseTool) DoesToolExist() bool
- func (p *BaseTool) ExecAndGetInfoString() string
- func (p *BaseTool) Execute(args ...string) (err error)
- func (p *BaseTool) GetExecFolder() string
- func (p *BaseTool) GetPrintInfoCmd() []string
- func (p *BaseTool) GetRootFolder() string
- func (p *BaseTool) GetToolFolder() string
- func (p *BaseTool) GetToolFolderPath(rootFolder string) string
- func (p *BaseTool) GetToolName() string
- func (p *BaseTool) GetToolPath() string
- func (p *BaseTool) GetVersion() string
- func (p *BaseTool) GetWritableToolFolder() string
- func (p *BaseTool) Install() error
- func (p *BaseTool) IsFromReadOnlyRootFolder() bool
- func (p *BaseTool) Uninstall() error
- type DevTool
- func (d *DevTool) CreateExecuteCmd(args ...string) (cmd *exec.Cmd, err error)
- func (d *DevTool) DoesToolExist() bool
- func (d *DevTool) ExecAndGetInfoString() string
- func (d *DevTool) Execute(args ...string) error
- func (d *DevTool) GetExecFolder() string
- func (d *DevTool) GetInstallSource() string
- func (d *DevTool) GetPrintInfoCmd() []string
- func (d *DevTool) GetRootFolder() string
- func (d *DevTool) GetToolFolder() string
- func (d *DevTool) GetToolName() string
- func (d *DevTool) GetToolPath() string
- func (d *DevTool) GetVersion() string
- func (d *DevTool) Install() error
- func (d *DevTool) IsFromReadOnlyRootFolder() bool
- func (d *DevTool) Uninstall() error
- type DevToolOverride
- type DownloadProcess
- type DownloadProgress
- type DownloadedTool
- func (p *DownloadedTool) GetDownloadProcess() DownloadProcess
- func (p *DownloadedTool) GetInstallSource() string
- func (p *DownloadedTool) GetMetadataSnapshot() *ToolMetadata
- func (p *DownloadedTool) GetPartialDownloadInfo() (int64, int64, error)
- func (p *DownloadedTool) Install() error
- func (p *DownloadedTool) IsEnabled() bool
- func (p *DownloadedTool) Pause() error
- func (p *DownloadedTool) SetEnabled(enabled bool) error
- func (p *DownloadedTool) SetProgressCallback(callback ProgressCallback)
- func (p *DownloadedTool) Uninstall() error
- type ProgressCallback
- type Tool
- type ToolError
- type ToolGroup
- type ToolGroupMetadata
- type ToolGroupSnapshot
- type ToolMetadata
Constants ¶
const MetadataFilenameSuffix = ".toolmeta.json"
MetadataFilenameSuffix 定义工具元数据文件的后缀
Variables ¶
var (
// ErrDownloadPaused 表示下载任务被手动暂停,可用于区分失败与暂停
ErrDownloadPaused = errPaused
)
var ErrToolBusy = errors.New("tool is busy: another operation is in progress")
ErrToolBusy 表示同一工具目录已有其他操作持有锁
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
GetDevToolOverride 获取开发工具覆盖路径 如果没有设置覆盖,返回空字符串
func GetReadOnlyRootFolders ¶ added in v0.3.0
func GetReadOnlyRootFolders() []string
GetReadOnlyRootFolders 返回当前配置的只读根目录列表。
func GetTmpRootFolderForExecPermission ¶ added in v0.3.1
func GetTmpRootFolderForExecPermission() string
GetTmpRootFolderForExecPermission 返回当前配置的临时执行目录
func HasDevToolOverride ¶ added in v0.3.4
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 SetTmpRootFolderForExecPermission ¶ added in v0.3.1
func SetTmpRootFolderForExecPermission(folder string)
SetTmpRootFolderForExecPermission 设置在可写目录不可执行时用于运行的临时目录
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
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
DeleteAllExceptToolsInRoot 删除可写根目录中: - 对于非当前 OS 或 ARCH 的目录,直接整目录删除(不深入遍历)。 - 对于当前 OS/ARCH,仅保留 toKeep 中列出的 工具@版本,其余删除。 仅作用于可写根目录(GetRootFolder),不会触及只读根目录。 返回被删除的目录完整路径列表(可能是版本目录、架构目录或系统目录)。
func (*API) DeleteUnknownToolsInRoot ¶ added in v0.3.0
DeleteUnknownToolsInRoot 清理可写根目录下的工具: - 对于非当前 OS 或 ARCH 的目录,直接整目录删除(不深入遍历)。 - 对于当前 OS/ARCH,删除所有不在当前配置(p.config)中的 工具@版本 目录。 仅作用于可写根目录(GetRootFolder),不会触及只读根目录。 返回被删除的目录完整路径列表(可能是版本目录、架构目录或系统目录)。
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
GetToolGroupPinnedVersion 获取工具组当前锁定的版本。 返回空字符串表示未锁定。
func (*API) GetToolInstalled ¶ added in v0.2.0
GetToolInstalled gets the highest installed version of a tool (for execution)
func (*API) GetToolLatest ¶ added in v0.2.0
GetToolLatest gets the latest version of a tool from config (for downloading)
func (*API) GetToolWithVersion ¶ added in v0.2.0
func (*API) GetWebUIAddresses ¶ added in v0.2.1
func (*API) GetWebUIPort ¶ added in v0.2.0
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
IsToolGroupEnabled 返回整组工具当前是否处于启用状态。
func (*API) ListToolGroups ¶ added in v0.3.4
func (p *API) ListToolGroups() []ToolGroupSnapshot
ListToolGroups 返回当前已知的工具组快照列表,包含配置文件、已创建的组以及磁盘上残留的组元数据。
func (*API) LoadConfig ¶
func (*API) LoadConfigFromBytes ¶ added in v0.2.1
func (*API) MergeConfig ¶ added in v0.3.5
MergeConfig 从文件加载配置并合并到现有配置中。 如果同一个 toolName@version 在两个来源中都存在,后加载的覆盖先加载的。
func (*API) MergeConfigFromBytes ¶ added in v0.3.5
MergeConfigFromBytes 从字节数据加载配置并合并到现有配置中。 如果同一个 toolName@version 在两个来源中都存在,后加载的覆盖先加载的。
func (*API) SetToolEnabled ¶ added in v0.3.4
SetToolEnabled 兼容旧接口,内部转发到工具组级别的开关。
func (*API) SetToolGroupEnabled ¶ added in v0.3.4
SetToolGroupEnabled 切换整组工具的启用状态。
func (*API) SetToolGroupPinnedVersion ¶ added in v0.3.5
SetToolGroupPinnedVersion 设置工具组的锁定版本。 传入空字符串表示取消锁定,恢复自动版本选择。
func (*API) StartWebUI ¶ added in v0.2.0
StartWebUI starts the web UI server If port is 0, a random available port will be chosen
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 (*BaseTool) DoesToolExist ¶
DoesToolExist 在候选根目录中检查是否已存在
func (*BaseTool) ExecAndGetInfoString ¶ added in v0.2.1
ExecAndGetInfoString 运行配置中的 PrintInfoCmd(若存在)并返回其标准输出作为描述信息。 若未配置或工具不存在,则返回空字符串。
func (*BaseTool) GetExecFolder ¶ added in v0.3.1
GetExecFolder 返回执行所用目录:当可写目录不可执行且配置了临时执行目录时,返回临时目录中的副本路径
func (*BaseTool) GetPrintInfoCmd ¶ added in v0.2.1
func (*BaseTool) GetRootFolder ¶ added in v0.3.0
GetResolvedEntryPath 若在候选目录中找到,返回实际存在的入口路径;否则返回空字符串 GetRootFolder 返回该工具被发现时所在的根目录(只读根或可写根)。若未发现返回空字符串
func (*BaseTool) GetToolFolder ¶
GetToolFolder 返回该工具实际所在的目录;若未找到则返回空字符串
func (*BaseTool) GetToolFolderPath ¶ added in v0.3.0
func (*BaseTool) GetToolName ¶ added in v0.3.0
GetToolName 返回工具名称
func (*BaseTool) GetToolPath ¶
GetToolPath 若存在于任意候选目录,则返回实际存在的入口路径;否则返回可写目录中的预期路径
func (*BaseTool) GetVersion ¶
func (*BaseTool) GetWritableToolFolder ¶ added in v0.3.0
GetWritableToolFolder 返回用于安装/卸载的可写目录(不做存在性判断)
func (*BaseTool) IsFromReadOnlyRootFolder ¶ added in v0.3.0
IsFromReadOnlyRootFolder 返回是否来自只读根目录
type DevTool ¶ added in v0.3.4
type DevTool struct {
// contains filtered or unexported fields
}
DevTool 开发工具包装器,实现 Tool 接口
func NewDevTool ¶ added in v0.3.4
NewDevTool 创建开发工具实例
func (*DevTool) CreateExecuteCmd ¶ added in v0.3.4
func (*DevTool) DoesToolExist ¶ added in v0.3.4
func (*DevTool) ExecAndGetInfoString ¶ added in v0.3.4
func (*DevTool) GetExecFolder ¶ added in v0.3.4
func (*DevTool) GetInstallSource ¶ added in v0.3.4
func (*DevTool) GetPrintInfoCmd ¶ added in v0.3.4
func (*DevTool) GetRootFolder ¶ added in v0.3.4
func (*DevTool) GetToolFolder ¶ added in v0.3.4
func (*DevTool) GetToolName ¶ added in v0.3.4
func (*DevTool) GetToolPath ¶ added in v0.3.4
func (*DevTool) GetVersion ¶ added in v0.3.4
func (*DevTool) IsFromReadOnlyRootFolder ¶ added in v0.3.4
type DevToolOverride ¶ added in v0.3.4
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 ToolGroup ¶ added in v0.3.4
type ToolGroup struct {
// contains filtered or unexported fields
}
ToolGroup 管理同名不同版本工具的共享状态(例如启用/禁用)。
func (*ToolGroup) GetPinnedVersion ¶ added in v0.3.5
GetPinnedVersion 返回当前锁定的版本;为空表示未锁定。
func (*ToolGroup) SetEnabled ¶ added in v0.3.4
SetEnabled 更新工具组的启用状态,仅当状态发生改变时才写入磁盘。
func (*ToolGroup) SetPinnedVersion ¶ added in v0.3.5
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 记录工具当前配置、启用状态与下载进度