vtcode 0.88.0

A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers
[package]
name = "vtcode"
version = "0.88.0"
edition = "2024"
rust-version = "1.88"
authors = ["Vinh Nguyen <vinhnguyen2308@gmail.com>"]
description = "A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers"
license = "MIT"
readme = "README.md"
homepage = "https://github.com/vinhnx/vtcode"
repository = "https://github.com/vinhnx/vtcode"
documentation = "https://docs.rs/vtcode"
keywords = ["ai", "coding", "agent", "llm", "cli"]
categories = ["command-line-utilities", "development-tools", "api-bindings"]
exclude = [
    "target/",
    ".github/",
    "docs/**",
    "!docs/config/CONFIG_FIELD_REFERENCE.md",
    "scripts/",
    "screenshots/",
    "logs/",
    "prompts/",
    "dist/",
    "npm/",
    "vtcode-core/embedded_assets_source/",
    "resources/",
]
default-run = "vtcode"

# Override sections to consolidate duplicate dependencies
[workspace.dependencies]
base64 = "0.22.1"
crossterm = "0.29"
schemars = "1.2"
thiserror = "2.0.18"
unicode-width = "0.2.0"
serde_json = "1.0"
tempfile = "3.25"
tokio = { version = "1.49", features = ["full"] }
anyhow = "1.0"
serde = { version = "1.0", features = ["derive"] }
regex = "1.12"
num_cpus = "1.16"
clap = { version = "4.5", features = ["derive"] }
pretty_assertions = "1.4"
libc = "0.2"
rand = "0.10"
semver = "1.0"
fs2 = "0.4"
mimalloc = { version = "0.1", default-features = false }
hashbrown = { version = "0.15", features = ["serde"] }
rustc-hash = "2.1"
keyring = "3"
libloading = "0.8"
tracing = "0.1"
chrono = { version = "0.4", features = ["serde"] }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }
assert_fs = "1.1"
futures = "0.3"
once_cell = "1.19"
indexmap = { version = "2.13", features = ["serde"] }
async-trait = "0.1.89"
anstyle = "1.0"
ratatui = { version = "0.30", default-features = false, features = ["crossterm"] }
toml = "0.9.11"
sha2 = "0.10"
anstyle-git = "1.1"
tokio-util = "0.7"
tracing-subscriber = "0.3"
criterion = "0.8"
serde_yaml = "0.9"
serial_test = "3.4"
dotenvy = "0.15"
dirs = "6.0"
anstyle-crossterm = "4.0"
path-clean = "1.0"
shell-words = "1.1"
dialoguer = "0.12.0"
walkdir = "2.5"
itertools = "0.14.0"
memchr = "2.7"
url = "2.5"
agent-client-protocol = "0.9.4"
uuid = "1.21.0"
ignore = "0.4"
ring = "0.17"

[workspace.package]
version = "0.88.0"
edition = "2024"
license = "MIT"

[workspace]
resolver = "2"
members = [
    "vtcode-acp",
    "vtcode-acp-client",
    "vtcode-core",
    "vtcode-tui",
    "vtcode-commons",
    "vtcode-config",
    "vtcode-llm",
    "vtcode-lmstudio",
    "vtcode-markdown-store",
    "vtcode-indexer",
    "vtcode-tools",
    "vtcode-bash-runner",
    "vtcode-exec-events",
    "vtcode-file-search",
]
default-members = [".", "vtcode-core", "vtcode-tui"]
exclude = ["zed-extension", "vtcode-process-hardening"]

[patch.crates-io]
vtcode-commons = { path = "vtcode-commons" }
vtcode-markdown-store = { path = "vtcode-markdown-store" }
vtcode-indexer = { path = "vtcode-indexer" }
vtcode-bash-runner = { path = "vtcode-bash-runner" }
vtcode-exec-events = { path = "vtcode-exec-events" }
vtcode-file-search = { path = "vtcode-file-search" }

[workspace.lints]
# Rust compiler lints
rust.unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] }
rust.unused_extern_crates = "warn"
rust.unused_import_braces = "warn"
rust.unused_qualifications = "warn"
rust.unused_results = "allow"  # Too verbose for development
rust.trivial_numeric_casts = "warn"
rust.unsafe_code = "warn"
rust.unstable_features = "warn"

[workspace.lints.clippy]
# Refined lint profile aligned with current clippy/rustc versions.
# Keep high-value correctness and safety checks strict, avoid obsolete lint names.
dbg_macro = "warn"
todo = "warn"

# Unsafe hygiene: unsafe remains visible and requires explicit rationale.
undocumented_unsafe_blocks = "warn"
multiple_unsafe_ops_per_block = "warn"


