{{GROUP_NAME}}日报
{{RECORD_NOTE}}
{{HERO_SUMMARY}}
+最活跃时段:{{ACTIVITY_TIMELINE}}
+今日状态:形成 {{CONCLUSION_COUNT}} 个结论,待办 {{TODO_COUNT}} 项,未解决 {{UNRESOLVED_COUNT}} 项。
+活跃时间线:{{ACTIVITY_TIMELINE}}
-diff --git a/.env.example b/.env.example index 145a73c..40fc01d 100644 --- a/.env.example +++ b/.env.example @@ -4,7 +4,7 @@ VITE_DB_KEY= # AI API Configuration (Optional, can be entered in UI) VITE_DEEPSEEK_API_KEY= VITE_AI_BASE_URL=https://api.deepseek.com -VITE_AI_MODEL=deepseek-chat +VITE_AI_MODEL=deepseek-v4-flash # Message types to filter out (comma separated). Empty means show all message types. VITE_FILTER_MSG_TYPES= diff --git a/README.md b/README.md index c7f7e79..90c002e 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,13 @@ MAC系统 获取微信聊天记录 AI一键生成群聊总结 - **AI 智能总结**: 支持多模型服务配置(DeepSeek/GPT-4o/Claude/Moonshot),一键总结群聊精华内容,生成话题报告。 - **群聊日报生成**: 支持围绕群聊内容生成日报,通常会覆盖以下模块中的部分或全部内容: - **今日讨论热点**: 梳理群内主要话题,支持热度标签。 + - **一句话速览**: 首屏突出今日核心结论与待跟进事项。 - **实用信息与资源**: 提取分享的链接、资源等信息。 - **重要消息汇总**: 标记并展示重要消息,带发送者头像。 - **有趣对话或金句**: 收录群内的精彩对话。 - **问题与解答**: 整理群内的问答内容。 + - **尚未解决 / 今日剧情线**: 更适合工作群和项目群的回顾与跟进。 + - **今日群相册 / 语音时长榜 / 临时群友称号**: 让图片、语音和氛围型内容也能参与日报。 - **群内数据可视化**: 消息热度条形图、话唠榜 TOP5、活跃时间线。 - **词云/关键词**: 可视化展示群聊关键词。 - **图片生成**: 将 AI 总结的内容生成精美图片,方便分享。 diff --git a/docs/skill/wechatexplorer-reader/SKILL.md b/docs/skill/wechatexplorer-reader/SKILL.md index ec703bf..bb54d45 100644 --- a/docs/skill/wechatexplorer-reader/SKILL.md +++ b/docs/skill/wechatexplorer-reader/SKILL.md @@ -141,12 +141,31 @@ GET 用于读取数据,`POST /api/v1/report` 用于生成群日报(HTML + 长图 "qa": [ { "question": "Q", "answer": "A", "answerer": "解答人(可选)" } ], + "unresolved": [ + { "question": "待跟进问题", "owner": "相关人(可选)", "status": "待跟进", "note": "为什么还没结束" } + ], + "storylines": [ + { "title": "剧情线", "stages": [{ "time": "10:12", "event": "提出问题" }], "result": "可选结果" } + ], + "reversals": [ + { "topic": "某话题", "initialView": "最初判断", "finalView": "最终判断", "note": "可选说明" } + ], + "participantChains": [ + { "topic": "某话题", "chain": ["A 提出", "B 补充", "C 收尾"], "note": "可选说明" } + ], "analytics": { "topicHeat": [{ "topic": "话题1", "score": 9.5 }], "activeTimeline": "10:00-12:00 为最活跃时段", - "topSpeakers": [{ "name": "张三", "count": 58 }] + "topSpeakers": [{ "name": "张三", "count": 58 }], + "voiceLeaderboard": [{ "sender": "张三", "count": 3, "durationSec": 97 }] }, - "keywords": ["高频词1", "高频词2"] + "keywords": ["高频词1", "高频词2"], + "hero": { + "headline": "一句抓重点的日报标题", + "summary": "一句概览", + "keyTakeaway": "最重要结论", + "pendingNote": "待跟进事项" + } }, "metadata": { "groupName": "技术交流", @@ -333,4 +352,4 @@ GET 用于读取数据,`POST /api/v1/report` 用于生成群日报(HTML + 长图 } ``` -(视 MCP over HTTP 支持情况调整) \ No newline at end of file +(视 MCP over HTTP 支持情况调整) diff --git a/resources/mobile_daily_report.html b/resources/mobile_daily_report.html index 2197bff..40d35e4 100644 --- a/resources/mobile_daily_report.html +++ b/resources/mobile_daily_report.html @@ -27,13 +27,13 @@ .report { width: 430px; margin: 0 auto; - padding: 22px 14px 34px; + padding: 20px 14px 34px; } .hero, - .card, - .section { + .section, + .card { background: #fff; - border-radius: 16px; + border-radius: 18px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06); } .hero { @@ -41,25 +41,35 @@ } .hero-top { display: flex; - align-items: center; + align-items: flex-start; justify-content: space-between; gap: 14px; - min-width: 0; } .hero-top > div:first-child { min-width: 0; flex: 1 1 auto; } .hero h1 { + margin: 0; font-size: 23px; line-height: 1.2; - margin: 0 0 8px; font-weight: 900; } .sub { + margin-top: 8px; color: #667085; font-size: 13px; - line-height: 1.5; + line-height: 1.55; + } + .mode-tag { + display: inline-flex; + margin-top: 10px; + padding: 4px 10px; + border-radius: 999px; + background: #eef8f2; + color: #07a352; + font-size: 11px; + font-weight: 800; } .avatar-grid { width: 58px; @@ -76,6 +86,49 @@ border-radius: 50%; object-fit: cover; } + .hero-headline { + margin-top: 14px; + padding: 14px; + border-radius: 16px; + background: linear-gradient(135deg, #edf9f1 0%, #f7fbf8 100%); + } + .hero-headline b { + display: block; + font-size: 17px; + color: #076c39; + } + .hero-headline p { + margin: 8px 0 0; + font-size: 13px; + line-height: 1.65; + color: #1f2933; + } + .hero-inline-notes { + display: grid; + gap: 8px; + margin-top: 10px; + } + .hero-note, + .hero-status { + padding: 10px 12px; + border-radius: 12px; + font-size: 12px; + line-height: 1.5; + } + .hero-status { + margin-top: 10px; + background: #f7faf9; + color: #076c39; + font-weight: 700; + } + .hero-note.takeaway { + background: #eef8f2; + color: #076c39; + } + .hero-note.pending { + background: #fff8e8; + color: #8a5a00; + } .stats { display: grid; grid-template-columns: repeat(4, 1fr); @@ -87,14 +140,11 @@ border-radius: 12px; padding: 10px 6px; text-align: center; - min-width: 0; - overflow: hidden; } .stat b { display: block; font-size: 18px; color: #07a352; - white-space: nowrap; line-height: 1.25; } .stat span { @@ -102,16 +152,16 @@ color: #667085; } .section { - margin-top: 14px; + margin-top: 18px; padding: 18px; } .section-title { display: flex; align-items: center; gap: 8px; - font-size: 18px; + margin-bottom: 14px; + font-size: 19px; font-weight: 900; - margin-bottom: 12px; } .section-title::before { content: ''; @@ -120,11 +170,23 @@ border-radius: 99px; background: #07c160; } + .section-subtitle { + margin: 10px 0 6px; + color: #667085; + font-size: 12px; + font-weight: 700; + } + .section-more { + margin-top: 10px; + color: #98a2b3; + font-size: 11px; + text-align: right; + } .card { padding: 14px; margin-top: 10px; - box-shadow: none; border: 1px solid #edf0f2; + box-shadow: none; } .topic-title-row { display: flex; @@ -133,17 +195,17 @@ gap: 8px; } .topic-title-row h3 { + margin: 0; font-size: 16px; line-height: 1.35; - margin: 0; font-weight: 850; } .heat, .tag { display: inline-flex; align-items: center; - border-radius: 999px; padding: 4px 8px; + border-radius: 999px; background: #eef8f2; color: #07a352; font-size: 11px; @@ -158,19 +220,44 @@ background: #eef5ff; color: #1677ff; } - .red { - background: #fff1f0; - color: #ff4d4f; - } .topic-meta { margin-top: 6px; color: #8a94a6; font-size: 12px; } .card p { + margin: 10px 0 0; font-size: 13px; line-height: 1.65; - margin: 10px 0 0; + } + .topic-conclusions { + display: grid; + gap: 8px; + margin-top: 10px; + } + .topic-conclusion { + padding: 8px 10px; + border-radius: 10px; + background: #edf9f1; + color: #076c39; + font-size: 12px; + line-height: 1.5; + font-weight: 700; + } + .topic-inline-image { + display: grid; + grid-template-columns: 76px 1fr; + gap: 10px; + margin-top: 10px; + padding: 10px; + border-radius: 12px; + background: #f7faf9; + } + .topic-inline-image img { + width: 76px; + height: 76px; + border-radius: 10px; + object-fit: cover; } .participants { display: flex; @@ -182,7 +269,6 @@ display: inline-flex; align-items: center; gap: 5px; - min-width: 0; background: #f6f8fa; border-radius: 999px; padding: 3px 8px 3px 3px; @@ -191,7 +277,6 @@ width: 24px; height: 24px; border-radius: 50%; - object-fit: cover; } .person-chip b { max-width: 58px; @@ -213,17 +298,6 @@ background: #f2f4f7; color: #667085; } - .resource { - padding: 11px 12px; - background: #f7f8fa; - border-radius: 12px; - margin-top: 8px; - font-size: 13px; - line-height: 1.55; - } - .resource b { - color: #1677ff; - } .important-card { display: flex; gap: 10px; @@ -248,9 +322,9 @@ color: #1f2933; } .important-text { + margin-top: 5px; font-size: 13px; line-height: 1.55; - margin-top: 5px; } .important-note { margin-top: 8px; @@ -262,6 +336,34 @@ font-size: 12px; line-height: 1.45; } + .action-grid { + display: grid; + gap: 10px; + } + .action-card { + border-radius: 14px; + padding: 12px; + } + .todo-card { + background: #eef5ff; + } + .unresolved-card { + background: #fff8e8; + } + .action-card b { + display: block; + color: #1f2933; + font-size: 14px; + } + .action-card div { + margin-top: 6px; + font-size: 12px; + line-height: 1.55; + color: #485465; + } + .action-note { + color: #667085; + } .chat-block { background: #f0f2f5; border-radius: 14px; @@ -292,49 +394,126 @@ line-height: 1.5; } .quote-note { - background: #fff8e1; - border-radius: 10px; - padding: 9px 10px; margin-top: 10px; + padding: 9px 10px; + border-radius: 10px; + background: #fff8e1; color: #8a5a00; font-size: 12px; line-height: 1.5; } - .qa-card { - background: #f8fafc; - border-radius: 14px; - padding: 12px; + .qa-card, + .resource { margin-top: 10px; + padding: 12px; + border-radius: 14px; + background: #f8fafc; } - .qa-card b { + .qa-card b, + .resource b { display: block; color: #1f2933; margin-bottom: 5px; } - .qa-card div { + .qa-card div, + .resource { font-size: 13px; line-height: 1.55; color: #485465; } - .bar-row { + .storyline-card, + .chain-card { + background: #f8fafc; + } + .storyline-steps { display: grid; - grid-template-columns: 82px 1fr; gap: 8px; - align-items: center; - margin-top: 9px; + margin-top: 10px; + } + .storyline-step { + display: grid; + grid-template-columns: 50px 1fr; + gap: 10px; + } + .storyline-step span { + color: #8a94a6; font-size: 12px; } - .bar { - height: 10px; - background: #edf1f5; - border-radius: 999px; - overflow: hidden; + .storyline-step b { + font-size: 13px; + line-height: 1.5; } - .bar i { - display: block; - height: 100%; - background: #07c160; + .chain-flow { + display: flex; + flex-wrap: wrap; + gap: 6px; + align-items: center; + margin-top: 10px; + } + .chain-flow span { + display: inline-flex; + align-items: center; + padding: 6px 9px; border-radius: 999px; + background: #eef8f2; + color: #076c39; + font-size: 12px; + font-weight: 700; + } + .chain-flow i { + font-style: normal; + color: #98a2b3; + } + .gallery-card { + display: grid; + grid-template-columns: 112px 1fr; + gap: 12px; + margin-top: 10px; + padding: 12px; + background: #f7faf9; + border-radius: 14px; + } + .gallery-image { + width: 112px; + height: 112px; + border-radius: 12px; + object-fit: cover; + background: #e5e7eb; + } + .gallery-stats { + display: inline-flex; + margin-top: 7px; + padding: 4px 8px; + border-radius: 999px; + background: #eef5ff; + color: #1677ff; + font-size: 11px; + font-weight: 700; + } + .badge-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + } + .badge-card { + background: linear-gradient(180deg, #fdfdfd 0%, #f6fbf8 100%); + border: 1px solid #edf0f2; + border-radius: 14px; + padding: 12px; + } + .badge-card b { + display: block; + margin-top: 8px; + font-size: 15px; + } + .badge-card p { + margin: 8px 0 0; + font-size: 12px; + line-height: 1.55; + } + .data-grid { + display: grid; + gap: 12px; } .rank { display: flex; @@ -343,6 +522,9 @@ padding: 9px 0; border-bottom: 1px solid #eef0f2; } + .rank:last-child { + border-bottom: none; + } .rank img { width: 30px; height: 30px; @@ -395,7 +577,58 @@ color: #8a94a6; } .empty-section { - display: none; + display: none !important; + } + .compact .report { + padding-top: 18px; + } + .compact .section { + margin-top: 12px; + padding: 14px; + } + .compact .card { + padding: 11px; + } + .compact .important-card, + .compact .gallery-card, + .compact .chat-block { + padding: 10px; + } + .compact .section-title { + margin-bottom: 9px; + font-size: 17px; + } + .compact .hero-headline p, + .compact .card p, + .compact .important-text, + .compact .chat-bubble { + line-height: 1.5; + } + .compact .participants, + .compact .keywords, + .compact .hero-inline-notes { + gap: 6px; + } + .compact .topic-conclusions { + gap: 6px; + } + .compact .topic-inline-image { + grid-template-columns: 64px 1fr; + padding: 8px; + } + .compact .topic-inline-image img { + width: 64px; + height: 64px; + } + .compact .stats { + gap: 6px; + margin-top: 14px; + } + .compact .stat { + padding: 8px 6px; + } + .compact .stat b { + font-size: 17px; } @media (max-width: 430px) { html, @@ -407,75 +640,135 @@ padding-left: 12px; padding-right: 12px; } - .stats { - gap: 6px; - } - .stat b { - font-size: 16px; - } } -
+{{HERO_SUMMARY}}
+最活跃时段:{{ACTIVITY_TIMELINE}}
+今日状态:形成 {{CONCLUSION_COUNT}} 个结论,待办 {{TODO_COUNT}} 项,未解决 {{UNRESOLVED_COUNT}} 项。
+活跃时间线:{{ACTIVITY_TIMELINE}}
-