mail4agent 0.4.21

A mailbox for agent sessions: addresses, messages, threads and acknowledgements, served over HTTP and MCP.
Documentation
[package]
name = "mail4agent"
version.workspace = true
edition = "2021"
description = "A mailbox for agent sessions: addresses, messages, threads and acknowledgements, served over HTTP and MCP."
license = "MIT"
readme = "README.md"
keywords = ["agent", "mailbox", "mcp", "messaging"]
categories = ["development-tools", "network-programming"]

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

[[bin]]
name = "mail4agent"
path = "src/main.rs"

[features]
default = []
# Optional self-registration with a local process supervisor (d-watchdog):
# push-asserts this daemon's own manifest against its registry endpoint.
# Off by default -- see `src/registration.rs` and `mcp-service4agent`'s own
# `nemo` feature doc comment.
nemo = ["mcp-service4agent/nemo"]

[dependencies]
# Path dependency for local development inside the nemo workspace; `cargo
# publish` strips the `path` and resolves the crates.io release instead.
# core (always on) gives `McpServer`/`Budget`/`Tool`/`DocRouter`; the `nemo`
# feature above turns on its own `nemo` feature (manifest + register).
mcp-service4agent = "0.1.0"
mail4agent-api = { workspace = true  }
mail4agent-core = { workspace = true  }
mail4agent-store-sqlite = { workspace = true  }
# Resolves which OS process is on the other end of a request's connection --
# see `src/identity.rs`, "Point 1" of the session-identity work.
mail4agent-attest = { workspace = true  }
axum = { version = "0.8", features = ["json"] }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal", "sync", "time", "net"] }
tower-http = { version = "0.6", features = ["cors"] }
# Fires a registered delivery listener's URL after a message commits (see
# `src/service.rs`, `MailboxService::spawn_listener_delivery`). Same version
# `mail4agent-client` already pins for the same job.
reqwest = { version = "0.12", features = ["json"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
clap = { version = "4", features = ["derive"] }
subtle = "2"
# Per-user data directory for the sqlite default path, and the home
# directory for the bootstrap operator key file (smm8mail's own pattern).
directories = "6"
# Parses `mail4agent.toml`.
toml = "0.8"
# Derives a stable SessionId from a `(pid, started_at_unix_ms)` pair, and
# mints an `X-Request-Id` for `src/request_id.rs` -- same versions
# `mail4agent-core` already pins for the same job.
sha2 = "0.10"
hex = "0.4"
getrandom = "0.3"

[dev-dependencies]
# `tower::ServiceExt::oneshot` for `src/request_id.rs`'s own tests. Already
# in the dependency graph transitively (axum/tower-http depend on it), so
# this adds no new crate, only the `util` feature's extension trait.
tower = { version = "0.5", features = ["util"] }

# Internal workspace; independent from any parent workspace.
[workspace]
members = [
    "crates/mail4agent-api",
    "crates/m4a-agent",
    "crates/mail4agent-attest",
    "crates/mail4agent-core",
    "crates/mail4agent-store-sqlite",
    "crates/mail4agent-client",
    "crates/mail4agent-vodozemac",
    "crates/mail4agent-messenger",
    "crates/mail4agent-messenger-shell",
    "crates/mail4agent-server",
    "crates/mail4agent-server-bin",
    "crates/m4a-edge",
    "crates/m4a-seam",
    "crates/m4a-keys",
    "crates/m4a-matrix-core",
    "crates/m4a-product-kit",
    "crates/m4a-product-example",
]

# One version for the whole set: every crate below ships under the same number, always.
# See docs/versioning.md.
[workspace.package]
version = "0.4.21"

[workspace.dependencies]
mail4agent-api = { path = "crates/mail4agent-api", version = "=0.4.21" }
mail4agent-attest = { path = "crates/mail4agent-attest", version = "=0.4.21" }
mail4agent-core = { path = "crates/mail4agent-core", version = "=0.4.21" }
mail4agent-store-sqlite = { path = "crates/mail4agent-store-sqlite", version = "=0.4.21" }
mail4agent-client = { path = "crates/mail4agent-client", version = "=0.4.21" }
mail4agent-vodozemac = { path = "crates/mail4agent-vodozemac", version = "=0.4.21" }
mail4agent-messenger = { path = "crates/mail4agent-messenger", version = "=0.4.21" }
mail4agent-messenger-shell = { path = "crates/mail4agent-messenger-shell", version = "=0.4.21" }
# default-features = false: a crate that needs the full server asks for it, so a light server build is possible.
mail4agent-server = { path = "crates/mail4agent-server", version = "=0.4.21", default-features = false }
mail4agent-server-bin = { path = "crates/mail4agent-server-bin", version = "=0.4.21" }
m4a-edge = { path = "crates/m4a-edge", version = "=0.4.21" }
m4a-matrix-core = { path = "crates/m4a-matrix-core", version = "=0.4.21" }
m4a-agent = { path = "crates/m4a-agent", version = "=0.4.21", default-features = false }
m4a-seam = { path = "crates/m4a-seam", version = "=0.4.21" }
m4a-keys = { path = "crates/m4a-keys", version = "=0.4.21" }
m4a-product-kit = { path = "crates/m4a-product-kit", version = "=0.4.21" }
m4a-product-example = { path = "crates/m4a-product-example", version = "=0.4.21" }