
[workspace]
resolver = "2"

members = [
    "crates/vapora-backend",
    "crates/vapora-frontend",
    "crates/vapora-leptos-ui",
    "crates/vapora-shared",
    "crates/vapora-agents",
    "crates/vapora-llm-router",
    "crates/vapora-mcp-server",
    "crates/vapora-a2a",
    "crates/vapora-a2a-client",
    "crates/vapora-tracking",
    "crates/vapora-worktree",
    "crates/vapora-knowledge-graph",
    "crates/vapora-analytics",
    "crates/vapora-swarm",
    "crates/vapora-telemetry",
    "crates/vapora-workflow-engine",
    "crates/vapora-cli",
]

[workspace.package]
version = "1.2.0"
edition = "2021"
rust-version = "1.75"
authors = ["VAPORA Team"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/vapora/vapora"
homepage = "https://vapora.dev"
keywords = ["multi-agent", "llm", "cloud-native", "orchestration"]
categories = ["development-tools", "web-programming"]

[workspace.dependencies]
# Vapora internal crates
vapora-shared = { path = "crates/vapora-shared" }
vapora-leptos-ui = { path = "crates/vapora-leptos-ui" }
vapora-agents = { path = "crates/vapora-agents" }
vapora-llm-router = { path = "crates/vapora-llm-router" }
vapora-worktree = { path = "crates/vapora-worktree" }
vapora-knowledge-graph = { path = "crates/vapora-knowledge-graph" }
vapora-analytics = { path = "crates/vapora-analytics" }
vapora-swarm = { path = "crates/vapora-swarm" }
vapora-telemetry = { path = "crates/vapora-telemetry" }
vapora-workflow-engine = { path = "crates/vapora-workflow-engine" }
vapora-a2a = { path = "crates/vapora-a2a" }

# SecretumVault - Post-quantum secrets management
secretumvault = { path = "../secretumvault", default-features = true }
# ["openssl", "filesystem", "server", "surrealdb-storage", "pqc", "cli", "cedar"]

# Leptos ecosystem (CSR-only for frontend)
leptos = { version = "0.8.15" }
leptos_router = { version = "0.8.11" }
leptos_meta = { version = "0.8.5" }

# Web Framework (Backend)
axum = "0.8.8"
tower = "0.5.3"
tower-http = { version = "0.6.8", features = ["fs", "cors", "trace", "compression-full"] }

# Async runtime
tokio = { version = "1.49", features = ["rt-multi-thread", "macros", "fs", "net", "sync", "time"] }
futures = "0.3.31"
async-trait = "0.1.89"

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

# Error handling
thiserror = "2.0.18"
anyhow = "1.0.100"

# HTTP
http = "1"
reqwest = { version = "0.13.1", features = ["json", "rustls"] }
reqwasm = "0.5.0"

# Logging and tracing
log = "0.4.29"
env_logger = "0.11"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }

# WASM support
wasm-bindgen = "0.2.108"
wasm-bindgen-futures = "0.4.58"
wasm-bindgen-test = "0.3"
serde-wasm-bindgen = "0.6.5"
console_error_panic_hook = "0.1.7"
console_log = "1"
js-sys = "0.3.85"
web-sys = { version = "0.3.85", features = ["Clipboard", "Window", "Navigator", "Permissions", "MouseEvent", "Storage", "console", "File"] }

# Gloo ecosystem
gloo-timers = { version = "0.3", features = ["futures"] }
gloo-net = { version = "0.6.0" }

# Utilities
rand = "0.9"
rand_core = { version = "0.10"} #, features = ["getrandom"] }
getrandom = { version = "0.4", features = ["std", "wasm_js"] }
uuid = { version = "1.20", features = ["v4", "serde", "js"] }
chrono = { version = "0.4", features = ["serde"] }
regex = "1.12.3"
hex = "0.4.3"
base64 = { version = "0.22" }

# Configuration
dotenv = "0.15.0"
once_cell = "1.21.3"

# CLI
clap = { version = "4.5", features = ["derive", "env"] }

lazy_static = "1.5"
rayon = "1.11"
md5 = "0.8"

# TLS Support (native tokio-rustls, no axum-server)
rustls = { version = "0.23" }
rustls-pemfile = { version = "2.2" }
tokio-rustls = { version = "0.26" }

# Authentication & Authorization
jsonwebtoken = { version = "10.3", features = ["rust_crypto"] }
argon2 = { version = "0.5" }
oauth2 = { version = "5.0" }
tower-sessions = { version = "0.15" }
tower-cookies = { version = "0.11" }
time = { version = "0.3", features = ["serde"] }

# Database
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "postgres", "sqlite", "chrono", "uuid", "migrate"] }
# Note: SurrealDB will be added when available in workspace
surrealdb = "2.6"

# Message Queue
# Note: async-nats will be added when available in workspace
async-nats = "0.46"

# LLM Agent Framework & RAG
rig-core = "0.30"
# Embeddings: Use provider APIs (Claude, OpenAI, Gemini, Ollama) instead of fastembed
# - rig-core integrates with all major providers
# - Routing through vapora-llm-router for optimal provider selection
# - Phase 3: Implement embedding service using provider APIs

# Cryptography
aes-gcm = { version = "0.10" }
sha2 = { version = "0.10" }

# Metrics & Observability
prometheus = { version = "0.14" }
opentelemetry = { version = "0.31", features = ["trace", "metrics"] }
opentelemetry-jaeger = { version = "0.22", features = ["rt-tokio"] }
opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] }
tracing-opentelemetry = "0.32"

# File system
glob = "0.3.3"
walkdir = "2.5"
tempfile = { version = "3.24" }
notify = { version = "8.2.0", default-features = false, features = ["macos_fsevent"] }
ignore = "0.4"

# CLI support
dialoguer = "0.12"
console = "0.16"
indicatif = "0.18"

# Async compression
async-compression = { version = "0.4", features = ["gzip", "tokio"] }

# Utility
cfg-if = "1.0"
paste = "1.0.15"
typed-builder = "0.23"
shellexpand = "3.1"
semver = "1.0"
pathdiff = "0.2"
dashmap = "6.1"
parking_lot = "0.12"

# Testing
mockall = "0.14"
wiremock = "0.6"
axum-test = "18.7"
mockito = "1.7.2"
criterion = { version = "0.8.1", features = ["async_tokio"] }

# Proc macros
syn = { version = "2.0", features = ["full"] }
quote = "1.0"
proc-macro2 = "1.0"

colored = "3.1.1"
comfy-table = "7.2"

[profile.release]
codegen-units = 1
lto = true
opt-level = "z"

[profile.dev]
opt-level = 0
debug = true

[profile.test]
opt-level = 0
