[package]
edition = "2024"
name = "lha"
version = "1.0.6"
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Long-Horizon Agent command-line package that installs the lha binary."
homepage = "https://github.com/xuziqiang98/lha"
readme = "README.md"
license = "Apache-2.0"
repository = "https://github.com/xuziqiang98/lha"
resolver = "2"
[features]
cli = []
debug-logs = []
default = [
"cli",
"elapsed",
"sandbox_summary",
]
deterministic_process_ids = []
disable-default-metrics-exporter = []
elapsed = []
sandbox_summary = []
test-support = []
vt100-tests = []
[lib]
name = "lha_cli"
path = "src/lib.rs"
doctest = false
[[bin]]
name = "lha"
path = "src/main.rs"
[[test]]
name = "execpolicy"
path = "tests/execpolicy.rs"
[[test]]
name = "features"
path = "tests/features.rs"
[[test]]
name = "mcp_add_remove"
path = "tests/mcp_add_remove.rs"
[[test]]
name = "mcp_list"
path = "tests/mcp_list.rs"
[[test]]
name = "public_api"
path = "tests/public_api.rs"
[[test]]
name = "single_binary_compat"
path = "tests/single_binary_compat.rs"
[dependencies.ansi-to-tui]
version = "7.0.0"
[dependencies.anyhow]
version = "1"
[dependencies.arc-swap]
version = "1.8.0"
[dependencies.async-channel]
version = "2.3.1"
[dependencies.async-trait]
version = "0.1.89"
[dependencies.axum]
version = "0.8"
features = [
"http1",
"json",
"tokio",
]
default-features = false
[dependencies.base64]
version = "0.22.1"
[dependencies.bytes]
version = "1.10.1"
[dependencies.chardetng]
version = "0.1.17"
[dependencies.chrono]
version = "0.4.43"
features = ["serde"]
[dependencies.clap]
version = "4"
features = ["derive"]
[dependencies.clap_complete]
version = "4"
[dependencies.color-eyre]
version = "0.6.3"
[dependencies.crossbeam-channel]
version = "0.5.15"
[dependencies.crossterm]
version = "0.28.1"
features = [
"bracketed-paste",
"event-stream",
]
[dependencies.ctor]
version = "0.6.3"
[dependencies.derive_more]
version = "2"
features = ["is_variant"]
[dependencies.diffy]
version = "0.4.2"
[dependencies.dirs]
version = "6"
[dependencies.dirs-next]
version = "2.0"
[dependencies.dotenvy]
version = "0.15.7"
[dependencies.dunce]
version = "1.0.4"
[dependencies.encoding_rs]
version = "0.8.35"
[dependencies.env-flags]
version = "0.1.1"
[dependencies.eventsource-stream]
version = "0.2.3"
[dependencies.futures]
version = "0.3"
features = ["std"]
default-features = false
[dependencies.globset]
version = "0.4"
[dependencies.http]
version = "1.3.1"
[dependencies.icu_decimal]
version = "2.1"
[dependencies.icu_locale_core]
version = "2.1"
[dependencies.icu_provider]
version = "2.1"
features = [
"sync",
"sync",
]
[dependencies.ignore]
version = "0.4.23"
[dependencies.image]
version = "^0.25.9"
features = [
"jpeg",
"png",
]
default-features = false
[dependencies.include_dir]
version = "0.7.4"
[dependencies.indexmap]
version = "2.12.0"
[dependencies.indoc]
version = "2.0"
[dependencies.itertools]
version = "0.14.0"
[dependencies.jsonschema]
version = "0.33.0"
[dependencies.keyring]
version = "3.6"
features = ["crypto-rust"]
default-features = false
[dependencies.lazy_static]
version = "1"
[dependencies.lha-core]
version = "1.0.0"
[dependencies.lha-llm]
version = "1.0.1"
[dependencies.libc]
version = "0.2.177"
[dependencies.log]
version = "0.4"
[dependencies.lru]
version = "0.16.3"
[dependencies.maplit]
version = "1.0.2"
[dependencies.mime_guess]
version = "2.0.5"
[dependencies.multimap]
version = "0.10.0"
[dependencies.notify]
version = "8.2.0"
[dependencies.nucleo]
version = "0.5.0"
[dependencies.oauth2]
version = "5"
[dependencies.once_cell]
version = "1.20.2"
[dependencies.opentelemetry]
version = "0.31.0"
features = [
"logs",
"metrics",
"trace",
]
[dependencies.opentelemetry-appender-tracing]
version = "0.31.0"
[dependencies.opentelemetry-otlp]
version = "0.31.0"
features = [
"grpc-tonic",
"http-proto",
"http-json",
"logs",
"metrics",
"trace",
"reqwest-blocking-client",
"reqwest-rustls",
"tls",
"tls-roots",
]
[dependencies.opentelemetry-semantic-conventions]
version = "0.31.0"
[dependencies.opentelemetry_sdk]
version = "0.31.0"
features = [
"experimental_metrics_custom_reader",
"logs",
"metrics",
"rt-tokio",
"testing",
"trace",
]
[dependencies.os_info]
version = "3.12.0"
[dependencies.owo-colors]
version = "4.2.0"
[dependencies.path-absolutize]
version = "3.1.1"
[dependencies.pathdiff]
version = "0.2"
[dependencies.portable-pty]
version = "0.9.0"
[dependencies.pulldown-cmark]
version = "0.10"
[dependencies.rand]
version = "0.9"
[dependencies.rand08]
version = "0.8"
features = [
"std",
"small_rng",
]
default-features = false
package = "rand"
[dependencies.ratatui]
version = "0.29.0"
features = [
"scrolling-regions",
"unstable-backend-writer",
"unstable-rendered-line-info",
"unstable-widget-ref",
]
[dependencies.ratatui-macros]
version = "0.6.0"
[dependencies.regex]
version = "1.12.2"
[dependencies.regex-lite]
version = "0.1.8"
[dependencies.reqwest]
version = "0.12"
features = [
"blocking",
"json",
"multipart",
"rustls-tls",
"stream",
]
[dependencies.rmcp]
version = "0.12.0"
features = [
"auth",
"base64",
"client",
"macros",
"schemars",
"server",
"transport-child-process",
"transport-streamable-http-client-reqwest",
"transport-streamable-http-server",
]
default-features = false
[dependencies.schemars]
version = "0.8.22"
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
features = ["preserve_order"]
[dependencies.serde_path_to_error]
version = "0.1.20"
[dependencies.serde_with]
version = "3.16"
features = ["base64"]
[dependencies.serde_yaml]
version = "0.9"
[dependencies.sha1]
version = "0.10.6"
[dependencies.sha2]
version = "0.10"
[dependencies.shlex]
version = "1.3.0"
[dependencies.similar]
version = "2.7.0"
[dependencies.sqlx]
version = "0.8.6"
features = [
"chrono",
"json",
"macros",
"migrate",
"runtime-tokio-rustls",
"sqlite",
"time",
"uuid",
]
default-features = false
[dependencies.starlark]
version = "0.13.0"
[dependencies.strum]
version = "0.27.2"
[dependencies.strum_macros]
version = "0.27.2"
[dependencies.supports-color]
version = "3.0.2"
[dependencies.sys-locale]
version = "0.3.2"
[dependencies.tempfile]
version = "3.23.0"
[dependencies.test-case]
version = "3.3.1"
[dependencies.test-log]
version = "0.2.19"
[dependencies.textwrap]
version = "0.16.2"
[dependencies.thiserror]
version = "2.0.17"
[dependencies.time]
version = "0.3"
features = [
"formatting",
"parsing",
"local-offset",
"macros",
]
[dependencies.tiny_http]
version = "0.12"
[dependencies.tokio]
version = "1"
features = [
"io-std",
"io-util",
"macros",
"process",
"rt-multi-thread",
"signal",
"sync",
"test-util",
"time",
]
[dependencies.tokio-stream]
version = "0.1.18"
features = ["sync"]
[dependencies.tokio-tungstenite]
version = "0.28.0"
features = ["rustls-tls-native-roots"]
[dependencies.tokio-util]
version = "0.7.18"
features = [
"rt",
"time",
]
[dependencies.toml]
version = "0.9.5"
[dependencies.toml_edit]
version = "0.24.0"
[dependencies.tracing]
version = "0.1.44"
features = ["log"]
[dependencies.tracing-appender]
version = "0.2.3"
[dependencies.tracing-opentelemetry]
version = "0.32.0"
[dependencies.tracing-subscriber]
version = "0.3.22"
features = ["env-filter"]
[dependencies.tree-sitter]
version = "0.25.10"
[dependencies.tree-sitter-bash]
version = "0.25"
[dependencies.tree-sitter-highlight]
version = "0.25.10"
[dependencies.ts-rs]
version = "11"
features = [
"uuid-impl",
"serde-json-impl",
"no-serde-warnings",
]
[dependencies.unicode-segmentation]
version = "1.12.0"
[dependencies.unicode-width]
version = "=0.2.0"
[dependencies.url]
version = "2"
[dependencies.urlencoding]
version = "2.1"
[dependencies.uuid]
version = "1"
features = [
"serde",
"v4",
"v5",
"v7",
]
[dependencies.walkdir]
version = "2.5.0"
[dependencies.webbrowser]
version = "1.0"
[dependencies.which]
version = "8"
[dependencies.wildmatch]
version = "2.6.1"
[dependencies.wiremock]
version = "0.6"
[dependencies.zeroize]
version = "1.8.2"
[dependencies.zstd]
version = "0.13"
[dev-dependencies.assert_cmd]
version = "2"
[dev-dependencies.assert_matches]
version = "1.5.0"
[dev-dependencies.insta]
version = "1.46.0"
[dev-dependencies.predicates]
version = "3"
[dev-dependencies.pretty_assertions]
version = "1.4.1"
[dev-dependencies.serial_test]
version = "3.2.0"
[dev-dependencies.tokio-test]
version = "0.4"
[dev-dependencies.tracing-test]
version = "0.2.5"
features = ["no-env-filter"]
[dev-dependencies.vt100]
version = "0.15.2"
[build-dependencies.winres]
version = "0.1"
[target.aarch64-unknown-linux-musl.dependencies.openssl-sys]
version = "0.9"
features = ["vendored"]
[target.'cfg(any(target_os = "freebsd", target_os = "openbsd"))'.dependencies.keyring]
version = "3.6"
features = ["sync-secret-service"]
default-features = false
[target.'cfg(not(target_os = "android"))'.dependencies.arboard]
version = "3"
features = ["wayland-data-control"]
[target.'cfg(target_os = "linux")'.dependencies.keyring]
version = "3.6"
features = ["linux-native-async-persistent"]
default-features = false
[target.'cfg(target_os = "linux")'.dependencies.landlock]
version = "0.4.4"
[target.'cfg(target_os = "linux")'.dependencies.seccompiler]
version = "0.5.0"
[target.'cfg(target_os = "macos")'.dependencies.core-foundation]
version = "0.9"
[target.'cfg(target_os = "macos")'.dependencies.keyring]
version = "3.6"
features = ["apple-native"]
default-features = false
[target.'cfg(target_os = "windows")'.dependencies.keyring]
version = "3.6"
features = ["windows-native"]
default-features = false
[target.'cfg(target_os = "windows")'.dependencies.which]
version = "8"
[target.'cfg(target_os = "windows")'.dependencies.windows]
version = "0.58"
features = [
"Win32_Foundation",
"Win32_NetworkManagement_WindowsFirewall",
"Win32_System_Com",
"Win32_System_Variant",
]
[target.'cfg(target_os = "windows")'.dependencies.windows-sys]
version = "0.52"
features = [
"Win32_Foundation",
"Win32_System_Console",
"Win32_System_Diagnostics_Debug",
"Win32_Security",
"Win32_Security_Authorization",
"Win32_System_Threading",
"Win32_System_JobObjects",
"Win32_System_SystemServices",
"Win32_System_Environment",
"Win32_System_Pipes",
"Win32_System_WindowsProgramming",
"Win32_System_IO",
"Win32_System_Memory",
"Win32_System_Kernel",
"Win32_Storage_FileSystem",
"Win32_System_Diagnostics_ToolHelp",
"Win32_NetworkManagement_NetManagement",
"Win32_Networking_WinSock",
"Win32_System_LibraryLoader",
"Win32_System_Com",
"Win32_Security_Cryptography",
"Win32_Security_Authentication_Identity",
"Win32_UI_Shell",
"Win32_System_Registry",
]
[target.'cfg(target_os = "windows")'.dependencies.winsplit]
version = "0.1"
[target.x86_64-unknown-linux-musl.dependencies.openssl-sys]
version = "0.9"
features = ["vendored"]
[lints.clippy]
expect_used = "deny"
identity_op = "deny"
manual_clamp = "deny"
manual_filter = "deny"
manual_find = "deny"
manual_flatten = "deny"
manual_map = "deny"
manual_memcpy = "deny"
manual_non_exhaustive = "deny"
manual_ok_or = "deny"
manual_range_contains = "deny"
manual_retain = "deny"
manual_strip = "deny"
manual_try_fold = "deny"
manual_unwrap_or = "deny"
needless_borrow = "deny"
needless_borrowed_reference = "deny"
needless_collect = "deny"
needless_late_init = "deny"
needless_option_as_deref = "deny"
needless_question_mark = "deny"
needless_update = "deny"
redundant_clone = "deny"
redundant_closure = "deny"
redundant_closure_for_method_calls = "deny"
redundant_static_lifetimes = "deny"
trivially_copy_pass_by_ref = "deny"
uninlined_format_args = "deny"
unnecessary_filter_map = "deny"
unnecessary_lazy_evaluations = "deny"
unnecessary_sort_by = "deny"
unnecessary_to_owned = "deny"
unwrap_used = "deny"
[lints.rust]