chenhg5/cc-connect · error

copilot: session.delete: %s

Error message

copilot: session.delete: %s

What it means

DeleteSession sends a JSON-RPC `session/delete` request to the copilot CLI and this error is returned when the RPC response carries an error object whose code is not -32601 (method-not-found) or -32600 (invalid-request) — codes treated as 'feature unsupported, ignore'. Any other code means the CLI actively rejected the delete. The message contains the CLI's own error text.

Source

Thrown at agent/copilot/copilot.go:399

	defer probe.close()

	pingResp, err := probe.call(probeCtx, "ping", nil)
	if err != nil || pingResp.Error != nil {
		slog.Debug("copilot: DeleteSession ping failed", "error", err)
		return nil
	}

	delResp, err := probe.call(probeCtx, "session.delete", map[string]any{"sessionId": sessionID})
	if err != nil {
		return nil
	}

	if delResp.Error != nil {
		// method-not-found or invalid-request means unsupported
		if delResp.Error.Code == -32601 || delResp.Error.Code == -32600 {
			return nil
		}
		return fmt.Errorf("copilot: session.delete: %s", delResp.Error.Message)
	}

	var result copilotDeleteSessionResponse
	if err := json.Unmarshal(delResp.Result, &result); err != nil {
		// Ignore parse errors - treat as success
		return nil
	}
	if !result.Success {
		if result.Error != nil {
			return fmt.Errorf("copilot: session.delete failed: %s", *result.Error)
		}
		return fmt.Errorf("copilot: session.delete failed: unknown error")
	}
	slog.Info("copilot: session deleted", "sessionId", sessionID)
	return nil
}

// GetSessionHistory implements core.HistoryProvider.

View on GitHub (pinned to 4000b2338a)

Solutions

  1. Refresh the session list with ListSessions and delete using a currently valid session ID
  2. Upgrade the copilot CLI so session/delete error codes match the supported protocol (unsupported is signaled by -32601/-32600)
  3. Ignore or special-case the error if the session is already gone (delete is idempotent in practice)
  4. Check the copilot CLI's own logs for the underlying cause

Example fix

// before
if err := a.DeleteSession(ctx, id); err != nil {
    return fmt.Errorf("delete: %w", err) // hard fail on stale session
}
// after
if err := a.DeleteSession(ctx, id); err != nil {
    slog.Warn("copilot session delete ignored", "id", id, "err", err) // tolerate stale IDs
}
Defensive patterns

Strategy: try-catch

Validate before calling

// only delete IDs present in a fresh listing
sessions, err := a.ListSessions(ctx)
if err != nil { return err }
valid := false
for _, s := range sessions { if s.ID == sessionID { valid = true } }
if !valid { return fmt.Errorf("session %s not found; skip delete", sessionID) }

Try / catch

if err := a.DeleteSession(ctx, id); err != nil {
    var msg string
    if errors.As(err, ...) || strings.Contains(err.Error(), "session.delete") {
        slog.Warn("copilot delete rejected", "id", id, "detail", err)
        // treat stale session as deleted
    }
}

Prevention

When it happens

Trigger: Calling DeleteSession for a session the copilot process does not know about, an already-deleted/expired session, or a CLI whose session.delete implementation returns an unexpected error code (not -32601/-32600).

Common situations: Deleting a session that was already removed server-side; deleting sessions from an older copilot CLI version after an upgrade; stale session IDs cached by cc-connect after the copilot workspace was reset.

Related errors


AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06). Data as JSON: /api/errors/7c77cf4739c52f2a. Report an issue: GitHub.