[package]
name = "soul-core"
version = "0.8.0"
authors = ["AMAI Labs <team@amai.net>"]
edition = "2021"
description = "Async agentic runtime for Rust — steerable agent loops, context management, multi-provider LLM abstraction, virtual filesystem, WASM-ready"
license = "MIT"
repository = "https://github.com/AMAI-LABS/soul-core"
keywords = ["agent", "llm", "ai", "async", "wasm"]
categories = ["asynchronous", "web-programming"]

[features]
default = ["native"]
# Native OS support: real filesystem, real process execution, full tokio runtime
native = ["tokio/full", "tokio/test-util", "reqwest/stream", "tracing-subscriber", "reqwest-eventsource"]
# WASM browser target: in-memory VFS, noop executor, fetch-based HTTP
wasm = ["uuid/js", "reqwest/json", "getrandom/js"]

[dependencies]
# Async runtime — minimal features; native adds full runtime
tokio = { version = "1", features = ["sync", "macros", "rt"] }
tokio-stream = { version = "0.1", features = ["sync"] }
futures = "0.3"
async-trait = "0.1"

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"

# HTTP client (for LLM providers)
reqwest = { version = "0.12", default-features = false, features = ["json"] }
reqwest-eventsource = { version = "0.6", optional = true }

# Error handling
thiserror = "2"
anyhow = "1"

# Crypto (for auth, hashing)
sha2 = "0.10"
uuid = { version = "1", features = ["v4", "serde"] }
getrandom = { version = "0.2", optional = true }

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"], optional = true }

# Time
chrono = { version = "0.4", features = ["serde"] }

# Concurrency
dashmap = "6"

# YAML parsing (for skill frontmatter)
serde_yaml = "0.9"

[dev-dependencies]
tokio = { version = "1", features = ["full", "test-util"] }
tempfile = "3"
wiremock = "0.6"
assert_matches = "1.5"
tracing-test = "0.2"
