mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-07 08:27:12 +00:00
Operators choose Docker (default, zero-config) or Daytona (validated via Daytona SDK) during browser install. Selection is captured in settings.toml under [run.sandbox] -- explicitly even for Docker, so the choice is locked in. Daytona keys land in the vault as DAYTONA_API_KEY (Environment secret). Step always runs after object_store and before the LLM step. Server adds POST /install/sandbox/test (validates Daytona key via client.list) and PUT /install/sandbox; both reuse the install-token auth and InstallSecret redaction patterns established by object-store. A resolve_install_sandbox_state helper preserves a saved Daytona key when the operator revisits the step without re-entering it. The in-memory api_key is dropped from PendingInstall after finish, matching the manual_credentials cleanup for S3 access keys. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
103 lines
3.1 KiB
TOML
103 lines
3.1 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
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
fabro-auth = { path = "../fabro-auth" }
|
|
fabro-install = { path = "../fabro-install" }
|
|
fabro-spa = { path = "../fabro-spa" }
|
|
fabro-config = { path = "../fabro-config" }
|
|
fabro-graphviz = { path = "../fabro-graphviz" }
|
|
fabro-hooks = { path = "../fabro-hooks" }
|
|
fabro-interview = { path = "../fabro-interview" }
|
|
fabro-slack = { path = "../fabro-slack" }
|
|
fabro-workflow = { path = "../fabro-workflow" }
|
|
fabro-validate = { path = "../fabro-validate" }
|
|
fabro-sandbox = { path = "../fabro-sandbox", features = ["daytona"] }
|
|
fabro-github = { path = "../fabro-github" }
|
|
fabro-agent = { path = "../fabro-agent" }
|
|
fabro-llm = { path = "../fabro-llm" }
|
|
fabro-model = { path = "../fabro-model" }
|
|
fabro-proc = { path = "../fabro-proc" }
|
|
fabro-retro = { path = "../fabro-retro" }
|
|
fabro-types = { path = "../fabro-types" }
|
|
fabro-util = { path = "../fabro-util" }
|
|
fabro-api = { path = "../fabro-api" }
|
|
fabro-store = { path = "../fabro-store" }
|
|
fabro-vault = { path = "../fabro-vault" }
|
|
fabro-http.workspace = true
|
|
fabro-redact.workspace = true
|
|
fabro-static.workspace = true
|
|
chrono.workspace = true
|
|
futures-util.workspace = true
|
|
axum.workspace = true
|
|
axum-extra.workspace = true
|
|
cookie.workspace = true
|
|
dirs.workspace = true
|
|
globset.workspace = true
|
|
tower = "0.5"
|
|
tower-http = { version = "0.6", features = ["trace"] }
|
|
tokio-stream = { workspace = true, features = ["sync"] }
|
|
base64.workspace = true
|
|
jsonwebtoken.workspace = true
|
|
hkdf.workspace = true
|
|
tokio.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
serde_yaml = "0.9"
|
|
anyhow.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
|
|
ipnet = "2.11.0"
|
|
percent-encoding.workspace = true
|
|
url = "2"
|
|
zeroize.workspace = true
|
|
strum.workspace = true
|
|
|
|
[build-dependencies]
|
|
chrono = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
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
|
|
async-trait.workspace = true
|
|
tokio-util.workspace = true
|
|
fabro-macros = { path = "../fabro-macros" }
|
|
fabro-sandbox = { path = "../fabro-sandbox", features = ["test-support"] }
|
|
fabro-test = { workspace = true }
|
|
fabro-types = { path = "../fabro-types", features = ["test-support"] }
|