# bot-forge builtin Rust development catalog
versions = { rust = "1.89.0" }
environment = { paths = { managed-bin = "$BOT_FORGE_HOME/bin" }, mutations = [{ id = "node-bin", kind = "path-prepend", value = "$BOT_FORGE_HOME/node/bin", scope = "user", platforms = ["linux-*"] }, { id = "node-bin-windows", kind = "path-prepend", value = "$BOT_FORGE_HOME/node", scope = "user", platforms = ["windows-*"] }, { id = "cargo-bin", kind = "path-prepend", value = "$HOME/.cargo/bin", scope = "user", platforms = ["linux-*", "windows-*", "macos-*"] }, { id = "python-bin-windows", kind = "path-prepend", value = "$HOME/AppData/Local/Programs/Python/Python312", scope = "user", platforms = ["windows-*"] }, { id = "python-scripts-windows", kind = "path-prepend", value = "$HOME/AppData/Local/Programs/Python/Python312/Scripts", scope = "user", platforms = ["windows-*"] }, { id = "uv-bin", kind = "path-prepend", value = "$BOT_FORGE_HOME/python-tools/uv/bin", scope = "user", platforms = ["linux-*", "macos-*"] }, { id = "uv-bin-windows", kind = "path-prepend", value = "$BOT_FORGE_HOME/python-tools/uv/Scripts", scope = "user", platforms = ["windows-*"] }] }
[groups]
daily-development = [
"git",
"cmake",
"ninja",
"python",
"llvm-toolchain",
"rust-analyzer",
"rust-src",
"miri",
"cargo-fuzz",
"nodejs",
"tsx",
"openspec",
]
quality-checks = [
"cargo-expand",
"cargo-nextest",
"cargo-audit",
"cargo-deny",
"cargo-geiger",
"cargo-llvm-cov",
"bot-gate",
"bot-metric",
"cargo-valgrind",
]
advanced-analysis = ["bindgen-cli"]
developer-automation = ["uv", "project-brain", "gitnexus"]
[profiles]
minimal = { components = ["rust-build-base", "rust-toolchain", "rust-bot"] }
standard = { inherits = ["minimal"], components = ["group:daily-development", "group:quality-checks"] }
advanced = { inherits = ["standard"], components = ["group:advanced-analysis", "group:developer-automation"] }
[package-tools]
rust-build-base = { detect = ["dpkg", "-s", "build-essential", "pkg-config", "libssl-dev"], apt = ["build-essential", "pkg-config", "libssl-dev"], apt_update = true, provides = ["rust-build-base"], winget = "Microsoft.VisualStudio.2022.BuildTools", winget_detect = ["winget", "list", "--exact", "--id", "Microsoft.VisualStudio.2022.BuildTools"], winget_arguments = ["--override", "--quiet --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"], brew = ["pkgconf", "openssl@3"], brew_detect = [["xcrun", "--find", "clang"], ["brew", "list", "--versions", "pkgconf", "openssl@3"]] }
python = { detect = ["python3", "-c", "import sys, pip; print(sys.version.split()[0]); raise SystemExit(0 if sys.version_info >= (3, 11) else 1)"], apt = ["python3", "python3-pip", "python3-venv"], winget = "Python.Python.3.12", winget_detect = ["python", "-c", "import sys, pip; print(sys.version.split()[0]); raise SystemExit(0 if sys.version_info >= (3, 11) else 1)"], brew = ["python@3.12"] }
git = { detect = ["git", "--version"], apt = ["git"], apt_update = true, winget = "Git.Git", brew = ["git"] }
cmake = { detect = ["cmake", "--version"], apt = ["cmake"], apt_update = true, winget = "Kitware.CMake", brew = ["cmake"] }
ninja = { detect = ["ninja", "--version"], apt = ["ninja-build"], winget = "Ninja-build.Ninja", brew = ["ninja"] }
valgrind = { detect = ["valgrind", "--version"], apt = ["valgrind"] }
llvm-toolchain = { detect = ["dpkg", "-s", "clang", "llvm", "libclang-dev", "binutils"], apt = ["clang", "llvm", "libclang-dev", "binutils"], apt_update = true, winget = "LLVM.LLVM", winget_detect = [["where", "clang"], ["where", "llvm-nm"], ["where", "llvm-config"], ["where", "libclang.dll"]], brew = ["llvm"], brew_detect = ["brew", "list", "--versions", "llvm"] }
[rustup-tools]
rust-analyzer = "rust-analyzer"
rust-toolchain = { requires = ["capability:rust-build-base"], provides = ["cargo", "rustup"], detect = [["rustc", "+1.89.0", "--version"], ["cargo", "+1.89.0", "--version"], ["rustfmt", "+1.89.0", "--version"], ["cargo", "+1.89.0", "clippy", "--version"]], toolchain-ref = "rust", components = ["rustfmt", "clippy"], default = true, bootstrap = { url = "https://static.rust-lang.org/rustup/archive/1.28.2/{target}/rustup-init{exe}", sha256 = { linux-x86_64-gnu = "20a06e644b0d9bd2fbdbfd52d42540bdde820ea7df86e92e533c073da0cdd43c", linux-aarch64-gnu = "e3853c5a252fca15252d07cb23a1bdd9377a8c6f3efa01531109281ae47f841c", windows-x86_64-msvc = "88d8258dcf6ae4f7a80c7d1088e1f36fa7025a1cfd1343731b4ee6f385121fc0", windows-aarch64-msvc = "de9f7d29ccd39efa59a3dda3ec363b396e09b92681229b9b8f6aaa4c84285e9c", macos-x86_64 = "71c3d31f59109831012c6e1c71a4f0f6f9a207efe8256f46bccb74d756e8960e", macos-aarch64 = "dc09f17d99c16582821598c68f1198c7e249a9d7df14e01809e892dc0e8cc761" } } }
llvm-tools-preview = { components = ["llvm-tools-preview"], toolchain-ref = "rust", detect = ["rustup", "component", "list", "--installed", "--toolchain", "1.89.0"], detect-stdout-contains = "llvm-tools" }
rust-src = { components = ["rust-src"], toolchain = "nightly", detect = ["rustup", "component", "list", "--installed", "--toolchain", "nightly"], detect-stdout-contains = "rust-src" }
miri = { components = ["miri"], toolchain = "nightly", requires = ["rust-src"], detect = ["cargo", "+nightly", "miri", "--version"] }
[cargo-tools]
cargo-audit = { version = "0.22.2", toolchain = "1.89.0" }
cargo-deny = { version = "0.20.2", toolchain = "1.89.0" }
cargo-geiger = { version = "0.13.0", toolchain = "1.89.0" }
cargo-expand = { version = "1.0.126", toolchain = "1.89.0" }
cargo-fuzz = { version = "0.13.1", toolchain = "1.89.0" }
cargo-nextest = { version = "0.9.120", toolchain = "1.89.0" }
cargo-llvm-cov = { version = "0.9.0", toolchain = "1.89.0", requires = ["llvm-tools-preview"] }
bot-gate = { version = "1.2.1", toolchain = "1.89.0" }
bot-metric = { version = "1.2.0", toolchain = "1.89.0" }
bot-compass = { version = "1.0.0", toolchain = "1.89.0", source = "https://gitcode.com/xuanwu/bot-compass.git", revision = "6916eabc4e0c57d3fcdacb25fc092cb63bcbcdbf", requires = ["git"] }
rust-bot = { version = "2.0.0", crate = "rust-bot", bin = "rust-bot", detect = ["rust-bot", "--version"], toolchain = "1.89.0" }
# --version is forwarded to Cargo; --help reports cargo-valgrind's own version.
cargo-valgrind = { version = "2.4.1", toolchain = "1.89.0", detect = ["cargo", "valgrind", "--help"], platforms = ["linux-*"], requires = ["valgrind"] }
bindgen-cli = { version = "0.72.1", toolchain = "1.89.0", bin = "bindgen" }
[[components]]
id = "uv"
requires = ["python"]
provides = ["uv"]
detect = { kind = "command", program = "uv", args = ["--version"] }
install = { backend = "pip", package = "uv", version = "0.12.3", python = "python3", environment = "$BOT_FORGE_HOME/python-tools/uv" }
[[components.variants]]
id = "windows-python"
platforms = ["windows-*"]
install = { backend = "pip", package = "uv", version = "0.12.3", python = "python", environment = "$BOT_FORGE_HOME/python-tools/uv" }
[[components]]
id = "project-brain"
requires = ["capability:uv", "git"]
detect = { kind = "command", program = "project-brain", args = ["--version"] }
install = { backend = "uv-tool", package = "git+https://gitcode.com/xuanwu/project-brain.git", bins = ["project-brain"], force = true }
[[components]]
id = "nodejs"
version = "22.22.0"
platforms = ["linux-x86_64-gnu"]
detect = { kind = "command", program = "node", args = ["--version"] }
install = { backend = "archive", url = "https://nodejs.org/dist/v22.22.0/node-v22.22.0-linux-x64.tar.xz", sha256 = "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37", format = "tar_xz", target = "$BOT_FORGE_HOME/node", strip_components = 1, allow_links = true }
[[components.variants]]
id = "linux-aarch64"
platforms = ["linux-aarch64-gnu"]
install = { backend = "archive", url = "https://nodejs.org/dist/v22.22.0/node-v22.22.0-linux-arm64.tar.xz", sha256 = "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f", format = "tar_xz", target = "$BOT_FORGE_HOME/node", strip_components = 1, allow_links = true }
[[components.variants]]
id = "macos-brew"
platforms = ["macos-*"]
install = { backend = "brew", formulae = ["node"] }
[[components.variants]]
id = "windows-x86-64"
platforms = ["windows-x86_64-msvc"]
install = { backend = "archive", url = "https://nodejs.org/dist/v22.22.0/node-v22.22.0-win-x64.zip", sha256 = "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a", format = "zip", target = "$BOT_FORGE_HOME/node", strip_components = 1 }
[[components.variants]]
id = "windows-aarch64"
platforms = ["windows-aarch64-msvc"]
install = { backend = "archive", url = "https://nodejs.org/dist/v22.22.0/node-v22.22.0-win-arm64.zip", sha256 = "5b44fd410df7b4cd0a1891a05a7b606f8fb7d8786a94997b996a372e82478d7a", format = "zip", target = "$BOT_FORGE_HOME/node", strip_components = 1 }
[[components]]
id = "gitnexus"
requires = ["nodejs"]
detect = { kind = "command", program = "gitnexus", args = ["--version"] }
install = { backend = "npm", package = "gitnexus", version = "1.6.8" }
[[components]]
id = "tsx"
requires = ["nodejs"]
detect = { kind = "command", program = "tsx", args = ["--version"] }
install = { backend = "npm", package = "tsx", version = "4.23.5" }
[[components]]
id = "openspec"
requires = ["nodejs"]
detect = { kind = "command", program = "openspec", args = ["--version"] }
install = { backend = "npm", package = "@fission-ai/openspec", version = "1.8.0" }