fix(session): ensure valid session ID is returned after model change #285
+59
−214
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fix(main): fix model switching — duplicate events, broken sends, and lost context
Problem
Switching models in the model picker caused three issues:
Root Cause
PR #274 (a6f0230) refactored copilot:setModel to use client.resumeSession() instead of destroy() + createNewSession(), intending to preserve conversation context across model changes. Inspection of the @github/copilot-sdk source revealed this approach
was fundamentally broken:
switch (3×→4×→5×→6×→7×).
the tab with a stale session ID. On the next attempt, the handler returned { model } without a sessionId, setting the tab ID to undefined.
Changes
src/main/main.ts
Model switching — copilot:setModel handler:
if message retrieval fails.
Event forwarding consolidation:
consistent event handling — the inline handlers were missing session.error, session.usage_info, and session.compaction_* events.
Event handler lifecycle management:
src/renderer/App.tsx
Testing