[package]
name = "dirigent_core"
version = "0.1.0"
edition = "2021"

[lib]
path = "src/lib.rs"

[[bin]]
name = "dirigent-core"
path = "src/bin/main.rs"
required-features = ["server"]

[dependencies]
# Server-only dependencies (optional)
# ACP (Agent-Client Protocol) - the main dependency for connecting to agents
# Using the rust-sdk from https://github.com/agentclientprotocol/rust-sdk
agent-client-protocol = { version = "0.6", optional = true }
# Async streams
async-stream = { version = "0.3", optional = true }
# Async trait support
async-trait = { version = "0.1", optional = true }
# Web server
axum = { version = "0.8", optional = true }
# Base64 encoding for embedded resources
base64 = { version = "0.22", optional = true }
# BLAKE3 hashing for stable URIs
blake3 = { version = "1.5", optional = true }
chrono = { version = "0.4", features = ["serde"] }
dirigent_acp_api = { path = "../dirigent_acp_api", optional = true }
# Workspace dependencies
dirigent_archivist = { path = "../dirigent_archivist", optional = true }
dirigent_config = { path = "../dirigent_config", optional = true }
dirigent_auth = { path = "../dirigent_auth" }
dirigent_process = { path = "../dirigent_process", features = ["tokio"], optional = true }
dirigent_taskrunner = { path = "../dirigent_taskrunner", optional = true }
dirigent_matrix = { path = "../dirigent_matrix", optional = true }
dirigent_zed = { path = "../dirigent_zed", optional = true }
dirigent_inspector = { path = "../dirigent_inspector", optional = true }
dirigent_protocol = { path = "../dirigent_protocol", features = ["adapters"], optional = true }
dirigent_tools = { path = "../dirigent_tools", optional = true }
# SSE client for ACP transport
eventsource-client = { version = "0.13", optional = true }
futures = { version = "0.3", optional = true }
# Lazy static initialization
once_cell = { version = "1.20", optional = true }
opencode_client = { path = "../opencode_client", optional = true }
# HTTP client for ACP transport
reqwest = { version = "0.12", features = ["json", "stream"], optional = true }
# Core types - always available (WASM-compatible)
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# Error handling
thiserror = { version = "2.0", optional = true }
tokio = { version = "1", features = ["full"], optional = true }
toml = { version = "0.8", optional = true }
tower = { version = "0.5", optional = true }
tower-http = { version = "0.6", features = ["cors"], optional = true }
# Logging
tracing = { version = "0.1", optional = true }
tracing-subscriber = { version = "0.3", features = ["env-filter"], optional = true }
uuid = { version = "1.0", features = ["js", "serde", "v4", "v5", "v7"] }

[dev-dependencies]
anyhow = "1.0"
axum = { version = "0.8", features = ["macros"] }
base64 = "0.22"
blake3 = "1.5"
dirigent_protocol = { path = "../dirigent_protocol" }
dirigent_tools = { path = "../dirigent_tools" }
tempfile = "3.0"
# Test dependencies - mirror the optional server dependencies
tokio = { version = "1", features = ["full", "test-util"] }
toml = "0.8"

[[test]]
name = "stream_registry_test"
required-features = ["test-utils"]

[[test]]
name = "replay_test"
required-features = ["test-utils", "server"]

[[test]]
name = "matrix_migration_test"
required-features = ["server"]

[features]
default = []
test-utils = []
server = [
  "dep:agent-client-protocol",
  "dep:async-stream",
  "dep:async-trait",
  "dep:axum",
  "dep:base64",
  "dep:blake3",
  "dep:dirigent_acp_api",
  "dep:dirigent_archivist",
  "dep:dirigent_config",
  "dep:dirigent_inspector",
  "dep:dirigent_protocol",
  "dep:dirigent_tools",
  "dep:eventsource-client",
  "dep:futures",
  "dep:once_cell",
  "dep:opencode_client",
  "dep:reqwest",
  "dep:thiserror",
  "dep:tokio",
  "dep:toml",
  "dep:tower",
  "dep:tower-http",
  "dep:tracing",
  "dep:tracing-subscriber",
  "dep:dirigent_matrix",
  "dep:dirigent_zed",
  "dep:dirigent_taskrunner",
  "dep:dirigent_process",
]
