mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-15 23:32:46 +00:00
Main merged the sandbox-driver adoption (#849) in a later form than this branch was stacked on: the driver's own exec types replace fabro-sandbox's, shell quoting moved to fabro-util, the sandbox lifecycle collapsed, and the driver's events are stored as run events. This branch had deleted `fabro-agent` and put the coding agent, the environment adapter, and the steering hub on pebble. The resolution takes main's sandbox API and re-applies pebble on top: the `RunSandbox` `Environment` adapter moves to `pebble_environment.rs` (main's `environment.rs` is the sandbox spec) and runs commands through `ExecSpec` and `ExecControls`, feeding pebble's output sink from the driver's; the driver-era `sandbox.*` names leave the known-event list, as on main, so a stored event with that name and no driver shape is `Unknown` rather than an error; `program_exit_code` matches pebble's non-exhaustive termination; the Docker and Daytona smokes use main's constructor and credentials; the remaining `fabro_agent` paths point at fabro-sandbox. Pebble's `mcp` feature pins sandbox-driver, and the preview-url trait objects only cross when both sides name one revision, so pebble moved to main's `a92c0db6` (lithoscomputer/pebble#10) and fabro pins that pebble revision until it lands on pebble main. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
207 lines
8.7 KiB
TOML
207 lines
8.7 KiB
TOML
[workspace]
|
|
members = [
|
|
"lib/apps/*",
|
|
"lib/components/*",
|
|
"lib/foundation/*",
|
|
"test/twin/github",
|
|
]
|
|
default-members = ["lib/apps/fabro-cli"]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
version = "0.354.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"] }
|
|
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" }
|
|
# Provider-neutral LLM catalog and client. Pinned to a revision until 0.x is
|
|
# published to crates.io.
|
|
lithos-llm = { git = "https://github.com/lithoscomputer/lithos-llm", rev = "a1e3fd37b7153870411701327ac117606753fe90", default-features = false }
|
|
# Deterministic OpenAI twin used by twin-mode E2E tests; the same revision
|
|
# lithos-llm verifies its codecs against.
|
|
twin-openai = { git = "https://github.com/lithoscomputer/twins", rev = "ca45f0e50a6716d716aa2f638ca3cf767e88f613" }
|
|
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 `section-4-driver-items` branch (provider-owned scopes, the
|
|
# supervisor as provider, Host attach by directory, git retry and verbs in the
|
|
# driver, status image/snapshot/network, Daytona snapshot caching, services port
|
|
# wait and list, RFC 3339 timestamps), 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 = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-protocol = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-host = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-docker = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-docker-config = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-daytona = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-daytona-config = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
sandbox-driver-testing = { git = "https://github.com/lithoscomputer/sandbox-driver", rev = "a92c0db6b6a122ca9b6df75de6615544f53c0d47" }
|
|
# pebble: the coding agent loop fabro runs its agent stages, Ask Fabro
|
|
# sessions, hook evaluators, and `fabro exec` on. Pinned by rev to pebble's
|
|
# `sandbox-driver-section-4` branch (lithoscomputer/pebble#10), which is
|
|
# pebble main plus the sandbox-driver pin below: the `PreviewUrls` trait
|
|
# objects fabro hands pebble's MCP servers only cross when both sides name
|
|
# one sandbox-driver revision. Re-pin to main once that lands. Pebble pins
|
|
# the same lithos-llm rev as fabro, and its lockfile policy is that every
|
|
# shared crate resolves to the version lithos-llm locks.
|
|
pebble-agent = { git = "https://github.com/lithoscomputer/pebble", rev = "9ec23d00d37faebcb2da5e3c5f2c1dfc5eec4d7f" }
|
|
pebble-coding-agent = { git = "https://github.com/lithoscomputer/pebble", rev = "9ec23d00d37faebcb2da5e3c5f2c1dfc5eec4d7f", features = ["mcp", "search-providers"] }
|
|
pebble-cli-core = { git = "https://github.com/lithoscomputer/pebble", rev = "9ec23d00d37faebcb2da5e3c5f2c1dfc5eec4d7f" }
|
|
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
|