From 0e548bcf72671e6e6e661e90192bcb7f2f442032 Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 25 Aug 2026 01:44:10 +0300 Subject: fix: report agent explain file errors as json (#3023) refs #3022 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/cli/agent.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/cli/agent.rs b/src/cli/agent.rs index 306c3bd9..42bc5e1c 100644 --- a/src/cli/agent.rs +++ b/src/cli/agent.rs @@ -2,8 +2,8 @@ use std::time::{Duration, Instant}; use crate::api::schema::{ AgentPromptParams, AgentPromptWaitOptions, AgentReadParams, AgentRenameParams, - AgentSendKeysParams, AgentStartParams, AgentTarget, AgentWaitParams, EmptyParams, Method, - PaneProcessInfoParams, PaneTarget, ReadFormat, ReadSource, Request, + AgentSendKeysParams, AgentStartParams, AgentTarget, AgentWaitParams, EmptyParams, ErrorBody, + ErrorResponse, Method, PaneProcessInfoParams, PaneTarget, ReadFormat, ReadSource, Request, }; const AGENT_START_POLL_INTERVAL: Duration = Duration::from_millis(100); @@ -118,7 +118,21 @@ fn agent_explain(args: &[String]) -> std::io::Result { eprintln!("herdr agent explain --file requires --agent LABEL"); return Ok(2); }; - let content = std::fs::read_to_string(path)?; + let content = match std::fs::read_to_string(&path) { + Ok(content) => content, + Err(err) => { + let response = ErrorResponse { + id: "cli:agent:explain".into(), + error: ErrorBody { + code: "agent_explain_file_read_failed".into(), + message: format!("failed to read agent explain file {path}: {err}"), + }, + }; + let response = serde_json::to_string(&response).map_err(std::io::Error::other)?; + eprintln!("{response}"); + return Ok(1); + } + }; crate::detect::manifest::explain_to_json_value(&crate::detect::manifest::explain_for_label( &agent_label, &content, -- cgit v1.2.3