diff --git a/ui/src/components/app-sidebar-base.ts b/ui/src/components/app-sidebar-base.ts
index ac2b8deda938..4ba5613d5c8d 100644
--- a/ui/src/components/app-sidebar-base.ts
+++ b/ui/src/components/app-sidebar-base.ts
@@ -101,6 +101,14 @@ export abstract class AppSidebarBase extends OpenClawLightDomContentsElement {
});
}
+ readSessionMutationAccess(request: {
+ method: string;
+ params?: unknown;
+ requiredScope?: "operator.write" | "operator.admin";
+ }): SessionMethodAccess {
+ return readSessionMethodAccess(this.connected ? this.context?.gateway.snapshot : null, request);
+ }
+
requestOpenNewSession(agentId: string, target?: NewSessionTarget): void {
if (this.readNewSessionAccess().allowed) {
if (target) {
diff --git a/ui/src/components/app-sidebar-session-menu-renderers.ts b/ui/src/components/app-sidebar-session-menu-renderers.ts
index 96949407f461..3869e138c4b4 100644
--- a/ui/src/components/app-sidebar-session-menu-renderers.ts
+++ b/ui/src/components/app-sidebar-session-menu-renderers.ts
@@ -25,6 +25,7 @@ export function renderSidebarSessionGroupMenu(params: {
menu: SidebarSessionGroupMenuState | null;
trigger: HTMLElement | null;
connected: boolean;
+ disabledReason?: string;
onAction: (action: SidebarSessionGroupMenuAction, group: string) => void;
onClose: (restoreFocus: boolean) => void;
}) {
@@ -45,7 +46,10 @@ export function renderSidebarSessionGroupMenu(params: {
@wa-select=${(event: CustomEvent<{ item: { value?: string } }>) => {
event.preventDefault();
const value = event.detail.item.value;
- if (value === "rename-group" || value === "new-group" || value === "delete-group") {
+ if (
+ !params.disabledReason &&
+ (value === "rename-group" || value === "new-group" || value === "delete-group")
+ ) {
params.onAction(value, menu.group);
}
}}
@@ -65,12 +69,18 @@ export function renderSidebarSessionGroupMenu(params: {
-