feat(ume): keyword key-alert rules with label and case-insensitive match

Add description keyword matching alongside notificationId rules, require
per-rule labels, and improve the AI monitor form layout and clear-on-push UX.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-06-22 16:48:01 +08:00
parent 99e7b1557f
commit 34db62c8d2
11 changed files with 449 additions and 134 deletions

View file

@ -337,7 +337,7 @@ const en = {
},
keyAlert: {
title: "AI alarm monitor (OClaw WhatsApp)",
help: "Match UME key alarms by notificationId and push via OClaw WebSocket. Auth shares NETX_OCLAW_ANALYZE_TOKEN / OCLAW_OPS_AI_SHARED_TOKEN; set NETX_OCLAW_ALARM_WS_URL separately.",
help: "Exact match by notificationId, or substring match on alarm description (case-insensitive; nativeProbableCause, etc.), pushed via OClaw WebSocket. Shares NETX_OCLAW_ANALYZE_TOKEN.",
ws: "OClaw WSS",
wsConnected: "connected",
wsDisconnected: "disconnected",
@ -345,25 +345,33 @@ const en = {
publishedOk: "published ok",
publishedFail: "published fail",
queue: "queue",
notificationId: "notificationId",
notificationIdPh: "Enter or pick notificationId",
label: "label",
labelPh: "optional, e.g. BGP Down",
forwardOnClear: "forward clear events",
add: "Add monitor ID",
matchType: "Match by",
matchNotificationId: "notificationId",
matchKeyword: "description keyword",
matchValuePhNotificationId: "Enter notificationId",
matchValuePhKeyword: "Enter keyword (case-insensitive)",
label: "Rule description",
labelPh: "Required, e.g. BGP Down",
forwardOnClear: "Push on alarm clear",
forwardOnClearHelp: "By default only new/updated alarms are pushed. When enabled, a clear notification is also sent when UME reports the alarm cleared.",
add: "Add rules",
adding: "Adding…",
delete: "Delete",
pickFromAlarms: "Pick from current alarms",
emptyRules: "No notificationId rules yet",
colId: "notificationId",
colLabel: "label",
pickFromAlarms: "Load alarm hints",
emptyRules: "No monitor rules yet",
colType: "type",
colMatch: "match",
colLabel: "description",
colForwardClear: "on clear",
colPublished: "published",
colAttempts: "attempts",
colLast: "last push",
colActions: "actions",
addOk: "Rule added",
addOk: "Monitor rule added",
deleteOk: "Deleted",
confirmDelete: "Delete this notificationId monitor rule?",
confirmDelete: "Delete this monitor rule?",
yes: "yes",
no: "no",
},
sync: {
title: "UME sync",