[package]
name = "nexo-core"
description   = "Agent runtime: event bus, sessions, plugin trait, heartbeat, A2A delegation."
version       = "0.1.13"
edition       = { workspace = true }
rust-version  = { workspace = true }
license       = { workspace = true }
authors       = { workspace = true }
repository    = { workspace = true }
homepage      = { workspace = true }
documentation = { workspace = true }
readme        = "README.md"
keywords      = { workspace = true }
categories    = { workspace = true }
[features]
default = ["schema-validation"]
# Phase 79.12 — stateful REPL tool (Python/Node/bash subprocesses
# that persist across LLM turns). Off by default — code execution
# is dangerous and must be explicitly opted into per-agent.
repl-tool = []
# Enables pre-handler JSON Schema validation of tool arguments.
schema-validation = ["dep:jsonschema"]
# Phase 79.10 — gated self-config tool. Off by default until
# security review. Compiling this feature exposes `Config { op:
# read | propose | apply }` per agent (still subject to the
# per-binding `config_tool.self_edit` YAML knob + the hard-coded
# denylist).
config-self-edit = ["dep:globset"]

[dependencies]
jsonschema = { version = "0.20", optional = true, default-features = false }
# Phase 79.10 — gated by `config-self-edit` feature. `nexo-setup`
# is pulled in lazily via the runtime call site (cannot be a hard
# dep here — `nexo-setup` already depends on `nexo-core`, so a
# direct dep would form a cycle).
globset    = { workspace = true, optional = true }
sha2        = { workspace = true }
hmac        = "0.12"
cron        = "0.12"
tokio       = { workspace = true }
serde       = { workspace = true }
serde_json  = { workspace = true }
serde_yaml  = { workspace = true }
uuid        = { workspace = true }
chrono      = { workspace = true }
dashmap     = { workspace = true }
humantime   = { workspace = true }
anyhow      = { workspace = true }
thiserror   = { workspace = true }
nexo-assistant = { version = "0.1.1", path = "../assistant" }
nexo-tool-meta = { version = "0.1.12", path = "../tool-meta" }
nexo-config = { version = "0.1.7", path = "../config" }
nexo-broker = { version = "0.1.1", path = "../broker" }
nexo-team-store = { version = "0.1.1", path = "../team-store" }
nexo-auth = { version = "0.1.1", path = "../auth" }
tracing       = { workspace = true }
async-trait   = { workspace = true }
tokio-util    = { workspace = true }
nexo-llm = { version = "0.1.4", path = "../llm" }
# Phase 82.10.u — OAuth start/finish admin RPC handlers reuse the
# shared PKCE + exchange primitives.
nexo-llm-auth = { version = "0.1.0", path = "../llm-auth" }
nexo-lsp = { version = "0.1.1", path = "../lsp" }
nexo-memory = { version = "0.1.4", path = "../memory" }
nexo-extensions = { version = "0.1.1", path = "../extensions" }
nexo-mcp = { version = "0.1.4", path = "../mcp" }
nexo-taskflow = { version = "0.1.1", path = "../taskflow" }
nexo-web-search = { version = "0.1.1", path = "../web-search" }
nexo-pairing    = { version = "0.1.2", path = "../pairing" }
nexo-dispatch-tools = { version = "0.1.6", path = "../dispatch-tools" }
nexo-agent-registry = { version = "0.1.6", path = "../agent-registry" }
nexo-driver-claude  = { version = "0.1.6", path = "../driver-claude" }
nexo-driver-loop    = { version = "0.1.6", path = "../driver-loop" }
nexo-driver-types   = { version = "0.1.6", path = "../driver-types" }
nexo-driver-permission = { version = "0.1.6", path = "../driver-permission" }
nexo-memory-snapshot = { version = "0.1.1", path = "../memory-snapshot" }
nexo-plugin-manifest = { version = "0.1.3", path = "../plugin-manifest" }
nexo-project-tracker = { version = "0.1.6", path = "../project-tracker" }
futures         = { workspace = true }
arc-swap        = { workspace = true }
lru             = { workspace = true }
notify          = { workspace = true }
notify-debouncer-full = { workspace = true }
base64          = { workspace = true }
git2            = { workspace = true }
reqwest         = { workspace = true }
# Used by google_auth for URL-encoding OAuth parameters — already a
# transitive dep via reqwest so no new edges on the resolver.
serde_urlencoded = "0.7"
regex           = "1.10"
sqlx            = { workspace = true }
semver          = { workspace = true }
# Phase 81.5 — plugin discovery walker + manifest parsing
walkdir         = "2"
toml            = "0.8"
# Phase 81.22 — bwrap binary discovery for sandbox runner.
which           = { workspace = true }
# Phase 82.11.bridge — multi-host firehose emitter publishes
# AgentEventKind frames to a NATS subject so operator UIs hosted
# off-daemon receive events from every node.
async-nats      = { workspace = true }

[dev-dependencies]
nexo-llm = { version = "0.1.4", path = "../llm", features = ["stub"] }
futures       = { workspace = true }
tempfile      = "3"
serial_test   = "3"
nexo-driver-permission = { version = "0.1.6", path = "../driver-permission" }
nexo-driver-claude     = { version = "0.1.1", path = "../driver-claude" }

[lints]
workspace = true
