Installed plugins still appear in remaining Marketplace selector results
- Dominant language
- TypeScript
- Stars
- 156k
- Forks
- 24.6k
- Avg merge
- 22h 9m
- Merged PRs (30d)
- 610
Description
### Self Checks
- [x] I have read the Contributing Guide and Language Policy.
- [x] I have searched for existing issues and pull requests, including closed ones.
- [x] I confirm that I am using English to submit this report.
### Dify version
main
### Cloud or Self Hosted
Both
### Problem
PR #42199 fixed the shared Workflow/Agent tool picker so Marketplace search results exclude plugins that are already installed.
Three sibling selector surfaces on current `main` still combine an installed-provider list with unfiltered Marketplace results:
1. **Data Sources** — installed providers are rendered from `dataSources`, while Marketplace pages were flattened without excluding their `plugin_id`s.
2. **Triggers / Start Blocks** — installed trigger providers are already collected in `providerMap`, but regular Marketplace search results did not use that map for filtering.
3. **Agent Strategies** — installed strategy providers come from `useStrategyProviders()`, while Marketplace agent plugins were passed through unchanged (the variable was even named `notInstalledPlugins`).
An already-installed plugin can therefore appear both as an installed provider and again as a Marketplace install result in the same selector.
### Expected behavior
Selector Marketplace results should exclude plugin IDs already present in that selector's installed-provider state, matching the behavior established in #42199.
### Proposed bounded scope
- reuse each selector's existing installed-provider state;
- filter only the Marketplace result list;
- keep available Marketplace plugins visible;
- add focused regressions for Data Source, Trigger, and Agent Strategy selectors;
- leave provider loading, installation, strategy selection/version switching, featured behavior, and Marketplace APIs unchanged.
Implementation: #42223.
Contributor guide
Research direction
Start with the Data Sources, Triggers/Start Blocks, and Agent Strategies selector entry points, using the filtering behavior established by PR #42199 as the reference. Trace each selector's installed-provider state and Marketplace result handling, then add focused regressions for all three surfaces. Done means installed plugin IDs are absent from Marketplace results while available plugins remain visible.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 72/100