fabro/lib/apps/fabro-server/Cargo.toml
Bryan Helmkamp 75e5f34c0d
Expose lithos request and response shapes through the API, server, CLI, and web
The OpenAPI spec adopts the lithos request, response, content part,
tool, usage, and cost schemas. The completions endpoint returns the
lithos `Response` JSON verbatim and SSE carries lithos `StreamEvent`s
verbatim. The models and providers endpoints serve the fabro-types
catalog views, and the install and model-test flows probe providers
through fabro-llm.

The CLI builds its catalog from the operator overlay, drives `fabro exec`
through the server gateway adapter, and parses reasoning effort with the
shared controls. The web app reads content parts as lithos-tagged
objects. The TypeScript client is regenerated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 17:26:57 -06:00

129 lines
4.7 KiB
TOML

[package]
name = "fabro-server"
edition.workspace = true
version.workspace = true
publish = false
license.workspace = true
description = "HTTP server for Fabro pipelines"
[lib]
doctest = false
[features]
test-support = ["fabro-store/test-support", "fabro-llm/test-support", "fabro-auth/test-support"]
[[test]]
name = "it"
path = "tests/it/main.rs"
required-features = ["test-support"]
[lints]
workspace = true
[dependencies]
fabro-automation = { path = "../../components/fabro-automation" }
fabro-auth = { path = "../../foundation/fabro-auth" }
fabro-install = { path = "../../components/fabro-install" }
fabro-spa = { path = "../fabro-spa" }
fabro-config = { path = "../../foundation/fabro-config" }
fabro-environment.workspace = true
fabro-graphviz = { path = "../../components/fabro-graphviz" }
fabro-hooks = { path = "../../components/fabro-hooks" }
fabro-interview = { path = "../../components/fabro-interview" }
fabro-slack = { path = "../../components/fabro-slack" }
fabro-workflow = { path = "../../components/fabro-workflow" }
fabro-workflow-version = { path = "../../components/fabro-workflow-version" }
fabro-validate = { path = "../../components/fabro-validate" }
fabro-sandbox = { path = "../../components/fabro-sandbox", features = ["daytona", "docker"] }
fabro-github = { path = "../../components/fabro-github" }
fabro-agent = { path = "../../components/fabro-agent" }
fabro-llm = { path = "../../components/fabro-llm" }
fabro-manifest = { path = "../../components/fabro-manifest" }
fabro-mcp-store = { path = "../../components/fabro-mcp-store" }
fabro-proc = { path = "../../foundation/fabro-proc" }
fabro-template = { path = "../../foundation/fabro-template" }
fabro-tool = { path = "../../components/fabro-tool" }
fabro-types = { path = "../../foundation/fabro-types" }
fabro-util = { path = "../../foundation/fabro-util" }
fabro-api = { path = "../../foundation/fabro-api" }
fabro-client = { path = "../../foundation/fabro-client" }
fabro-db = { path = "../../foundation/fabro-db" }
fabro-store = { path = "../../components/fabro-store" }
fabro-vault = { path = "../../foundation/fabro-vault" }
fabro-variable = { path = "../../components/fabro-variable" }
fabro-http.workspace = true
fabro-redact.workspace = true
fabro-static.workspace = true
chrono.workspace = true
croner.workspace = true
futures-util.workspace = true
axum = { workspace = true, features = ["ws"] }
axum-extra.workspace = true
cookie.workspace = true
dirs.workspace = true
globset.workspace = true
tower = "0.5"
tower-http = { version = "0.6", features = ["trace", "compression-br", "compression-gzip"] }
tokio-stream = { workspace = true, features = ["sync"] }
tokio-util.workspace = true
base64.workspace = true
jsonwebtoken.workspace = true
hkdf.workspace = true
tokio.workspace = true
serde.workspace = true
serde_json.workspace = true
serde_yaml = "0.9"
sqlx.workspace = true
anyhow.workspace = true
async-trait.workspace = true
async_zip.workspace = true
clap.workspace = true
toml.workspace = true
toml_edit.workspace = true
tracing.workspace = true
ulid.workspace = true
uuid.workspace = true
hmac.workspace = true
sha2.workspace = true
hex.workspace = true
rand.workspace = true
bytes = "1"
tempfile = "3"
object_store.workspace = true
# reqwest 0.12 is a direct dep only so `NoProxyReqwestConnector` can build a
# `reqwest::Client` of the version object_store accepts. Rest of the crate
# talks to HTTP via fabro-http (reqwest 0.13).
object_store_reqwest = { package = "reqwest", version = "0.12", default-features = false, features = ["rustls-tls-native-roots"] }
mime_guess.workspace = true
regex.workspace = true
semver.workspace = true
walkdir.workspace = true
multer = "3"
thiserror.workspace = true
percent-encoding.workspace = true
url = "2"
zeroize.workspace = true
strum.workspace = true
sysinfo = { version = "0.35.2", default-features = false, features = ["system", "disk"] }
[build-dependencies]
fabro-build-support = { path = "../../foundation/build-support" }
chrono = { workspace = true }
[dev-dependencies]
fabro-auth = { path = "../../foundation/fabro-auth", features = ["test-support"] }
fabro-llm = { path = "../../components/fabro-llm", features = ["test-support"] }
git2.workspace = true
tokio = { workspace = true, features = ["test-util", "macros"] }
tower = "0.5"
http-body-util = "0.1"
httpmock = "0.8"
serde_yaml = "0.9"
tracing-subscriber.workspace = true
tokio-util.workspace = true
tokio-tungstenite.workspace = true
fabro-macros = { path = "../../foundation/fabro-macros" }
fabro-sandbox = { path = "../../components/fabro-sandbox", features = ["test-support"] }
fabro-store = { path = "../../components/fabro-store", features = ["test-support"] }
fabro-test = { workspace = true }
fabro-types = { path = "../../foundation/fabro-types", features = ["test-support"] }