Skip to content

feat: Add curated plugin marketplace + Metadata Cleanup.#13712

Merged
xl-openai merged 2 commits intomainfrom
xl/plugins
Mar 7, 2026
Merged

feat: Add curated plugin marketplace + Metadata Cleanup.#13712
xl-openai merged 2 commits intomainfrom
xl/plugins

Conversation

@xl-openai
Copy link
Collaborator

  1. Add a synced curated plugin marketplace and include it in marketplace discovery.
  2. Expose optional plugin.json interface metadata in plugin/list
  3. Tighten plugin and marketplace path handling using validated absolute paths.
  4. Let manifests override skill, MCP, and app config paths.
  5. Restrict plugin enablement/config loading to the user config layer so plugin enablement is at global level

@xl-openai xl-openai requested a review from sayan-oai March 6, 2026 08:22
@xl-openai xl-openai force-pushed the xl/plugins branch 3 times, most recently from e42f342 to 4a8ad1a Compare March 6, 2026 18:12
Comment on lines 2399 to 2400
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: we should update this to say that the curated root is also considered when present

#[serde(default)]
skills: Option<String>,
#[serde(default)]
hooks: Option<String>,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we include hooks before its officially added? or can we just add it once it's been implemented, and maybe leave a comment for now? right now the field isn't consumed.

return PluginLoadOutcome::default();
}

self.start_curated_repo_sync();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plugin/list reaches this indirectly, which starts sync in the background, but marketplace listing still just checks whether the curated checkout already exists on disk. so on the first call after enabling plugins, plugin/list can omit curated entries just because the async clone/update has not finished yet.

should we move curated-catalog init to a marketplace/catalog lifecycle (i.e., first plugin/list after opt-in, or when enabling plugins feature)? and either block until sync is done or return an explicit syncing/not-ready state? or is best-effort enough? dont have a strong opinion, but want to clarify.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

basically it feels a bit unexpected to have this network/git side effect run in what seems to be a read helper: plugins_for_layer_stack(). im wondering if this should be a more first-class member or lifecycle in PluginsManager.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call move to PluginsManager.

config: &Config,
additional_roots: &[AbsolutePathBuf],
) -> Result<Vec<ConfiguredMarketplaceSummary>, MarketplaceError> {
let installed_plugins = configured_plugins_from_stack(&config.config_layer_stack)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right now installed just means there's an entry for the plugin in config, should we at least check if the plugin dir exists in cache? the user could have old plugins listed in config so installed seems like its too strong.

Copy link
Collaborator

@sayan-oai sayan-oai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also approving to unblock as the logic all seems sound, most of my comments are about organization/nits

@xl-openai xl-openai merged commit 0243734 into main Mar 7, 2026
72 of 79 checks passed
@xl-openai xl-openai deleted the xl/plugins branch March 7, 2026 00:39
@github-actions github-actions bot locked and limited conversation to collaborators Mar 7, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants