From c3b2ede0ce9f2f7896d392d95c45abaceb08bf48 Mon Sep 17 00:00:00 2001 From: Acbox Date: Tue, 31 Mar 2026 18:09:22 +0800 Subject: [PATCH] feat(web): add session-type-aware UI for chat interface - Make IM/heartbeat/schedule/subagent sessions read-only (hide input box) - Render heartbeat user messages as info blocks with trigger metadata and link to heartbeat logs - Render schedule user messages as info blocks with task metadata and link to schedule settings - Render subagent user messages as full-width markdown boxes - Add clickable spawn task results to navigate to subagent sessions --- apps/web/src/i18n/locales/en.json | 13 ++- apps/web/src/i18n/locales/zh.json | 13 ++- .../src/pages/home/components/chat-area.vue | 10 +- .../components/heartbeat-trigger-block.vue | 79 ++++++++++++++ .../pages/home/components/message-item.vue | 93 +++++++++++++++- .../components/schedule-trigger-block.vue | 101 ++++++++++++++++++ .../home/components/tool-call-subagent.vue | 87 +++++++++++---- apps/web/src/store/chat-list.ts | 10 +- 8 files changed, 373 insertions(+), 33 deletions(-) create mode 100644 apps/web/src/pages/home/components/heartbeat-trigger-block.vue create mode 100644 apps/web/src/pages/home/components/schedule-trigger-block.vue diff --git a/apps/web/src/i18n/locales/en.json b/apps/web/src/i18n/locales/en.json index b113d414..b1e41b69 100644 --- a/apps/web/src/i18n/locales/en.json +++ b/apps/web/src/i18n/locales/en.json @@ -191,7 +191,18 @@ "sessionTypeChat": "Chat", "sessionFilterAll": "All", "sessionSourcePrefix": "From:", - "searchSessionPlaceholder": "Search" + "searchSessionPlaceholder": "Search", + "heartbeatTrigger": "Heartbeat Trigger", + "heartbeatTime": "Time", + "heartbeatInterval": "Interval", + "heartbeatLastAt": "Last Heartbeat", + "viewHeartbeatLogs": "View Logs", + "scheduleTrigger": "Scheduled Task Trigger", + "scheduleName": "Task Name", + "scheduleDescription": "Description", + "schedulePattern": "Cron Pattern", + "scheduleMaxCalls": "Max Calls", + "viewSchedule": "View Schedule" }, "models": { "title": "Models", diff --git a/apps/web/src/i18n/locales/zh.json b/apps/web/src/i18n/locales/zh.json index 6028293d..d7cf7af3 100644 --- a/apps/web/src/i18n/locales/zh.json +++ b/apps/web/src/i18n/locales/zh.json @@ -187,7 +187,18 @@ "sessionTypeChat": "对话", "sessionFilterAll": "全部", "sessionSourcePrefix": "来自:", - "searchSessionPlaceholder": "搜索" + "searchSessionPlaceholder": "搜索", + "heartbeatTrigger": "心跳触发", + "heartbeatTime": "触发时间", + "heartbeatInterval": "间隔", + "heartbeatLastAt": "上次心跳", + "viewHeartbeatLogs": "查看日志", + "scheduleTrigger": "定时任务触发", + "scheduleName": "任务名称", + "scheduleDescription": "描述", + "schedulePattern": "Cron 表达式", + "scheduleMaxCalls": "最大调用次数", + "viewSchedule": "查看定时任务" }, "models": { "title": "模型", diff --git a/apps/web/src/pages/home/components/chat-area.vue b/apps/web/src/pages/home/components/chat-area.vue index 12679fd5..a49cec2a 100644 --- a/apps/web/src/pages/home/components/chat-area.vue +++ b/apps/web/src/pages/home/components/chat-area.vue @@ -50,6 +50,8 @@ v-for="msg in messages" :key="msg.id" :message="msg" + :session-type="activeSession?.type" + :bot-id="currentBotId" :on-open-media="galleryOpenBySrc" /> @@ -64,8 +66,11 @@ @update:open-index="gallerySetOpenIndex" /> - -
+ +
+
+
+
+ + {{ t('chat.heartbeatTrigger') }} +
+
+ {{ t('chat.viewHeartbeatLogs') }} + +
+
+
+ {{ t('chat.heartbeatTime') }} + {{ parsed.time }} + {{ t('chat.heartbeatInterval') }} + {{ parsed.interval }} + {{ t('chat.heartbeatLastAt') }} + {{ parsed.lastHeartbeat }} +
+
+ + + diff --git a/apps/web/src/pages/home/components/message-item.vue b/apps/web/src/pages/home/components/message-item.vue index 93ba8fce..044f4d0b 100644 --- a/apps/web/src/pages/home/components/message-item.vue +++ b/apps/web/src/pages/home/components/message-item.vue @@ -1,7 +1,7 @@