diff --git a/.vala_skill_hashes b/.vala_skill_hashes index 9d9a6f7..59ab1f8 100644 --- a/.vala_skill_hashes +++ b/.vala_skill_hashes @@ -12,6 +12,6 @@ vala_git_workspace_backup.vala 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf user-feedback-collector c0320451bf7ea0ce3d8ceaa603ae0a7b55c373c048363a5142258a4c23f45e81 user-feedback-data-source a95eb9142f3019fd193c46f89147dc7e0bf01dfe250202565a86f8bc52f37b13 user-feedback-processor 61783a8e9f03a973c187b359a87749ad1993dc71f8364b0a853d8b3ff64c75e8 -feishu-feedback-sync 9c9ca1f0c42a289e037289cd394299b7debf7e240d3b30429899da42b601d953 feishu-group-msg-sync 953534cc3d1cf4489060afe1cf10cad75faedd3f2d699ffa7478d178d528dc51 tencent-cos-upload 2505dbc8c7acdaf95f2228598ae12010e09599a25df4319587c4a3109d828053 +feishu-feedback-sync 066a9fd4da5ddb9dd2d4dc27412e593787747d87a6b4183e39354fd3f6443b4b diff --git a/data/last_wechat_sync_id b/data/last_wechat_sync_id index adb88b7..5a3aaf0 100644 --- a/data/last_wechat_sync_id +++ b/data/last_wechat_sync_id @@ -1 +1 @@ -1772 +1777 diff --git a/memory/.dreams/events.jsonl b/memory/.dreams/events.jsonl index 54593b0..57dc251 100644 --- a/memory/.dreams/events.jsonl +++ b/memory/.dreams/events.jsonl @@ -23,3 +23,4 @@ {"type":"memory.recall.recorded","timestamp":"2026-05-26T03:40:24.708Z","query":"小葵小葵群 chat_id 分发消息群","resultCount":1,"results":[{"path":"memory/2026-04-18.md","startLine":1,"endLine":5,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-27T02:15:55.251Z","query":"小葵小葵群 chat_id 反馈同步","resultCount":1,"results":[{"path":"memory/2026-04-18.md","startLine":1,"endLine":5,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-27T02:50:23.510Z","query":"pycache python 缓存 导入错误","resultCount":3,"results":[{"path":"memory/2026-05-27.md","startLine":22,"endLine":32,"score":1},{"path":"memory/2026-05-27.md","startLine":1,"endLine":27,"score":1},{"path":"memory/2026-04-10.md","startLine":20,"endLine":52,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-28T02:10:48.034Z","query":"小葵小葵群 反馈发送 分发 chat_id","resultCount":1,"results":[{"path":"memory/2026-04-18.md","startLine":1,"endLine":5,"score":1}]} diff --git a/memory/.dreams/short-term-recall.json b/memory/.dreams/short-term-recall.json index fc0510f..6244d95 100644 --- a/memory/.dreams/short-term-recall.json +++ b/memory/.dreams/short-term-recall.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-05-27T02:50:23.510Z", + "updatedAt": "2026-05-28T02:10:48.034Z", "entries": { "memory:memory/2026-04-18.md:1:5": { "key": "memory:memory/2026-04-18.md:1:5", @@ -9,13 +9,13 @@ "endLine": 5, "source": "memory", "snippet": "# 2026-04-18 工作日志 ## 术语共识 [李若松确认] 术语「飞书反馈消息数据库」默认指代用户反馈收集技能中的飞书内部测试反馈MySQL数据表 `vala_test.lark_group_message`,存储「内容测试问题反馈」群(oc_fabff7672e62a9ced7b326ee4a286c26)的同步消息数据。", - "recallCount": 8, + "recallCount": 9, "dailyCount": 0, "groundedCount": 0, - "totalScore": 8, + "totalScore": 9, "maxScore": 1, "firstRecalledAt": "2026-04-30T03:47:21.989Z", - "lastRecalledAt": "2026-05-27T02:15:55.251Z", + "lastRecalledAt": "2026-05-28T02:10:48.034Z", "queryHashes": [ "353f9765c086", "a6b740c99377", @@ -24,7 +24,8 @@ "42fe8210f22c", "81f7a2647922", "261597c52d5b", - "3fe44d618bf6" + "3fe44d618bf6", + "06538386c796" ], "recallDays": [ "2026-04-30", @@ -32,7 +33,8 @@ "2026-05-07", "2026-05-25", "2026-05-26", - "2026-05-27" + "2026-05-27", + "2026-05-28" ], "conceptTags": [ "vala-test.lark-group-message", diff --git a/output/daily_feedback/ai_descriptions_feishu_2026-05-27.json b/output/daily_feedback/ai_descriptions_feishu_2026-05-27.json new file mode 100644 index 0000000..0a23d84 --- /dev/null +++ b/output/daily_feedback/ai_descriptions_feishu_2026-05-27.json @@ -0,0 +1,41 @@ +{ + "date": "2026-05-27", + "descriptions": [ + { + "index": 1, + "description": "用户完成课相关人员无法解锁下一节课,即使重复学习也无法解决。" + }, + { + "index": 2, + "description": "【频繁】在移动端,[聊天记录] 学堂助理软软和静沐暖扬 静沐暖扬: 软软老师,我自己试用了这个app,体验感不好,不知反应慢等" + }, + { + "index": 3, + "description": "无明确问题" + }, + { + "index": 4, + "description": "游戏内英相关人员频不发声" + }, + { + "index": 5, + "description": "在APP上课过相关人员出现网络加载音频丢失,退出重进后选择继续上次内容时完全没有声音,重新开始也可能无效且需重复多次。" + }, + { + "index": 6, + "description": "有用户在学习过相关人员几乎每天都会遇到音频播放异相关人员题,已提供设备信息及问题录屏合集。" + }, + { + "index": 7, + "description": "课相关人员成后显示已通过,但返回后状态仍显示未完成(感叹号),导致下一课无法解锁。" + }, + { + "index": 8, + "description": "课相关人员习平台中,用户完成课相关人员状态显示为未完成(感叹号),需重新学习才能解锁下一节课。" + }, + { + "index": 9, + "description": "在设备调试环节,相关人员询问设备能否成功下载APP用相关人员课。" + } + ] +} \ No newline at end of file diff --git a/output/daily_feedback/ai_descriptions_wechat_2026-05-27.json b/output/daily_feedback/ai_descriptions_wechat_2026-05-27.json new file mode 100644 index 0000000..b5059fc --- /dev/null +++ b/output/daily_feedback/ai_descriptions_wechat_2026-05-27.json @@ -0,0 +1,209 @@ +{ + "date": "2026-05-27", + "descriptions": [ + { + "index": 1, + "description": "无明确问题" + }, + { + "index": 2, + "description": "无明确问题" + }, + { + "index": 3, + "description": "无明确问题" + }, + { + "index": 4, + "description": "L1 unit6-2《秘密惊喜》课相关人员容没有图片,用户退出重进后仍未恢复。" + }, + { + "index": 5, + "description": "在移动端,大概率也是网络不好下载不了 ↳ 回复 相关人员: 英相关人员频不发声了" + }, + { + "index": 6, + "description": "无明确问题" + }, + { + "index": 7, + "description": "APP上课过相关人员出现音频丢失导致无声音,重新进入或重开课相关人员题仍可能复现。" + }, + { + "index": 8, + "description": "用户在课相关人员习过相关人员频繁出现音频异常,导致无法正相关人员成学习并需重学。" + }, + { + "index": 9, + "description": "用户在移动端使用App时遇到操作反应慢、体验不佳的问题。" + }, + { + "index": 10, + "description": "无明确问题" + }, + { + "index": 11, + "description": "无明确问题" + }, + { + "index": 12, + "description": "在应用商店中搜索不到APP。" + }, + { + "index": 13, + "description": "无明确问题" + }, + { + "index": 14, + "description": "无明确问题" + }, + { + "index": 15, + "description": "无明确问题" + }, + { + "index": 16, + "description": "无明确问题" + }, + { + "index": 17, + "description": "无明确问题" + }, + { + "index": 18, + "description": "无明确问题" + }, + { + "index": 19, + "description": "用户在学习课相关人员反复停留在第一课,无法进入下一课。" + }, + { + "index": 20, + "description": "课相关人员习中反复停留在第一节课,后续课相关人员法解锁。" + }, + { + "index": 21, + "description": "无明确问题" + }, + { + "index": 22, + "description": "无明确问题" + }, + { + "index": 23, + "description": "无明确问题" + }, + { + "index": 24, + "description": "无明确问题" + }, + { + "index": 25, + "description": "重新登录后相关内容仍未解锁的问题" + }, + { + "index": 26, + "description": "无明确问题" + }, + { + "index": 27, + "description": "无明确问题" + }, + { + "index": 28, + "description": "重新登录后,0-2关卡仍显示为锁定状态。" + }, + { + "index": 29, + "description": "无明确问题" + }, + { + "index": 30, + "description": "无明确问题" + }, + { + "index": 31, + "description": "相关功能仍未解锁" + }, + { + "index": 32, + "description": "无明确问题" + }, + { + "index": 33, + "description": "绘本阅读课《美食机器人》完成时显示通关,但返回后无法解锁下一章节,需重复学习。" + }, + { + "index": 34, + "description": "用户上完课相关人员界面仍显示未完成状态(感叹号),需重新上课才能解锁下一节课。" + }, + { + "index": 35, + "description": "在客户端进行第六单元听力挑战时,题目选项未显示,导致用户无法完成关卡并解锁下一节课。" + }, + { + "index": 36, + "description": "用户在华为应用市场和应用宝内均搜索不到该应用的下载入口" + }, + { + "index": 37, + "description": "无明确问题" + }, + { + "index": 38, + "description": "无明确问题" + }, + { + "index": 39, + "description": "无明确问题" + }, + { + "index": 40, + "description": "无明确问题" + }, + { + "index": 41, + "description": "无明确问题" + }, + { + "index": 42, + "description": "无明确问题" + }, + { + "index": 43, + "description": "正在确认游戏在纯血鸿蒙系统上是否存在兼容性问题。" + }, + { + "index": 44, + "description": "无明确问题" + }, + { + "index": 45, + "description": "无明确问题" + }, + { + "index": 46, + "description": "用户端在纯模式下无法上课,需更换设备。" + }, + { + "index": 47, + "description": "无明确问题" + }, + { + "index": 48, + "description": "相关人员询问设备能否调试成功并下载app听课。" + }, + { + "index": 49, + "description": "安卓端是否设定了最低版本" + }, + { + "index": 50, + "description": "无明确问题" + }, + { + "index": 51, + "description": "无明确问题" + } + ] +} \ No newline at end of file diff --git a/output/daily_feedback/cluster_context_2026-05-27.json b/output/daily_feedback/cluster_context_2026-05-27.json new file mode 100644 index 0000000..5f2e576 --- /dev/null +++ b/output/daily_feedback/cluster_context_2026-05-27.json @@ -0,0 +1,213 @@ +{ + "date": "2026-05-27", + "total_clusters": 9, + "clusters": [ + { + "index": 1, + "cluster_id": "5689688935179088396", + "location": { + "端": "未知", + "环节": "听力挑战", + "课程": "", + "角色/组件": "UI" + }, + "priority": "P0", + "priority_detail": "", + "category": "启动/运行异常", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "嘿哈", + "content": "不能解锁的问题,各位老师如果遇到特别着急的家长可以让用户重新再玩一下,如果不着急的话,服务端正在修复数据,晚一点重新进一下就好了。", + "msg_type": "text", + "media_url": "", + "time": "2026-05-27 19:35:15" + } + ] + }, + { + "index": 2, + "cluster_id": "6989476639343962898", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "" + }, + "priority": "P1", + "priority_detail": "", + "category": "关卡/内容类", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "瓦拉英语-花花班班(早10晚7-周末休息)", + "content": "[聊天记录] 静沐暖扬和瓦拉英语-花花班主任(早10晚7)\n静沐暖扬: [视频]\n静沐暖扬: [视频]", + "msg_type": "link", + "media_url": "", + "time": "2026-05-27 14:04:39" + } + ] + }, + { + "index": 3, + "cluster_id": "2723326983638239209", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "" + }, + "priority": "P2", + "priority_detail": "", + "category": "其他问题", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "瓦拉英语-萌萌老师(早10晚7)", + "content": "@莎莎是个男老师好的\n ↳ 回复 莎莎是个男老师: @瓦拉英语-萌萌老师(早10晚7) 看起来是配置问题,我等下到了公司看下", + "msg_type": "link", + "media_url": "", + "time": "2026-05-27 09:20:15" + } + ] + }, + { + "index": 4, + "cluster_id": "9132806750199402624", + "location": { + "端": "移动端", + "环节": "未知", + "课程": "", + "角色/组件": "音频、组件、网络" + }, + "priority": "P2", + "priority_detail": "", + "category": "声音/音频类", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "王欢", + "content": "@.oO(王_计)Oo. ", + "msg_type": "text", + "media_url": "", + "time": "2026-05-27 12:47:40" + } + ] + }, + { + "index": 5, + "cluster_id": "7718570567683413173", + "location": { + "端": "移动端", + "环节": "关卡内", + "课程": "", + "角色/组件": "音频、网络" + }, + "priority": "P1", + "priority_detail": "", + "category": "声音/音频类", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "王欢", + "content": "[聊天记录] 群聊的聊天记录\n王欢: 家长您好,已经查到了,问题是网络加载过程中音频丢失了,您试试 APP 大退一下,重新登录并加载就可以了\nyanping: 几乎每次上课都会这样 实在太影响体验感了 。退出重进 如果选继续上次内容 就完全没有一点声音,只得重新开始,有时重新开始也不一定好,要重复很多次,很费时间。 有更好的解决办法吗", + "msg_type": "link", + "media_url": "", + "time": "2026-05-27 12:52:12" + } + ] + }, + { + "index": 6, + "cluster_id": "8549517841086446939", + "location": { + "端": "移动端", + "环节": "未知", + "课程": "", + "角色/组件": "音频" + }, + "priority": "P2", + "priority_detail": "", + "category": "声音/音频类", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "王欢", + "content": "问题录屏合集", + "msg_type": "text", + "media_url": "", + "time": "2026-05-27 13:11:49" + } + ] + }, + { + "index": 7, + "cluster_id": "380363450969345795", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "UI" + }, + "priority": "P2", + "priority_detail": "", + "category": "UI显示类", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "瓦拉英语-茉茉老师(早10晚7)", + "content": "这节课重复做了好几遍了,做的时候显示通关出来之后就不能进入下一节课", + "msg_type": "text", + "media_url": "", + "time": "2026-05-27 19:09:53" + } + ] + }, + { + "index": 8, + "cluster_id": "5136939664432261180", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "" + }, + "priority": "P1", + "priority_detail": "", + "category": "其他问题", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "梁音", + "content": "收到🫡", + "msg_type": "text", + "media_url": "", + "time": "2026-05-27 19:10:29" + } + ] + }, + { + "index": 9, + "cluster_id": "3081277245335302491", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "" + }, + "priority": "P2", + "priority_detail": "", + "category": "其他问题", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "嘿哈", + "content": "让它扫码试试吧\n ↳ 回复 瓦拉英语-益达老师: 老师们,请问这个设备有望调试成功,下载app听课吗?", + "msg_type": "link", + "media_url": "", + "time": "2026-05-27 20:49:22" + } + ] + } + ] +} \ No newline at end of file diff --git a/scripts/__pycache__/ai_summarize_feedback.cpython-312.pyc b/scripts/__pycache__/ai_summarize_feedback.cpython-312.pyc deleted file mode 100644 index 4bc1d29..0000000 Binary files a/scripts/__pycache__/ai_summarize_feedback.cpython-312.pyc and /dev/null differ diff --git a/scripts/__pycache__/detect_p0_realtime.cpython-312.pyc b/scripts/__pycache__/detect_p0_realtime.cpython-312.pyc deleted file mode 100644 index 6ff6224..0000000 Binary files a/scripts/__pycache__/detect_p0_realtime.cpython-312.pyc and /dev/null differ diff --git a/scripts/__pycache__/detect_p0_wechat.cpython-312.pyc b/scripts/__pycache__/detect_p0_wechat.cpython-312.pyc deleted file mode 100644 index 6655a9e..0000000 Binary files a/scripts/__pycache__/detect_p0_wechat.cpython-312.pyc and /dev/null differ diff --git a/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc b/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc index d15c4de..db819fd 100644 Binary files a/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc and b/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc differ diff --git a/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py b/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py index 67dbcbe..d85fef4 100755 --- a/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py +++ b/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py @@ -1562,10 +1562,37 @@ def main(): rows = query_messages(target_date, next_day) day_msgs = [r for r in rows if r[6][:10] == target_date] if not day_msgs: - print(f"❌ {target_date} 无数据") - sys.exit(1) - - sorted_msgs, clusters, cluster_order = sort_threads(day_msgs) + # 数据库无数据,尝试从 cluster_context JSON 重建 + workspace_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) + ctx_path = os.path.join(workspace_root, "output", "daily_feedback", f"cluster_context_{target_date}.json") + if not os.path.exists(ctx_path): + print(f"❌ {target_date} 无数据,且上下文文件不存在") + sys.exit(1) + print(f" 📝 数据库无数据,从上下文文件重建: {ctx_path}") + with open(ctx_path, "r", encoding="utf-8") as cf: + ctx = json.load(cf) + clusters = {} + cluster_order = [] + for c in ctx["clusters"]: + cid = c["cluster_id"] + msgs = [] + for m in c["messages"]: + msgs.append(( + m.get("message_id", cid), + m["sender"], + m.get("msg_type", "text"), + m["content"], + "", + m.get("quote_message_id", ""), + m.get("time", ""), + 0, + )) + if cid not in clusters: + clusters[cid] = [] + cluster_order.append(cid) + clusters[cid].extend(msgs) + else: + _, clusters, cluster_order = sort_threads(day_msgs) summary_md, has_content, _ = generate_summary(clusters, cluster_order, ai_placeholders=True) # 替换占位符 @@ -1579,6 +1606,10 @@ def main(): # 获取文档并覆盖写入(通过文件避免 shell 转义问题) title = f"飞书-{target_date} 用户反馈问题归纳" nodes = list_child_nodes() + if title not in nodes: + print(f" 📝 创建新文档: {title}") + update_summary_doc_as_children({target_date: summary_md}, title_prefix="飞书-") + nodes = list_child_nodes() if title not in nodes: print(f"❌ 未找到文档: {title}") sys.exit(1)