Files
memind/health-event-notification.mjs
T
john 2baf29b3ae feat(health): complete P0 health channel — baseline engine, page-data, MindSpace UI
Deliver encrypted health zone, observation API, baseline maturity pipeline,
page-data bindings, and H5/WeChat channel integration for health P0.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 18:04:57 +08:00

63 lines
2.1 KiB
JavaScript

export const HEALTH_EVENT_NOTIFICATION_TYPES = Object.freeze({
alert: 'health_event_alert',
watch: 'health_event_watch',
});
export function shouldCreateWebNotification(severity) {
return severity === 'watch' || severity === 'alert';
}
export function shouldAttemptWechatNotification(severity) {
return severity === 'alert';
}
export function healthEventNotificationType(severity) {
if (severity === 'alert') return HEALTH_EVENT_NOTIFICATION_TYPES.alert;
if (severity === 'watch') return HEALTH_EVENT_NOTIFICATION_TYPES.watch;
return null;
}
export function buildHealthEventNotificationCopy(event = {}) {
const severity = String(event.severity ?? 'info');
const message = String(event.message ?? event.agentSummary ?? '检测到新的健康变化').trim();
if (severity === 'alert') {
return {
title: '健康提醒:需要关注',
body: `${message}\n\n这不是医疗诊断。异常会记录在你的健康档案,并在你下次进入时优先展示。`,
};
}
if (severity === 'watch') {
return {
title: '健康变化提示',
body: `${message}\n\n建议继续按规范测量;如持续变化,可将趋势记录提供给医生评估。`,
};
}
return {
title: '健康记录更新',
body: message,
};
}
export function formatHealthAlertsPreamble(alerts = []) {
if (!alerts.length) return '';
const lines = [
'【未读健康提醒】',
'以下变化已记录在你的健康档案(不是医疗诊断)。请确认已知晓后再继续操作:',
'',
];
for (const alert of alerts.slice(0, 5)) {
const prefix = alert.severity === 'alert' ? '⚠️' : '•';
lines.push(`${prefix} ${alert.message ?? alert.agentSummary ?? '健康变化'}`);
}
if (alerts.length > 5) {
lines.push(`… 另有 ${alerts.length - 5} 条提醒`);
}
lines.push('', '回复「知道了」确认已读;确认后才会显示功能菜单。');
return lines.join('\n');
}
export function isHealthAlertsAckText(text = '') {
const normalized = String(text ?? '').trim();
return ['知道了', '已知悉', '确认', 'ok', 'OK', '好'].includes(normalized);
}