-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Add pending extension indicator to extension panel #5493
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
ea8305e to
a90eda7
Compare
Add a marker to added extensions that have been installed but are yet to be enabled in the session Signed-off-by: Alex Holder <[email protected]>
a90eda7 to
8062d94
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds a "Pending" status indicator to extensions that are enabled in the configuration but not yet activated in the current session. The feature helps users understand that certain extensions will only become active when they start a new chat session.
- Adds
pendingActivationExtensionsstate management to track extensions awaiting activation - Displays a visual "Pending" badge on extension items that are in pending state
- Clears pending state when extensions are toggled or successfully activated
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| ExtensionList.tsx | Accepts and passes pendingActivationExtensions prop to child components |
| ExtensionItem.tsx | Renders the "Pending" badge when isPendingActivation is true |
| ExtensionsSection.tsx | Manages pendingActivationExtensions state, marks extensions as pending on deep link or activation failure, and clears pending state on successful activation/toggle |
Comments suppressed due to low confidence (2)
ui/desktop/src/components/settings/extensions/ExtensionsSection.tsx:195
- The
handleUpdateExtensionfunction lacks pending activation state management. When an extension update fails (similar tohandleAddExtension), it should mark the extension as pending ifformData.enabledis true. Additionally, on successful update, it should clear the pending state for that extension.
const handleUpdateExtension = async (formData: ExtensionFormData) => {
if (!selectedExtension) {
console.error('No selected extension for update');
return;
}
// Close the modal immediately
handleModalClose();
const extensionConfig = createExtensionConfig(formData);
const originalName = selectedExtension.name;
try {
await updateExtension({
enabled: formData.enabled,
extensionConfig: extensionConfig,
addToConfig: addExtension,
removeFromConfig: removeExtension,
originalName: originalName,
sessionId: sessionId,
});
} catch (error) {
console.error('Failed to update extension:', error);
// We don't reopen the modal on failure
} finally {
// Refresh the extensions list regardless of success or failure
await fetchExtensions();
}
};
ui/desktop/src/components/settings/extensions/ExtensionsSection.tsx:210
- The
handleDeleteExtensionfunction should remove the deleted extension from thependingActivationExtensionsset to clean up state. Add logic to callsetPendingActivationExtensionsand delete the extension name from the set after a successful deletion.
const handleDeleteExtension = async (name: string) => {
// Close the modal immediately
handleModalClose();
try {
await deleteExtension({ name, removeFromConfig: removeExtension, sessionId: sessionId });
} catch (error) {
console.error('Failed to delete extension:', error);
// We don't reopen the modal on failure
} finally {
// Refresh the extensions list regardless of success or failure
await fetchExtensions();
}
};
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
* main: (41 commits) Add pending extension indicator to extension panel (#5493) Add environment subsition for auth blocks (#5439) acp: ToolCallLocations and working cancellation (#5588) feat(providers): add Mistral AI provider (#5009) Listen for ctrl-c during provider request (#5585) Also accept null as description, not just missing (#5589) Document missing recipe param types (#5584) docs: description required for "Add Extension" in cli (#5573) fix: Add schema-aware numeric coercion for MCP tool arguments (#5478) Add uv for uvx in Justfile (#5581) Keep llm logs in place (#5577) bump to 1.12.0 (#5580) automate more of the release process (#5409) add clippy warning for string_slice (#5422) improve linux tray icon support (#5425) feat: log rotation (#5561) use app.isPackaged instead of checking for node env development (#5465) disable RPM build-ID generation to prevent package conflicts (#5563) Add Diagnostics Info to Q&A and Bug Report Templates (#5565) fix: improve server error messages to include HTTP status code (#5532) ...
* main: fix: customised recipe to yaml string to avoid minininjia parsing error (#5494) Add pending extension indicator to extension panel (#5493) Add environment subsition for auth blocks (#5439) acp: ToolCallLocations and working cancellation (#5588) feat(providers): add Mistral AI provider (#5009) Listen for ctrl-c during provider request (#5585) Also accept null as description, not just missing (#5589) Document missing recipe param types (#5584) docs: description required for "Add Extension" in cli (#5573) fix: Add schema-aware numeric coercion for MCP tool arguments (#5478) Add uv for uvx in Justfile (#5581) Keep llm logs in place (#5577) bump to 1.12.0 (#5580) automate more of the release process (#5409)
* origin/main: (75 commits) fix: customised recipe to yaml string to avoid minininjia parsing error (#5494) Add pending extension indicator to extension panel (#5493) Add environment subsition for auth blocks (#5439) acp: ToolCallLocations and working cancellation (#5588) feat(providers): add Mistral AI provider (#5009) Listen for ctrl-c during provider request (#5585) Also accept null as description, not just missing (#5589) Document missing recipe param types (#5584) docs: description required for "Add Extension" in cli (#5573) fix: Add schema-aware numeric coercion for MCP tool arguments (#5478) Add uv for uvx in Justfile (#5581) Keep llm logs in place (#5577) bump to 1.12.0 (#5580) automate more of the release process (#5409) add clippy warning for string_slice (#5422) improve linux tray icon support (#5425) feat: log rotation (#5561) use app.isPackaged instead of checking for node env development (#5465) disable RPM build-ID generation to prevent package conflicts (#5563) Add Diagnostics Info to Q&A and Bug Report Templates (#5565) ...
* main: (60 commits) fix: add standard context menu items to prevent empty right-click menu (#5616) Bump openapi in prepare-release (#5611) docs: add access control section to Developer tutorial (#5615) Token state not showing on load, or after message is finished. (#5606) Change the other location too (#5608) feat(ui): bring back quick launcher (#5144) Support platform tools through CLI (#5570) Avoid web double write (#5601) fix: gemini flash -> pro for mcp smoke tests (#5574) Manual compaction test and fix (#5568) fix: tidy up claude cli handling (#5594) Remove jetbrains (#5602) feat(githubcopilot): add support for newer Copilot AI Models (#5603) fix: customised recipe to yaml string to avoid minininjia parsing error (#5494) Add pending extension indicator to extension panel (#5493) Add environment subsition for auth blocks (#5439) acp: ToolCallLocations and working cancellation (#5588) feat(providers): add Mistral AI provider (#5009) Listen for ctrl-c during provider request (#5585) Also accept null as description, not just missing (#5589) ...
* main: (31 commits) Standardize CLI argument flags and update documentation (#5516) Release 1.13.0 fix: move goosehints/AGENTS.md handling to goose, and out of developer extension (#5575) fix: add standard context menu items to prevent empty right-click menu (#5616) Bump openapi in prepare-release (#5611) docs: add access control section to Developer tutorial (#5615) Token state not showing on load, or after message is finished. (#5606) Change the other location too (#5608) feat(ui): bring back quick launcher (#5144) Support platform tools through CLI (#5570) Avoid web double write (#5601) fix: gemini flash -> pro for mcp smoke tests (#5574) Manual compaction test and fix (#5568) fix: tidy up claude cli handling (#5594) Remove jetbrains (#5602) feat(githubcopilot): add support for newer Copilot AI Models (#5603) fix: customised recipe to yaml string to avoid minininjia parsing error (#5494) Add pending extension indicator to extension panel (#5493) Add environment subsition for auth blocks (#5439) acp: ToolCallLocations and working cancellation (#5588) ...
* main: (21 commits) differentiate debug/release in cache key (#5613) Unify subrecipe and subagent execution through shared recipe pipeline (#5082) Standardize CLI argument flags and update documentation (#5516) Release 1.13.0 fix: move goosehints/AGENTS.md handling to goose, and out of developer extension (#5575) fix: add standard context menu items to prevent empty right-click menu (#5616) Bump openapi in prepare-release (#5611) docs: add access control section to Developer tutorial (#5615) Token state not showing on load, or after message is finished. (#5606) Change the other location too (#5608) feat(ui): bring back quick launcher (#5144) Support platform tools through CLI (#5570) Avoid web double write (#5601) fix: gemini flash -> pro for mcp smoke tests (#5574) Manual compaction test and fix (#5568) fix: tidy up claude cli handling (#5594) Remove jetbrains (#5602) feat(githubcopilot): add support for newer Copilot AI Models (#5603) fix: customised recipe to yaml string to avoid minininjia parsing error (#5494) Add pending extension indicator to extension panel (#5493) ...
Signed-off-by: Alex Holder <[email protected]> Signed-off-by: fbalicchia <[email protected]>
Signed-off-by: Alex Holder <[email protected]>
Signed-off-by: Alex Holder <[email protected]>
Signed-off-by: Alex Holder <[email protected]> Signed-off-by: Blair Allan <[email protected]>
Summary
Add a marker to added extensions that have been installed but are yet to be enabled in the session.
Type of Change
Testing
Manually tested by adding an extension from the goose extension library via the deeplink.
Related Issues
Relates to #5473
Screenshots/Demos (for UX changes)
Before:

After:
