mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-07 08:27:12 +00:00
Exit the process from `main` for every command instead of returning. The `mcp start` command parks Tokio's stdin reader on a read only the MCP host can end, so dropping the runtime waits forever. Exiting in `main` also keeps the CLI telemetry event, which the previous exit inside the MCP command skipped. That removes the reason for the `McpServerExit` enum, whose only job was to carry an implementation detail out to the CLI so it could exit. Watch the executable through its device and inode on Unix. That is a complete file identity, so the length and modification time no longer add anything. Drop the PATH scan: `current_exe` reports the symlink itself on macOS, so it detects a Homebrew relink without it. This also drops the `fabro-static` dependency and a clippy suppression. Bound the shutdown wait after an upgrade is detected. The transport closes by writing to a stdout the host may already have stopped reading, which could hang the exit the change is supposed to trigger. Log a warning when upgrade detection cannot start, rather than disabling it silently. Share one spawn helper between the two raw stdio tests, and link the test executable instead of copying 200 MB of binary. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
1.1 KiB
TOML
39 lines
1.1 KiB
TOML
[package]
|
|
name = "fabro-mcp-server"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
publish = false
|
|
license.workspace = true
|
|
description = "Fabro MCP stdio server"
|
|
|
|
[lib]
|
|
doctest = false
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
fabro-api = { path = "../../foundation/fabro-api" }
|
|
fabro-client = { path = "../../foundation/fabro-client" }
|
|
fabro-manifest = { path = "../../components/fabro-manifest" }
|
|
fabro-config = { path = "../../foundation/fabro-config" }
|
|
fabro-model = { path = "../../foundation/fabro-model" }
|
|
fabro-server = { path = "../fabro-server" }
|
|
fabro-tool = { path = "../../components/fabro-tool" }
|
|
fabro-types = { path = "../../foundation/fabro-types" }
|
|
fabro-util = { path = "../../foundation/fabro-util" }
|
|
futures.workspace = true
|
|
rmcp = { workspace = true, features = ["server", "macros", "schemars", "transport-io"] }
|
|
schemars = "1.2.1"
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
strum.workspace = true
|
|
tokio.workspace = true
|
|
toml.workspace = true
|
|
tracing.workspace = true
|
|
|
|
[dev-dependencies]
|
|
httpmock = "0.8"
|
|
tempfile = "3"
|