summaryrefslogtreecommitdiff
path: root/src/cli/plugin.rs
diff options
context:
space:
mode:
authorSeason Saw <season.saw@gmail.com>2026-08-01 21:17:23 +0800
committerGitHub <noreply@github.com>2026-08-01 16:17:23 +0300
commitf99647b2c2d7fbfd11269330a25ea4f9be59bafa (patch)
tree1d8c9a35a40da30dc7dd0d1e58c1f833076ad002 /src/cli/plugin.rs
parent26a7bc860e4af516ef687d90b9f9dd2830f88d2a (diff)
fix: report a clear cli error when no herdr server is running (#1963)
* fix: report a clear cli error when no herdr server is running socket cli commands surfaced a raw io::Error debug string (`Error: Os { code: 2, ... }`) when nothing was listening on the api socket, which read like a bad --cwd path. map dead-socket connect failures to a `server_not_running` json error carrying the resolved socket path, printed once at the edge that surfaces the error; recovering callers (plugin offline registry fallback, agent start polling) recognize the marker and keep their existing behavior. refs #1941 * fix: map dead-socket errors on the unchecked cli request path refs #1941 * fix: make server-not-running guidance session-aware refs #1941
Diffstat (limited to 'src/cli/plugin.rs')
-rw-r--r--src/cli/plugin.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/cli/plugin.rs b/src/cli/plugin.rs
index b4e6d514..efdb9eca 100644
--- a/src/cli/plugin.rs
+++ b/src/cli/plugin.rs
@@ -1618,14 +1618,19 @@ fn current_unix_ms() -> u64 {
}
fn is_connection_error(err: &std::io::Error) -> bool {
- matches!(
- err.kind(),
- std::io::ErrorKind::NotFound
- | std::io::ErrorKind::ConnectionRefused
- | std::io::ErrorKind::ConnectionAborted
- | std::io::ErrorKind::ConnectionReset
- | std::io::ErrorKind::BrokenPipe
- )
+ // A `server_not_running` marker is a connect failure for recovery purposes:
+ // treating it as a connection error lets plugin commands fall back to the
+ // offline registry. The marker carries (but does not print) a friendly
+ // response, so recovering here prints nothing.
+ super::server_not_running_was_reported(err)
+ || matches!(
+ err.kind(),
+ std::io::ErrorKind::NotFound
+ | std::io::ErrorKind::ConnectionRefused
+ | std::io::ErrorKind::ConnectionAborted
+ | std::io::ErrorKind::ConnectionReset
+ | std::io::ErrorKind::BrokenPipe
+ )
}
fn print_plugin_response(method: Method) -> std::io::Result<i32> {