[codex] Add created-by-me remote plugin marketplace#28203
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5c4df12fc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| #[serde(rename = "created-by-me-remote")] | ||
| #[ts(rename = "created-by-me-remote")] | ||
| CreatedByMeRemote, |
There was a problem hiding this comment.
Update the Python SDK enum for this new kind
Adding the created-by-me-remote wire value here updates the Rust protocol and TS/schema fixtures, but the Python SDK artifact is still stale: sdk/python/src/openai_codex/generated/v2_all.py's PluginListMarketplaceKind only contains local, vertical, workspace-directory, and shared-with-me. Typed Python clients cannot construct or validate the new marketplaceKinds value even though the app-server README now documents that clients can request it.
Useful? React with 👍 / 👎.
|
|
||
| let (global, workspace) = tokio::try_join!(global, workspace)?; | ||
| let mut installed_plugins = [global, workspace] | ||
| let (global, workspace, user) = tokio::try_join!(global, workspace, user)?; |
There was a problem hiding this comment.
Don't let USER scope failures suppress existing installed plugins
Because this new USER request is included in the same try_join! as the existing GLOBAL and WORKSPACE requests, any failure or unsupported response for the newly added scope makes fetch_remote_installed_plugins fail as a whole. On a fresh cache, plugin/installed then falls back to local-only results and drops already-working global/workspace remote installed plugins, even when plugin_sharing is off and created-by-me-remote is not visible. Please gate or tolerate the optional USER scope separately from the pre-existing scopes.
Useful? React with 👍 / 👎.
| }; | ||
|
|
||
| let (global, workspace) = tokio::try_join!(global, workspace)?; | ||
| let (global, workspace, user) = tokio::try_join!(global, workspace, user)?; |
There was a problem hiding this comment.
Gate created-by-me bundle sync on plugin_sharing
Adding the USER scope to this sync makes created-by-me installed plugins get downloaded whenever plugins are enabled, even when Feature::PluginSharing is false and the marketplace is intentionally hidden from plugin/list/plugin/installed. Since the remote-installed cache is later converted into effective plugin config without a visible-marketplace filter, users with a USER-installed bundle can have that plugin activated despite the sharing feature being disabled; please skip the USER scope unless the sharing marketplace is enabled.
Useful? React with 👍 / 👎.
| ) -> Result<&'static str, RemotePluginCatalogError> { | ||
| match plugin.scope { | ||
| RemotePluginScope::Global => Ok(REMOTE_GLOBAL_MARKETPLACE_NAME), | ||
| RemotePluginScope::User => Ok(REMOTE_CREATED_BY_ME_MARKETPLACE_NAME), |
There was a problem hiding this comment.
Reject direct USER plugin installs when sharing is disabled
When plugin_sharing is disabled, plugin/list/plugin/installed hide created-by-me-remote, but plugin/install only checks Feature::Plugins before fetching details and installing. With this new USER canonical marketplace, a client that already has a USER remotePluginId can still download/install a created-by-me plugin while the sharing marketplace is disabled; please reject USER/created-by-me details unless Feature::PluginSharing is enabled before materializing the bundle.
Useful? React with 👍 / 👎.
Summary
created-by-me-remotemarketplace backed by paginatedscope=USERplugin directory and installed-plugin requestsTesting
cargo build -p codex-app-server --bin codex-app-serverplugin/listsmoke test forcreated-by-me-remote(returned the expected USER plugin as installed and enabled)just test -p codex-core-plugins(221 passed)just test -p codex-app-server-protocol(231 passed)just test -p codex-app-server suite::v2::plugin_list::(37 passed)just fix -p codex-core-plugins -p codex-app-server-protocol -p codex-app-serverjust fmt