rustyclaw 0.1.33

A lightweight, secure agentic AI assistant runtime with OpenClaw compatibility
Documentation
[package]
name = "rustyclaw"
version = "0.1.33"
edition = "2024"
authors = ["Erica Stith <erica@example.com>"]
description = "A lightweight, secure agentic AI assistant runtime with OpenClaw compatibility"
license = "MIT"
readme = "README.md"
homepage = "https://github.com/rexlunae/RustyClaw"
repository = "https://github.com/rexlunae/RustyClaw"
documentation = "https://github.com/rexlunae/RustyClaw#readme"
keywords = ["ai", "agent", "llm", "openclaw", "automation"]
categories = ["command-line-utilities", "development-tools", "text-processing"]
default-run = "rustyclaw"
rust-version = "1.85"
exclude = [
    ".github/*",
    "tests/*",
    "*.md",
    "!README.md",
]

[badges]
maintenance = { status = "actively-developed" }

[features]
default = ["tui", "web-tools"]
tui = ["dep:ratatui", "dep:crossterm", "dep:tui-markdown", "dep:tui-input"]
web-tools = ["dep:scraper", "dep:html2md"]
matrix = ["dep:matrix-sdk"]
browser = ["dep:chromiumoxide"]
# Publishable feature sets
all-messengers = ["matrix"]
full = ["tui", "web-tools", "matrix", "browser"]

# Signal support is temporarily disabled for crates.io publishing.
# presage and presage-store-sqlite require building from git source.
# See BUILDING.md for instructions on building with Signal support.
# signal = ["dep:presage", "dep:presage-store-sqlite"]

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(feature, values("signal"))'] }

[dependencies]
# TUI dependencies (optional — disable with --no-default-features for headless builds)
ratatui = { version = "0.30", optional = true }
crossterm = { version = "0.29", features = ["event-stream"], optional = true }
tui-markdown = { version = "0.3", optional = true }

# Configuration and serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_yaml = "0.9"
toml = "0.9"

# Error handling
anyhow = "1.0"
thiserror = "2.0"

# Secrets management (encrypted on-disk vault)
securestore = "0.100.0"

# OpenSSL with vendored feature for cross-compilation (used by securestore + reqwest native-tls)
openssl-sys = { version = "0.9", features = ["vendored"] }

# TOTP 2FA support
totp-rs = { version = "5.7", features = ["gen_secret", "otpauth"] }

# QR code generation for TOTP enrollment
qrcode = { version = "0.14", default-features = false }

# SSH key generation (Ed25519)
ssh-key = { version = "0.6", features = ["ed25519", "getrandom", "std"] }

# File system and path handling
dirs = "6.0"
shellexpand = "3.1"

# Async runtime (for messenger support)
tokio = { version = "1.35", features = ["full"] }
tokio-util = "0.7"
async-trait = "0.1"
clap = { version = "4.5", features = ["derive", "env"] }
futures-util = "0.3"
tokio-tungstenite = "0.28"
# Note: 0.13+ renamed rustls-tls to rustls
reqwest = { version = "0.13", features = ["json", "rustls", "stream", "blocking", "form"], default-features = false }
url = "2.5"
tui-input = { version = "0.15", optional = true }
strum = { version = "0.27", features = ["derive"] }
sysinfo = "0.38"
which = "8"
glob = "0.3"
walkdir = "2"

# HTML parsing and text extraction (optional — disable with --no-default-features)
scraper = { version = "0.25", optional = true }
html2md = { version = "0.2", optional = true }
urlencoding = "2.1"

# Time handling
chrono = "0.4"
zip = "8.0"

# Base64 encoding for image data
base64 = "0.22"

# HTTP date parsing (for Set-Cookie expires)
httpdate = "1.0"

# Matrix messenger support (optional)
# Features: e2e-encryption (default), sqlite (persistence), rustls-tls (TLS)
# rustls-tls is required when default-features = false
matrix-sdk = { version = "0.10", default-features = false, features = ["e2e-encryption", "sqlite", "rustls-tls"], optional = true }

# Signal messenger support - DISABLED for crates.io publishing
# Signal requires presage from git which isn't compatible with crates.io.
# To build with Signal, clone the repo and use Cargo.signal.toml
# presage = { version = "0.3", optional = true }
# presage-store-sqlite = { version = "0.3", optional = true }

# Browser automation (optional)
chromiumoxide = { version = "0.8", default-features = false, features = ["tokio-runtime"], optional = true }

# Unix process management
[target.'cfg(unix)'.dependencies]
libc = "0.2"

# Terminal styling
colored = "3.1"
indicatif = "0.18"
unicode-width = "0.2"
rpassword = "7"

# Patches for crypto compatibility
[patch.crates-io]
curve25519-dalek = { git = "https://github.com/signalapp/curve25519-dalek", tag = "signal-curve25519-4.1.3" }

[dev-dependencies]
tempfile = "3"

[profile.release]
lto = true
codegen-units = 1
strip = true

[[bin]]
name = "rustyclaw"
path = "src/main.rs"