goose/Cargo.toml
Michael Neale 8207c547be feat: gate analyze (tree-sitter) and tiktoken behind default-on features
Both are pure data weight in the final binary: the nine tree-sitter
grammar state tables are ~14 MB and the tiktoken BPE vocab files ~8 MB
(tiktoken-rs include_str!s all four vocabs even though goose only uses
o200k_base). Together they are two thirds of a size-optimized
no-default-features binary (32 MB -> 14 MB measured on macOS arm64
with opt-level=z, fat LTO, panic=abort, strip).

- analyze: gates tree-sitter + grammars, the analyze platform
  extension, and the analyze_cli bin. Off = the analyze tools are
  simply not registered.
- tiktoken: gates tiktoken-rs. Off = TokenCounter estimates tokens
  from byte length (len/3, rounding up) — a mild over-estimate, which
  is the safe direction for the context-budget and compaction
  decisions TokenCounter feeds.

Both features are default-on in goose, goose-cli, and goose-server, so
normal builds are unchanged. Size-sensitive embedders (e.g. bundling a
stdio ACP agent) build with --no-default-features --features rustls-tls.
2026-07-06 09:40:14 -07:00

138 lines
8.1 KiB
TOML

[workspace]
members = [
"crates/*",
# Mainly for cargo-machete to not error out during inspection.
"vendor/v8",
]
resolver = "2"
[workspace.package]
edition = "2021"
version = "1.41.0"
rust-version = "1.91.1"
authors = ["AAIF <ai-oss-tools@block.xyz>"]
license = "Apache-2.0"
repository = "https://github.com/aaif-goose/goose"
description = "An AI agent"
[workspace.lints.clippy]
uninlined_format_args = "allow"
string_slice = "warn"
[workspace.dependencies]
rmcp = { version = "1.4", default-features = false, features = ["schemars", "auth"] }
agent-client-protocol-schema = { version = "1.1", default-features = false, features = ["unstable"] }
agent-client-protocol = { version = "1.0", default-features = false }
agent-client-protocol-http = { version = "1.0", default-features = false, features = ["server", "unstable_cancel_request"] }
arboard = { version = "3", default-features = false }
anyhow = { version = "1.0.102", default-features = false, features = ["std"] }
async-stream = { version = "0.3.6", default-features = false }
async-trait = { version = "0.1.89", default-features = false }
axum = { version = "0.8", default-features = false, features = ["http1", "http2", "json", "tokio", "query"] }
base64 = { version = "0.22.1", default-features = false, features = ["std"] }
bytes = { version = "1.10.1", default-features = false, features = ["std"] }
candle-core = { version = "0.11", default-features = false }
candle-nn = { version = "0.11", default-features = false }
chrono = { version = "0.4.44", default-features = false, features = ["serde", "std"] }
clap = { version = "4.1.14", default-features = false, features = ["derive", "std", "help", "suggestions", "usage", "color", "error-context"] }
dirs = { version = "6", default-features = false }
dotenvy = { version = "0.15.7", default-features = false }
env-lock = { version = "1", default-features = false }
etcetera = { version = "0.11", default-features = false }
fs2 = { version = "0.4", default-features = false }
futures = { version = "0.3.32", default-features = false, features = ["std"] }
http = { version = "1.1", default-features = false, features = ["std"] }
ignore = { version = "0.4.12", default-features = false }
include_dir = { version = "0.7", default-features = false }
indoc = { version = "2", default-features = false }
keyring = { version = "3.6.3", default-features = false, features = ["vendored"] }
lru = { version = "0.18", default-features = false }
once_cell = { version = "1.21.3", default-features = false, features = ["std"] }
rand = "0.10.1"
regex = { version = "1.12.3", default-features = false, features = ["std"] }
reqwest = { version = "0.13.2", default-features = false, features = ["multipart", "form"] }
rustls = { version = "0.23.31", default-features = false, features = ["aws_lc_rs", "std"] }
schemars = { version = "1.0.2", default-features = false, features = ["std"] }
serde = { version = "1.0.228", default-features = false, features = ["derive", "std"] }
serde_json = { version = "1.0.145", default-features = false, features = ["std"] }
serde_yaml = { version = "0.9.32", default-features = false }
shellexpand = { version = "3", default-features = false, features = ["base-0", "tilde"] }
strum = { version = "0.28.0", default-features = false, features = ["derive", "std"] }
tempfile = { version = "3.10.1", default-features = false }
thiserror = { version = "2.0.18", default-features = false }
tokio = { version = "1.48", default-features = false }
tokio-stream = { version = "0.1.16", default-features = false }
tokio-util = { version = "0.7.12", default-features = false }
tower-http = { version = "0.7.0", default-features = false }
tracing = { version = "0.1.43", default-features = false, features = ["std"] }
tracing-appender = { version = "0.2.1", default-features = false }
tracing-futures = { version = "0.2.4", default-features = false, features = ["futures-03", "std", "std-future"] }
tracing-subscriber = { version = "0.3.22", default-features = false, features = ["std"] }
urlencoding = { version = "2.1", default-features = false }
utoipa = { version = "4.2", default-features = false }
uuid = { version = "1.23", default-features = false, features = ["v4", "std"] }
webbrowser = { version = "1", default-features = false }
which = { version = "8", default-features = false, features = ["real-sys"] }
winapi = { version = "0.3.9", default-features = false, features = ["wincred", "std"] }
wiremock = { version = "0.6", default-features = false }
zip = { version = "8", default-features = false, features = ["deflate"] }
serial_test = { version = "3", default-features = false }
sha2 = { version = "0.11", default-features = false }
shell-words = { version = "1", default-features = false, features = ["std"] }
test-case = { version = "3", default-features = false }
url = { version = "2.5.4", default-features = false, features = ["std"] }
opentelemetry = { version = "0.32", default-features = false }
opentelemetry_sdk = { version = "0.32", default-features = false, features = ["metrics"] }
opentelemetry-http = { version = "0.32", default-features = false, features = ["internal-logs", "reqwest"] }
opentelemetry-otlp = { version = "0.32", default-features = false, features = ["http-proto", "internal-logs", "logs", "metrics", "reqwest-client", "trace"] }
opentelemetry-appender-tracing = { version = "0.32", default-features = false, features = ["experimental_span_attributes"] }
opentelemetry-stdout = { version = "0.32", default-features = false, features = ["trace", "metrics", "logs"] }
tracing-opentelemetry = { version = "0.33", default-features = false, features = ["metrics"] }
rayon = { version = "1.10", default-features = false }
tree-sitter = { version = "0.26", default-features = false, features = ["std"] }
tree-sitter-go = { version = "0.25", default-features = false }
tree-sitter-java = { version = "0.23", default-features = false }
tree-sitter-javascript = { version = "0.25", default-features = false }
tree-sitter-kotlin-ng = { version = "1", default-features = false }
tree-sitter-python = { version = "0.25", default-features = false }
tree-sitter-ruby = { version = "0.23", default-features = false }
tree-sitter-rust = { version = "0.24", default-features = false }
tree-sitter-swift = { version = "0.7", default-features = false }
tree-sitter-typescript = { version = "0.23", default-features = false }
# llama-cpp-2 doesn't pin the version of its sys crate, so we do it here. it also has breaking changes in patch releases, so we use an exact version pin
llama-cpp-2 = { version = "=0.1.146", default-features = false, features = ["sampler", "mtmd"] }
llama-cpp-sys-2 = { version = "=0.1.146", default-features = false }
# These are needed because temporal_rs 0.1 (a transitive dep via PCTX) enables unstable features on icu_calendar without pinning the dependency version
# A fix is available in temporal_rs 0.2 but PCTX has not updated
# They are just here to pin the version, and can be removed if PCTX updates temporal_rs
icu_calendar = { version = "=2.1.1", default-features = false }
icu_locale = { version = "=2.1.1", default-features = false }
[patch.crates-io]
v8 = { path = "vendor/v8" }
cudaforge = { git = "https://github.com/jbg/cudaforge", rev = "e7c1967340e40673db98dc9e17da0f04834a456f" }
# Dependencies don't need debug info. You rarely step-debug into third-party
# crates, but their DWARF dominates `target/debug` — roughly 50-70% of each
# dependency rlib in this workspace is debug info. Dropping it for dependencies
# only shrinks the debug build substantially and speeds linking. The "*" spec
# matches all dependencies but NOT workspace members, so first-party crates keep
# full debug info and stay fully debuggable; release builds are unaffected.
[profile.dev.package."*"]
debug = false
# Size-optimized release profile for shipping small binaries (e.g. a stdio
# ACP agent bundled into another app). Measured on macOS arm64: goose-cli
# with --no-default-features --features rustls-tls drops from 98 MB
# (release, stripped) to 43 MB. panic=abort is safe for the CLI (smoke
# tested); opt-in only — default release builds are unchanged.
[profile.release-small]
inherits = "release"
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true