import { PanelShell } from "@/components/panel-shell"; import { ActivityChart } from "@/components/activity-chart"; import { getCaregiverActivity } from "@/lib/caregiver-panel"; import { formatDateTime, getConversationRoleLabel, getDeviceName, getUsageLabel, truncateText, } from "@/lib/panel-format"; import { requireCaregiverSession } from "@/lib/page-auth"; import { getCaregiverDisplayName } from "@/lib/session"; export const dynamic = "force-dynamic"; function aggregateByDate(items: { createdAt: Date | string }[]) { const counts: Record = {}; for (const item of items) { const date = new Date(item.createdAt); const key = `${date.getMonth() + 1}/${date.getDate()}`; counts[key] = (counts[key] || 0) + 1; } return Object.entries(counts) .map(([date, count]) => ({ date, count })) .reverse(); } export default async function ActivityPage() { const caregiver = await requireCaregiverSession("/activity"); const { usageEvents, conversationTurns, toolCalls } = await getCaregiverActivity( caregiver.id, ); const usageChartData = aggregateByDate(usageEvents); const conversationChartData = aggregateByDate(conversationTurns); return ( {usageEvents.length === 0 && conversationTurns.length === 0 && toolCalls.length === 0 ? (

暂时没有动态

长辈开始使用智能助理后,这里会自动记录使用情况和聊天内容,方便您随时了解。

) : ( <> {(usageChartData.length > 1 || conversationChartData.length > 1) && (
{usageChartData.length > 1 && (

使用频率

最近使用趋势

)} {conversationChartData.length > 1 && (

聊天频率

最近对话趋势

)}
)}

使用记录

最近的操作

{usageEvents.length === 0 ? (

暂时没有使用记录。

) : ( usageEvents.map((event) => (
{getDeviceName(event.elderDevice.displayName)} {formatDateTime(event.createdAt)}

{getUsageLabel(event.eventType)}

)) )}

聊天记录

最近的对话

{conversationTurns.length === 0 ? (

暂时没有聊天记录。

) : ( conversationTurns.map((turn) => (
{getConversationRoleLabel(turn.role)} {formatDateTime(turn.createdAt)}

{getDeviceName(turn.elderDevice.displayName)}

{truncateText(turn.content, 132)}

)) )}

智能服务

助理做了什么

{toolCalls.length === 0 ? (

暂时没有智能服务记录。

) : ( toolCalls.map((log) => (
{getDeviceName(log.elderDevice.displayName)} {formatDateTime(log.createdAt)}

{log.toolName}

{truncateText(log.outputText || log.argumentsJson, 136)}

)) )}
)}
); }