[workspace]
members = [".", "ui"]
resolver = "2"
[package]
name = "apollo-agent"
version = "0.2.2"
edition = "2021"
description = "Local-first Rust AI agent runtime — Telegram-first, trait-driven, SurrealDB + RocksDB state layer."
license = "MPL-2.0"
readme = "README.md"
documentation = "https://docs.rs/apollo-agent"
repository = "https://github.com/tschk/apollo"
homepage = "https://github.com/tschk/apollo"
keywords = ["agent", "ai", "llm", "telegram", "automation"]
categories = ["command-line-utilities", "web-programming::http-client"]
exclude = [".cursor/"]
[[bin]]
name = "apollo"
path = "src/main.rs"
[[bin]]
name = "apollo-install"
path = "src/bin/apollo_install.rs"
[lib]
name = "apollo"
path = "src/lib.rs"
[features]
default = [
"core",
"channel-cli",
"channel-telegram",
"provider-anthropic",
"provider-ollama",
"rs-ai",
"zkr-memory",
"plugin-web",
"plugin-skills",
]
core = []
plugin-web = []
plugin-browser = []
plugin-skills = []
plugin-advanced = []
channel-cli = []
channel-telegram = []
channel-discord = []
channel-slack = []
channel-whatsapp = []
channel-signal = []
channel-matrix = []
channel-irc = []
channel-googlechat = []
channel-msteams = []
provider-anthropic = []
provider-copilot = []
provider-ollama = []
rs-ai = ["dep:rs_ai", "dep:rs_ai_core", "dep:rs_ai_providers"]
swarm = []
zkr-memory = ["dep:zkr"]
all-channels = ["channel-cli", "channel-telegram", "channel-discord", "channel-slack", "channel-whatsapp", "channel-signal", "channel-matrix", "channel-irc", "channel-googlechat", "channel-msteams"]
all-providers = ["provider-anthropic", "provider-copilot", "provider-ollama"]
desktop = ["plugin-browser", "computer-use-praefectus"]
all-plugins = ["plugin-web", "plugin-browser", "plugin-skills", "plugin-advanced", "computer-use-praefectus"]
full = ["all-channels", "all-providers", "all-plugins", "swarm"]
computer-use-praefectus = ["dep:praefectus", "dep:ed25519-dalek"]
[dependencies]
rx4 = { version = "0.3.25", default-features = false, features = ["ipc", "builtin-tools", "providers", "mcp", "skills", "graph-memory", "zkr-memory"] }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util", "sync", "time", "fs", "signal", "process", "io-std"] }
async-trait = "0.1"
futures-util = "0.3"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
axum = { version = "0.7", features = ["ws"] }
tower-http = { version = "0.6", features = ["cors"] }
clap = { version = "4", features = ["derive"] }
anyhow = "1"
dotenvy = "0.15"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] }
uuid = { version = "1", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
surrealdb = { version = "2.1", features = ["kv-rocksdb"] }
rocksdb = { version = "0.23" }
shlex = "1.3"
base64 = "0.22"
sha2 = "0.10"
aes-gcm = "0.10"
rand = "0.8"
parking_lot = "0.12"
libc = "0.2"
notify = { version = "6", features = ["serde"] }
cron = "0.12"
regex = "1"
dirs = "5.0"
praefectus = { version = "=0.4.0", optional = true }
ed25519-dalek = { version = "2.1", features = ["rand_core"], optional = true }
zkr = { version = "0.3.1", optional = true }
rs_ai = { version = "0.2", optional = true }
rs_ai_core = { version = "0.2", optional = true }
rs_ai_providers = { version = "0.2", optional = true, features = ["claude", "chatgpt", "gemini", "openai-compatible", "xai", "cloudflare"] }
[dev-dependencies]
tempfile = "3"
tokio-test = "0.4"
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
strip = true
panic = "abort"