github/copilot-sdk · error
failed to delete session
Error message
failed to delete session %s: %s
What it means
DeleteSession returns this error when the backend explicitly reported the delete failed: deleteSessionResponse.Success was false and the backend supplied an Error string. This is a backend-side failure report, not a transport/decode problem.
Solutions
- Read the embedded backend error message after the colon for the root cause
- Ensure no running agent process has the session open before deleting
- Check filesystem permissions on the backend's session storage directory
- Confirm the session still exists (it may already have been deleted)
Example fix
// before
err := client.DeleteSession(ctx, sessionID)
if err != nil { panic(err) }
// after
if err := client.DeleteSession(ctx, sessionID); err != nil {
log.Printf("could not delete session %s: %v", sessionID, err)
// inspect whether session was active, then retry
} Defensive patterns
Strategy: try-catch
Validate before calling
sessions, _ := client.ListSessions(ctx)
exists := slices.ContainsFunc(sessions, func(s *SessionInfo) bool { return s.ID == sessionID })
if !exists { return fmt.Errorf("session %s not found", sessionID) } Try / catch
if err := client.DeleteSession(ctx, id); err != nil {
if strings.Contains(err.Error(), "failed to delete session") {
// backend refused: parse reason after the colon, check active/permissions
return fmt.Errorf("backend refused delete: %w", err)
}
return err
} Prevention
- Close or detach the session in the TUI before deleting
- Check the backend's session storage directory permissions
- Handle double-delete gracefully (session may already be gone)
When it happens
Trigger: Calling DeleteSession and receiving response.Success == false; the wrapped message includes the backend's own error text (or 'unknown error' if none).
Common situations: Deleting a session that is still active/open in the TUI; permission problems on the backend's session storage directory; session already deleted concurrently.
Related errors
- failed to set foreground session
- CopilotClient is in Mode = CopilotClientMode.Empty but the…
- CopilotClient is in Mode = EMPTY but the session config did…
- failed to abort session
- failed to apply mode-specific session options
AI-assisted analysis of github/copilot-sdk@cd8cf15dc3 (2026-09-09).
Data as JSON: /api/errors/1236559055608a0c.
Report an issue: GitHub.
Appendix: source
Thrown at go/client.go:1626
return err
}
result, err := c.client.Request(ctx, "session.delete", deleteSessionRequest{SessionID: sessionID})
if err != nil {
return err
}
var response deleteSessionResponse
if err := json.Unmarshal(result, &response); err != nil {
return fmt.Errorf("failed to unmarshal delete response: %w", err)
}
if !response.Success {
errorMsg := "unknown error"
if response.Error != nil {
errorMsg = *response.Error
}
return fmt.Errorf("failed to delete session %s: %s", sessionID, errorMsg)
}
// Remove from local sessions map if present
c.sessionsMux.Lock()
session := c.sessions[sessionID]
delete(c.sessions, sessionID)
c.sessionsMux.Unlock()
if session != nil {
session.releaseGitHubTokenProviderRegistration()
}
return nil
}
// GetLastSessionID returns the ID of the most recently updated session.
//
// This is useful for resuming the last conversation when the session ID
// was not stored. Returns nil if no sessions exist.View on GitHub (pinned to cd8cf15dc3)