mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
fix(plugins): keep empty session extension pins authoritative
Pinned session-extension registries now remain the owner even when empty, preventing later active registry churn from leaking agent-owned extensions into the gateway surface.
This commit is contained in:
committed by
Vincent Koc
parent
0e71ce1174
commit
0fb0c2cb8e
@@ -198,7 +198,7 @@ describe("plugin runtime route registry", () => {
|
||||
expect(isPluginRegistryRetired(startupRegistry)).toBe(true);
|
||||
});
|
||||
|
||||
it("falls through from an empty pinned session extension registry to the active surface", () => {
|
||||
it("keeps empty pinned session extension registries authoritative over active extensions", () => {
|
||||
const startupRegistry = createEmptyPluginRegistry();
|
||||
const laterRegistry = createRegistryWithSessionExtension("later", "presence");
|
||||
|
||||
@@ -207,8 +207,9 @@ describe("plugin runtime route registry", () => {
|
||||
const sessionExtensionVersionBeforeSwap = getActivePluginSessionExtensionRegistryVersion();
|
||||
setActivePluginRegistry(laterRegistry);
|
||||
|
||||
expect(getActivePluginSessionExtensionRegistry()).toBe(laterRegistry);
|
||||
expect(getActivePluginSessionExtensionRegistryVersion()).not.toBe(
|
||||
expect(getActivePluginSessionExtensionRegistry()).toBe(startupRegistry);
|
||||
expect(getActivePluginSessionExtensionRegistry()?.sessionExtensions).toHaveLength(0);
|
||||
expect(getActivePluginSessionExtensionRegistryVersion()).toBe(
|
||||
sessionExtensionVersionBeforeSwap,
|
||||
);
|
||||
});
|
||||
|
||||
+1
-13
@@ -353,10 +353,6 @@ export function requireActivePluginChannelRegistry(): PluginRegistry {
|
||||
return created;
|
||||
}
|
||||
|
||||
function countSessionExtensionSurface(registry: PluginRegistry | null): number {
|
||||
return registry?.sessionExtensions?.length ?? 0;
|
||||
}
|
||||
|
||||
export function pinActivePluginSessionExtensionRegistry(registry: PluginRegistry) {
|
||||
const previousRegistry = asPluginRegistry(state.sessionExtension.registry);
|
||||
installSurfaceRegistry(state.sessionExtension, registry, true);
|
||||
@@ -380,15 +376,7 @@ export function releasePinnedPluginSessionExtensionRegistry(registry?: PluginReg
|
||||
}
|
||||
|
||||
export function getActivePluginSessionExtensionRegistry(): PluginRegistry | null {
|
||||
const surfaceRegistry = asPluginRegistry(state.sessionExtension.registry ?? state.activeRegistry);
|
||||
if (!state.sessionExtension.pinned) {
|
||||
return surfaceRegistry;
|
||||
}
|
||||
const activeRegistry = asPluginRegistry(state.activeRegistry);
|
||||
return countSessionExtensionSurface(surfaceRegistry) > 0 ||
|
||||
countSessionExtensionSurface(activeRegistry) === 0
|
||||
? surfaceRegistry
|
||||
: activeRegistry;
|
||||
return asPluginRegistry(state.sessionExtension.registry ?? state.activeRegistry);
|
||||
}
|
||||
|
||||
export function getActivePluginSessionExtensionRegistryVersion(): number {
|
||||
|
||||
Reference in New Issue
Block a user