[package]
name = "elicitation"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
homepage.workspace = true
documentation.workspace = true
readme.workspace = true

description = "Conversational elicitation of strongly-typed Rust values via MCP"
keywords = ["mcp", "llm", "elicitation", "types", "async"]
categories = ["development-tools", "asynchronous"]

[dependencies]
rmcp = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
schemars = { workspace = true }
derive_more = { workspace = true }
derive-getters = { workspace = true }
tracing = { workspace = true }
tokio = { workspace = true }
paste = { workspace = true }
async-trait = { workspace = true }
inventory = { workspace = true }

# CLI dependencies (optional)
anyhow = { workspace = true }
clap = { workspace = true, optional = true }
csv = { workspace = true, optional = true }

# DateTime libraries (optional)
chrono = { workspace = true, optional = true }
time = { workspace = true, optional = true }
jiff = { workspace = true, optional = true }

# UUID library (optional)
uuid = { workspace = true, optional = true }

# URL library (optional)
url = { workspace = true, optional = true }

# Regex library (optional)
regex = { workspace = true, optional = true }

# Verification libraries (optional)
creusot-std = { workspace = true }
prusti-contracts = { workspace = true, optional = true }

# Re-export derive macro
elicitation_derive = { workspace = true }
elicitation_macros = { workspace = true }

[dev-dependencies]
tokio-test = { workspace = true }
tracing-subscriber = { workspace = true }
uuid = { workspace = true }
criterion = { workspace = true }

[features]
default = []
# Feature for tests that call real API (rate-limited)
api = []
# Enable serde_json::Value elicitation
serde_json = []
# Enable chrono datetime elicitation
chrono = ["dep:chrono"]
# Enable time datetime elicitation
time = ["dep:time"]
# Enable jiff datetime elicitation
jiff = ["dep:jiff"]
# Enable UUID elicitation
uuid = ["dep:uuid"]
# Enable URL elicitation
url = ["dep:url"]
# Enable Regex elicitation
regex = ["dep:regex"]

# Formal verification support
verification = [] # Core Contract trait only
verify-kani = ["verification"] # Kani model checker
verify-creusot = ["verification"] # Creusot deductive verifier
verify-prusti = ["verification", "prusti-contracts"] # Prusti separation logic
verify-verus = ["verification"] # Verus SMT verifier (future)
verify-all = ["verify-kani", "verify-creusot", "verify-prusti", "verify-verus"]
kani-verifier = []

# CLI and verification runner
cli = ["clap", "csv", "chrono"]

# Development (all optional features)
dev = ["chrono", "time", "jiff", "uuid", "url", "regex", "cli"]

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(kani)', 'cfg(prusti)', 'cfg(creusot)', 'cfg(verus)'] }

[[bin]]
name = "elicitation"
path = "src/main.rs"
required-features = ["cli"]
