You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Shared plugin registry on the Plugins page, for the dev team. The host app answers GET /api/plugins/registry
with configured: true for dev-team members only, and everyone else sees the page as before.
Each plugin's row shows its registry state (not published, update ready, published, registry ahead, name
taken). Expanding a mounted plugin's row publishes it, or says why it can't.
A "Registry" tab lists the published registry plugins, including ones this organization has no copy of,
with a Mine filter. Owners can remove a version or a plugin.
Platform admins get a "Visible to" column: a searchable organization picker that grants the latest version.
The expanded row lists the organizations with access, pins each to a version or the latest, and revokes.
Publishing and removing a version or plugin each ask for confirmation. A retired version can be deleted for
good, which frees its version number.
If the registry fails to load, the dev team sees the Registry tab with the reason instead of losing the tab.
After a registry write, the page re-reads the plugins shared with this organization and says what changed
("… is now shared with your organization", a re-pinned version, a revoked share), so nothing waits for a reload.
New types in @collabdt/core/core/components/viewers/plugins/types: RegistryPlugin, RegistryVersion, RegistryGrant, RegistryState, RegistryOrganization and the RegistryActions port. RegistryActions.setGrant(slug, organizationId, pinnedVersion) takes null for the latest version.
Promoting registry plugins between deployments by package file.
Each published version has an Export button that downloads <slug>-<version>.cdtplugin.json.
Platform admins get an Import package button on the Registry tab. Its confirmation shows the version, hostApi and sha256 before publishing.
RegistryActions.exportPackage(slug, version) and RegistryActions.importPackage(pkg) back them.
They default to the host's GET …/versions/<version>/package and POST /api/plugins/registry/import.
A mounted plugin's publish strip has an Export button too, so a local build can be promoted without
publishing it to the dev registry first. RegistryActions.exportMountedPackage(slug) backs it and defaults
to the host's GET /api/plugins/registry/mounted/<slug>/package. It shows only where canPublishFromDisk is set.
RegistryState.viewer.canPublishFromDisk: publishing a mounted build is offered only when the host sets it,
so staging and production never show it. If it is missing, publishing from disk is off.
PluginsManager takes an optional registryActions prop. It defaults to the host's /api/plugins/registry/* routes.
PluginListing.registryVersion. A plugin shared with the organization through the registry shows a
"Shared v{version}" badge in the Registry column.
@collabdt/core/plugins-sdk/semver: compareVersions, highestVersion and isValidVersion, the semver rules
the registry applies. Use them anywhere a version is compared, so the page and the host never disagree.
Uninstalling a plugin asks for confirmation, from the expanded row and from the collapsed row's Install checkbox.
Sortable Plugins table headers: Name, Status, Run, Install, Enable and Visible to cycle ascending, descending
and unsorted.
Changed
ViewerNames.extensions is renamed ViewerNames.plugins (value 'plugins'), so the Plugins page is ?viewer=plugins. The host database renames the enum value in place.
The Plugins page shows one compact row per plugin, expanded for its details and controls, so a plugin that is
both in the organization and in the registry appears once. Tabs filter the rows into "All", "Running",
"Installed", "Not installed" (admins) and "Registry" (dev team), each with a count.
A collapsed row has a Run checkbox for everyone, Install and Enable checkboxes for organization admins, and a
running plugin's name is bold. A Run checkbox the viewer can't change is disabled, with the reason as its
tooltip. The Registry column appears only when some plugin has a registry state to show. The table always fits its
container: when it is too narrow, the Version, Registry, Visible to, Enable, Install and Status columns drop in
that order, leaving the name and Run, and their controls stay in the expanded row.
MountedPlugin.mountPath is optional, and MountedPlugin gains source and registryVersion, because /api/plugins/mounted also lists registry plugins granted to the organization.
The "Not installed" tab's hint covers plugins shared with the organization as well as mounted ones.
RegistryState.configured is true only for the dev team. The type no longer suggests an organization admin
gets a read-only registry, and RegistryState.error is documented as the dev team's load failure.
The Plugins page says "install" instead of "add", to match the Install column. The button now reads
"Install to organization", the status badge reads "Not installed", and PluginsPage.trustHeading, trustWarning, toastInstalled, toastUninstalled, quickInstalled, tabNotInstalledHint and emptyAdmin
follow suit (en/es/fr).
Removed
PluginsPage.intro: the Plugins page no longer shows an intro line under its title.
PluginsPage.countPlugins, which nothing rendered.
PluginsPage.sectionAvailable, sectionFound and sectionFoundHint, renamed tabInstalled, tabNotInstalled
and tabNotInstalledHint to match the tabs they label.
Fixed
The Plugins page no longer shows organization controls (Add to organization, Install, Enable, Let people
choose) to roles that can edit the organization but not its plugins, such as User. They failed on save.
Controls now follow the PluginInstallation and PluginUserSetting permissions only, as the API does.
A Viewer is no longer told they can turn an optional plugin on or off themselves. New PluginsPage.orgReadOnlyOnAskAdmin and orgReadOnlyOffAskAdmin strings tell them to ask an administrator.
Migration
Replace ViewerNames.extensions with ViewerNames.plugins, and any stored or linked 'extensions' viewer
value with 'plugins'.
If you override Plugins page messages, rename PluginsPage.sectionAvailable to tabInstalled, sectionFound to tabNotInstalled and sectionFoundHint to tabNotInstalledHint, and drop countPlugins.