mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-06 02:48:25 +00:00
Fabro's run-branch setup and its pushes were the last git it assembled by hand: two rev-parse calls, a checkout -B, and a push built as shell and run through exec. Because those failures never passed through the driver, fabro kept a second classifier that read git's stderr for the same auth and not-found shapes the driver already classifies for a clone. Both now call the facet. Setup reads the current branch and head commit from the driver's status and creates or moves the run branch at that base; a push sends its refspec with what remains of the retry plan's attempt budget as the push timeout. The retry plan, the credential lease, and the drift repair stay as they were — they are fabro's policy — but the decision they act on comes from the driver's failure class, the same way the clone's does. The output-shaped classifiers and the auth hint matchers are deleted; the message classifier remains for the host-side repository probe and metadata push, which never run inside a sandbox. A git failure's captured output now renders as the attempt's output tail, as an exec failure's did. The driver pin moves to lithoscomputer/sandbox-driver#18, which adds the push refspec and timeout, the checkout start point, and the status head this relies on. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
192 lines
7.2 KiB
TOML
192 lines
7.2 KiB
TOML
[workspace]
|
|
members = [
|
|
"lib/apps/*",
|
|
"lib/components/*",
|
|
"lib/foundation/*",
|
|
"test/twin/openai",
|
|
"test/twin/github",
|
|
]
|
|
default-members = ["lib/apps/fabro-cli"]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
version = "0.348.0-nightly.0"
|
|
license = "MIT"
|
|
|
|
[workspace.dependencies]
|
|
agent-client-protocol = { version = "0.11.1", features = ["unstable_session_usage"] }
|
|
agent-client-protocol-tokio = "0.11.1"
|
|
anyhow = "1"
|
|
axum = { version = "0.8" }
|
|
axum-extra = { version = "0.10", features = ["cookie-private", "query"] }
|
|
cookie = { version = "0.18", features = ["percent-encode", "private", "signed", "key-expansion"] }
|
|
croner = "3.0.1"
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = { version = "1", features = ["preserve_order"] }
|
|
sqlx = { version = "0.9", default-features = false, features = ["runtime-tokio", "sqlite-bundled", "migrate", "macros"] }
|
|
tokio = { version = "1", features = ["full"] }
|
|
reqwest = { version = "0.13", default-features = false, features = ["json", "stream", "rustls", "query", "form", "multipart"] }
|
|
sse-stream = "0.2"
|
|
ulid = "1"
|
|
uuid = { version = "1", features = ["v4", "v7", "v8"] }
|
|
rand = "0.9"
|
|
dotenvy = "0.15"
|
|
futures = "0.3"
|
|
tokio-stream = "0.1"
|
|
async-trait = "0.1"
|
|
async_zip = { version = "0.0.18", features = ["tokio", "deflate"] }
|
|
fs2 = "0.4"
|
|
base64 = "0.22"
|
|
bytes = "1"
|
|
tokio-util = "0.7"
|
|
# AWS building blocks for the native Bedrock adapter. Lean stack: request
|
|
# signing + credential chain + event-stream decode only. Transport for the
|
|
# actual Bedrock inference calls stays on fabro-http; the full
|
|
# aws-sdk-bedrockruntime (and its parallel hyper stack) is not pulled in.
|
|
# aws-config keeps its DEFAULT features on purpose: `rt-tokio` supplies the
|
|
# TokioSleep impl the credential chain's retry requires (without it,
|
|
# resolving the default chain panics with "an async sleep implementation is
|
|
# required"), and `sso`/`credentials-process` make from_default_chain's
|
|
# documented SSO/credential-process support real. `rustls` pins the TLS
|
|
# backend for credential-resolution HTTP.
|
|
aws-config = { version = "1", features = ["behavior-version-latest", "rustls"] }
|
|
aws-credential-types = { version = "1", features = ["hardcoded-credentials"] }
|
|
aws-sigv4 = "1"
|
|
aws-smithy-eventstream = "0.60"
|
|
aws-smithy-runtime-api = "1"
|
|
aws-smithy-types = "1"
|
|
clap = { version = "4", features = ["derive", "env"] }
|
|
clap_complete = "4"
|
|
jsonschema = { version = "0.42", default-features = false }
|
|
chrono = { version = "0.4", features = ["clock", "serde"] }
|
|
dashmap = "6"
|
|
cli-table = { version = "0.5", default-features = false }
|
|
console = "0.15"
|
|
dialoguer = "0.12"
|
|
git2 = { version = "0.20", default-features = false, features = ["vendored-libgit2", "vendored-openssl", "https"] }
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
|
|
tracing-appender = "0.2"
|
|
rmcp = { version = "1.4", default-features = false }
|
|
walkdir = "2"
|
|
regex = "1"
|
|
semver = "1"
|
|
aho-corasick = "1"
|
|
globset = "0.4"
|
|
glob = "0.3"
|
|
dirs = "6"
|
|
mac_address = "1"
|
|
md5 = "0.7"
|
|
mime_guess = "2"
|
|
indicatif = "0.18"
|
|
termimad = "0.34"
|
|
toml = "0.8"
|
|
toml_edit = "0.22"
|
|
jsonwebtoken = { version = "10", features = ["aws_lc_rs"] }
|
|
hkdf = "0.12"
|
|
hmac = "0.12"
|
|
sha2 = "0.10"
|
|
hex = "0.4"
|
|
insta = "1"
|
|
fabro-test = { path = "lib/foundation/fabro-test" }
|
|
twin-openai = { path = "test/twin/openai" }
|
|
twin-github = { path = "test/twin/github" }
|
|
tokio-tungstenite = { version = "0.26", features = ["rustls-tls-webpki-roots"] }
|
|
futures-util = "0.3"
|
|
# sandbox-driver: the sandbox provider layer. Bundled Host, Docker, and
|
|
# Daytona providers link in-process; third-party providers run as stdio
|
|
# plugins through sandbox-driver-protocol. Pinned by rev; currently the head of
|
|
# the sandbox-driver PR stack #9-#15 (configured plugin kind, tag pins, classified
|
|
# git failures, stop grace, snapshot ensure, ownership scope, testing doubles), to
|
|
# move to main on merge. The CI plugin job installs the driver executables at the
|
|
# same rev, read from this file.
|
|
sandbox-driver = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-protocol = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-host = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-docker = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-docker-config = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-daytona = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-daytona-config = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sandbox-driver-testing = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "583b72a82b1ed51bccb8016b227b10b181c1560d" }
|
|
sentry = { version = "0.35", default-features = false, features = ["backtrace", "contexts", "ureq", "rustls"] }
|
|
fork = "0.2"
|
|
exec = "0.3"
|
|
slatedb = { version = "0.11.2", features = ["zstd"] }
|
|
object_store = { version = "0.12.5", features = ["aws"] }
|
|
rust-embed = "8"
|
|
percent-encoding = "2"
|
|
minijinja = "=2.19.0"
|
|
miette = { version = "7.6", features = ["fancy"] }
|
|
fabro-http = { path = "lib/foundation/fabro-http" }
|
|
fabro-environment = { path = "lib/components/fabro-environment" }
|
|
fabro-options-metadata = { path = "lib/foundation/fabro-options-metadata" }
|
|
fabro-redact = { path = "lib/foundation/fabro-redact" }
|
|
fabro-static = { path = "lib/foundation/fabro-static" }
|
|
graphviz-sys = { git = "https://github.com/fabro-sh/graphviz-sys" }
|
|
ref-cast = "1"
|
|
strum = { version = "0.28", features = ["derive"] }
|
|
url = "2"
|
|
zeroize = "1"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "deny"
|
|
unreachable_pub = "warn"
|
|
|
|
[workspace.lints.clippy]
|
|
pedantic = { level = "warn", priority = -2 }
|
|
allow_attributes_without_reason = "warn"
|
|
# Allowed pedantic lints
|
|
implicit_hasher = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
module_name_repetitions = "allow"
|
|
must_use_candidate = "allow"
|
|
similar_names = "allow"
|
|
struct_excessive_bools = "allow"
|
|
too_many_arguments = "allow"
|
|
too_many_lines = "allow"
|
|
cast_precision_loss = "allow"
|
|
doc_markdown = "allow"
|
|
# Disallowed restriction lints
|
|
print_stdout = "warn"
|
|
print_stderr = "warn"
|
|
dbg_macro = "warn"
|
|
empty_drop = "warn"
|
|
empty_structs_with_brackets = "warn"
|
|
disallowed_methods = "deny"
|
|
exit = "warn"
|
|
get_unwrap = "warn"
|
|
unwrap_used = "deny"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
use_self = "warn"
|
|
# Project-specific lints
|
|
wildcard_imports = "warn"
|
|
absolute_paths = "warn"
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
strip = true
|
|
|
|
[profile.dev]
|
|
debug = "line-tables-only"
|
|
split-debuginfo = "off"
|
|
|
|
[profile.test]
|
|
debug = "line-tables-only"
|
|
split-debuginfo = "off"
|
|
|
|
[profile.dev.package."*"]
|
|
debug = false # Disable debug info for all dependencies
|
|
opt-level = 1 # Shrinks monomorphized generics, reducing test binary size
|
|
|
|
# regex is extremely slow in debug builds (~10s to compile gitleaks patterns)
|
|
[profile.dev.package.regex]
|
|
opt-level = 2
|
|
[profile.dev.package.regex-automata]
|
|
opt-level = 2
|
|
[profile.dev.package.regex-syntax]
|
|
opt-level = 2
|