[dependencies]
vtcode-acp = { path = "vtcode-acp", version = "0.88.0" }
vtcode-commons = { path = "vtcode-commons", version = "0.88.0" }
vtcode-config = { path = "vtcode-config", version = "0.88.0" }
vtcode-core = { path = "vtcode-core", version = "0.88.0", default-features = false }
vtcode-tui = { path = "vtcode-tui", version = "0.88.0" }
anyhow = { workspace = true }
clap = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
webbrowser = "1.0"
notify = "6.1.1" # For file watching functionality
home = "0.5.9"   # For home directory detection
tokio-util = { workspace = true, features = ["compat"] }
serde = { workspace = true }
toml = { workspace = true }
futures = { workspace = true }
walkdir = { workspace = true }
itertools = { workspace = true }
memchr = { workspace = true }
mimalloc = { workspace = true }
tempfile = { workspace = true }
once_cell = { workspace = true }
libc = { workspace = true }
chrono = { workspace = true } # For timestamp handling in CLI
path-clean = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true, features = ["env-filter"] }
async-trait = { workspace = true }
# Environment helpers
dotenvy = { workspace = true }
# Home directory detection
dirs = { workspace = true }
# Hashing for large output file paths
sha2 = { workspace = true }
# ANSI styling
anstyle = { workspace = true }
anstyle-git = { workspace = true }
anstyle-crossterm = { workspace = true }
colorchoice = "1.0"
agent-client-protocol = { workspace = true }
percent-encoding = "2.3"
url = { workspace = true }
shell-words = { workspace = true }
dialoguer = { workspace = true }
crossterm = { workspace = true }
hashbrown = { workspace = true }
ratatui = { workspace = true }
regex = { workspace = true }
rustc-hash = { workspace = true }
unicode-width = { workspace = true }
smallvec = "1.13"
self_update = { version = "0.42", default-features = false, features = ["archive-tar", "compression-flate2", "rustls"] }
reqwest = { workspace = true }
semver = { workspace = true }
thiserror = { workspace = true }
axum = { version = "0.8", optional = true }
zip = { version = "8.1", default-features = false, features = ["deflate"] }

[features]
default = ["tool-chat", "a2a-server"]
tool-chat = []
profiling = []                            # Enable tracing instrumentation for performance profiling
anthropic-api = ["vtcode-core/anthropic-api", "dep:axum"]
a2a-server = ["vtcode-core/a2a-server"]   # Enable OAuth callback server for provider authentication
desktop-notifications = ["vtcode-core/desktop-notifications"]

[profile.dev]
debug = 0
lto = false
# incremental = false required for sccache; set CARGO_INCREMENTAL=1 to override for rapid iteration
incremental = false
opt-level = 0
# Split debuginfo for faster incremental builds (when CARGO_INCREMENTAL=1)
split-debuginfo = "unpacked"

[profile.test]
inherits = "dev"

# Optimize build dependencies for faster proc-macro execution
[profile.dev.build-override]
opt-level = 3
codegen-units = 16

# Optimize dependencies slightly (they're cached anyway)
[profile.dev.package."*"]
opt-level = 1
debug = false

[profile.dev-optimized]
inherits = "dev"
lto = "thin"
codegen-units = 1
opt-level = 2

# Fast release profile - thin LTO for ~50% faster builds than full LTO
[profile.release-fast]
inherits = "release"
lto = "thin"
codegen-units = 4

[profile.release]
codegen-units = 1 # Allows compiler to perform better optimization.
lto = true        # Enables Link-time Optimization for better performance and size reduction.
opt-level = 3     # Optimize for performance on M4 (was "s" for size)
strip = true      # Ensures debug symbols are removed.
panic = "abort"   # Reduce size of panic paths.
# Additional performance optimizations:
incremental = false # Disable incremental compilation for better optimization

# CI-specific profile for faster builds with minimal debug info
[profile.ci]
inherits = "dev"
# Copy settings from dev profile but with minimal debug info
debug = 0
incremental = false
overflow-checks = false

[profile.bench]
# Optimize benchmarks for accurate performance measurement
codegen-units = 1
lto = true
opt-level = 3
debug = false
incremental = false

# Profile for bloaty analysis - optimized but with debug info
[profile.bloaty]
inherits = "release"
debug = true
strip = false



[[bin]]
name = "vtcode"
path = "src/main.rs"

[dev-dependencies]
tempfile = { workspace = true }
assert_fs = { workspace = true }
indexmap = { workspace = true }
rand = "0.9"
regex = { workspace = true }
assert_cmd = "2.1"
predicates = "3.1"
insta = "1.39"

[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.61", features = [
    "Win32_Foundation",
    "Win32_System_SystemServices",
    "Win32_System_Threading",
] }

[package.metadata.cargo-machete]
ignored = ["anstyle-crossterm"]

[package.metadata.unmaintained]
# Ignore known unmaintained packages (add packages as needed)
# Example: ignore = ["some-crate"]
ignore = []

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]