fix extension selector not displaying the correct enabled extensions#7290
Merged
fix extension selector not displaying the correct enabled extensions#7290
Conversation
lifeizhou-ap
approved these changes
Feb 18, 2026
zanesq
added a commit
that referenced
this pull request
Feb 18, 2026
jh-block
added a commit
that referenced
this pull request
Feb 18, 2026
* origin/main: (49 commits) chore: show important keys for provider configuration (#7265) fix: subrecipe relative path with summon (#7295) fix extension selector not displaying the correct enabled extensions (#7290) Use the working dir from the session (#7285) Fix: Minor logging uplift for debugging of prompt injection mitigation (#7195) feat(otel): make otel logging level configurable (#7271) docs: add documentation for Top Of Mind extension (#7283) Document gemini 3 thinking levels (#7282) docs: stream subagent tool calls (#7280) Docs: delete custom provider in desktop (#7279) Everything is streaming (#7247) openai: responses models and hardens event streaming handling (#6831) docs: disable ai session naming (#7194) Added cmd to validate bundled extensions json (#7217) working_dir usage more clear in add_extension (#6958) Use Canonical Models to set context window sizes (#6723) Set up direnv and update flake inputs (#6526) fix: restore subagent tool call notifications after summon refactor (#7243) fix(ui): preserve server config values on partial provider config save (#7248) fix(claude-code): allow goose to run inside a Claude Code session (#7232) ...
aharvard
added a commit
that referenced
this pull request
Feb 18, 2026
* origin/main: feat: add GOOSE_SUBAGENT_MODEL and GOOSE_SUBAGENT_PROVIDER config options (#7277) fix(openai): support "reasoning" field alias in streaming deltas (#7294) fix(ui): revert app-driven iframe width and send containerDimensions per ext-apps spec (#7300) New OpenAI event (#7301) ci: add fork guards to scheduled workflows (#7292) fix: allow ollama input limit override (#7281) chore: show important keys for provider configuration (#7265) fix: subrecipe relative path with summon (#7295) fix extension selector not displaying the correct enabled extensions (#7290) Use the working dir from the session (#7285) Fix: Minor logging uplift for debugging of prompt injection mitigation (#7195) feat(otel): make otel logging level configurable (#7271) docs: add documentation for Top Of Mind extension (#7283) Document gemini 3 thinking levels (#7282) docs: stream subagent tool calls (#7280) Docs: delete custom provider in desktop (#7279) # Conflicts: # ui/desktop/src/components/McpApps/McpAppRenderer.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
The extension selector count in the bottom menu was showing wrong numbers
when starting a new chat — for example showing 3 instead of 4 — even though
all extensions loaded successfully in the agent.
Two problems were causing this:
On the backend, when a new session starts, all extensions load concurrently.
Each one was individually persisting the extension state to the session
database after it finished loading, snapshotting whatever extensions happened
to exist in the manager at that moment. Since they finish at different times,
the last persist to complete could miss extensions that other concurrent
futures hadn't yet registered, corrupting the session's extension list. The
fix extracts the shared logic into add_extension_inner, has add_extension
(used by user-initiated actions) call it then persist, and has
load_extensions_from_session call it directly for each concurrent extension
then do a single persist after all of them complete.
On the frontend, the extension selector was eagerly fetching the session's
extension list from the API the moment the session ID changed, before the
backend had finished loading extensions. This returned stale data and caused
a brief wrong count before the correct data arrived. The fix separates the
session ID reset into its own effect and gates the fetch effect so it only
runs after the SESSION_EXTENSIONS_LOADED event fires or the dropdown opens —
never on a bare session ID change. That event is now also dispatched for
cached sessions so the selector gets the signal when resuming an existing
chat too.