eget 用于从 GitHub、GitLab、Gitea/Forgejo 和 SourceForge 查找、下载并提取预构建二进制。
Forked from https://github.com/zyedidia/eget 重构并增强了工具的功能。
- 多来源安装:支持从 GitHub、GitLab、Gitea/Forgejo、SourceForge、直接下载 URL 和本地文件安装或下载二进制资源。
- 自动选择与提取:按系统架构、资源关键词或正则筛选 release asset,支持 SHA-256 校验和常见归档格式提取。
- 托管包管理:通过
add、list、update、uninstall管理常用工具,记录安装状态并支持批量检查更新。 - SDK 下载:支持 Go、Node 等多版本 SDK 归档下载,带索引缓存、断点续传和独立 SDK 安装记录。
- 并发下载:大文件会自动使用 HTTP Range 分片并发下载,安装或更新全部包时会自动批量并发下载。
- 查询与搜索:支持查询 GitHub release 信息、SourceForge 最新版本和 assets,并使用 GitHub 搜索语法查找仓库。
- 缓存与代理:支持下载缓存、API 响应缓存、
[http_proxy]和ghproxy,适合网络受限或重复安装场景。 - 配置化使用:支持全局配置、仓库配置和
packages.<name>托管包配置,配置文件和 installed store 默认位于~/.config/eget/。
- 使用 release 安装脚本
curl -fsSL https://raw.githubusercontent.com/inherelab/eget/master/.github/install.sh | shiwr https://raw.githubusercontent.com/inherelab/eget/master/.github/install.ps1 -UseB | iex- 从 Releases 下载安装 https://github.com/inherelab/eget/releases
- 使用命令
go install安装 (需要本地有 Go sdk)
go install github.com/inherelab/eget/cmd/eget@latesteget <command> --options... arguments...从 GitHub 安装:
# quickly
eget i ORG/REPO
# install
eget install --tag nightly inhere/markview
# 安装并指定可执行文件名
eget install --name chlog gookit/gitw
# 安装 zip 资产
eget install --asset zip windirstat/windirstat
# 使用正则筛选资源
eget install --asset "REG:\\.deb$" owner/repo
# 使用前缀/后缀筛选资源
eget install --asset "PRE:codex,SUF:.zip" openai/codex
# 解压全部文件,并重命名其中一个解压文件
eget install --extract-all --rename "codex-x86_64-pc-windows-msvc.exe=codex.exe" openai/codex
# 解压全部文件,并剥离归档顶层目录
eget download --extract-all --strip-components 1 --asset "windows,zip" ventoy/Ventoy
# 安装到指定目录
eget install --to ~/.local/bin/fzf junegunn/fzf安装 SourceForge 项目:
# 直接安装 SourceForge 项目
eget install --asset x64,PerUser,setup sourceforge:winmerge安装 GitLab/Gitea/Forgejo 项目:
# 从 GitLab releases 安装
eget install gitlab:fdroid/fdroidserver
eget install gitlab:gitlab.gnome.org/GNOME/gtk
# 从 Gitea/Forgejo-compatible releases 安装
eget install --asset linux,amd64 gitea:codeberg.org/forgejo/forgejo安装并记录:
# 安装 并 记录
eget install --add junegunn/fzf
eget install --add --name rg BurntSushi/ripgrep
# 添加 SourceForge 项目为托管包
eget add --name winmerge --system windows/amd64 --asset x64,PerUser,setup sourceforge:winmerge
# 安装 [packages] 下配置的全部托管包
eget install --all安装 GUI 应用:
# 安装 GUI 应用;免安装 GUI 程序默认写入 global.gui_target
eget install --gui sipeed/picoclaw
# 强制将普通命名的 .exe GUI asset 当作安装器启动
eget ins --gui --install-mode installer owner/repo
eget add --gui --name picoclaw sipeed/picoclaw# download
eget download ip7z/7zip
eget download --file go --to ~/go1.17.5 https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
eget download --file README.md,LICENSE --to ./dist owner/repo
eget download --file "*.txt" owner/repo
eget download --file "bin/*" owner/repo
eget download --file "*.exe,^*x86*,^*.sig" owner/repo
eget download --file "^REG:(?i)\.(map|cmd|md|txt|diz)$" FarGroup/FarManager
eget download --extract-all --to ./dist windirstat/windirstateget sdk install go@1.22.0
eget sdk install go:1.22 node:20.11.1
eget sdk install --force go@1.22.0
eget sdk list
eget sdk list --json
eget sdk remove go@1.22.0
eget sdk path go
eget sdk path go:1.20
eget sdk path java:17
eget sdk config add --all
eget sdk config add --all --mirror mirror
eget sdk config add jdk --mirror zulu
eget sdk index refresh go
eget sdk index show go
eget sdk只负责下载和解压安装 SDK,不会修改PATH、不会写 shell hook、不会管理当前激活版本,也不会写.xenv.toml。如需环境切换,可在安装后配合xenv tools index和xenv use。
eget cache 用于管理本机缓存目录。顶层命令也支持短别名:
eget ca status
eget ca list --root sdk子命令:
cache clean: 清理选定的缓存文件。cache list: 按缓存根目录列出文件,支持all、pkg、api、sdk、sdk-index、partial。cache status: 查看缓存目录占用摘要。cache serve: 以只读 HTTP 服务暴露缓存文件。
eget cache clean 用于清理 global.cache_dir 下的本机缓存。默认清理 3 天前的 package 下载缓存、API cache、SDK 下载缓存和未完成下载状态。SDK index 默认保留;如果确认要清理 SDK index,请显式使用 --sdk-index。
eget cache clean
eget cache clean --dry-run --older 7d
eget cache clean --dry-run --json
eget cache clean --api --all
eget ca clean --sdk --partial --older 12h查看缓存内容和状态:
eget cache status
eget cache list --root sdk
eget cache list --root sdk-index
eget cache list --jsoneget cache serve 会启动只读 HTTP 服务,方便同一局域网内其它机器浏览或下载本机已有的 package/SDK 缓存文件。浏览器打开服务根路径可以查看内置文件列表界面,也可以请求 /manifest.json 获取机器可读的 manifest。
eget cache serve
eget cache serve --host 127.0.0.1 --port 0 --root sdk --no-index服务端默认输出 text 请求日志。需要时可以开启简单 bearer 保护,并把请求日志切换为 JSON lines:
eget cache serve --host 0.0.0.0 --port 8686 --token "$EGET_CACHE_TOKEN" --json-log客户端开启回源前优先尝试 cache server:
[cache_mirror]
enable = true
url = "http://192.168.1.10:8686"查询仓库信息:
# query repo info
eget query owner/repo
eget query --action releases --limit 5 owner/repo
eget query --action assets --tag v1.2.3 owner/repo
# 查询 SourceForge 最新版本或 assets
eget query sourceforge:winmerge
eget query https://sourceforge.net/projects/victoria-ssd-hdd
eget query --action assets sourceforge:winmerge/stable
eget query --action assets --tag 2.16.44 sourceforge:winmerge/stable搜索 GitHub 仓库:
eget search ripgrep
eget search skillc language:go user:inhere
eget search --limit 5 --sort stars --order desc terminal ui
eget search --json picoclaw user:sipeed# uninstall
eget uninstall fzf
# 列出已安装包
eget list|ls
# 列出全部托管包和已安装包
eget list --all
# 列出 config 中配置但未安装的包
eget list --no-installed
# 显示 package 详情
eget show fzf
# 只列出 GUI 包
eget list --gui
# update fzf
eget update fzf
eget update --all
# 更新 eget 自身
eget update --self
# 仅检查 eget 自身是否有新版本
eget update --self --check# config
eget add --name fzf --to ~/.local/bin junegunn/fzf
eget config init
eget config list|ls
eget config doctor
eget cfg path --check cache_dir
eget config get global.target
eget config set global.target ~/.local/bininstall 和 download 的目标参数可以是:
nameconfig 里配置的包名称- GitHub 仓库,例如
owner/repo - GitHub 仓库 URL,例如
https://github.com/owner/repo - GitLab 目标,例如
gitlab:fdroid/fdroidserver或gitlab:gitlab.gnome.org/GNOME/gtk - Gitea/Forgejo 目标,例如
gitea:codeberg.org/forgejo/forgejo - SourceForge 目标,例如
sourceforge:winmerge、sourceforge:winmerge/stable或https://sourceforge.net/projects/winmerge - 直接下载 URL,例如
https://example.com/file.tar.gz - 本地文件路径,例如
file:///path/to/file
注意:GitLab 和 Gitea/Forgejo 目前支持通过 release assets 进行
install、download和update。SourceForge 还支持query latest和query assets。暂不支持 search 对齐和私有仓库认证。
install(alias: i, ins)
- 查找、下载、校验、提取目标,并记录安装状态。
- 可通过
--name指定安装后的可执行文件名;未指定--to时,也会作为单文件资产的重命名提示。 --gui会将目标标记为 GUI 应用。GUI.exe和.msi默认按安装器模式启动;如果最终选中的 asset 或归档内文件名包含portable,则自动按免安装 GUI 处理,默认使用global.gui_target。未传--gui但选中疑似安装器资源时,会先提示是否启动;确认后若同时传入--add,会持久化is_gui = true。可传--install-mode portable|installer,或在 package 配置里设置install_mode覆盖自动判断。- 传入
--add时,安装成功后会自动将 repo 目标写入[packages.<name>];可配合--name指定包名。 - 不带目标传入
--all时,会安装[packages]下配置的全部托管包;每个包仍按单包安装一样合并包级选项。
download(alias: dl)
- 复用安装链路,但不记录 installed store。
- 默认仅下载原始 asset;只有设置
--file或--extract-all时才会自动解压归档内容。
add
- 将一个托管包写入配置文件的
[packages.<name>]。未手动设置desc时,eget 会尝试写入 repository 描述。
uninstall(alias: uni, rm)
- 删除已安装文件并清理 installed store 记录,不移除
[packages.<name>]配置。 - 使用
--purge可同时删除匹配的[packages.<name>]配置;不会清理 package 下载缓存。
list(alias: ls)
- 默认列出已安装包。
- 使用
--all/-a列出本地 managed packages 与 installed store 的并集。 - 使用
--no-installed/--ni列出[packages]中已配置但未安装的包。 - 使用
--gui只显示当前列表视图中的 GUI 应用。
show
- 合并
[packages.<name>]与 installed store 信息,显示 package 详情,包括描述、版本、状态、主页、repository URL、选中的 asset、asset URL、安装目标和已提取文件。 packages.<name>.desc可手动设置;为空时,add/install --add会尝试获取 repository 描述,installed 记录也会在可用时保存描述、主页和 repository URL。
query(alias: q)
- 查询 GitHub repo 的 release 与元数据,以及 SourceForge 的最新版本和 assets,不涉及安装或本地状态写入。
- 默认 action 为
latest,可通过--action切换为info、releases、assets。
search
- 搜索 GitHub 仓库,不涉及安装或本地状态写入。
- 第一个参数作为搜索关键词,后续参数会原样作为 GitHub 搜索限定条件传递,例如
language:go、user:inhere或topic:cli。
update(alias: up)
- 先检查目标是否有新版本,再更新已配置或已安装的目标;也可通过
--all更新全部托管包。 update --self会检查inherelab/egetrelease,选择当前 OS/arch 对应的原始可执行文件 asset,并替换当前正在运行的 eget 可执行文件。Windows 下替换会延迟到当前进程退出后执行。update --self --check会在请求最新版本前输出自更新检查来源 host,方便确认使用的是 GitHub 还是私有源。update --self --self-source <url>会从内部源更新 eget。内部源需要提供latest.yaml,以及同目录下的原始平台文件,例如eget-linux-amd64和eget-windows-amd64.exe。<url>可以是目录地址,也可以直接是latest.yaml地址;也可通过EGET_SELF_UPDATE_SOURCE设置默认内部源。
sdk
- 下载并安装多版本 SDK 到
global.sdk_target,支持.part断点续传,并用独立的sdk.installed.json记录安装状态。 - 支持的安装目标格式为
name、name@latest、name:latest、name@1.22、name:1.22、name@1.22.0、name:1.22.0。刻意不支持go 1.22.0这种空格版本格式。 sdk install支持一次传入多个 SDK target,首版按顺序串行安装。sdk list读取 SDK 安装记录,可加--json输出 JSON。sdk remove <name@version>只删除 SDK 安装记录中存在、且通过 SDK 根目录安全校验的目录。sdk path <target>输出 SDK 路径;go、java等不带版本目标输出配置的 SDK 基础目录,go:1.20、go@1.21.5、java:17等带版本目标输出已安装版本目录。sdk index list/show/refresh/clear管理规范化后的 SDK 索引缓存 JSON。- 首版内置示例覆盖 Go 和 Node。其它 SDK 只要归档命名能用
url_template、filename_pattern、os_map、arch_map、ext_map和可选 HTML/JSON index 描述,也可以通过配置使用。
config(alias: cfg)
- 支持
init、list/ls、doctor、path [--check] [target]、get KEY、set KEY VALUE。 config path用于输出单个本地路径,方便脚本使用。支持的 target 有config_dir、config_file(默认)、env_file、bin_dir、cache_dir、sdk_dir、pkg_store_file、sdk_store_file。设置--check后输出格式为path, exists: bool。config doctor会输出本机 config/cache/store/install 相关路径、存在性、可写性,以及敏感配置是否已设置;不会打印 secret 原文。- 读取
eget.toml前会加载可选的~/.config/eget/.env,因此配置值可以继续写成github_token = "${GITHUB_TOKEN}"、[http_proxy].url = "${PROXY_URL}",敏感信息无需直接写进配置文件。
install、download、add 共享这些安装相关选项:
--tag: 指定发布版本标签;未提供时默认使用latest。--system: 指定目标系统与架构,例如windows/amd64、linux/arm64。--to: 指定安装或下载输出路径;可传目录,也可传完整文件路径。--file: 指定归档内要提取的文件;支持逗号分隔多个文件或 glob 模式,例如README.md,LICENSE。排除可用^,例如*.exe,^*x86*,^*.sig;只有排除项时(如^*.sig)表示匹配除被排除条目外的全部文件。使用REG:<expr>添加 Go 正则包含规则,使用^REG:<expr>添加正则排除规则;正则同时匹配规范化后的归档路径和 basename。对 7z 可读取的.exe安装包使用时,需要系统 7z。--asset: 指定资源过滤关键词;可用逗号分隔多个过滤条件。支持REG:前缀正则,例如REG:\\.deb$。支持PRE:和SUF:前缀/后缀匹配,例如PRE:codex或SUF:.zip。排除可用^,例如^REG:...或^SUF:.sha256。过滤条件可用 Go OS 前缀限定目标系统,例如windows:zip、linux:tar.gz、darwin:SUF:.zip;仅当当前--system的 OS 匹配时生效。--rename: 使用逗号分隔的from=to映射重命名解压文件,例如--rename "tool-windows-amd64.exe=tool.exe"。可配合--file和--extract-all使用,并会被install --add持久化。--source: 下载源码归档而不是预构建二进制。--extract-all,--ea: 提取归档中的全部文件,而不是只选择一个目标文件。--strip-components N: 解压全部文件时剥离归档内路径前N层,适用于归档内容被版本号顶层目录包裹的场景。--chunk N: 控制单个下载文件的 HTTP Range 分片并发。0表示自动,1表示单连接下载,大于1表示最多使用该数量的分片。--quiet: 精简常规输出;存在多个资源候选时自动选择第一项,适用于脚本或批处理场景。
install 和 download 还支持 GitHub 目标的 --prerelease / -p。使用默认 latest 时,会把预发布版本也纳入最新版本选择。
install 和 download 还支持 SourceForge 目标的 --fallback-versions N。当最新版本目录没有匹配资产时,eget 会最多扫描 N 个更旧版本目录,并使用第一个能被当前 --asset / --system 过滤条件唯一匹配的文件。
download 还支持对完整 GitHub release asset URL 使用 --ghproxy。它只会用 [ghproxy].host_url / fallbacks 重写 github.com 下载 URL,不会查询或重写 GitHub API 请求。
缓存目录请通过
config set global.cache_dir ...或配置文件中的cache_dir设置。
install 额外支持:
--add: 安装成功后,将 repo 目标追加到[packages.<name>]托管配置中。--all: 安装[packages]下配置的全部托管包;不能同时传入目标或--add。--batch N: 控制install --all的包任务并发。0表示自动,1表示串行,大于1表示最多同时处理该数量的包。--gui: 按 GUI 应用安装;配合--add时会持久化is_gui = true。未传--gui但确认启动疑似安装器时,配合--add也会持久化is_gui = true。--install-mode portable|installer: 覆盖本次 GUI 安装模式。默认情况下,--gui会把最终选中的.exe/.msi当作安装器;文件名包含portable时自动切换为免安装模式。--name: 指定托管包名;对于单文件可执行资产,也会作为默认输出文件名提示。
update 支持选项:
--all: 检查托管包,只更新已安装且有新版本的包。--self: 更新当前eget可执行文件,而不是普通托管包。- 单目标
update <target>要求目标已存在于 config 或 installed store;新目标请使用install。 --batch N: 控制update --all的包任务并发。0表示自动,1表示串行,大于1表示最多同时处理该数量的包。--chunk N: 控制 update 触发下载时的 HTTP Range 分片并发。--check: 检查并列出有新版本的已安装包,等同于list --outdated。如果提供 target,例如eget up --check markview jq,则只检查这些包。--dry-run: 仅预览更新计划,不执行实际安装。--interactive: 交互式选择要更新的托管包。
query 支持选项:
--action,-a: 查询动作,支持latest、releases、assets、info。--tag,-t: 为assets动作指定 release tag;不传时默认查询 latest。--limit,-l: 限制releases动作返回数量,默认10。--json,-j: 使用 JSON 输出结果,方便脚本处理。--prerelease,-p: 在latest/releases中包含预发布版本。
SourceForge 查询目标使用 sourceforge:<project>、sourceforge:<project>/<path>、sf:<project> 或 https://sourceforge.net/projects/winmerge 这类 SourceForge 项目 URL。目前支持 latest、releases 和 assets;info 仍仅适用于 GitHub。
search 支持选项:
--limit,-l: 限制返回的仓库数量,默认10。--sort: 指定搜索结果排序字段,支持stars、updated。--order: 指定排序方向,支持desc、asc。--json,-j: 使用 JSON 输出结果,方便脚本处理。
sdk 支持选项:
sdk install --force: 安全删除已有 SDK 目标目录后重新安装。sdk list --json: 用 JSON 输出 SDK 安装记录。sdk index list --json: 用 JSON 输出 SDK 索引缓存摘要。sdk index refresh --all: 刷新所有配置了index_url的 SDK 索引。sdk index clear --all: 删除全部 SDK 索引缓存 JSON。
全局选项:
-v,--verbose: 输出更详细的调试信息,例如请求的 API、响应摘要、asset 选择、缓存命中和关键流程节点。
说明:
install --name可用于指定单文件可执行资产的输出文件名,例如将chlog-windows-amd64.exe安装为chlog.exe。install --rename可在解压多个文件时只重命名指定文件;配置字段为rename_files,例如rename_files = { "codex-x86_64-pc-windows-msvc.exe" = "codex.exe" }。install --add仅对 repo 目标生效,并在安装成功后追加托管包配置。global.gui_target只用于免安装 GUI 应用。.msi、setup.exe等 GUI 安装器会被启动,但不会记录最终安装目录。对于文件名是产品/版本/平台格式而不是 setup 风格的.exe安装器,使用install_mode = "installer"。download默认保存原始下载文件;只有设置了--file或--extract-all才会自动提取归档内容。sdk使用global.sdk_target作为安装根目录,使用{cache_dir}/sdk-downloads保存 SDK 归档下载缓存;断点续传状态由.part和.meta.json维护。- 归档提取当前支持
zip、tar.*以及7z。当global.sys7z_path或PATH提供7z、7zz、7za时,.7z、.rar、.msi、.cab、.iso以及--extract-all的.exe会优先使用系统 7z;tar.*归档继续使用内置 Go 解压流程。 - 命令选项可以写在位置参数前后,例如
eget install --tag nightly owner/repo和eget install owner/repo --tag nightly等价。
配置文件位置按以下顺序解析:
EGET_CONFIG~/.config/eget/eget.toml- XDG / LocalAppData fallback 路径
- 旧路径
~/.eget.toml
配置同时支持:
[global][http_proxy]["owner/repo"][packages.<name>][pkg_templates.<name>][sdk.<name>]
最小示例:
[global]
target = "~/.local/bin"
cache_dir = "~/.cache/eget"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
sdk_target = "~/.local/sdks"
[http_proxy]
url = "http://127.0.0.1:7890"
exclude = []
[packages.markview]
repo = "inhere/markview"
tag = "nightly"
asset_filters = ["windows"]
rename_files = { "markview-windows-amd64.exe" = "markview.exe" }
[packages.markview_mirror]
repo = "template:markview"
latest_url = "https://example.com/tools/markview/latest.yaml"
latest_format = "yaml"
url_template = "https://example.com/tools/markview/markview-{version}-{os}-{arch}{ext}"
os_map = { windows = "windows", linux = "linux", darwin = "darwin" }
arch_map = { amd64 = "amd64", arm64 = "arm64" }
ext_map = { windows = ".zip", linux = ".tar.gz", darwin = ".tar.gz" }
extract_file = "markview"
[packages.claude]
repo = "template:claude"
latest_url = "https://downloads.claude.ai/claude-code-releases/latest"
latest_format = "text"
url_template = "https://downloads.claude.ai/claude-code-releases/{version}/{os}-{arch}{libc}/claude{ext}"
os_map = { windows = "win32", linux = "linux", darwin = "darwin" }
arch_map = { amd64 = "x64", arm64 = "arm64" }
ext_map = { windows = ".exe", linux = "", darwin = "" }
libc_map = { glibc = "", musl = "-musl" }
checksum_url_template = "https://downloads.claude.ai/claude-code-releases/{version}/manifest.json"
checksum_format = "json"
checksum_json_path = "platforms.{os}-{arch}{libc}.checksum"
install_action = "run-asset"
install_args = ["install", "latest"]
[pkg_templates.mydev]
latest_url = "http://mydev.lan/tools/{name}/latest.yaml"
url_template = "http://mydev.lan/tools/{name}/{name}-{os}-{arch}{ext}"
[packages.markview_internal]
repo = "pkg-template:mydev:markview"
[sdk.go]
aliases = ["golang"]
target = "gosdk/go{version}"
url_template = "https://mirrors.aliyun.com/golang/go{version}.{os}-{arch}.{ext}"
index_url = "https://mirrors.aliyun.com/golang/"
index_format = "html"
filename_pattern = "go{version}.{os}-{arch}.{ext}"
strip_components = 1
ext_map = { windows = "zip", linux = "tar.gz", darwin = "tar.gz" }
[sdk.node]
aliases = ["nodejs"]
target = "nodejs/node{version}"
url_template = "https://mirrors.aliyun.com/nodejs-release/v{version}/node-v{version}-{os}-{arch}.{ext}"
index_url = "https://mirrors.aliyun.com/nodejs-release/"
index_format = "html"
index_path_prefix = "/nodejs-release/"
filename_pattern = "node-v{version}-{os}-{arch}.{ext}"
strip_components = 1
os_map = { windows = "win", linux = "linux", darwin = "darwin" }
arch_map = { amd64 = "x64", arm64 = "arm64", 386 = "x86" }
ext_map = { windows = "zip", linux = "tar.xz", darwin = "tar.gz" }也可以通过内置模板快速写入 SDK 配置:
eget sdk config add --all
eget sdk config add --all --mirror mirror
eget sdk config add jdk --mirror zulu创建默认配置:
eget config init默认会写入 ~/.config/eget/eget.toml。
template:<id> 可用于独立下载站 package,例如 Claude Code 这种通过 latest metadata 和 URL 模板发布的工具。run-asset 只执行已下载并通过 checksum 校验的 asset,不是通用 post_install。如果多个内部工具使用同一发布规则,可以用 pkg_templates 复用配置,并直接运行 eget add mydev:markview 或 eget install mydev:markview。完整配置说明见 docs/config.zh-CN.md,包括全局字段、package 配置、Template Package Source、pkg_templates、SDK 配置、缓存目录、安装记录文件、ghproxy、API cache 和 SDK index 设置。SDK 专题使用说明见 docs/sdk-usage.md。
make build
make test当前版本已经重构为显式子命令 CLI,入口在 cmd/eget/main.go,业务逻辑集中在 internal/。
cmd/eget: 命令入口internal/cli:gcli命令注册与参数绑定internal/app: install/add/list/update/config 用例编排internal/install: 查找、下载、校验、提取执行链路internal/config: 配置加载、合并、写回internal/installed: 安装记录存储internal/sdk: SDK target 解析、索引缓存、断点续传、解压安装和 SDK 安装记录internal/source/github: GitHub 资源查找internal/source/forge: GitLab/Gitea/Forgejo 资源查找
更详细说明见 docs/architecture.md。