Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f6a9043
feat: separate SSE event streaming from POST work submission
jh-block Mar 12, 2026
51123aa
style: cargo fmt
jh-block Mar 12, 2026
6bdbd83
fix: move sessionSseClient out of generated api/ directory
jh-block Mar 12, 2026
3dd3130
refactor: use generated SSE client for session events endpoint
jh-block Mar 12, 2026
77f3421
fix: remove unnecessary onFinish from useCallback dependency arrays
jh-block Mar 12, 2026
b9c5454
chore: regenerate API client after rebase onto main
jh-block Mar 16, 2026
2732eed
fix: address code review feedback on SSE event bus
jh-block Mar 16, 2026
dd8a59d
fix: route notification events correctly and clamp replay seq
jh-block Mar 16, 2026
97cdf70
fix: replay buffered events on first SSE connect and clean up event b…
jh-block Mar 16, 2026
3620e5d
chore: regenerate API client after rebase onto main
jh-block Mar 17, 2026
06b2d51
fix: subscribe before snapshot to prevent event gaps, close lagged st…
jh-block Mar 17, 2026
d935222
fix: cancel requests against the session that started them
jh-block Mar 17, 2026
6a52e0e
fix: abort in-flight reply POST when user clicks stop
jh-block Mar 17, 2026
a1d1709
fix: reconnect SSE stream after normal server-side EOF
jh-block Mar 17, 2026
6868e07
fix: preserve Last-Event-ID across SSE reconnects
jh-block Mar 17, 2026
d0afb53
fix: clear request listeners on session change
jh-block Mar 17, 2026
734d486
fix: reject cancel/events requests for unknown sessions
jh-block Mar 17, 2026
f1d689c
fix: validate session exists before queuing reply work
jh-block Mar 17, 2026
a4ed0bd
Merge remote-tracking branch 'origin/main' into jhugo/fix-sse-reconne…
jh-block Mar 17, 2026
1592f9f
fix: address CI lint failures
jh-block Mar 17, 2026
b2668f2
Merge remote-tracking branch 'origin/main' into jhugo/fix-sse-reconne…
jh-block Mar 18, 2026
0615808
fix: cancel in-flight replies on session delete and cap SSE retries
jh-block Mar 18, 2026
f52cdc7
fix: assign event sequence under lock and keep SSE reconnecting
jh-block Mar 18, 2026
27a52e4
fix: set sseMaxRetryAttempts so SSE errors surface to outer loop
jh-block Mar 18, 2026
2688b30
fix: detect replay buffer overflow and reload conversation
jh-block Mar 18, 2026
6da2476
fix: defer SSE connected state, use getSession for reload, avoid erro…
jh-block Mar 18, 2026
418cb63
feat: reattach to in-flight replies after remounting the chat view
jh-block Mar 18, 2026
c6406f5
fix: send ActiveRequests before replay and without SSE id
jh-block Mar 18, 2026
4093cf6
fix: guard ref cleanup on request ID and preserve replayed output
jh-block Mar 18, 2026
9529590
style: cargo fmt
jh-block Mar 18, 2026
db31581
fix: preserve transcript on cold-mount reattach and clear stale errors
jh-block Mar 18, 2026
2834228
fix: buffer events during cold-mount reattach and guard POST cleanup
jh-block Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/goose-server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pub mod configuration;
pub mod error;
pub mod openapi;
pub mod routes;
pub mod session_event_bus;
pub mod state;
pub mod tls;
pub mod tunnel;
Expand Down
1 change: 1 addition & 0 deletions crates/goose-server/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ mod error;
mod logging;
mod openapi;
mod routes;
mod session_event_bus;
mod state;
mod tunnel;

Expand Down
6 changes: 6 additions & 0 deletions crates/goose-server/src/openapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,9 @@ derive_utoipa!(Icon as IconSchema);
super::routes::agent::update_session,
super::routes::action_required::confirm_tool_action,
super::routes::reply::reply,
super::routes::session_events::session_events,
super::routes::session_events::session_reply,
super::routes::session_events::session_cancel,
super::routes::session::list_sessions,
super::routes::session::search_sessions,
super::routes::session::get_session,
Expand Down Expand Up @@ -523,6 +526,9 @@ derive_utoipa!(Icon as IconSchema);
goose::prompt_template::Template,
super::routes::action_required::ConfirmToolActionRequest,
super::routes::reply::ChatRequest,
super::routes::session_events::SessionReplyRequest,
super::routes::session_events::SessionReplyResponse,
super::routes::session_events::CancelRequest,
super::routes::session::ImportSessionRequest,
super::routes::session::SessionListResponse,
super::routes::session::UpdateSessionNameRequest,
Expand Down
2 changes: 2 additions & 0 deletions crates/goose-server/src/routes/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ pub mod reply;
pub mod sampling;
pub mod schedule;
pub mod session;
pub mod session_events;
pub mod setup;
pub mod status;
pub mod telemetry;
Expand Down Expand Up @@ -44,5 +45,6 @@ pub fn configure(state: Arc<crate::state::AppState>, secret_key: String) -> Rout
.merge(gateway::routes(state.clone()))
.merge(mcp_ui_proxy::routes(secret_key.clone()))
.merge(mcp_app_proxy::routes(secret_key))
.merge(session_events::routes(state.clone()))
.merge(sampling::routes(state))
}
6 changes: 3 additions & 3 deletions crates/goose-server/src/routes/reply.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use tokio::time::timeout;
use tokio_stream::wrappers::ReceiverStream;
use tokio_util::sync::CancellationToken;

fn track_tool_telemetry(content: &MessageContent, all_messages: &[Message]) {
pub fn track_tool_telemetry(content: &MessageContent, all_messages: &[Message]) {
match content {
MessageContent::ToolRequest(tool_request) => {
if let Ok(tool_call) = &tool_request.tool_call {
Expand Down Expand Up @@ -123,7 +123,7 @@ impl IntoResponse for SseResponse {
}
}

#[derive(Debug, Serialize, utoipa::ToSchema)]
#[derive(Debug, Clone, Serialize, utoipa::ToSchema)]
#[serde(tag = "type")]
pub enum MessageEvent {
Message {
Expand Down Expand Up @@ -152,7 +152,7 @@ pub enum MessageEvent {
Ping,
}

async fn get_token_state(session_manager: &SessionManager, session_id: &str) -> TokenState {
pub async fn get_token_state(session_manager: &SessionManager, session_id: &str) -> TokenState {
session_manager
.get_session(session_id, false)
.await
Expand Down
3 changes: 3 additions & 0 deletions crates/goose-server/src/routes/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,9 @@ async fn delete_session(
}
})?;

// Clean up the event bus to free its replay buffer
state.remove_event_bus(&session_id).await;
Comment thread
jh-block marked this conversation as resolved.
Outdated

Ok(StatusCode::OK)
}

Expand Down
Loading
Loading