chenhg5/cc-connect · error

copilot: session.delete

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.

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.

Appendix: 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)