---@brief [[
--- glaze.nvim - Centralized Go binary management for Neovim plugins
---
--- A Mason/Lazy-style interface for managing Go binaries across multiple plugins.
--- Register your plugin's binaries once, update them all with a single command.
---
--- Usage:
--- require("glaze").setup({})
--- require("glaze").register("freeze", "github.com/charmbracelet/freeze")
--- require("glaze").register("glow", "github.com/charmbracelet/glow")
---@brief ]]
local M = {}
---@class GlazeBinary
---@field name string Binary name (executable name)
---@field url string Go module URL (without @version)
---@field plugins string[] Plugins that registered this binary
---@field callbacks table<string, fun(success: boolean)> Callbacks keyed by plugin name
---@field source? { file: string, line: number } Location where the binary was registered
---@class GlazeAutoCheckConfig
---@field enabled? boolean Whether to auto-check for updates
---@field frequency? string|number Frequency: "daily", "weekly", or hours as number
---@class GlazeAutoInstallConfig
---@field enabled? boolean Whether to auto-install missing binaries on register
---@field silent? boolean Suppress notifications during auto-install
---@class GlazeAutoUpdateConfig
---@field enabled? boolean Whether to auto-update binaries when newer versions are found (requires auto_check)
---@class GlazeConfig
---@field ui? GlazeUIConfig
---@field concurrency? number Max parallel installations
---@field go_cmd? string[] Go command (supports goenv)
---@field auto_install? GlazeAutoInstallConfig
---@field auto_check? GlazeAutoCheckConfig
---@field auto_update? GlazeAutoUpdateConfig