mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-01 02:04:24 +00:00
Petri creates and owns every run sandbox through the sandbox driver, so what Fabro still needs around a driver handle is the Pebble glue: the Environment pebble's coding agent runs its tools through, the exec policy (stop grace, working directory, StripAll, the termination mapping, the redacted output tail), pebble's port routes over the driver's preview URLs, the secret redactor, the path helpers, and a log rendering that appends a failed command's redacted tail. This crate holds that glue, moved from fabro-sandbox, over `Arc<dyn Sandbox>` plus a working directory instead of `RunSandbox`, with a `MockSandbox` double behind `test-support`. `fabro exec` creates its host sandbox directly on the driver's Host provider and activates it; Ask Fabro wraps the attached handle. Both keep the provider alive beside the sandbox where the session's processes are the provider's process groups. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
133 lines
4.8 KiB
TOML
133 lines
4.8 KiB
TOML
[package]
|
|
name = "fabro-cli"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
publish = false
|
|
license.workspace = true
|
|
description = "Unified CLI for the Fabro AI framework"
|
|
|
|
[[bin]]
|
|
name = "fabro"
|
|
path = "src/main.rs"
|
|
|
|
[features]
|
|
default = []
|
|
sleep_inhibitor = ["dep:core-foundation"]
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
fabro-auth = { path = "../../foundation/fabro-auth" }
|
|
fabro-config = { path = "../../foundation/fabro-config" }
|
|
fabro-environment = { path = "../../components/fabro-environment" }
|
|
fabro-llm = { path = "../../components/fabro-llm" }
|
|
fabro-oauth = { path = "../../foundation/fabro-oauth" }
|
|
fabro-github = { path = "../../components/fabro-github" }
|
|
pebble-coding-agent.workspace = true
|
|
pebble-cli-core.workspace = true
|
|
fabro-dump = { path = "../../components/fabro-dump" }
|
|
fabro-install = { path = "../../components/fabro-install" }
|
|
fabro-interview = { path = "../../components/fabro-interview" }
|
|
fabro-mcp-server = { path = "../fabro-mcp-server" }
|
|
fabro-petri = { path = "../../components/fabro-petri" }
|
|
fabro-manifest = { path = "../../components/fabro-manifest" }
|
|
fabro-proc = { path = "../../foundation/fabro-proc" }
|
|
fabro-sandbox = { path = "../../components/fabro-sandbox" }
|
|
fabro-pebble-sandbox = { path = "../../components/fabro-pebble-sandbox" }
|
|
sandbox-driver.workspace = true
|
|
sandbox-driver-host.workspace = true
|
|
fabro-graphviz = { path = "../../components/fabro-graphviz" }
|
|
fabro-workflow = { path = "../../components/fabro-workflow" }
|
|
fabro-server = { path = "../fabro-server" }
|
|
fabro-client = { path = "../../foundation/fabro-client" }
|
|
fabro-api = { path = "../../foundation/fabro-api" }
|
|
fabro-telemetry = { path = "../../foundation/fabro-telemetry" }
|
|
fabro-store = { path = "../../components/fabro-store" }
|
|
fabro-vault = { path = "../../foundation/fabro-vault" }
|
|
fabro-types = { path = "../../foundation/fabro-types", features = ["clap"] }
|
|
lithos-llm = { workspace = true, features = ["runtime"] }
|
|
fabro-redact.workspace = true
|
|
fabro-util = { path = "../../foundation/fabro-util" }
|
|
fabro-http.workspace = true
|
|
fabro-static.workspace = true
|
|
fabro-tool = { path = "../../components/fabro-tool" }
|
|
clap.workspace = true
|
|
clap_complete.workspace = true
|
|
cli-table.workspace = true
|
|
console.workspace = true
|
|
indicatif.workspace = true
|
|
anyhow.workspace = true
|
|
miette.workspace = true
|
|
tokio.workspace = true
|
|
tokio-tungstenite.workspace = true
|
|
tracing.workspace = true
|
|
tracing-subscriber.workspace = true
|
|
tracing-appender.workspace = true
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
dirs.workspace = true
|
|
serde.workspace = true
|
|
thiserror.workspace = true
|
|
toml.workspace = true
|
|
toml_edit.workspace = true
|
|
futures.workspace = true
|
|
semver.workspace = true
|
|
async-trait.workspace = true
|
|
jsonwebtoken.workspace = true
|
|
base64.workspace = true
|
|
scopeguard = "1"
|
|
rustls = { version = "0.23", default-features = false, features = ["std", "ring"] }
|
|
ring = "0.17"
|
|
rand.workspace = true
|
|
dialoguer.workspace = true
|
|
axum.workspace = true
|
|
serde_json.workspace = true
|
|
serde_yaml = "0.9"
|
|
tempfile = "3"
|
|
sha2.workspace = true
|
|
object_store.workspace = true
|
|
bytes.workspace = true
|
|
tokio-util.workspace = true
|
|
libc = "0.2"
|
|
nix = { version = "0.30", features = ["fs", "signal"] }
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
core-foundation = { version = "0.9", optional = true }
|
|
|
|
# Vendor openssl only for musl targets. Transitive dependencies pull
|
|
# native-tls via reqwest, which needs libssl. On glibc runners the system
|
|
# libssl is used; on musl runners we compile openssl from source.
|
|
[target.'cfg(target_env = "musl")'.dependencies]
|
|
openssl = { version = "0.10", features = ["vendored"] }
|
|
|
|
[build-dependencies]
|
|
fabro-build-support = { path = "../../foundation/build-support" }
|
|
chrono = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
shlex = "1"
|
|
ulid.workspace = true
|
|
regex.workspace = true
|
|
git2.workspace = true
|
|
assert_cmd = "2"
|
|
fabro-db = { path = "../../foundation/fabro-db" }
|
|
walkdir.workspace = true
|
|
rmcp = { workspace = true, features = ["client", "transport-child-process"] }
|
|
fabro-build-support = { path = "../../foundation/build-support" }
|
|
fabro-sandbox = { path = "../../components/fabro-sandbox", features = ["test-support"] }
|
|
fabro-server = { path = "../fabro-server", features = ["test-support"] }
|
|
fabro-petri = { path = "../../components/fabro-petri", features = ["test-support"] }
|
|
fabro-workflow = { path = "../../components/fabro-workflow", features = ["test-support"] }
|
|
fabro-types = { path = "../../foundation/fabro-types", features = ["clap", "test-support"] }
|
|
insta = { workspace = true, features = ["filters"] }
|
|
paste = "1"
|
|
predicates = "3"
|
|
serde_json.workspace = true
|
|
tempfile = "3"
|
|
temp-env = "0.3"
|
|
httpmock = "0.8"
|
|
fabro-test = { workspace = true }
|
|
fabro-macros = { path = "../../foundation/fabro-macros" }
|
|
hkdf.workspace = true
|
|
reqwest = { workspace = true, features = ["cookies"] }
|
|
tokio = { workspace = true, features = ["test-util", "macros"] }
|