feat(workbench): route actionable notifications

This commit is contained in:
2026-09-24 14:57:47 +08:00
parent db778e0bac
commit 7e969e7e8c
4 changed files with 89 additions and 10 deletions
+13 -9
View File
@@ -110,6 +110,7 @@ import type {
WorkbenchUser
} from "./types";
import { getScheduledConditionIdFromAlertId } from "./utils/scheduled-condition-alerts";
import { getOperationalNotificationRoute } from "./utils/operational-notification-routing";
import { createAlertQueueConversationPrompt } from "./utils/scheduled-condition-prompts";
const WORKBENCH_LAYOUT_CSS_VARIABLES = getWorkbenchLayoutCssVariables();
@@ -260,15 +261,18 @@ export function MapWorkbenchPage({
return condition;
}, []);
const workbenchAlerts = useMemo<WorkbenchAlert[]>(() => {
const taskNotifications = operationalTasks.notifications.map((notification) => ({
id: `operational-task-notification:${notification.notification_id}`,
conditionId: operationalTaskConditionId(notification.task_id),
title: notification.title,
description: notification.description,
severity: notification.kind === "task_failed" ? "critical" as const : "warning" as const,
occurredAt: notification.created_at,
time: new Intl.DateTimeFormat("zh-CN", { hour: "2-digit", minute: "2-digit", hour12: false }).format(new Date(notification.created_at))
}));
const taskNotifications = operationalTasks.notifications.flatMap((notification) => {
const route = getOperationalNotificationRoute(notification.kind);
return route ? [{
id: `operational-task-notification:${notification.notification_id}`,
conditionId: operationalTaskConditionId(notification.task_id),
title: notification.title,
description: notification.description,
severity: route.severity,
occurredAt: notification.created_at,
time: new Intl.DateTimeFormat("zh-CN", { hour: "2-digit", minute: "2-digit", hour12: false }).format(new Date(notification.created_at))
}] : [];
});
return operationalTasks.available ? [...taskNotifications, ...runtimeWorkbenchAlerts] : runtimeWorkbenchAlerts;
}, [operationalTasks.available, operationalTasks.notifications, runtimeWorkbenchAlerts]);
const collapseAgentPanel = agent.collapsePanel;