diff --git a/Cargo.lock b/Cargo.lock index f1554df..164f337 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1995,7 +1995,7 @@ checksum = "e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9" [[package]] name = "ed-acp" -version = "1.3.1" +version = "1.3.2" dependencies = [ "agent-client-protocol", "anyhow", @@ -2018,7 +2018,7 @@ dependencies = [ [[package]] name = "ed-acp-tauri" -version = "1.3.1" +version = "1.3.2" dependencies = [ "agent-client-protocol", "ed-acp", @@ -2034,7 +2034,7 @@ dependencies = [ [[package]] name = "ed-acp-testkit" -version = "1.3.1" +version = "1.3.2" dependencies = [ "serde_json", "tokio", @@ -2043,7 +2043,7 @@ dependencies = [ [[package]] name = "ed-acp-tui" -version = "1.3.1" +version = "1.3.2" dependencies = [ "agent-client-protocol", "anyhow", @@ -2055,7 +2055,7 @@ dependencies = [ [[package]] name = "ed-agent" -version = "1.3.1" +version = "1.3.2" dependencies = [ "async-trait", "futures-core", @@ -2069,7 +2069,7 @@ dependencies = [ [[package]] name = "ed-agent-ffi" -version = "1.3.1" +version = "1.3.2" dependencies = [ "async-trait", "cc", @@ -2084,7 +2084,7 @@ dependencies = [ [[package]] name = "ed-agent-tauri" -version = "1.3.1" +version = "1.3.2" dependencies = [ "async-trait", "ed-agent", @@ -2098,7 +2098,7 @@ dependencies = [ [[package]] name = "ed-mcp" -version = "1.3.1" +version = "1.3.2" dependencies = [ "agent-client-protocol", "anyhow", @@ -2117,7 +2117,7 @@ dependencies = [ [[package]] name = "ed-onde-account" -version = "1.3.1" +version = "1.3.2" dependencies = [ "axum", "reqwest 0.13.5", diff --git a/Cargo.toml b/Cargo.toml index d84fd3a..bfeaf77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ members = [ # Shared across every crate in the workspace so a release moves one number. # `sync-version` tooling (see the Makefile) reads these. [workspace.package] -version = "1.3.1" +version = "1.3.2" edition = "2021" rust-version = "1.94" license = "MIT OR Apache-2.0" @@ -59,13 +59,13 @@ directories = "6" base64 = "0.23" # Internal -ed-agent = { version = "1.3.1", path = "crates/ed-agent" } -ed-mcp = { version = "1.3.1", path = "crates/ed-mcp" } -ed-acp = { version = "1.3.1", path = "crates/ed-acp" } -ed-acp-tauri = { version = "1.3.1", path = "crates/ed-acp-tauri" } -ed-acp-tui = { version = "1.3.1", path = "crates/ed-acp-tui" } -ed-acp-testkit = { version = "1.3.1", path = "crates/ed-acp-testkit" } -ed-onde-account = { version = "1.3.1", path = "crates/ed-onde-account" } +ed-agent = { version = "1.3.2", path = "crates/ed-agent" } +ed-mcp = { version = "1.3.2", path = "crates/ed-mcp" } +ed-acp = { version = "1.3.2", path = "crates/ed-acp" } +ed-acp-tauri = { version = "1.3.2", path = "crates/ed-acp-tauri" } +ed-acp-tui = { version = "1.3.2", path = "crates/ed-acp-tui" } +ed-acp-testkit = { version = "1.3.2", path = "crates/ed-acp-testkit" } +ed-onde-account = { version = "1.3.2", path = "crates/ed-onde-account" } # gemm-common (via candle, via onde) depends on sysctl for every # `target_vendor = "apple"`, but sysctl 0.6.0 only has a `sys` module behind diff --git a/crates/ed-mcp/Cargo.toml b/crates/ed-mcp/Cargo.toml index f2234e2..7a3ce14 100644 --- a/crates/ed-mcp/Cargo.toml +++ b/crates/ed-mcp/Cargo.toml @@ -24,10 +24,10 @@ serde_json.workspace = true anyhow.workspace = true tracing.workspace = true -# Spawning an MCP server as a child process needs `exec`, which Apple hides on tvOS (`libc` -# has no `execv` there, so `nix` under `process-wrap` doesn't compile). The stdio transport -# is everywhere else. -[target.'cfg(not(target_os = "tvos"))'.dependencies] +# Spawning an MCP server as a child process needs `exec`, which Apple hides on tvOS and +# watchOS (`libc` has no `execv` there, so `nix` under `process-wrap` doesn't compile). The +# stdio transport is everywhere else. +[target.'cfg(not(any(target_os = "tvos", target_os = "watchos")))'.dependencies] rmcp = { workspace = true, features = ["transport-child-process"] } [features] diff --git a/crates/ed-mcp/src/lib.rs b/crates/ed-mcp/src/lib.rs index 110c0c2..07f9feb 100644 --- a/crates/ed-mcp/src/lib.rs +++ b/crates/ed-mcp/src/lib.rs @@ -35,7 +35,7 @@ use rmcp::model::{ }; use rmcp::service::{NotificationContext, PeerRequestOptions, RequestContext, RunningService}; use rmcp::transport::StreamableHttpClientTransport; -#[cfg(not(target_os = "tvos"))] +#[cfg(not(any(target_os = "tvos", target_os = "watchos")))] use rmcp::transport::TokioChildProcess; use rmcp::transport::streamable_http_client::StreamableHttpClientTransportConfig; use rmcp::{ClientHandler, ErrorData as McpError, RoleClient, ServiceExt}; @@ -144,12 +144,12 @@ pub enum Transport { /// Start `command args…` with extra environment variables and talk over its stdio. /// /// Stdio is only available on platforms that can spawn a child process. - /// On `target_os = "tvos"` the OS does not allow apps to create other - /// processes, so this variant is **not** supported on tvOS builds: the - /// matching arm in [`Connection::connect_with`] returns an error at - /// runtime instead of compiling out the variant. Use [`Transport::Http`] - /// for tvOS; if you only know the transport at runtime, branch on the - /// current `target_os` before constructing a `Stdio` spec. + /// On `target_os = "tvos"` and `target_os = "watchos"` the OS does not allow + /// apps to create other processes, so this variant is **not** supported on + /// tvOS or watchOS builds: the matching arm in [`Connection::connect_with`] + /// returns an error at runtime instead of compiling out the variant. Use + /// [`Transport::Http`] there; if you only know the transport at runtime, + /// branch on the current `target_os` before constructing a `Stdio` spec. Stdio { command: PathBuf, args: Vec, @@ -360,7 +360,7 @@ impl Connection { elicitation, }; let handshake = match &spec.transport { - #[cfg(not(target_os = "tvos"))] + #[cfg(not(any(target_os = "tvos", target_os = "watchos")))] Transport::Stdio { command, args, env } => { let mut cmd = tokio::process::Command::new(command); cmd.args(args).envs(env.iter().map(|(k, v)| (k, v))); @@ -368,8 +368,8 @@ impl Connection { .with_context(|| format!("starting {}", command.display()))?; tokio::time::timeout(timeout, handler.serve(transport)).await } - // tvOS can't start a process, so there is no stdio transport to offer. - #[cfg(target_os = "tvos")] + // tvOS and watchOS can't start a process, so there is no stdio transport to offer. + #[cfg(any(target_os = "tvos", target_os = "watchos"))] Transport::Stdio { command, .. } => { bail!( "can't start {}: this platform can't run MCP servers as processes",