[package]
name = "vtcode"
version = "0.136.7"
edition = "2024"
rust-version = "1.93.0"
authors = ["Vinh Nguyen <vinhnguyen2308@gmail.com>"]
description = "A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers"
license = "MIT OR Apache-2.0"
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/",
"resources/",
]
default-run = "vtcode"
[lints]
workspace = true
[workspace.dependencies]
arboard = { version = "3.6.1", features = ["wayland-data-control"] }
base64 = "0.22.1"
crossterm = "0.29"
schemars = "1.2"
thiserror = "2.0.18"
unicode-width = "0.2.0"
vt100 = "0.16"
serde_json = "1.0"
tempfile = "3.27"
tokio = { version = "1.52", features = ["full"] }
anyhow = "1.0"
serde = { version = "1.0", features = ["derive", "rc"] }
regex = "1.12"
num_cpus = "1.16"
clap = { version = "4.6", features = ["derive"] }
clap_complete = "4.6"
libc = "0.2"
rand = "0.10"
semver = "1.0"
fs2 = "0.4"
hashbrown = { version = "0.17", features = ["serde"] }
image = { version = "0.25.10", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
rustc-hash = "2.1"
keyring-core = "1"
libloading = "0.9"
tracing = "0.1"
chrono = { version = "0.4", features = ["serde"] }
compact_str = { version = "0.9", features = ["serde"] }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }
assert_fs = "1.1"
futures = "0.3"
once_cell = "1.21"
indexmap = { version = "2.13", features = ["serde"] }
async-trait = "0.1.89"
anstyle = "1.0"
ratatui = { version = "=0.30.2", default-features = false, features = ["crossterm", "layout-cache"] }
ratatui-cheese = "0.7"
toml = "1.0.6"
sha2 = "0.11"
anstyle-git = "1.1"
tokio-util = "0.7"
tracing-subscriber = "0.3"
criterion = "0.8"
serde-saphyr = "0.0.28"
serial_test = "3.5"
dotenvy = "0.15"
strsim = "0.11"
dirs = "6.0"
smallvec = "1.13"
path-clean = "1.0"
shell-words = "1.1"
dialoguer = "0.12.0"
dunce = "1.0"
itertools = "0.15.0"
memchr = "2.8"
url = "2.5"
agent-client-protocol = { version = "=1.0.1", features = ["unstable_auth_methods"] }
uuid = "1.23.2"
ignore = "0.4"
ring = "0.17"
pretty_assertions = "1.4"
proc-macro2 = "1"
quote = "1"
syn = "2"
linkme = "0.3"
webbrowser = "1.2"
tiktoken = "3.5"
opentelemetry = { version = "0.32", default-features = false, features = ["trace", "metrics"] }
tracing-opentelemetry = "0.33"
vtcode-commons = { path = "crates/common/vtcode-commons", version = "0.136.7" }
vtcode-acp = { path = "crates/codegen/vtcode-acp", version = "0.136.7" }
vtcode-auth = { path = "crates/codegen/vtcode-auth", version = "0.136.7" }
vtcode-config = { path = "crates/codegen/vtcode-config", version = "0.136.7" }
vtcode-core = { path = "crates/codegen/vtcode-core", version = "0.136.7" }
vtcode-ui = { path = "crates/codegen/vtcode-ui", version = "0.136.7" }
vtcode-indexer = { path = "crates/codegen/vtcode-indexer", version = "0.136.7" }
vtcode-bash-runner = { path = "crates/codegen/vtcode-bash-runner", version = "0.136.7" }
vtcode-exec-events = { path = "crates/common/vtcode-exec-events", version = "0.136.7" }
vtcode-safety = { path = "crates/codegen/vtcode-safety", version = "0.136.7" }
vtcode-a2a = { path = "crates/codegen/vtcode-a2a", version = "0.136.7" }
vtcode-mcp = { path = "crates/codegen/vtcode-mcp", version = "0.136.7" }
vtcode-llm = { path = "crates/codegen/vtcode-llm", version = "0.136.7" }
vtcode-skills = { path = "crates/codegen/vtcode-skills", version = "0.136.7" }
vtcode-memory = { path = "crates/codegen/vtcode-memory", version = "0.136.7" }
vtcode-eval = { path = "crates/codegen/vtcode-eval", version = "0.136.7" }
vtcode-macros = { path = "crates/common/vtcode-macros", version = "0.136.7" }
vtcode-utility-tool-specs = { path = "crates/common/vtcode-utility-tool-specs", version = "0.136.7" }
[workspace.package]
version = "0.136.7"
edition = "2024"
rust-version = "1.93.0"
license = "MIT OR Apache-2.0"
readme = "README.md"
homepage = "https://github.com/vinhnx/vtcode"
repository = "https://github.com/vinhnx/vtcode"
documentation = "https://docs.rs/vtcode"
[workspace]
resolver = "3"
members = [
"crates/common/vtcode-commons",
"crates/common/vtcode-exec-events",
"crates/common/vtcode-macros",
"crates/common/vtcode-utility-tool-specs",
"crates/codegen/vtcode-acp",
"crates/codegen/vtcode-a2a",
"crates/codegen/vtcode-auth",
"crates/codegen/vtcode-bash-runner",
"crates/codegen/vtcode-config",
"crates/codegen/vtcode-core",
"crates/codegen/vtcode-eval",
"crates/codegen/vtcode-indexer",
"crates/codegen/vtcode-llm",
"crates/codegen/vtcode-mcp",
"crates/codegen/vtcode-safety",
"crates/codegen/vtcode-memory",
"crates/codegen/vtcode-skills",
"crates/codegen/vtcode-ui",
"crates/codegen/xtask",
]
default-members = [
".",
"crates/codegen/vtcode-core",
"crates/codegen/vtcode-ui",
]
exclude = [
"extensions/zed-extension",
"fuzz",
]
[patch.crates-io]
vtcode-commons = { path = "crates/common/vtcode-commons" }
vtcode-acp = { path = "crates/codegen/vtcode-acp" }
vtcode-auth = { path = "crates/codegen/vtcode-auth" }
vtcode-config = { path = "crates/codegen/vtcode-config" }
vtcode-core = { path = "crates/codegen/vtcode-core" }
vtcode-ui = { path = "crates/codegen/vtcode-ui" }
vtcode-indexer = { path = "crates/codegen/vtcode-indexer" }
vtcode-bash-runner = { path = "crates/codegen/vtcode-bash-runner" }
vtcode-exec-events = { path = "crates/common/vtcode-exec-events" }
vtcode-safety = { path = "crates/codegen/vtcode-safety" }
vtcode-a2a = { path = "crates/codegen/vtcode-a2a" }
vtcode-mcp = { path = "crates/codegen/vtcode-mcp" }
vtcode-llm = { path = "crates/codegen/vtcode-llm" }
vtcode-skills = { path = "crates/codegen/vtcode-skills" }
vtcode-memory = { path = "crates/codegen/vtcode-memory" }
vtcode-eval = { path = "crates/codegen/vtcode-eval" }
[workspace.lints]
rust.unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)', 'cfg(feature, values("schema", "default", "tui"))'] }
rust.unused_extern_crates = "warn"
rust.unused_import_braces = "warn"
rust.unused_qualifications = "warn"
rust.unused_results = "allow"
rust.trivial_numeric_casts = "warn"
rust.unsafe_code = "warn"
rust.unstable_features = "warn"
rust.missing_docs = "warn"
[workspace.lints.clippy]
string_slice = "allow"
indexing_slicing = "allow"
collapsible_if = "allow"
unwrap_used = "warn"
expect_used = "warn"
panic = "warn"
todo = "warn"
unimplemented = "warn"
unreachable = "warn"
get_unwrap = "warn"
unwrap_in_result = "allow"
unchecked_time_subtraction = "warn"
panic_in_result_fn = "allow"
let_underscore_future = "warn"
let_underscore_must_use = "allow"
unused_result_ok = "allow"
map_err_ignore = "warn"
assertions_on_result_states = "allow"
await_holding_lock = "warn"
await_holding_refcell_ref = "warn"
if_let_mutex = "warn"
large_futures = "warn"
mem_forget = "warn"
undocumented_unsafe_blocks = "warn"
multiple_unsafe_ops_per_block = "warn"
unnecessary_safety_doc = "warn"
unnecessary_safety_comment = "warn"
float_cmp = "warn"
float_cmp_const = "warn"
lossy_float_literal = "warn"
cast_sign_loss = "warn"
invalid_upcast_comparisons = "warn"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
rc_mutex = "warn"
debug_assert_with_mut_call = "warn"
iter_not_returning_iterator = "warn"
expl_impl_clone_on_copy = "warn"
fallible_impl_from = "warn"
dbg_macro = "warn"
allow_attributes = "allow"
allow_attributes_without_reason = "allow"
[dependencies]
vtcode-acp = { path = "crates/codegen/vtcode-acp", version = "0.136.7" }
vtcode-commons = { path = "crates/common/vtcode-commons", version = "0.136.7" }
vtcode-ui = { path = "crates/codegen/vtcode-ui", version = "0.136.7" }
vtcode-config = { path = "crates/codegen/vtcode-config", version = "0.136.7" }
vtcode-auth = { path = "crates/codegen/vtcode-auth", version = "0.136.7" }
vtcode-core = { path = "crates/codegen/vtcode-core", version = "0.136.7", default-features = false }
vtcode-memory = { path = "crates/codegen/vtcode-memory", version = "0.136.7" }
vtcode-eval = { path = "crates/codegen/vtcode-eval", version = "0.136.7" }
anyhow = { workspace = true }
clap = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
webbrowser = { workspace = true }
tokio-util = { workspace = true, features = ["compat"] }
serde = { workspace = true }
toml = { workspace = true }
futures = { workspace = true }
itertools = { workspace = true }
memchr = { workspace = true }
tempfile = { workspace = true }
once_cell = { workspace = true }
chrono = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true, features = ["env-filter"] }
async-trait = { workspace = true }
async-stream = "0.3"
dirs = { workspace = true }
nix = { version = "0.31", features = ["user", "process", "resource"] }
sha2 = { workspace = true }
anstyle = { workspace = true }
colorchoice = "1.0"
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 }
url = { workspace = true }
smallvec = "1.13"
self_update = { version = "0.43", default-features = false, features = ["archive-tar", "compression-flate2", "rustls", "reqwest"] }
reqwest = { workspace = true }
semver = { workspace = true }
thiserror = { workspace = true }
axum = { version = "0.8" }
serde-saphyr = { workspace = true }
mimalloc = { version = "0.1", default-features = false }
tikv-jemallocator = { version = "0.6", optional = true, features = ["background_threads"] }
[features]
default = ["tool-chat", "desktop-notifications"]
tool-chat = []
profiling = []
allocator-jemalloc = ["dep:tikv-jemallocator"]
anthropic-api = ["vtcode-core/anthropic-api"]
a2a-server = ["vtcode-core/a2a-server"]
desktop-notifications = ["vtcode-core/desktop-notifications"]
[[bench]]
name = "allocator_throughput"
harness = false
[profile.dev]
debug = 0
lto = false
incremental = false
opt-level = 0
codegen-units = 256
split-debuginfo = "unpacked"
[profile.test]
inherits = "dev"
overflow-checks = true
[profile.dev.build-override]
opt-level = 3
codegen-units = 16
[profile.dev.package."*"]
opt-level = 1
debug = false
[profile.dev-optimized]
inherits = "dev"
lto = "thin"
codegen-units = 1
opt-level = 2
[profile.dev-fast]
inherits = "dev"
opt-level = 1
lto = false
codegen-units = 16
[profile.release-fast]
inherits = "release"
lto = "thin"
codegen-units = 4
[profile.release-fast-windows]
inherits = "release-fast"
lto = "off"
codegen-units = 16
strip = true
[profile.release]
codegen-units = 1
lto = true
opt-level = 3
strip = true
panic = "abort"
debug-assertions = true
overflow-checks = true
incremental = false
[profile.ci]
inherits = "dev"
debug = 0
incremental = false
overflow-checks = false
[profile.bench]
codegen-units = 1
lto = true
opt-level = 3
debug = false
incremental = false
[profile.bloaty]
inherits = "release"
debug = true
strip = false
[profile.release-dist]
inherits = "release"
lto = "thin"
codegen-units = 1
strip = false
debug = 1
split-debuginfo = "off"
[profile.release-dist-jemalloc]
inherits = "release-dist"
[profile.x-prod]
inherits = "release"
lto = "thin"
strip = false
codegen-units = 1
debug = "line-tables-only"
panic = "unwind"
[[bin]]
name = "vtcode"
path = "src/main.rs"
[dev-dependencies]
criterion = { workspace = true }
pretty_assertions = { workspace = true }
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"
serial_test = { workspace = true }
[package.metadata.cargo-machete]
ignored = []
[package.metadata.unmaintained]
ignore = []
[package.metadata.docs.rs]
all-features = true
default-target = "x86_64-unknown-linux-gnu"
rustc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]