[workspace]
members = ["crates/*"]
resolver = "3"
[workspace.package]
edition = "2024"
rust-version = "1.88"
version = "0.11.4"
authors = ["bug-ops"]
license = "MIT"
repository = "https://github.com/bug-ops/zeph"
homepage = "https://github.com/bug-ops/zeph"
documentation = "https://docs.rs/zeph"
keywords = ["ai", "agent", "llm", "inference", "skills"]
categories = ["command-line-utilities", "science"]
[workspace.dependencies]
age = { version = "0.11.2", default-features = false }
anyhow = "1.0"
axum = "0.8"
base64 = "0.22"
blake3 = "1.8"
candle-core = { version = "0.9", default-features = false }
candle-nn = { version = "0.9", default-features = false }
candle-transformers = { version = "0.9", default-features = false }
chrono = { version = "0.4", default-features = false, features = ["std"] }
clap = { version = "4.5", features = ["derive"] }
criterion = "0.8"
cron = "0.15"
crossterm = "0.29"
dialoguer = "0.12"
eventsource-stream = "0.2"
futures = "0.3"
futures-core = "0.3"
glob = "0.3.3"
hf-hub = { version = "0.5", default-features = false, features = ["tokio", "rustls-tls", "ureq"] }
http-body-util = "0.1"
ignore = "0.4"
insta = { version = "1.46.3", features = ["toml", "filters"] }
notify = "8"
notify-debouncer-mini = "0.7"
nucleo-matcher = "0.3.1"
ollama-rs = { version = "0.3", default-features = false, features = ["rustls", "stream"] }
opentelemetry = "0.31"
opentelemetry-otlp = { version = "0.31", features = ["grpc-tonic"] }
opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] }
pdf-extract = "0.10"
proptest = "1.10"
pulldown-cmark = "0.13"
qdrant-client = { version = "1.17", default-features = false }
ratatui = "0.30"
regex = "1.12"
reqwest = { version = "0.13", default-features = false }
rmcp = "0.16"
rubato = "1.0"
schemars = "1.2"
scrape-core = "0.2.2"
semver = "1.0.27"
serde = "1.0"
serde_json = "1.0"
serial_test = "3.3"
similar = "2.7"
sqlx = { version = "0.8", default-features = false, features = ["macros"] }
subtle = "2.6"
symphonia = { version = "0.5.5", default-features = false, features = ["mp3", "ogg", "wav", "flac", "pcm"] }
teloxide = { version = "0.17", default-features = false, features = ["rustls", "ctrlc_handler", "macros"] }
tempfile = "3"
testcontainers = "0.27"
thiserror = "2.0"
tokenizers = { version = "0.22", default-features = false, features = ["fancy-regex"] }
tokio = "1"
tokio-stream = "0.1"
tokio-tungstenite = { version = "0.28", default-features = false }
tokio-util = "0.7"
toml = "1.0"
tower = "0.5"
tower-http = "0.6"
tracing = "0.1"
tracing-opentelemetry = "0.32"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tree-sitter = "0.26"
tree-sitter-bash = "0.25"
tree-sitter-go = "0.25"
tree-sitter-highlight = "0.26"
tree-sitter-javascript = "0.25"
tree-sitter-json = "0.24"
tree-sitter-md = "0.5"
tree-sitter-python = "0.25"
tree-sitter-rust = "0.24"
tree-sitter-toml-ng = "0.7"
tree-sitter-typescript = "0.23"
unicode-width = "0.2"
url = "2.5"
uuid = "1.21"
wiremock = "0.6.5"
zeph-a2a = { path = "crates/zeph-a2a", version = "0.11.4" }
zeph-channels = { path = "crates/zeph-channels", version = "0.11.4" }
zeph-core = { path = "crates/zeph-core", version = "0.11.4" }
zeph-gateway = { path = "crates/zeph-gateway", version = "0.11.4" }
zeph-index = { path = "crates/zeph-index", version = "0.11.4" }
zeph-llm = { path = "crates/zeph-llm", version = "0.11.4" }
zeph-mcp = { path = "crates/zeph-mcp", version = "0.11.4" }
zeph-memory = { path = "crates/zeph-memory", version = "0.11.4" }
zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.11.4" }
zeph-skills = { path = "crates/zeph-skills", version = "0.11.4" }
zeph-tools = { path = "crates/zeph-tools", version = "0.11.4" }
zeph-tui = { path = "crates/zeph-tui", version = "0.11.4" }
[workspace.lints.clippy]
all = "warn"
pedantic = "warn"
[package]
name = "zeph"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
keywords.workspace = true
categories.workspace = true
description = "Lightweight AI agent with hybrid inference, skills-first architecture, and multi-channel I/O"
readme = "README.md"
[features]
default = []
full = ["a2a", "daemon", "discord", "gateway", "index", "mock", "otel", "pdf", "scheduler", "slack", "stt", "tui"]
a2a = ["dep:zeph-a2a", "zeph-a2a?/server"]
candle = ["zeph-llm/candle", "zeph-core/candle"]
metal = ["zeph-llm/metal", "zeph-core/metal"]
cuda = ["zeph-llm/cuda", "zeph-core/cuda"]
tui = ["dep:zeph-tui"]
discord = ["zeph-channels/discord"]
slack = ["zeph-channels/slack"]
index = ["dep:zeph-index", "zeph-core/index"]
gateway = ["dep:zeph-gateway"]
daemon = ["zeph-core/daemon"]
scheduler = ["dep:zeph-scheduler", "dep:serde_json"]
otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-otlp", "dep:tracing-opentelemetry"]
pdf = ["zeph-memory/pdf"]
mock = ["zeph-llm/mock", "zeph-memory/mock"]
stt = ["zeph-llm/stt", "dep:reqwest"]
[dependencies]
anyhow.workspace = true
clap.workspace = true
dialoguer.workspace = true
futures.workspace = true
toml.workspace = true
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal", "sync", "time"] }
tracing.workspace = true
tracing-subscriber.workspace = true
opentelemetry = { workspace = true, optional = true }
opentelemetry_sdk = { workspace = true, optional = true }
opentelemetry-otlp = { workspace = true, optional = true }
tracing-opentelemetry = { workspace = true, optional = true }
zeph-a2a = { workspace = true, optional = true }
zeph-channels.workspace = true
zeph-index = { workspace = true, optional = true }
zeph-mcp.workspace = true
zeph-core.workspace = true
zeph-llm.workspace = true
zeph-memory.workspace = true
zeph-skills.workspace = true
zeph-tools.workspace = true
zeph-gateway = { workspace = true, optional = true }
zeph-scheduler = { workspace = true, optional = true }
zeph-tui = { workspace = true, optional = true }
reqwest = { workspace = true, optional = true, features = ["rustls"] }
serde_json = { workspace = true, optional = true }
[lints]
workspace = true