mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-01 02:04:24 +00:00
owned() polled tokio's ctrl_c() only for the duration of one Git acquisition. On Unix that listener permanently replaces the default SIGINT disposition, so once acquisition finished nothing handled Ctrl-C and fabro create, fabro run --detach, and fabro run before attach silently ignored it while waiting on the server. Introduce an Interruption handle that the command entry points create from the run arguments: it installs a listener only when --workflow-git or --target-git is in play, guards create (and start for fabro run) as one phase, and tracks owned Git tasks so interruption waits for their cleanup before returning. attach keeps installing its own listener. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
139 lines
5 KiB
TOML
139 lines
5 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-agent.workspace = true
|
|
pebble-coding-agent.workspace = true
|
|
pebble-cli-core.workspace = true
|
|
sandbox-driver.workspace = true
|
|
fabro-dump = { path = "../../components/fabro-dump" }
|
|
fabro-hooks = { path = "../../components/fabro-hooks" }
|
|
fabro-install = { path = "../../components/fabro-install" }
|
|
fabro-interview = { path = "../../components/fabro-interview" }
|
|
fabro-mcp = { path = "../../components/fabro-mcp" }
|
|
fabro-mcp-server = { path = "../fabro-mcp-server" }
|
|
fabro-manifest = { path = "../../components/fabro-manifest" }
|
|
fabro-proc = { path = "../../foundation/fabro-proc" }
|
|
fabro-sandbox = { path = "../../components/fabro-sandbox" }
|
|
fabro-checkpoint = { path = "../../components/fabro-checkpoint" }
|
|
fabro-graphviz = { path = "../../components/fabro-graphviz" }
|
|
fabro-validate = { path = "../../components/fabro-validate" }
|
|
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-template = { path = "../../foundation/fabro-template" }
|
|
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
|
|
dotenvy.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
|
|
fs2.workspace = true
|
|
serde.workspace = true
|
|
thiserror.workspace = true
|
|
toml.workspace = true
|
|
toml_edit.workspace = true
|
|
futures.workspace = true
|
|
regex.workspace = true
|
|
semver.workspace = true
|
|
progenitor-client = "0.13"
|
|
async-trait.workspace = true
|
|
jsonwebtoken.workspace = true
|
|
base64.workspace = true
|
|
ulid.workspace = true
|
|
scopeguard = "1"
|
|
rustls = { version = "0.23", default-features = false, features = ["std", "ring"] }
|
|
ring = "0.17"
|
|
x509-parser = "0.16"
|
|
rand.workspace = true
|
|
dialoguer.workspace = true
|
|
git2.workspace = true
|
|
axum.workspace = true
|
|
serde_json.workspace = true
|
|
serde_yaml = "0.9"
|
|
tempfile = "3"
|
|
sha2.workspace = true
|
|
shlex = "1"
|
|
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]
|
|
assert_cmd = "2"
|
|
walkdir.workspace = true
|
|
fabro-acp = { path = "../../components/fabro-acp", features = ["test-support"] }
|
|
fabro-mcp = { path = "../../components/fabro-mcp", features = ["test-support"] }
|
|
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-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"] }
|