- {/* Feature list */}
{FEATURES.map((f) => {
const Icon = f.icon;
- const dimmed = "comingSoon" in f && f.comingSoon;
return (
-
- {t(`settings.versionModal.${f.key}`)}
- {dimmed && (
-
- {t("settings.versionModal.comingSoon")}
-
- )}
+
+ {String(t(`settings.versionModal.${f.key}`))}
- {t(`settings.versionModal.${f.key}Desc`)}
+ {String(t(`settings.versionModal.${f.key}Desc`))}
- {dimmed ? (
-
- ) : (
-
- )}
+
);
})}
- {/* Notes */}
{t("settings.versionModal.betaNote")}
diff --git a/ui/web/src/pages/teams/team-settings-tab.tsx b/ui/web/src/pages/teams/team-settings-tab.tsx
index 10eb3b4a..4d30816c 100644
--- a/ui/web/src/pages/teams/team-settings-tab.tsx
+++ b/ui/web/src/pages/teams/team-settings-tab.tsx
@@ -83,6 +83,8 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
const [memberRequestsAutoDispatch, setMemberRequestsAutoDispatch] = useState(initMemberRequests.auto_dispatch ?? false);
const [escalationMode, setEscalationMode] = useState
(initial.escalation_mode ?? "");
const [escalationActions, setEscalationActions] = useState(initial.escalation_actions ?? []);
+ const initBlockerEscalation = initial.blocker_escalation ?? {};
+ const [blockerEscalationEnabled, setBlockerEscalationEnabled] = useState(initBlockerEscalation.enabled ?? true);
const [followupInterval, setFollowupInterval] = useState(initial.followup_interval_minutes ?? 30);
const [followupMaxReminders, setFollowupMaxReminders] = useState(initial.followup_max_reminders ?? 0);
const [workspaceScope, setWorkspaceScope] = useState(initial.workspace_scope ?? "isolated");
@@ -105,9 +107,9 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
setNotifyDispatched(sn.dispatched ?? true);
setNotifyProgress(sn.progress ?? true);
setNotifyFailed(sn.failed ?? true);
- setNotifyCompleted(sn.completed ?? false);
- setNotifyCommented(sn.commented ?? false);
- setNotifyNewTask(sn.new_task ?? false);
+ setNotifyCompleted(sn.completed ?? true);
+ setNotifyCommented(sn.commented ?? true);
+ setNotifyNewTask(sn.new_task ?? true);
setNotifySlowTool(sn.slow_tool ?? true);
setNotifyMode(sn.mode ?? "direct");
const smr = s.member_requests ?? {};
@@ -115,6 +117,8 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
setMemberRequestsAutoDispatch(smr.auto_dispatch ?? false);
setEscalationMode(s.escalation_mode ?? "");
setEscalationActions(s.escalation_actions ?? []);
+ const sbe = s.blocker_escalation ?? {};
+ setBlockerEscalationEnabled(sbe.enabled ?? true);
setFollowupInterval(s.followup_interval_minutes ?? 30);
setFollowupMaxReminders(s.followup_max_reminders ?? 0);
setWorkspaceScope(s.workspace_scope ?? "isolated");
@@ -149,6 +153,7 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
settings.escalation_mode = escalationMode;
if (escalationActions.length > 0) settings.escalation_actions = escalationActions;
}
+ settings.blocker_escalation = { enabled: blockerEscalationEnabled };
if (followupInterval !== 30) settings.followup_interval_minutes = followupInterval;
if (followupMaxReminders !== 0) settings.followup_max_reminders = followupMaxReminders;
settings.workspace_scope = workspaceScope || "isolated";
@@ -158,7 +163,7 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
} finally {
setSaving(false);
}
- }, [teamId, allowUserIds, denyUserIds, allowChannels, denyChannels, notifyDispatched, notifyProgress, notifyFailed, notifyCompleted, notifyCommented, notifyNewTask, notifySlowTool, notifyMode, memberRequestsEnabled, memberRequestsAutoDispatch, escalationMode, escalationActions, followupInterval, followupMaxReminders, workspaceScope, updateTeamSettings, onSaved]);
+ }, [teamId, allowUserIds, denyUserIds, allowChannels, denyChannels, notifyDispatched, notifyProgress, notifyFailed, notifyCompleted, notifyCommented, notifyNewTask, notifySlowTool, notifyMode, memberRequestsEnabled, memberRequestsAutoDispatch, escalationMode, escalationActions, blockerEscalationEnabled, followupInterval, followupMaxReminders, workspaceScope, updateTeamSettings, onSaved]);
const userOptions = knownUsers.map((u) => ({ value: u, label: u }));
const channelOptions = CHANNEL_TYPES.map((c) => ({ value: c.value, label: c.label }));
@@ -328,22 +333,24 @@ export function TeamSettingsTab({ teamId, team, onSaved }: TeamSettingsTabProps)
- {/* Escalation Policy (coming soon) */}
-