[workspace] default-members = [ "apps/courier", "crates/acp", "crates/agents", "crates/auth", "crates/auto-reply", "crates/benchmarks", "crates/browser", "crates/caldav", "crates/canvas", "crates/channels", "crates/chat", "crates/claude-import", "crates/cli", "crates/client", "crates/code-index", "crates/codex-import", "crates/common", "crates/config", "crates/connector-caldav", "crates/connector-gmail", "crates/connector-himalaya", "crates/connectors", "crates/cron", "crates/ctl", "crates/discord", "crates/external-agents", "crates/gateway", "crates/graphql", "crates/hermes-import", "crates/home-assistant", "crates/httpd", "crates/import-core", "crates/matrix", "crates/mcp", "crates/mcp-agent-bridge", "crates/media", "crates/memory", "crates/metrics", "crates/msteams", "crates/netbird", "crates/network-filter", "crates/node-host", "crates/nostr", "crates/oauth", "crates/observability", "crates/onboarding", "crates/openclaw-import", "crates/plugins", "crates/portable", "crates/projects", "crates/protocol", "crates/provider-setup", "crates/providers", "crates/qmd", "crates/routing", "crates/secret-store", "crates/service-traits", "crates/sessions", "crates/signal", "crates/skills", "crates/slack", "crates/swift-bridge", "crates/tailscale", "crates/telegram", "crates/telephony", "crates/tls", "crates/tools", "crates/vault", "crates/voice", "crates/wasm-precompile", "crates/wasm-tools/calc", "crates/wasm-tools/web-fetch", "crates/wasm-tools/web-search", "crates/web", "crates/webhooks", "crates/whatsapp", ] exclude = ["apps/desktop", "vendor/agent-client-protocol"] members = [ "apps/courier", "crates/acp", "crates/agents", "crates/auth", "crates/auto-reply", "crates/benchmarks", "crates/browser", "crates/caldav", "crates/canvas", "crates/channels", "crates/chat", "crates/claude-import", "crates/cli", "crates/client", "crates/code-index", "crates/codex-import", "crates/common", "crates/config", "crates/connector-caldav", "crates/connector-gmail", "crates/connector-himalaya", "crates/connectors", "crates/cron", "crates/ctl", "crates/external-agents", "crates/gateway", "crates/graphql", "crates/hermes-import", "crates/home-assistant", "crates/httpd", "crates/import-core", "crates/matrix", "crates/mcp", "crates/media", "crates/memory", "crates/memory-zvec", "crates/metrics", "crates/msteams", "crates/netbird", "crates/node-host", "crates/nostr", "crates/oauth", "crates/observability", "crates/onboarding", "crates/openclaw-import", "crates/plugins", "crates/portable", "crates/projects", "crates/protocol", "crates/provider-setup", "crates/providers", "crates/qmd", "crates/routing", "crates/schema-export", "crates/secret-store", "crates/service-traits", "crates/sessions", "crates/signal", "crates/skills", "crates/slack", "crates/splitter", "crates/swift-bridge", "crates/tailscale", "crates/telegram", "crates/telephony", "crates/tls", "crates/tools", "crates/vault", "crates/voice", "crates/wasm-precompile", "crates/wasm-tools/calc", "crates/wasm-tools/web-fetch", "crates/wasm-tools/web-search", "crates/web", "crates/webhooks", "crates/whatsapp", ] resolver = "2" [patch.crates-io] # Keep ACP stdin cancellation and EOF processing independent of blocked stdout, # while bounding queued wire bytes. Remove once a compatible release includes it. agent-client-protocol = { path = "vendor/agent-client-protocol" } # Widen libsqlite3-sys pin (0.30.1 → >=0.30.1,<0.36.0) so sqlx-sqlite 0.8.6 # can coexist with matrix-sdk-sqlite's rusqlite 0.37 (libsqlite3-sys 0.35). # Remove once sqlx ≥ 0.9 ships stable. sqlx-core = { git = "https://github.com/moltis-org/sqlx", rev = "33747ad2e2d0c7962c6450faf31591c4e0782c23" } sqlx-sqlite = { git = "https://github.com/moltis-org/sqlx", rev = "33747ad2e2d0c7962c6450faf31591c4e0782c23" } # whatsapp-rust 0.6.0 plus the DM LID-migration gate (oxidezap/whatsapp-rust#943, # merged upstream): accounts the server has not migrated to LID 1:1 get their # LID-addressed DMs silently 400-nacked; the gate keeps wire addressing on PN # until the account migrates. Pinned to the merge commit of #943; drop this # patch section for a plain version bump once a whatsapp-rust release includes # it. The whole family is patched to the same rev so wacore/waproto types stay # unified (mixing crates.io and git copies makes them incompatible). wacore = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } wacore-binary = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } waproto = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } whatsapp-rust = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } whatsapp-rust-tokio-transport = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } whatsapp-rust-ureq-http-client = { git = "https://github.com/oxidezap/whatsapp-rust", rev = "96686eac65460b3bc8e10e3c37f27c0a602c3f54" } [workspace.lints.rust] unsafe_code = "deny" unused_qualifications = "deny" [workspace.lints.clippy] expect_used = "deny" unwrap_used = "deny" [workspace.package] edition = "2024" license = "MIT" repository = "https://github.com/moltis-org/moltis" rust-version = "1.91" version = "0.1.0" [workspace.dependencies] # APNS a2 = { default-features = false, features = ["ring"], version = "0.10" } # Async runtime agent-client-protocol = "0.10.2" tokio = { features = ["full"], version = "1" } # HTTP/WS server askama = "0.15" axum = { features = ["ws"], version = "0.8" } axum-extra = "0.10" # Serialization postcard = { features = ["alloc"], version = "1.1" } process-wrap = { default-features = false, features = ["job-object", "kill-on-drop", "process-group", "tokio1"], version = "9.1" } schemars = "1.2" serde = { features = ["derive"], version = "1" } serde-big-array = "0.5" serde_json = "1" # Error handling anyhow = "1" thiserror = "2" # OpenSSL (vendored for cross-compilation) openssl = { features = ["vendored"], version = "0.10" } # Logging opentelemetry = { version = "0.29" } opentelemetry-otlp = { features = ["tonic"], version = "0.29" } opentelemetry_sdk = { features = ["rt-tokio"], version = "0.29" } tracing = "0.1" tracing-opentelemetry = "0.30" tracing-subscriber = { features = ["env-filter", "json"], version = "0.3" } # CLI clap = { features = ["derive", "env"], version = "4" } indicatif = "0.17" # Database sqlx = { features = ["migrate", "runtime-tokio", "sqlite"], version = "0.8" } # Embedded key-value store (zvec memory backend cache + file index) redb = "2" # Zvec vector database (memory backend) # Packages renamed in v0.5.1: zvec→zvec-rust, zvec-sys→zvec-rust-sys. zvec = { git = "https://github.com/zvec-ai/zvec-rust", package = "zvec-rust", rev = "f8e81a1645db9e5004fddc2e3f2160e0a512bfce" } zvec-sys = { git = "https://github.com/zvec-ai/zvec-rust", package = "zvec-rust-sys", rev = "f8e81a1645db9e5004fddc2e3f2160e0a512bfce" } # HTTP client reqwest = { features = ["form", "json", "multipart", "query", "socks", "stream"], version = "0.13" } # UUID uuid = { features = ["v4", "v5"], version = "1" } # Async async-stream = "0.3" async-trait = "0.1" directories = "6" dotenvy = "0.15" futures = "0.3" futures-util = "0.3" once_cell = "1" tokio-stream = "0.1" tokio-test = "0.4" tokio-util = "0.7" # Config formats serde_yaml = "0.9" tokio-tungstenite = "0.26" toml = "0.8" toml_edit = "0.22" zip = { default-features = false, features = ["deflate"], version = "2" } # LLM provider crates (optional, behind feature flags) async-openai = { features = ["chat-completion"], version = "0.32" } base64 = "0.22" bytemuck = { features = ["derive"], version = "1" } bytes = "1" ed25519-dalek = "2.2" encoding_rs = "0.8" fd-lock = "4" genai = "0.5" json_schema_ast = "0.3.1" # GraphQL async-graphql = "7" async-graphql-axum = "7" gix = "0.83" half = "2" hex = "0.4" hmac = "0.12" jsonwebtoken = { features = ["aws_lc_rs"], version = "10" } libc = "0.2" llama-cpp-2 = "0.1" matrix-sdk = { default-features = false, features = ["e2e-encryption", "markdown", "native-tls", "sqlite"], version = "0.16" } mockito = "1.7" nostr-relay-builder = { version = "0.44" } nostr-sdk = { features = ["nip04", "nip44", "nip59"], version = "0.44" } open = "5.3" rand = "0.10" regex = "1" ring = "0.17" rustix = { features = ["fs"], version = "1.1" } secrecy = { features = ["serde"], version = "0.8" } serenity = { features = ["cache", "client", "gateway", "model", "rustls_backend"], version = "0.12" } sha1 = "0.10" sha2 = "0.10" slack-morphism = { features = ["axum", "hyper"], version = "2.20" } sled = "0.34" sysinfo = "0.34" teloxide = { features = ["macros"], version = "0.17" } # WhatsApp (sqlite-storage disabled to avoid libsqlite3-sys conflict with sqlx; # re-enable once sqlx 0.9 stabilises). wacore = { default-features = false, version = "0.6" } wacore-binary = { default-features = false, version = "0.6" } waproto = "0.6" whatsapp-rust = { default-features = false, features = ["tokio-native", "tokio-runtime", "tokio-transport", "ureq-client"], version = "0.6" } whatsapp-rust-tokio-transport = "0.6" whatsapp-rust-ureq-http-client = "0.6" # QR code rendering qrcode = "0.14" # TLS / certificate generation axum-server = { features = ["tls-rustls"], version = "0.7" } rcgen = "0.13" rustls = { features = ["ring"], version = "0.23" } rustls-pemfile = "2" rustls-platform-verifier = "0.6" time = { features = ["serde-human-readable"], version = "0.3" } tokio-rustls = "0.26" # Cryptography / authentication argon2 = "0.5" chacha20poly1305 = { features = ["std"], version = "0.10" } p256 = "0.13" password-hash = "0.5" subtle = "2" webauthn-rs = "0.5" webauthn-rs-proto = "0.5" webbrowser = "1.2" # Web / HTTP utilities dashmap = "6" hostname = "0.4" http = "1" hyper = { features = ["client", "http1", "http2", "server"], version = "1" } hyper-util = { features = ["client-legacy", "http1", "http2", "server-auto", "service", "tokio"], version = "0.1" } isahc = "1.8" ngrok = "0.18" tower = "0.5" tower-http = "0.6" url = "2" urlencoding = "2" # Form bodies (application/x-www-form-urlencoded) form_urlencoded = "1" web-push = "0.11" # Metrics metrics = "0.24" metrics-exporter-prometheus = "0.16" metrics-tracing-context = "0.16" # Content processing html2text = "0.16" image = { default-features = false, features = ["jpeg", "png", "webp"], version = "0.25" } ipnet = "2" mdns-sd = "0.18" mime_guess = "2" pulldown-cmark = { default-features = false, version = "0.12" } # Code splitting (tree-sitter based) text-splitter = { default-features = false, features = ["code"], version = "0.29" } tree-sitter-bash = "0.25" tree-sitter-c = "0.24" tree-sitter-cpp = "0.23" tree-sitter-css = "0.25" tree-sitter-go = "0.25" tree-sitter-html = "0.23" tree-sitter-java = "0.23" tree-sitter-javascript = "0.25" tree-sitter-json = "0.24" tree-sitter-md = "0.5" tree-sitter-python = "0.25" tree-sitter-ruby = "0.23" tree-sitter-rust = "0.24" tree-sitter-toml-ng = "0.7" tree-sitter-typescript = "0.23" # Allocator tikv-jemallocator = "0.6" # Filesystem / archiving cap-fs-ext = "4.0.2" cap-std = "4.0.2" chrono = "0.4" chrono-tz = { features = ["serde"], version = "0.10" } cron = "0.13" dirs-next = "2" flate2 = "1" globset = "0.4" grep-matcher = "0.1" grep-regex = "0.1" grep-searcher = "0.1" ignore = "0.4" include_dir = "0.7" json5 = "0.4" mail-parser = "0.11.6" notify-debouncer-full = "0.7" pdf-extract = "0.10" portable-pty = "0.9" rstest = "0.25" serial_test = "3" shell-words = "1" tar = "0.4" tempfile = "3" walkdir = "2" wasmtime = { features = ["component-model"], version = "36" } wasmtime-wasi = "36" which = "8" wiremock = "0.6" wit-bindgen = "0.41" wit-bindgen-rt = { features = ["bitflags"], version = "0.41" } # CalDAV / iCalendar hyper-rustls = { features = ["http1", "native-tokio", "ring", "tls12"], version = "0.27" } icalendar = "0.17" libdav = "0.10" tower-service = "0.3" zeroize = { features = ["derive"], version = "1" } # Workspace crates moltis = { path = "crates/cli" } moltis-acp = { path = "crates/acp" } moltis-agents = { path = "crates/agents" } moltis-auth = { path = "crates/auth" } moltis-auto-reply = { path = "crates/auto-reply" } moltis-browser = { path = "crates/browser" } moltis-caldav = { path = "crates/caldav" } moltis-canvas = { path = "crates/canvas" } moltis-channels = { path = "crates/channels" } moltis-chat = { path = "crates/chat" } moltis-claude-import = { path = "crates/claude-import" } moltis-client = { default-features = false, path = "crates/client" } moltis-code-index = { path = "crates/code-index" } moltis-codex-import = { path = "crates/codex-import" } moltis-common = { path = "crates/common" } moltis-config = { path = "crates/config" } moltis-connector-caldav = { path = "crates/connector-caldav" } moltis-connector-gmail = { path = "crates/connector-gmail" } moltis-connector-himalaya = { path = "crates/connector-himalaya" } moltis-connectors = { path = "crates/connectors" } moltis-cron = { path = "crates/cron" } moltis-discord = { path = "crates/discord" } moltis-external-agents = { path = "crates/external-agents" } moltis-gateway = { default-features = false, path = "crates/gateway" } moltis-graphql = { path = "crates/graphql" } moltis-hermes-import = { path = "crates/hermes-import" } moltis-home-assistant = { path = "crates/home-assistant" } moltis-httpd = { default-features = false, path = "crates/httpd" } moltis-import-core = { path = "crates/import-core" } moltis-matrix = { path = "crates/matrix" } moltis-mcp = { path = "crates/mcp" } moltis-mcp-agent-bridge = { path = "crates/mcp-agent-bridge" } moltis-media = { path = "crates/media" } moltis-memory = { path = "crates/memory" } moltis-memory-zvec = { path = "crates/memory-zvec" } moltis-metrics = { path = "crates/metrics" } moltis-msteams = { path = "crates/msteams" } moltis-netbird = { path = "crates/netbird" } moltis-network-filter = { default-features = false, path = "crates/network-filter" } moltis-node-host = { path = "crates/node-host" } moltis-nostr = { path = "crates/nostr" } moltis-oauth = { path = "crates/oauth" } moltis-observability = { default-features = false, path = "crates/observability" } moltis-onboarding = { path = "crates/onboarding" } moltis-openclaw-import = { path = "crates/openclaw-import" } moltis-plugins = { path = "crates/plugins" } moltis-portable = { path = "crates/portable" } moltis-projects = { path = "crates/projects" } moltis-protocol = { path = "crates/protocol" } moltis-provider-setup = { path = "crates/provider-setup" } moltis-providers = { features = ["provider-kimi-code", "provider-openai-codex"], path = "crates/providers" } moltis-qmd = { path = "crates/qmd" } moltis-routing = { path = "crates/routing" } moltis-schema-export = { path = "crates/schema-export" } moltis-secret-store = { default-features = false, path = "crates/secret-store" } moltis-service-traits = { path = "crates/service-traits" } moltis-sessions = { path = "crates/sessions" } moltis-signal = { path = "crates/signal" } moltis-skills = { path = "crates/skills" } moltis-slack = { path = "crates/slack" } moltis-splitter = { path = "crates/splitter" } moltis-swift-bridge = { path = "crates/swift-bridge" } moltis-tailscale = { path = "crates/tailscale" } moltis-telegram = { path = "crates/telegram" } moltis-telephony = { path = "crates/telephony" } moltis-tls = { path = "crates/tls" } moltis-tools = { path = "crates/tools" } moltis-vault = { path = "crates/vault" } moltis-voice = { path = "crates/voice" } moltis-web = { default-features = false, path = "crates/web" } moltis-webhooks = { path = "crates/webhooks" } moltis-whatsapp = { path = "crates/whatsapp" } [profile.release] codegen-units = 1 lto = "thin" panic = "abort" strip = true # Build scripts and proc macros never ship, and recent macOS linkers leave a # stripped proc-macro dylib unloadable ("mis-aligned LINKEDIT string pool"). [profile.release.build-override] strip = false [profile.swift-ci] debug = 0 inherits = "dev" panic = "abort" [profile.dev] debug = "line-tables-only"