add request_debug command

This commit is contained in:
Chris Beck
2025-12-08 20:19:04 -07:00
parent 9aefc03b73
commit 6c6323c6ae
3 changed files with 27 additions and 1 deletions
+5
View File
@@ -166,6 +166,11 @@ impl ClaudeAgent {
let _ = self.input_tx.try_send(Input::Compact); let _ = self.input_tx.try_send(Input::Compact);
} }
/// Request the worker to log its message buffer for debugging.
pub fn request_debug(&self) {
let _ = self.input_tx.try_send(Input::Debug);
}
/// Request the worker to interrupt any prompts it is responding to, discard any queued messages, /// Request the worker to interrupt any prompts it is responding to, discard any queued messages,
/// and get ready to accept different prompts. /// and get ready to accept different prompts.
/// ///
+10 -1
View File
@@ -44,6 +44,7 @@ impl SentBy {
pub enum Input { pub enum Input {
Chat(ChatMessage), Chat(ChatMessage),
Compact, Compact,
Debug,
} }
/// A chat message /// A chat message
@@ -141,6 +142,9 @@ impl ClaudeWorker {
Input::Compact => { Input::Compact => {
self.handle_compact().await; self.handle_compact().await;
} }
Input::Debug => {
self.handle_debug();
}
} }
} }
_ = self.stop_rx.recv() => { _ = self.stop_rx.recv() => {
@@ -165,7 +169,7 @@ impl ClaudeWorker {
let _ = sender.send(Err(ClaudeError::StopRequested)); let _ = sender.send(Err(ClaudeError::StopRequested));
} }
} }
Input::Compact => {} Input::Compact | Input::Debug => {}
} }
} }
} }
@@ -185,6 +189,11 @@ impl ClaudeWorker {
self.messages.clear(); self.messages.clear();
} }
/// Log the message buffer for debugging.
fn handle_debug(&self) {
info!("Claude message buffer:\n{:#?}", self.messages);
}
/// Handle a single request to the Claude API. /// Handle a single request to the Claude API.
async fn handle_request(&mut self) -> Result<AdminMessageResponse, ClaudeError> { async fn handle_request(&mut self) -> Result<AdminMessageResponse, ClaudeError> {
let max_iterations = self.config.claude_max_iterations; let max_iterations = self.config.claude_max_iterations;
+12
View File
@@ -161,6 +161,9 @@ enum GatewayCommand {
/// Compact Claude's message history /// Compact Claude's message history
#[conf(name = "claude-compact", alias = "CLAUDE-COMPACT")] #[conf(name = "claude-compact", alias = "CLAUDE-COMPACT")]
ClaudeCompact, ClaudeCompact,
/// Log Claude's message buffer for debugging
#[conf(name = "claude-debug", alias = "CLAUDE-DEBUG")]
ClaudeDebug,
} }
/// Parse a gateway command from a string (with or without leading /) /// Parse a gateway command from a string (with or without leading /)
@@ -793,6 +796,15 @@ impl Gateway {
claude.request_compaction(); claude.request_compaction();
Ok(AdminMessageResponse::new("compaction requested")) Ok(AdminMessageResponse::new("compaction requested"))
} }
GatewayCommand::ClaudeDebug => {
let claude = self
.claude
.get()
.ok_or_else(|| (501u16, "claude was not configured".into()))?;
claude.request_debug();
Ok(AdminMessageResponse::new("debug logged"))
}
} }
} }