[package]
edition = "2024"
rust-version = "1.89"
name = "kumiho-construct"
version = "2026.5.11"
authors = ["Kumiho Inc."]
build = "build.rs"
include = [
"/src/**/*",
"/build.rs",
"/Cargo.toml",
"/Cargo.lock",
"/LICENSE*",
"/README.md",
"/web/dist/**/*",
"/tool_descriptions/**/*",
"/resources/sidecars/*.py",
"/operator-mcp/pyproject.toml",
"/operator-mcp/setup.py",
"/operator-mcp/requirements.txt",
"/operator-mcp/README.md",
"/operator-mcp/operator_mcp/**/*.py",
"/operator-mcp/operator_mcp/**/*.yaml",
"/operator-mcp/session-manager/dist/**/*",
"/operator-mcp/session-manager/package.json",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Construct — memory-native AI agent runtime powered by Kumiho"
readme = "README.md"
keywords = [
"ai",
"agent",
"memory",
"orchestration",
"kumiho",
]
categories = [
"command-line-utilities",
"development-tools",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/KumihoIO/construct-os"
resolver = "2"
[features]
browser-native = ["dep:fantoccini"]
channel-feishu = ["channel-lark"]
channel-lark = ["dep:prost"]
channel-matrix = ["dep:matrix-sdk"]
channel-nostr = ["dep:nostr-sdk"]
ci-all = [
"channel-nostr",
"hardware",
"channel-matrix",
"channel-lark",
"observability-prometheus",
"observability-otel",
"peripheral-rpi",
"browser-native",
"sandbox-landlock",
"sandbox-bubblewrap",
"probe",
"rag-pdf",
"skill-creation",
"whatsapp-web",
"plugins-wasm",
]
default = [
"observability-prometheus",
"skill-creation",
]
fantoccini = ["browser-native"]
hardware = [
"nusb",
"tokio-serial",
]
landlock = ["sandbox-landlock"]
metrics = ["observability-prometheus"]
observability-otel = [
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
]
observability-prometheus = ["dep:prometheus"]
peripheral-rpi = ["rppal"]
plugins-wasm = []
probe = ["dep:probe-rs"]
rag-pdf = ["dep:pdf-extract"]
sandbox-bubblewrap = []
sandbox-landlock = ["dep:landlock"]
skill-creation = []
voice-wake = ["dep:cpal"]
webauthn = []
whatsapp-web = [
"dep:wa-rs",
"dep:wa-rs-core",
"dep:wa-rs-binary",
"dep:wa-rs-proto",
"dep:wa-rs-ureq-http",
"dep:wa-rs-tokio-transport",
"dep:serde-big-array",
"dep:prost",
"dep:qrcode",
]
[lib]
name = "construct"
path = "src/lib.rs"
[[bin]]
name = "construct"
path = "src/main.rs"
[dependencies.aardvark-sys]
version = "0.1.0"
[dependencies.anyhow]
version = "1.0"
[dependencies.async-imap]
version = "0.11"
features = ["runtime-tokio"]
default-features = false
[dependencies.async-trait]
version = "0.1"
[dependencies.axum]
version = "0.8"
features = [
"http1",
"json",
"tokio",
"query",
"ws",
"macros",
"multipart",
]
default-features = false
[dependencies.base64]
version = "0.22"
[dependencies.chacha20poly1305]
version = "0.10"
[dependencies.chrono]
version = "0.4"
features = [
"clock",
"std",
"serde",
]
default-features = false
[dependencies.chrono-tz]
version = "0.10"
[dependencies.clap]
version = "4.5"
features = ["derive"]
[dependencies.clap_complete]
version = "4.6"
[dependencies.console]
version = "0.16"
[dependencies.cron]
version = "0.16"
[dependencies.dialoguer]
version = "0.12"
features = ["fuzzy-select"]
[dependencies.directories]
version = "6.0"
[dependencies.fantoccini]
version = "0.22.1"
features = ["rustls-tls"]
optional = true
default-features = false
[dependencies.flate2]
version = "1.1"
[dependencies.fluent]
version = "0.17"
[dependencies.fluent-bundle]
version = "0.16"
[dependencies.futures-util]
version = "0.3"
features = [
"sink",
"alloc",
]
default-features = false
[dependencies.glob]
version = "0.3"
[dependencies.hex]
version = "0.4"
[dependencies.hmac]
version = "0.12"
[dependencies.hostname]
version = "0.4.2"
[dependencies.http-body-util]
version = "0.1"
[dependencies.hyper]
version = "1"
features = [
"http1",
"server",
]
[dependencies.hyper-util]
version = "0.1"
features = [
"tokio",
"server-auto",
"server-graceful",
]
[dependencies.image]
version = "0.25"
features = [
"jpeg",
"png",
]
default-features = false
[dependencies.include_dir]
version = "0.7"
[dependencies.indicatif]
version = "0.18"
[dependencies.lettre]
version = "0.11.19"
features = [
"builder",
"smtp-transport",
"rustls-tls",
]
default-features = false
[dependencies.mail-parser]
version = "0.11.2"
[dependencies.matrix-sdk]
version = "0.16"
features = [
"e2e-encryption",
"rustls-tls",
"markdown",
"sqlite",
]
optional = true
default-features = false
[dependencies.mime_guess]
version = "2"
[dependencies.nanohtml2text]
version = "0.2"
[dependencies.nostr-sdk]
version = "0.44"
features = [
"nip04",
"nip59",
]
optional = true
default-features = false
[dependencies.opentelemetry]
version = "0.31"
features = [
"trace",
"metrics",
]
optional = true
default-features = false
[dependencies.opentelemetry-otlp]
version = "0.31"
features = [
"trace",
"metrics",
"http-proto",
"reqwest-blocking-client",
"reqwest-rustls-webpki-roots",
]
optional = true
default-features = false
[dependencies.opentelemetry_sdk]
version = "0.31"
features = [
"trace",
"metrics",
]
optional = true
default-features = false
[dependencies.parking_lot]
version = "0.12"
[dependencies.portable-atomic]
version = "1"
[dependencies.portable-pty]
version = "0.9"
[dependencies.prometheus]
version = "0.14"
optional = true
default-features = false
[dependencies.prost]
version = "0.14"
features = ["derive"]
optional = true
default-features = false
[dependencies.rand]
version = "0.10"
[dependencies.regex]
version = "1.10"
[dependencies.reqwest]
version = "0.12"
features = [
"json",
"rustls-tls",
"blocking",
"multipart",
"stream",
"socks",
]
default-features = false
[dependencies.ring]
version = "0.17"
[dependencies.rusqlite]
version = "0.37"
features = ["bundled"]
[dependencies.rust-embed]
version = "8"
[dependencies.rustls]
version = "0.23"
[dependencies.rustls-pemfile]
version = "2"
[dependencies.rustls-pki-types]
version = "1.14.1"
[dependencies.schemars]
version = "1.2"
[dependencies.serde]
version = "1.0"
features = ["derive"]
default-features = false
[dependencies.serde-big-array]
version = "0.5"
optional = true
[dependencies.serde_json]
version = "1.0"
features = ["std"]
default-features = false
[dependencies.sha2]
version = "0.10"
[dependencies.shellexpand]
version = "3.1"
[dependencies.tar]
version = "0.4"
[dependencies.tempfile]
version = "3.26"
[dependencies.thiserror]
version = "2.0"
[dependencies.tokio]
version = "1.50"
features = [
"rt-multi-thread",
"macros",
"time",
"net",
"io-util",
"sync",
"process",
"io-std",
"fs",
"signal",
]
default-features = false
[dependencies.tokio-rustls]
version = "0.26.4"
[dependencies.tokio-serial]
version = "5"
optional = true
default-features = false
[dependencies.tokio-socks]
version = "0.5"
[dependencies.tokio-stream]
version = "0.1.18"
features = [
"fs",
"sync",
]
default-features = false
[dependencies.tokio-tungstenite]
version = "0.29"
features = ["rustls-tls-webpki-roots"]
[dependencies.tokio-util]
version = "0.7"
default-features = false
[dependencies.toml]
version = "1.0"
[dependencies.tower]
version = "0.5"
features = ["util"]
default-features = false
[dependencies.tower-http]
version = "0.6"
features = [
"limit",
"timeout",
]
default-features = false
[dependencies.tracing]
version = "0.1"
default-features = false
[dependencies.tracing-subscriber]
version = "0.3"
features = [
"fmt",
"ansi",
"env-filter",
]
default-features = false
[dependencies.unic-langid]
version = "0.9"
features = ["macros"]
[dependencies.urlencoding]
version = "2.1"
[dependencies.uuid]
version = "1.22"
features = [
"v4",
"std",
]
default-features = false
[dependencies.webpki-roots]
version = "1.0.6"
[dependencies.which]
version = "8.0"
[dependencies.zip]
version = "8.6"
features = ["deflate-flate2"]
default-features = false
[dev-dependencies.criterion]
version = "0.8"
features = ["async_tokio"]
[dev-dependencies.rcgen]
version = "0.13"
[dev-dependencies.scopeguard]
version = "1.2"
[dev-dependencies.tempfile]
version = "3.26"
[dev-dependencies.wiremock]
version = "0.6"
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.cpal]
version = "0.15"
optional = true
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.nusb]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.pdf-extract]
version = "0.10"
optional = true
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.probe-rs]
version = "0.31"
optional = true
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.qrcode]
version = "0.14"
optional = true
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs-binary]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs-core]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs-proto]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs-tokio-transport]
version = "0.2"
optional = true
default-features = false
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))'.dependencies.wa-rs-ureq-http]
version = "0.2"
optional = true
[target.'cfg(target_os = "linux")'.dependencies.landlock]
version = "0.4"
optional = true
[target.'cfg(target_os = "linux")'.dependencies.rppal]
version = "0.22"
optional = true
[target."cfg(unix)".dependencies.libc]
version = "0.2"
[profile.ci]
lto = "thin"
codegen-units = 16
inherits = "release"
[profile.dev]
opt-level = 1
incremental = true
[profile.dist]
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "abort"
inherits = "release"
strip = true
[profile.release]
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true
[profile.release-fast]
codegen-units = 8
inherits = "release"