Enable the selector
composer.resources.enabled is off by default. Deploy backend and SDK support for the resource catalog, conversation persistence and workspace Connectors before enabling it.
Selection experience
The Plugins entry appears below the composer after projects and files, with selected avatars and a count. The first menu lists resources added to this conversation, not all packages installed in the organization. Click a selected item again to remove it.
Connect plugins does not download packages from a third-party marketplace or install server code. Importing, configuring and publishing packages are administrator operations.
Middleware and experts have a persistent info icon. Hover or focus it to show one information card at a time; middleware cards also list bound Views. Plugin rows do not have an info icon. When a plugin needs a connection, it opens a connection status and action interface.
Experts use their actual avatars, and middleware uses its configured avatar, with a type icon as fallback. Descriptions support strings and
I18nObject, resolved using the current language:
Resource sources
Standard packages differ from native Xpert code plugins. Administrators import them from Git with a ref and optional subdirectory, or from ZIP, then publish bindings to authorized workspaces.
extensions["cn.xpertai"] can declare middleware presets, logical expert references and Connector dependencies. It does not load server code dynamically.
The catalog combines managed bindings and backend discovery: installed user-addable middleware providers with valid default configurations, and accessible published experts. Providers missing required configuration, the current Assistant and experts already in its graph are not offered as duplicate additions. Managed bindings take precedence, and disabling one cannot be bypassed through discovery.
Packages support Skills and Streamable HTTP MCP. Unsupported stdio/legacy SSE and invalid components receive diagnostics and are isolated from valid components. Plugins are selected as a whole; partial means only valid components are usable. Marketplace subscriptions, legacy Codex/Claude manifests, arbitrary remote Agent URLs and package Hooks are outside this integration’s scope.
Workspace connections and authorization
A Connector supplies an external service connection and credentials. A plugin supplies Agent capabilities that may depend on one or more such connections. Credential-only Connectors are not listed as separate selectable capabilities. Connections belong to the workspace, not to individual users. Users access the Assistant’s workspace connections through their Assistant runtime permissions. Configuration and usage permissions are separate:- Users with connection configuration permission see Connect account, which opens the host’s target Connector configuration/OAuth flow.
- Other users see guidance to contact a workspace administrator, with no personal authorization entry.
- After connection, ChatKit checks backend readiness before continuing the resource addition. Cancellation or failure preserves the draft and existing selections.
composer.resources.onConnect to handle the connection in the host:
{ assistantId, bindingId } and returns Promise<{ status: 'connected' | 'cancelled' }>. The binding identifies the Connector resolved by the authorization response, not a plugin package ID. For iframe integrations, the Web Component bridges the onConnectWorkspaceConnector command to the host. Use compatible UI and Web Component versions.
Historical personal OAuth credentials are not copied into shared connections. An administrator must configure a workspace connection and republish the plugin version when necessary.
composer.connectors is deprecated but has not been removed. Standard plugins use composer.resources, with Connector dependencies connected through onConnect. In the current version, also retain composer.connectors: { enabled: true } to show native Connector capabilities in the unified menu; the Xpert Cloud host enables both options. When the unified selector is enabled, the old + → Connectors entry is hidden. Connector configuration, OAuth and execution remain supported.Persistence, caching and execution
- New-conversation selections are validated as drafts and submitted with the first message. Sending does not clear them.
- Existing conversations save the complete selection through dedicated resource endpoints and restore it after reload or conversation changes.
- Catalog caches are scoped to the client, Assistant and project. Switching between the three menus does not refresh them. Explicit refresh, window focus or a scope change triggers fresh reads. Middleware and experts load all pages and search locally.
- Project changes revalidate resources; conversation changes restore that conversation’s selection. Cached catalog data never substitutes for backend authorization.
- References pin configuration versions. Upgrading a plugin does not silently replace existing selections. Invalid items retain a status so users can remove or reselect them.
revisionprevents concurrent overwrites. A conflict returns409; reload the server selection before applying another change.- Changes apply to the next execution. Running and resumed executions use the original snapshot, while revoked permissions still block subsequent calls.
- Dynamic resources attach only to the entry Agent. Child experts keep their own configuration. Required middleware cannot be disabled; duplicates are deduplicated and incompatible configurations are rejected.
The client also shows verification states. A temporarily missing catalog item must not erase a historical selection.
SDK and existing capability selection
All ChatKit requests to Xpert use@xpert-ai/xpert-sdk. Standard plugins, middleware and experts have a separate runtimeResources selection:
Native Connectors in the unified UI still use
connectorBindingIds; not every entry becomes a runtimeResources reference. Existing runtimeCapabilities.plugins.nodeKeys identifies middleware nodes already in the Assistant graph, and subAgents.nodeKeys identifies graph experts. See Skills and Graph Capabilities. One-message / tokens and persistent conversation resources are separate mechanisms.
Verify the integration
- Add a plugin that needs no connection, send a message, reload and switch conversations to verify restoration.
- Add middleware and an expert; verify actual invocation without modifying the Assistant’s published graph.
- Switch menus to check caching, then hover different info icons to check that only the current card appears and middleware Views are listed.
- Check connection prompts with and without configuration permission. Cancel without losing the draft, then complete a connection and continue adding the resource.
- Verify removal, concurrent updates, project changes and disabled bindings produce the expected selection and availability state.