[package]
name = "oris-runtime"
version = "0.15.0"
edition = "2021"
rust-version = "1.80"
publish = true
repository = "https://github.com/Colin4k1024/Oris"
license = "MIT"
description = "An agentic workflow runtime and programmable AI execution system in Rust: stateful graphs, agents, tools, and multi-step execution."
keywords = [
    "agent",
    "workflow",
    "llm",
    "runtime",
    "graph",
]
categories = [
    "development-tools",
    "asynchronous",
    "data-structures",
    "text-processing",
]
readme = "../../README.md"
homepage = "https://github.com/Colin4k1024/Oris"
documentation = "https://docs.rs/oris-runtime"
authors = ["Jiafan"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[package.metadata.docs.rs]
# Build docs with all features so optional APIs are included (vector stores, LLMs, etc.)
all-features = true
# Optional: pass cfg so you can #[cfg(docsrs)] doc-only code
rustdoc-args = ["--cfg", "docsrs"]

[dependencies]
oris-execution-runtime = { version = "0.2.13", path = "../oris-execution-runtime", default-features = false }
oris-kernel = { version = "0.2.12", path = "../oris-kernel", default-features = false }
oris-evokernel = { version = "0.6.3", path = "../oris-evokernel", optional = true }
scraper = "0.21"
serde = { version = "1.0", features = ["derive"] }
async-trait = "0.1.80"
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", features = ["json", "stream"] }
serde_json = "1.0"
futures = "0.3"
regex = "1.10.4"
sha2 = "0.10"
hex = "0.4"
log = "0.4.21"
html-escape = "0.2.13"
reqwest-eventsource = "0.6.0"
async-openai = "0.28.1"
mockito = "1.4.0"
tiktoken-rs = "0.5.8"
sqlx = { version = "0.8.0", default-features = false, features = [
    "postgres",
    "sqlite",
    "runtime-tokio-native-tls",
    "json",
    "uuid",
], optional = true }
uuid = { version = "1.8.0", features = ["v4"], optional = true }
chrono = { version = "0.4", features = ["serde"] }
rusqlite = { version = "0.32", features = ["bundled"], optional = true }
pgvector = { version = "0.4.0", features = [
    "postgres",
    "sqlx",
], optional = true }
text-splitter = { version = "0.29", features = ["tiktoken-rs", "markdown", "code"] }
surrealdb = { version = "2.0.2", optional = true, default-features = false }
csv = "1.3.0"
urlencoding = "2.1.3"
toml = { version = "0.8", optional = true }
serde_yaml = { version = "0.9", optional = true }
quick-xml = { version = "0.31", optional = true, features = ["async-tokio"] }
calamine = { version = "0.24", optional = true }
lopdf = { version = "0.34.0", features = ["nom_parser"], optional = true }
pdf-extract = { version = "0.7.8", optional = true  }
thiserror = "2.0.0"
futures-util = "0.3.30"
async-stream = "0.3.5"
tokio-stream = "0.1.15"
axum = { version = "0.7", optional = true }
tracing = { version = "0.1", optional = true }
schemars = { version = "0.8", features = ["derive"] }
jsonschema = "0.17"
secrecy = { version = "0.10.3", features = ["serde"] }
readability = "0.3.0"
htmd = { version = "0.1", optional = true }
url = "2.5.0"
fastembed = { version = "4", optional = true }
flume = { version = "0.11.0", optional = true }
gix = { version = "0.68.0", default-features = false, optional = true, features = [
    "parallel",
    "revision",
    "serde",
] }
opensearch = { version = "2", optional = true, features = ["aws-auth"] }
aws-config = { version = "=1.8.13", optional = true, features = [
    "behavior-version-latest",
] }
glob = "0.3.1"
strum_macros = "0.27.0"
async-recursion = "1.1.0"
tree-sitter = { version = "0.26", optional = true }
tree-sitter-c = { version = "0.23", optional = true }
tree-sitter-c-sharp = { version = "0.23", optional = true }
tree-sitter-cpp = { version = "0.23", optional = true }
tree-sitter-go = { version = "0.23", optional = true }
tree-sitter-java = { version = "0.23", optional = true }
tree-sitter-javascript = { version = "0.23", optional = true }
tree-sitter-kotlin-ng = { version = "1.1", optional = true }
tree-sitter-python = { version = "0.23", optional = true }
tree-sitter-rust = { version = "0.24", optional = true }
tree-sitter-scala = { version = "0.23", optional = true }
tree-sitter-typescript = { version = "0.23", optional = true }
qdrant-client = { version = "1.10.1", optional = true }
ollama-rs = { version = "0.2.0", optional = true, features = [
    "stream",
    "chat-history",
] }
mistralai-client = { version = "0.14.0", optional = true }
google-ai-rs = { version = "0.1", optional = true }
aws-sdk-bedrockruntime = { version = "=1.124.0", optional = true }
aws-sdk-s3 = { version = "=1.122.0", optional = true }
# Keep optional AWS feature graphs on Rust 1.90 during publish verification.
aws-credential-types = { version = "=1.2.11", optional = true, default-features = false }
aws-runtime = { version = "=1.6.0", optional = true, default-features = false }
aws-sdk-sso = { version = "=1.93.0", optional = true, default-features = false }
aws-sdk-ssooidc = { version = "=1.95.0", optional = true, default-features = false }
aws-sdk-sts = { version = "=1.97.0", optional = true, default-features = false }
aws-sigv4 = { version = "=1.3.8", optional = true, default-features = false }
aws-smithy-async = { version = "=1.2.11", optional = true, default-features = false }
aws-smithy-checksums = { version = "=0.64.3", optional = true, default-features = false }
aws-smithy-eventstream = { version = "=0.60.18", optional = true, default-features = false }
aws-smithy-http = { version = "=0.63.3", optional = true, default-features = false }
aws-smithy-http-client = { version = "=1.1.9", optional = true, default-features = false }
aws-smithy-json = { version = "=0.62.3", optional = true, default-features = false }
aws-smithy-observability = { version = "=0.2.4", optional = true, default-features = false }
aws-smithy-query = { version = "=0.60.13", optional = true, default-features = false }
aws-smithy-runtime = { version = "=1.10.0", optional = true, default-features = false }
aws-smithy-runtime-api = { version = "=1.11.3", optional = true, default-features = false }
aws-smithy-types = { version = "=1.4.3", optional = true, default-features = false }
aws-smithy-xml = { version = "=0.60.13", optional = true, default-features = false }
aws-types = { version = "=1.3.11", optional = true, default-features = false }
octocrab = { version = "0.38", optional = true }
base64 = { version = "0.22", optional = true }
chromadb = { version = "2", optional = true }
hnsw_rs = { version = "0.3", optional = true }
milvus-sdk-rust = { version = "0.1", optional = true }
mongodb = { version = "2", optional = true }
pinecone-rs = { version = "0.1", optional = true }
weaviate-community = { version = "0.2", optional = true }
headless_chrome = { version = "1.0", optional = true }

[features]
default = []
fastembed = ["dep:fastembed"]
git = ["gix", "flume"]
html-to-markdown = ["dep:htmd"]
mistralai = ["mistralai-client"]
gemini = ["google-ai-rs"]
aws-msrv-pins = [
    "dep:aws-credential-types",
    "dep:aws-runtime",
    "dep:aws-sdk-sso",
    "dep:aws-sdk-ssooidc",
    "dep:aws-sdk-sts",
    "dep:aws-sigv4",
    "dep:aws-smithy-async",
    "dep:aws-smithy-checksums",
    "dep:aws-smithy-eventstream",
    "dep:aws-smithy-http",
    "dep:aws-smithy-http-client",
    "dep:aws-smithy-json",
    "dep:aws-smithy-observability",
    "dep:aws-smithy-query",
    "dep:aws-smithy-runtime",
    "dep:aws-smithy-runtime-api",
    "dep:aws-smithy-types",
    "dep:aws-smithy-xml",
    "dep:aws-types",
]
bedrock = ["aws-sdk-bedrockruntime", "aws-config", "aws-msrv-pins"]
lopdf = ["dep:lopdf"]
pdf-extract = ["dep:lopdf", "dep:pdf-extract"]
ollama = ["ollama-rs"]
opensearch = ["dep:opensearch", "aws-config", "aws-msrv-pins"]
postgres = ["pgvector", "dep:sqlx", "uuid"]
kernel-postgres = [
    "dep:sqlx",
    "oris-kernel/kernel-postgres",
    "oris-execution-runtime/kernel-postgres",
]
qdrant = ["qdrant-client", "uuid"]
sqlite-vss = ["dep:sqlx"]
sqlite-vec = ["dep:sqlx"]
surrealdb = ["dep:surrealdb"]
in-memory = []
uuid = ["dep:uuid"]
sqlite-persistence = [
    "rusqlite",
    "dep:uuid",
    "oris-kernel/sqlite-persistence",
    "oris-execution-runtime/sqlite-persistence",
]
chroma = ["dep:chromadb", "uuid"]
faiss = ["dep:hnsw_rs", "uuid"]
milvus = ["dep:milvus-sdk-rust", "uuid"]
mongodb = ["dep:mongodb", "uuid"]
pinecone = ["dep:pinecone-rs", "uuid"]
weaviate = ["dep:weaviate-community", "uuid"]
tree-sitter = [
    "cc",
    "dep:tree-sitter",
    "dep:tree-sitter-c",
    "dep:tree-sitter-c-sharp",
    "dep:tree-sitter-cpp",
    "dep:tree-sitter-go",
    "dep:tree-sitter-java",
    "dep:tree-sitter-javascript",
    "dep:tree-sitter-kotlin-ng",
    "dep:tree-sitter-python",
    "dep:tree-sitter-rust",
    "dep:tree-sitter-scala",
    "dep:tree-sitter-typescript",
]
# Document loader features
yaml = ["serde_yaml"]
toml = ["dep:toml"]
xml = ["quick-xml"]
excel = ["calamine"]
aws-s3 = ["aws-sdk-s3", "aws-config", "aws-msrv-pins"]
github = ["octocrab", "dep:base64"]
browser-use = ["dep:headless_chrome"]
execution-server = [
    "dep:axum",
    "dep:uuid",
    "dep:tracing",
    "oris-kernel/execution-server",
    "oris-execution-runtime/execution-server",
]
evokernel-facade = ["dep:oris-evokernel"]
evolution-experimental = ["evokernel-facade"]
governor-experimental = ["evokernel-facade"]
evolution-network-experimental = ["evokernel-facade", "evolution-experimental"]
economics-experimental = ["evokernel-facade"]
spec-experimental = ["evokernel-facade"]
agent-contract-experimental = ["evokernel-facade"]
full-evolution-experimental = [
    "evolution-experimental",
    "governor-experimental",
    "evolution-network-experimental",
    "economics-experimental",
    "spec-experimental",
    "agent-contract-experimental",
]
# Retriever features
wikipedia = []
arxiv = []
tavily = []
bm25 = []
tfidf = []
svm = []
cohere = []
flashrank = []
contextual-ai = []
llmlingua = []
# Text splitter features
# Note: CodeSplitter is available when tree-sitter feature is enabled
# It uses text-splitter's code feature internally if available

[dev-dependencies]
base64 = "0.22.1"
tokio-test = "0.4.4"
tower = { version = "0.5", features = ["util"] }
testcontainers = "0.23"
env_logger = "0.11"
chrono = { version = "0.4", features = ["serde"] }
mongodb = "2"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }

[build-dependencies]
cc = { version = "1", optional = true }
