[package] name = "buzz-agent" version.workspace = true edition.workspace = true rust-version.workspace = true license.workspace = true repository.workspace = true description = "Minimal, unbreakable ACP-compliant agent. Non-streaming. Tool-calls-as-output." readme = "README.md" keywords = ["acp", "agent", "llm", "mcp", "minimal"] categories = ["command-line-utilities", "web-programming"] [lib] name = "buzz_agent" path = "src/lib.rs" [[bin]] name = "buzz-agent" path = "src/main.rs" # Test-only fake MCP server. Built unconditionally because cargo can't gate # bins on `cfg(test)`, but it's tiny and only used by integration tests. [[bin]] name = "fake-mcp" path = "tests/bin/fake_mcp.rs" # Test-only lock holder: a real second process that takes the coordinator's # cross-process advisory lock, so the auth tests can prove genuine # inter-process single-flight and crash-release rather than same-process # handles. Tiny; only used by the databricks auth integration tests. [[bin]] name = "lock-holder" path = "tests/bin/lock_holder.rs" # Test-only auth worker: a real second process that runs the PUBLIC auth # coordinator API (`acquire_with_intent`) with a scripted browser opener and a # shared temp cache, so the auth tests can prove the cross-process single-flight # contract end-to-end — durable cooldown sharing and one-grant/one-cache races # across a genuine process boundary, not two in-process handles. Only used by # the databricks auth integration tests. [[bin]] name = "auth-worker" path = "tests/bin/auth_worker.rs" [dependencies] tokio = { workspace = true, features = ["rt-multi-thread", "macros", "io-std", "io-util", "sync", "process", "time", "net"] } serde = { workspace = true } serde_json = { workspace = true } serde_yaml = { workspace = true } reqwest = { workspace = true, features = ["json", "rustls", "form"] } rmcp = { version = "1", default-features = false, features = ["client", "transport-child-process"] } arc-swap = "1" getrandom = "0.4" tracing = { workspace = true } tracing-subscriber = { workspace = true } # OAuth 2.0 PKCE for Databricks (and future browser-auth providers). async-trait = "0.1" axum = { workspace = true } base64 = "0.22" hex = { workspace = true } sha2 = { workspace = true } url = { workspace = true } urlencoding = "2" webbrowser = "1" dirs = "6" # Cross-process advisory file lock (flock on Unix, LockFileEx on Windows) for # the auth coordinator's single-flight. Kept off std's `File::try_lock` so the # crate stays buildable on the repo's declared 1.88 MSRV (those std APIs are # 1.89+). fs2 = "0.4" [target.'cfg(unix)'.dependencies] nix = { version = "0.31", default-features = false, features = ["signal", "process"] } [dev-dependencies] # Synthetic TLS OAuth/catalog servers exercise the strict HTTPS production path. rcgen = { version = "0.14", default-features = false, features = ["crypto", "ring"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } tokio = { workspace = true, features = ["test-util", "rt-multi-thread", "macros", "io-std", "io-util", "sync", "process", "time", "net"] } nix = { version = "0.31", default-features = false, features = ["signal", "process"] } axum = { workspace = true } hex = { workspace = true } serde = { workspace = true } sha2 = { workspace = true } tempfile = "3"