notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit e12773fa7974a2d37d8fedf6be8b5471a2296364
parent 0dfb7dc0a02d851fd4d9e9af0709e9998b3a9742
Author: William Casarin <jb55@jb55.com>
Date:   Sun, 25 Jan 2026 22:34:50 -0800

dave: disconnects

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck_dave/src/backend/claude.rs | 8++++++++
1 file changed, 8 insertions(+), 0 deletions(-)

diff --git a/crates/notedeck_dave/src/backend/claude.rs b/crates/notedeck_dave/src/backend/claude.rs @@ -176,11 +176,13 @@ impl AiBackend for ClaudeBackend { if let Err(err) = client.connect().await { tracing::error!("Claude Code connection error: {}", err); let _ = tx.send(DaveApiResponse::Failed(err.to_string())); + let _ = client.disconnect().await; return; } if let Err(err) = client.query(&prompt).await { tracing::error!("Claude Code query error: {}", err); let _ = tx.send(DaveApiResponse::Failed(err.to_string())); + let _ = client.disconnect().await; return; } let mut stream = client.receive_response(); @@ -194,6 +196,8 @@ impl AiBackend for ClaudeBackend { if let Err(err) = tx.send(DaveApiResponse::Token(text.clone())) { tracing::error!("Failed to send token to UI: {}", err); + drop(stream); + let _ = client.disconnect().await; return; } ctx.request_repaint(); @@ -214,11 +218,15 @@ impl AiBackend for ClaudeBackend { Err(err) => { tracing::error!("Claude stream error: {}", err); let _ = tx.send(DaveApiResponse::Failed(err.to_string())); + drop(stream); + let _ = client.disconnect().await; return; } } } + drop(stream); + let _ = client.disconnect().await; tracing::debug!("Claude stream closed"); });