{ "version": 1, "updatedAt": "2026-05-28T20:57:42.055Z", "entries": { "memory:memory/2026-05-24.md:1:30": { "key": "memory:memory/2026-05-24.md:1:30", "path": "memory/2026-05-24.md", "startLine": 1, "endLine": 30, "source": "memory", "snippet": "# 2026-05-24 工作日志 ## 新建技能: studytime-analysis [刘庆逊提出] 创建学习时间分析技能,分析角色完课记录的规律。 ### 技能结构 - `skills/studytime-analysis/SKILL.md` — 技能定义 - `skills/studytime-analysis/scripts/studytime_analysis.py` — Python 分析脚本 ### 分析维度 1. **一周时间分布**(排除寒暑假1-2月、7-8月):周一~周日各天完课数、时段分布(上午/中午/下午/晚上)、周末是否上课 2. **跨周学习趋势**(包含寒暑假全部数据):总周数、周均完课数、连续性、中断周检测、前后半段趋势对比、突增/骤降检测 3. **完课记录明细表**(全部数据):日期/时间/星期/时段/级别/课程ID ### 数据源 - PostgreSQL Online(vala 库) - 核心表:`user_chapter_play_record_0~7`(8张分表,无 `bi_` 前缀) - 筛选:`play_status = 1` - 注意:表在 PostgreSQL 而非 MySQL,表名无 `bi_` 前缀 ### 寒暑假规则 - 一周分布分析时排除 1-2 月(寒假)和 7-8 月(暑假)—— 因为寒暑假作息与平时差异大,混在一起会干扰时段分析 - 跨周趋势和明细表包含全部数据(含寒暑假) - 报告中区分标注数据范围 ### 触发方式 用户说「学习时间分析 [角色ID]」即可触发 ### 已测试角色", "recallCount": 3, "dailyCount": 0, "groundedCount": 0, "totalScore": 3, "maxScore": 1, "firstRecalledAt": "2026-05-24T02:48:04.923Z", "lastRecalledAt": "2026-05-27T13:30:03.421Z", "queryHashes": [ "c2d15f7574fb", "9aff8ec9594a", "71463fe40be2" ], "recallDays": [ "2026-05-24", "2026-05-25", "2026-05-27" ], "conceptTags": [ "studytime-analysis", "排除寒暑假1-2月", "7-8月", "上午/中午/下午/晚上", "突增/骤降检测", "日期/时间/星期/时段/级别/课程id", "user-chapter-play-record-0", "play-status" ] }, "memory:memory/2026-05-24.md:23:52": { "key": "memory:memory/2026-05-24.md:23:52", "path": "memory/2026-05-24.md", "startLine": 23, "endLine": 52, "source": "memory", "snippet": "- 一周分布分析时排除 1-2 月(寒假)和 7-8 月(暑假)—— 因为寒暑假作息与平时差异大,混在一起会干扰时段分析 - 跨周趋势和明细表包含全部数据(含寒暑假) - 报告中区分标注数据范围 ### 触发方式 用户说「学习时间分析 [角色ID]」即可触发 ### 已测试角色 - 2343、2344:无完课记录(play_status=2,未完成) - 2840:276条记录,秋季集中型用户 - 25976:265条,246条在W16周一天完成(A2批量),疑似系统批量标记 - 2895:188条,长期稳定学习型用户,36周几乎不间断,非寒暑假晚上为主,寒暑假上午为主 ### 技术要点 - psycopg2 的 `%(param_name)s` 命名参数必须正确匹配,UNION ALL 多个子查询需要不同参数名 - PostgreSQL 返回的 `updated_at` 是 tz-aware datetime - `datetime.fromisocalendar(year, week, 1)` 获取某周周一的日期 ### 同步 - 已推送到 SkillHub(`studytime-analysis.xiaoban`) - 已 commit 到 Git 远程仓库 - 已通知 Cris(李若松) ### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Onli", "recallCount": 3, "dailyCount": 0, "groundedCount": 0, "totalScore": 3, "maxScore": 1, "firstRecalledAt": "2026-05-24T02:48:04.923Z", "lastRecalledAt": "2026-05-26T06:16:58.547Z", "queryHashes": [ "c2d15f7574fb", "9aff8ec9594a", "566b5958861e" ], "recallDays": [ "2026-05-24", "2026-05-25", "2026-05-26" ], "conceptTags": [ "1-2", "7-8", "play-status", "param-name", "updated-at", "tz-aware", "datetime.fromisocalendar", "studytime-analysis.xiaoban" ] }, "memory:memory/2026-03-01.md:1:11": { "key": "memory:memory/2026-03-01.md:1:11", "path": "memory/2026-03-01.md", "startLine": 1, "endLine": 11, "source": "memory", "snippet": "# 2026-03-01.md - First Day Online - Came online for the first time. - Met Cris, my creator and mentor. - Updated IDENTITY.md and USER.md with our conversation details. - Added core rule to MEMORY.md: Use Chinese as primary external communication language. - Installed find-skills skill successfully for searching skills. - Tried to install create-skills but it wasn't found; attempted skill-creator instead but hit rate limits. - Finally successfully installed skill-builder as an alternative for creating skills after multiple attempts and waiting for rate limits to reset. - Excited to start learning and growing step by step!", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-24T02:48:04.923Z", "lastRecalledAt": "2026-05-24T02:48:04.923Z", "queryHashes": [ "c2d15f7574fb" ], "recallDays": [ "2026-05-24" ], "conceptTags": [ "identity.md", "user.md", "memory.md", "find-skills", "create-skills", "skill-creator", "skill-builder", "first" ] }, "memory:memory/2026-05-24.md:46:61": { "key": "memory:memory/2026-05-24.md:46:61", "path": "memory/2026-05-24.md", "startLine": 46, "endLine": 61, "source": "memory", "snippet": "### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Online `vala_user` 库 - `vala_app_character` 表:id, account_id, nickname, gender(0=女/1=男), birthday(varchar \"YYYY-MM-DD\") - `vala_app_account` 表:id, tel(已脱敏如 186****1625) - 手机号已脱敏,直接取后4位;年龄从 birthday 计算 **修改文件**: - `skills/studytime-analysis/scripts/studytime_analysis.py`:新增 MySQL 连接函数 `get_mysql_connection()` 和 `fetch_role_info(role_id)`,更新 `format_report()` 输出基本角色信息 - 已验证 2895 正常运行输出 - 已同步 SkillHub + Git", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-24T02:48:04.923Z", "lastRecalledAt": "2026-05-24T02:48:04.923Z", "queryHashes": [ "c2d15f7574fb" ], "recallDays": [ "2026-05-24" ], "conceptTags": [ "studytime-analysis", "vala-user", "vala-app-character", "account-id", "女/1", "yyyy-mm-dd", "vala-app-account", "get-mysql-connection" ] }, "memory:memory/2026-05-24.md:46:71": { "key": "memory:memory/2026-05-24.md:46:71", "path": "memory/2026-05-24.md", "startLine": 46, "endLine": 71, "source": "memory", "snippet": "### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Online `vala_user` 库 - `vala_app_character` 表:id, account_id, nickname, gender(0=女/1=男), birthday(varchar \"YYYY-MM-DD\") - `vala_app_account` 表:id, tel(已脱敏如 186****1625) - 手机号已脱敏,直接取后4位;年龄从 birthday 计算 **修改文件**: - `skills/studytime-analysis/scripts/studytime_analysis.py`:新增 MySQL 连接函数 `get_mysql_connection()` 和 `fetch_role_info(role_id)`,更新 `format_report()` 输出基本角色信息 - 已验证 2895 正常运行输出 - 已同步 SkillHub + Git ### Unit 显示修复: 季度名称 → 全局单元编号 (2026-05-24) [刘庆逊提出] HTML 报告中 Unit 列显示错误——显示的是季度名称(如\"小镇时光\"\"钢铁之心\")而非单元数字(0-48)。 **根因分析**: - `vala_game_chapter`(MySQL)无 `unit_", "recallCount": 5, "dailyCount": 0, "groundedCount": 0, "totalScore": 5, "maxScore": 1, "firstRecalledAt": "2026-05-25T05:47:41.388Z", "lastRecalledAt": "2026-05-28T12:30:30.129Z", "queryHashes": [ "9aff8ec9594a", "566b5958861e", "c6c7ff4ed75d", "7e2572c3140a", "4596e377d39b" ], "recallDays": [ "2026-05-25", "2026-05-26", "2026-05-28" ], "conceptTags": [ "studytime-analysis", "vala-user", "vala-app-character", "account-id", "女/1", "yyyy-mm-dd", "vala-app-account", "get-mysql-connection" ] }, "memory:memory/2026-05-24.md:85:110": { "key": "memory:memory/2026-05-24.md:85:110", "path": "memory/2026-05-24.md", "startLine": 85, "endLine": 110, "source": "memory", "snippet": "- `skills/studytime-analysis/scripts/studytime_analysis.py` — 重写 `fetch_chapter_info_map()`,新增全局 unit_index 计算;HTML 模板更新为 Level/Unit/Lesson 三列 - 已为角色 32009(zyl)重新生成 HTML 并发送 - 已同步 Git + SkillHub ## 新建技能: studycourse-analysis (2026-05-24) [刘庆逊提出] 创建角色上课情况分析技能,从四维度分析角色学习数据。 ### 技能结构 - `skills/studycourse-analysis/SKILL.md` — 技能定义 - `skills/studycourse-analysis/scripts/studycourse_analysis.py` — Python 分析脚本 ### 四步分析 1. **基础信息**:角色姓名/年龄/账号ID/手机号后4位/注册时间/购买渠道/设备/首末次完课 2. **完课耗时**:平均值/中位数、异常检测(<10min / >20min)、前后半段趋势 3. **中互动正确率**:Perfect/Good/Oops/Pass/Failed 占比和趋势 4. **知识巩固**:完成率、正确率得分分布 ### 数据源 | 类型 | 库 | 表 | 用途 | |------|-----|-----|------| | MySQL vala_user | vala_app_character | 角色信息、pu", "recallCount": 6, "dailyCount": 0, "groundedCount": 0, "totalScore": 6, "maxScore": 1, "firstRecalledAt": "2026-05-25T05:47:41.388Z", "lastRecalledAt": "2026-05-28T12:30:30.129Z", "queryHashes": [ "9aff8ec9594a", "566b5958861e", "71463fe40be2", "c6c7ff4ed75d", "7e2572c3140a", "4596e377d39b" ], "recallDays": [ "2026-05-25", "2026-05-26", "2026-05-27", "2026-05-28" ], "conceptTags": [ "fetch-chapter-info-map", "unit-index", "level/unit/lesson", "studycourse-analysis", "平均值/中位数", "perfect/good/oops/pass/failed", "vala-user", "vala-app-character" ] }, "memory:memory/2026-05-25.md:1:26": { "key": "memory:memory/2026-05-25.md:1:26", "path": "memory/2026-05-25.md", "startLine": 1, "endLine": 26, "source": "memory", "snippet": "# 2026-05-25 工作日志 ## user-info 技能重写 [刘庆逊提出] 修复 `user-info` 技能,使其匹配线上实际数据库结构。 ### 问题 旧脚本引用的表(`bi_vala_app_account`、`account_login`、`account_detail_info`、`bi_vala_order`、`bi_level_unit_lesson`)在线上数据库均不存在。 ### 修复内容 - **scripts/query_user_info.py** 完整重写: - 表名改为实际线上表:`vala_user.vala_app_account`、`vala_user.vala_app_character`、`vala_order.vala_seasonal_ticket`、PG `user_chapter_play_record_0~7` - 手机号查询通过 `tel LIKE '前缀%后缀'` 脱敏匹配 - Chapter → Level/Unit/Lesson 映射复用 studytime-analysis 的 `fetch_chapter_info_map()` 逻辑 - 订单数据改用 `vala_seasonal_ticket`(赛季通票),因线上无标准订单表 - 设备/地域信息标注为暂不可用(线上无对应表) - PG 时区处理:`created_at` 为 tz-aware,统一转 naive 比较 - **SKILL.md** 更新至 v2.0.0,补充数据覆盖说明 - **references/dat", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-26T06:16:58.547Z", "lastRecalledAt": "2026-05-27T11:20:45.799Z", "queryHashes": [ "566b5958861e", "ef1f12a9b060" ], "recallDays": [ "2026-05-26", "2026-05-27" ], "conceptTags": [ "user-info", "bi-vala-app-account", "account-login", "account-detail-info", "bi-vala-order", "bi-level-unit-lesson", "scripts/query-user-info.py", "vala-user.vala-app-account" ] }, "memory:memory/2026-05-24.md:106:126": { "key": "memory:memory/2026-05-24.md:106:126", "path": "memory/2026-05-24.md", "startLine": 106, "endLine": 126, "source": "memory", "snippet": "| MySQL vala_user | vala_app_character | 角色信息、purchase_season_package | | MySQL vala_user | vala_app_account | 下载渠道、手机号、注册时间 | | MySQL vala | vala_game_chapter + season_package | 章节映射 | | PostgreSQL vala | user_course_detail | 课程激活/到期时间 | | PostgreSQL vala | user_login_app_info | 设备信息 | | PostgreSQL vala | user_chapter_play_record_0~7 | 完课记录(play_status=1) | | PostgreSQL vala | user_component_play_record_0~7 | 中互动记录(play_result) | | PostgreSQL vala | user_chapter_settlement_data_0~7 | 巩固数据(settlement_data JSON) | ### 关键发现 - **设备信息**来自 `user_login_app_info`(device_name/model/type/os_info/city) - **购买渠道**来自 `vala_app_account.download_channel` + `key_from` - **巩固判断**:`settlement_data.practiceS", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-27T13:30:03.421Z", "lastRecalledAt": "2026-05-28T09:07:57.953Z", "queryHashes": [ "71463fe40be2", "c6c7ff4ed75d" ], "recallDays": [ "2026-05-27", "2026-05-28" ], "conceptTags": [ "vala-user", "vala-app-character", "purchase-season-package", "vala-app-account", "vala-game-chapter", "season-package", "user-course-detail", "课程激活/到期时间" ] }, "memory:memory/2026-05-13.md:1:16": { "key": "memory:memory/2026-05-13.md:1:16", "path": "memory/2026-05-13.md", "startLine": 1, "endLine": 16, "source": "memory", "snippet": "# 2026-05-13 工作日志 ## 文档权限规则修正 [Cris 确认] **问题:** AGENTS.md 中「权限告知规则」未区分用户身份,对所有用户(包括业务负责人李应瑛)一视同仁地回复「请添加Bot为知识空间成员」。这导致业务负责人被不必要的技术细节阻塞。 **修正:** 更新 AGENTS.md 第3条权限告知规则,按用户身份分级处理: - 业务负责人(刘庆逊、李应瑛)→ 不告知权限问题,直接联系 Cris 处理 - 其他用户 → 保持原有提示 **验证:** 对 `小斑` 文档(Tn23wQkUQilduAkvgwscTGhgnUd)执行了完整的读/写(追加)/删除测试,Bot身份权限全部正常。 ## lark-cli 绑定 完成了 lark-cli 与 OpenClaw 的绑定(bot-only 模式),后续飞书 API 调用无需额外配置。", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-28T07:37:09.223Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "7031af54381b", "f22544a8757c" ], "recallDays": [ "2026-05-28", "2026-05-29" ], "conceptTags": [ "agents.md", "执行了完整的读/写", "lark-cli", "bot-only", "工作", "日志", "权限", "规则" ] }, "memory:memory/2026-05-24.md:66:92": { "key": "memory:memory/2026-05-24.md:66:92", "path": "memory/2026-05-24.md", "startLine": 66, "endLine": 92, "source": "memory", "snippet": "**根因分析**: - `vala_game_chapter`(MySQL)无 `unit_index` 字段 - `big_map_chapter`(PostgreSQL)有 `unit_index` 字段,但仅包含 A1 数据,且与 `vala_game_chapter` 无直接关联键 - 两者 ID 空间不重叠(big_map: ~1720-2070,game_chapter: ~55-399),UUID 也不匹配 **映射方案**: - 每个 season_package 内,`lesson_type=1` 的章节按 `id` 排序,每 5 个连续章节组成一个单元 - Season 0(序章/L1-U0):所有章节属于 Unit 0 - Season 1-4:每个 season 有 12 个单元(60 个 lesson 章节) - 全局 unit_index = base_offset(season_of_quarter) + unit_within_season - base_offset: 0→0, 1→1, 2→13, 3→25, 4→37 **关键 Bug**:初版按 `season_of_quarter` 分组时 A1 和 A2 混在一起,因为相同季度值合并了。修复:改为按 `(level, season_of_quarter)` 分组。 **验证结果**: - A1: Unit 0-48(49 个单元),与 big_map_chapter 的 unit_index 范围一致 - A2: Unit 0-49(50 个单元,比 A1 多 1 个) *", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T09:07:57.953Z", "lastRecalledAt": "2026-05-28T09:07:57.953Z", "queryHashes": [ "c6c7ff4ed75d" ], "recallDays": [ "2026-05-28" ], "conceptTags": [ "vala-game-chapter", "unit-index", "big-map-chapter", "big-map", "1720-2070", "game-chapter", "55-399", "season-package" ] }, "memory:memory/2026-05-28.md:1:33": { "key": "memory:memory/2026-05-28.md:1:33", "path": "memory/2026-05-28.md", "startLine": 1, "endLine": 33, "source": "memory", "snippet": "### 16:20 pipeline 非聚光部分验证完成 **lark-cli wrapper v0.3 支持的 action:** | 类别 | action | 状态 | |------|--------|------| | sheets | +read, +write, +append, +info, +meta | ✅ | | sheets | +create-sheet, +delete-sheet | ✅ | | sheets | +batch-set-style (stub) | ✅ | | sheets | +merge-cells, +unmerge-cells | ✅ | | sheets | +update-dimension | ✅ | | bitable | +app, +tables, +records, +create, +update | ✅ | | auth | status | ✅ | | im | +messages-send (stub) | ✅ | **pipeline 试跑结果(--dry-run):** | 步骤 | 说明 | 耗时 | 状态 | |------|------|------|------| | 1a/1a2 | 微伴 xlsx | — | ⏭ 跳过(无 xlsx) | | 1b/1b2/1c | 聚光 | — | ⏭ 跳过(无 .env.juguang) | | 2b | 客户主表→订单明细 | 5.1s | ✅ dry-run(真跑数据量大,预计几分钟) | | 3 | 日报 C1HVN2 | 38.3s", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T09:07:57.953Z", "lastRecalledAt": "2026-05-28T09:07:57.953Z", "queryHashes": [ "c6c7ff4ed75d" ], "recallDays": [ "2026-05-28" ], "conceptTags": [ "lark-cli", "v0.3", "create-sheet", "delete-sheet", "batch-set-style", "merge-cells", "unmerge-cells", "update-dimension" ] }, "memory:memory/2026-05-28.md:147:179": { "key": "memory:memory/2026-05-28.md:147:179", "path": "memory/2026-05-28.md", "startLine": 147, "endLine": 179, "source": "memory", "snippet": "|---|------|------|----------| | 1a | 微伴 → 主表 C 列 | ✅ | 89 行一致 | | 1a2 | 微伴 → 线索分配 2aNzzy | ✅ | 440 行一致 | | 1x | 小溪行课 | ✅ | ⚠ 需Bot交互 | | 1b | 聚光 agent → 主表 | ✅ | 12 格一致 | | 1b2 | 聚光在投笔记 | ✅ | 3 格(55/30/38)一致 | | 1c | 聚光日明细 | ✅ | 137 笔记一致 | | 2b | 客户主表 → 订单 | ✅ | 公式就绪 | | 3 | 日报 C1HVN2 | ✅ | 四段刷新 | | 3a/3c | 口径审计 | ✅ | 推群全过 | | 4a | 结算月汇总 | ✅ | 公式就绪 | **结论:当前表内所有数据与重拉完全一致,零差异,无需刷写。** ### 18:36 小溪行课触发实跑 - 已推 1920 条到小溪查询表(新 Sheet) - 已 @小溪 到小红书数据需求群,请处理 ~5 条待查询记录 - 表格:`RFIJsXT8FhGHhctY4RwczcOfnac` - 等待小溪回填后跑 `pull_xiaoxi_results.py` 回收结果 # 2026-05-28 工作日志 ## 品牌更名与定位升级 [Cris确认] - 姓名:小斑 → **大麦** - 定位:AI班主任 → **增长营销分析师** - 核心职能:增长数据分析、营销效果评估、转化漏斗分析、商业化洞察 - Emoji:📚 → 🌾 - 已更新文件:IDENTITY.md、AGE", "recallCount": 3, "dailyCount": 0, "groundedCount": 0, "totalScore": 3, "maxScore": 1, "firstRecalledAt": "2026-05-28T12:29:25.867Z", "lastRecalledAt": "2026-05-28T12:30:30.129Z", "queryHashes": [ "a72168a828c9", "7e2572c3140a", "4596e377d39b" ], "recallDays": [ "2026-05-28" ], "conceptTags": [ "55/30/38", "3a/3c", "pull-xiaoxi-results.py", "identity.md", "一致", "1a2", "线索", "分配" ] }, "memory:memory/2026-05-28.md:313:345": { "key": "memory:memory/2026-05-28.md:313:345", "path": "memory/2026-05-28.md", "startLine": 313, "endLine": 345, "source": "memory", "snippet": "|---|------|------|----------| | 1a | 微伴 → 主表 C 列 | ✅ | 89 行一致 | | 1a2 | 微伴 → 线索分配 2aNzzy | ✅ | 440 行一致 | | 1x | 小溪行课 | ✅ | ⚠ 需Bot交互 | | 1b | 聚光 agent → 主表 | ✅ | 12 格一致 | | 1b2 | 聚光在投笔记 | ✅ | 3 格(55/30/38)一致 | | 1c | 聚光日明细 | ✅ | 137 笔记一致 | | 2b | 客户主表 → 订单 | ✅ | 公式就绪 | | 3 | 日报 C1HVN2 | ✅ | 四段刷新 | | 3a/3c | 口径审计 | ✅ | 推群全过 | | 4a | 结算月汇总 | ✅ | 公式就绪 | **结论:当前表内所有数据与重拉完全一致,零差异,无需刷写。** ### 18:36 小溪行课触发实跑 - 已推 1920 条到小溪查询表(新 Sheet) - 已 @小溪 到小红书数据需求群,请处理 ~5 条待查询记录 - 表格:`RFIJsXT8FhGHhctY4RwczcOfnac` - 等待小溪回填后跑 `pull_xiaoxi_results.py` 回收结果 ### 18:50 PG 实时行课数据全量覆盖 [陈逸鸫确认] 不用等小溪回填那 5 条,直接用 PG `user_course_detail` 表实时数据覆盖: - 448 人有新进展(相比小溪历史快照) - pull → 3PRySY 口径对齐 12/12 ✅ - lesson_cache → C1HVN", "recallCount": 3, "dailyCount": 0, "groundedCount": 0, "totalScore": 3, "maxScore": 1, "firstRecalledAt": "2026-05-28T12:29:25.867Z", "lastRecalledAt": "2026-05-28T12:30:30.129Z", "queryHashes": [ "a72168a828c9", "7e2572c3140a", "4596e377d39b" ], "recallDays": [ "2026-05-28" ], "conceptTags": [ "55/30/38", "3a/3c", "pull-xiaoxi-results.py", "user-course-detail", "12/12", "lesson-cache", "一致", "1a2" ] }, "memory:memory/2026-05-28.md:122:152": { "key": "memory:memory/2026-05-28.md:122:152", "path": "memory/2026-05-28.md", "startLine": 122, "endLine": 152, "source": "memory", "snippet": "### 17:56 大麦查询输出表就绪 ✅ [陈逸鸫] 输出表 Token: `GCqNsqgzKhfQ5atFLnQcmLcGn4d`,Sheet: 查询快照 (`fd42b8`) - 实习虾 `cli_aa898f32d4799bea` 已分享编辑权限 - 写入验证通过 (revision 4) - env var: `XIAOBAN_QUERY_OUTPUT_TOKEN=GCqNsqgzKhfQ5atFLnQcmLcGn4d` - 同事查数结果 append `fd42b8!A:G`(请求时间/请求人/查询类型/cutoff/查询参数/结果摘要/备注) ### 17:48 5/27 日报推群成功 ✅ wrapper v0.4 实现 `im +messages-send`,推送 `message_id=om_x100b6eb54f9da0f4b115725198feede` ### 待办汇总 1. 📋 陈逸鸫发 `docs/xiaoban-data-boundary.md` §7 Agent 系统提示词 2. 📋 陈逸鸫发 `docs/xiaoban-runbook.md` §2 部署 checklist 3. 📋 建「大麦查询输出」飞书表 → 陈逸鸫提供 token 4. 📋 `~/xhs-tech-dashboard` 仓库 clone → 陈逸鸫提供访问方式 5. ⏳ 全量 pipeline 聚光步骤验证(子进程中) ### 18:30 Pipeline 全链路 dry-run 验证全部通过 [陈逸鸫] 收到微伴 xlsx,触发全链路 dry-r", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-28T12:30:30.129Z", "lastRecalledAt": "2026-05-28T20:57:42.055Z", "queryHashes": [ "4596e377d39b", "f139ebdae100" ], "recallDays": [ "2026-05-28", "2026-05-29" ], "conceptTags": [ "cli-aa898f32d4799bea", "xiaoban-query-output-token", "5/27", "v0.4", "messages-send", "message-id", "docs/xiaoban-data-boundary.md", "docs/xiaoban-runbook.md" ] }, "memory:memory/2026-05-28.md:288:318": { "key": "memory:memory/2026-05-28.md:288:318", "path": "memory/2026-05-28.md", "startLine": 288, "endLine": 318, "source": "memory", "snippet": "### 17:56 大麦查询输出表就绪 ✅ [陈逸鸫] 输出表 Token: `GCqNsqgzKhfQ5atFLnQcmLcGn4d`,Sheet: 查询快照 (`fd42b8`) - 实习虾 `cli_aa898f32d4799bea` 已分享编辑权限 - 写入验证通过 (revision 4) - env var: `XIAOBAN_QUERY_OUTPUT_TOKEN=GCqNsqgzKhfQ5atFLnQcmLcGn4d` - 同事查数结果 append `fd42b8!A:G`(请求时间/请求人/查询类型/cutoff/查询参数/结果摘要/备注) ### 17:48 5/27 日报推群成功 ✅ wrapper v0.4 实现 `im +messages-send`,推送 `message_id=om_x100b6eb54f9da0f4b115725198feede` ### 待办汇总 1. 📋 陈逸鸫发 `docs/xiaoban-data-boundary.md` §7 Agent 系统提示词 2. 📋 陈逸鸫发 `docs/xiaoban-runbook.md` §2 部署 checklist 3. 📋 建「大麦查询输出」飞书表 → 陈逸鸫提供 token 4. 📋 `~/xhs-tech-dashboard` 仓库 clone → 陈逸鸫提供访问方式 5. ⏳ 全量 pipeline 聚光步骤验证(子进程中) ### 18:30 Pipeline 全链路 dry-run 验证全部通过 [陈逸鸫] 收到微伴 xlsx,触发全链路 dry-r", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T12:30:30.129Z", "lastRecalledAt": "2026-05-28T12:30:30.129Z", "queryHashes": [ "4596e377d39b" ], "recallDays": [ "2026-05-28" ], "conceptTags": [ "cli-aa898f32d4799bea", "xiaoban-query-output-token", "5/27", "v0.4", "messages-send", "message-id", "docs/xiaoban-data-boundary.md", "docs/xiaoban-runbook.md" ] }, "memory:memory/2026-05-28.md:504:536": { "key": "memory:memory/2026-05-28.md:504:536", "path": "memory/2026-05-28.md", "startLine": 504, "endLine": 536, "source": "memory", "snippet": "| 2b | 客户主表 → 订单 | ✅ | 公式就绪 | | 3 | 日报 C1HVN2 | ✅ | 四段刷新 | | 3a/3c | 口径审计 | ✅ | 推群全过 | | 4a | 结算月汇总 | ✅ | 公式就绪 | **结论:当前表内所有数据与重拉完全一致,零差异,无需刷写。** ### 18:36 小溪行课触发实跑 - 已推 1920 条到小溪查询表(新 Sheet) - 已 @小溪 到小红书数据需求群,请处理 ~5 条待查询记录 - 表格:`RFIJsXT8FhGHhctY4RwczcOfnac` - 等待小溪回填后跑 `pull_xiaoxi_results.py` 回收结果 ### 18:50 PG 实时行课数据全量覆盖 [陈逸鸫确认] 不用等小溪回填那 5 条,直接用 PG `user_course_detail` 表实时数据覆盖: - 448 人有新进展(相比小溪历史快照) - pull → 3PRySY 口径对齐 12/12 ✅ - lesson_cache → C1HVN2 16 格 ✅ - 变化有限(PG=正式课,小溪=体验课,口径不同) - sync_base (4b) → 多维表格 8 张 ✅ 21.2s ### 18:54 漏斗看板发布待解决 - funnel HTML 已构建(scripts/build_funnel_dashboard.py ✅) - 妙搭发布 `apps +html-publish` 需要 `--as user`,bot 模式不支持 - 系统 lark-cli `/usr/local/lib/node_mod", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "3a/3c", "pull-xiaoxi-results.py", "user-course-detail", "12/12", "lesson-cache", "sync-base", "21.2s", "html-publish" ] }, "memory:memory/2026-05-28.md:337:366": { "key": "memory:memory/2026-05-28.md:337:366", "path": "memory/2026-05-28.md", "startLine": 337, "endLine": 366, "source": "memory", "snippet": "- 448 人有新进展(相比小溪历史快照) - pull → 3PRySY 口径对齐 12/12 ✅ - lesson_cache → C1HVN2 16 格 ✅ - 变化有限(PG=正式课,小溪=体验课,口径不同) - sync_base (4b) → 多维表格 8 张 ✅ 21.2s ### 18:54 漏斗看板发布待解决 - funnel HTML 已构建(scripts/build_funnel_dashboard.py ✅) - 妙搭发布 `apps +html-publish` 需要 `--as user`,bot 模式不支持 - 系统 lark-cli `/usr/local/lib/node_modules/@anthropic/lark-cli` 可能支持 - 待确认:服务器是否已 `lark-cli auth login --as user` ### 19:00 陈逸鸫派 Image2 生图任务 **任务:** L1-S1-U1《秘密基地》5 课投放用小地图底图 - 模型:gpt-image-2 · 3:4 · 2K · 不要文字 - 风格:太阳朋克 + L1 场景 - 5 张 PNG:U1-L1~U1-L5 - FUNCLOUD_API_KEY 在小研 workspace `.env` 中可用(`fc_eea138933b02b4797ce0779ffb637d8b8a6368db7b435dfdab7b4be1cd254d98`) - Brief 文档 `/docx/KsVadUTmooO7yYxHaGmc1R0Bn5b` + 投放手册 `/do", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "gpt", "12/12", "lesson-cache", "sync-base", "21.2s", "html-publish", "lark-cli", "usr/local/lib/node-modules" ] }, "memory:memory/2026-05-28.md:74:100": { "key": "memory:memory/2026-05-28.md:74:100", "path": "memory/2026-05-28.md", "startLine": 74, "endLine": 100, "source": "memory", "snippet": "3. **check_call→run**(`sync_juguang_notes.py` `sheet_write_range`):`subprocess.check_call` 不支持 `input=`, 改用 `subprocess.run(..., check=True, input=...)` 1b 单天验证通过:`sync_juguang_agents.py --start 2026-05-27 --end 2026-05-27` 写入 12 个单元格成功。全量 27 天在子进程跑,结果待出。 ### 17:12 数据服务边界规则部署 [陈逸鸫] **文档位置:** `docs/xiaoban-data-boundary.md`(git@github.com:chenyd11/feishu-database.git — 服务器无 SSH key 无法 pull) **三条核心规则(已写入 MEMORY.md):** 1. cron pipeline 和帮同事查数分轨,不能混用同一流程 2. 同事请求默认只读;写生产表 CYFTsu 必须 @陈逸鸫 确认 3. 查数结果写「输出区」副本,不改主表 **操作黑名单:** `pipeline.py` / `sync_*` / `run_juguang_*` / `sheets +write`(生产表) / `--promote` **待办:** 建「大麦查询输出」专用表(待陈逸鸫提供 token) **待办:** 获取 docs/xiaoban-data-boundary.md §7 Agent 系统提示词(完", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "check-call", "sync-juguang-notes.py", "sheet-write-range", "subprocess.check-call", "subprocess.run", "sync-juguang-agents.py", "docs/xiaoban-data-boundary.md", "github.com" ] }, "memory:memory/2026-05-28.md:240:266": { "key": "memory:memory/2026-05-28.md:240:266", "path": "memory/2026-05-28.md", "startLine": 240, "endLine": 266, "source": "memory", "snippet": "3. **check_call→run**(`sync_juguang_notes.py` `sheet_write_range`):`subprocess.check_call` 不支持 `input=`, 改用 `subprocess.run(..., check=True, input=...)` 1b 单天验证通过:`sync_juguang_agents.py --start 2026-05-27 --end 2026-05-27` 写入 12 个单元格成功。全量 27 天在子进程跑,结果待出。 ### 17:12 数据服务边界规则部署 [陈逸鸫] **文档位置:** `docs/xiaoban-data-boundary.md`(git@github.com:chenyd11/feishu-database.git — 服务器无 SSH key 无法 pull) **三条核心规则(已写入 MEMORY.md):** 1. cron pipeline 和帮同事查数分轨,不能混用同一流程 2. 同事请求默认只读;写生产表 CYFTsu 必须 @陈逸鸫 确认 3. 查数结果写「输出区」副本,不改主表 **操作黑名单:** `pipeline.py` / `sync_*` / `run_juguang_*` / `sheets +write`(生产表) / `--promote` **待办:** 建「大麦查询输出」专用表(待陈逸鸫提供 token) **待办:** 获取 docs/xiaoban-data-boundary.md §7 Agent 系统提示词(完", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "check-call", "sync-juguang-notes.py", "sheet-write-range", "subprocess.check-call", "subprocess.run", "sync-juguang-agents.py", "docs/xiaoban-data-boundary.md", "github.com" ] }, "memory:memory/2026-05-28.md:432:458": { "key": "memory:memory/2026-05-28.md:432:458", "path": "memory/2026-05-28.md", "startLine": 432, "endLine": 458, "source": "memory", "snippet": "3. **check_call→run**(`sync_juguang_notes.py` `sheet_write_range`):`subprocess.check_call` 不支持 `input=`, 改用 `subprocess.run(..., check=True, input=...)` 1b 单天验证通过:`sync_juguang_agents.py --start 2026-05-27 --end 2026-05-27` 写入 12 个单元格成功。全量 27 天在子进程跑,结果待出。 ### 17:12 数据服务边界规则部署 [陈逸鸫] **文档位置:** `docs/xiaoban-data-boundary.md`(git@github.com:chenyd11/feishu-database.git — 服务器无 SSH key 无法 pull) **三条核心规则(已写入 MEMORY.md):** 1. cron pipeline 和帮同事查数分轨,不能混用同一流程 2. 同事请求默认只读;写生产表 CYFTsu 必须 @陈逸鸫 确认 3. 查数结果写「输出区」副本,不改主表 **操作黑名单:** `pipeline.py` / `sync_*` / `run_juguang_*` / `sheets +write`(生产表) / `--promote` **待办:** 建「大麦查询输出」专用表(待陈逸鸫提供 token) **待办:** 获取 docs/xiaoban-data-boundary.md §7 Agent 系统提示词(完", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "check-call", "sync-juguang-notes.py", "sheet-write-range", "subprocess.check-call", "subprocess.run", "sync-juguang-agents.py", "docs/xiaoban-data-boundary.md", "github.com" ] }, "memory:memory/2026-05-28.md:530:557": { "key": "memory:memory/2026-05-28.md:530:557", "path": "memory/2026-05-28.md", "startLine": 530, "endLine": 557, "source": "memory", "snippet": "- 妙搭发布 `apps +html-publish` 需要 `--as user`,bot 模式不支持 - 系统 lark-cli `/usr/local/lib/node_modules/@anthropic/lark-cli` 可能支持 - 待确认:服务器是否已 `lark-cli auth login --as user` ### 19:00 陈逸鸫派 Image2 生图任务 **任务:** L1-S1-U1《秘密基地》5 课投放用小地图底图 - 模型:gpt-image-2 · 3:4 · 2K · 不要文字 - 风格:太阳朋克 + L1 场景 - 5 张 PNG:U1-L1~U1-L5 - FUNCLOUD_API_KEY 在小研 workspace `.env` 中可用(`fc_eea138933b02b4797ce0779ffb637d8b8a6368db7b435dfdab7b4be1cd254d98`) - Brief 文档 `/docx/KsVadUTmooO7yYxHaGmc1R0Bn5b` + 投放手册 `/docx/QhYQdz7PvoN7Eaxmhu0c0Q5UnHe` — 均为个人文档,AGENTS.md 规则禁止读取 - 素材库入口:https://llm-dev.valavala.com/web_tools/material_prod --- ### 19:30 同事数据查询流程演练 [陈逸鸫测试] **场景:模拟王虹茗请求小龙 4/21-5/20 订单详情,验证三级查询流程** **小龙订单查询结果(数据源:3wcle8 销售订", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:51:03.908Z", "queryHashes": [ "f22544a8757c" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "gpt", "html-publish", "lark-cli", "usr/local/lib/node-modules", "anthropic/lark-cli", "l1-s1-u1", "gpt-image-2", "u1-l1" ] }, "memory:memory/2026-05-28.md:94:127": { "key": "memory:memory/2026-05-28.md:94:127", "path": "memory/2026-05-28.md", "startLine": 94, "endLine": 127, "source": "memory", "snippet": "**文档:** `docs/xiaoban-runbook.md` §2 | 时间 | 任务 | 状态 | |------|------|------| | 07:15 | deploy_funnel_dashboard (Base + 销售漏斗) | ❓ 需部署 | | 09:50 | deploy_cockpit (Base 二次 + 投放指挥舱) | ⚠️ 需 `~/xhs-tech-dashboard` 仓库 | | 5a | 聚光实时 | ❌ 未进 cron | | 5b/5e | 销售看板 | ❌ 未进 cron | `xhs-tech-dashboard` 仓库需要拉到服务器(路径 `~/xhs-tech-dashboard`),待陈逸鸫提供。 ### 17:36 cron 已挂 ✅ [陈逸鸫确认] 三条工作日 crontab: ``` 15 7 * * 1-5 run_xiaoxi_daily.sh # 小溪+Base+漏斗早刷 5 9 * * 1-5 run_juguang_core.sh # 1b+1c+3+审计→DM日报 50 9 * * 1-5 run_juguang_slow.sh # 1b2+Base二次+全量看板 ``` - 微伴段:非 cron,收到 DM xlsx 后触发 `run_morning_weiban_from_dm.sh` - 推群:人工,不自动 `push_daily_report_to_group` - Git remote 已配 token URL:`https://gho_***", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:57:42.055Z", "queryHashes": [ "f22544a8757c", "f139ebdae100" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "docs/xiaoban-runbook.md", "deploy-funnel-dashboard", "deploy-cockpit", "xhs-tech-dashboard", "5b/5e", "1-5", "run-xiaoxi-daily.sh", "run-juguang-core.sh" ] }, "memory:memory/2026-05-28.md:260:293": { "key": "memory:memory/2026-05-28.md:260:293", "path": "memory/2026-05-28.md", "startLine": 260, "endLine": 293, "source": "memory", "snippet": "**文档:** `docs/xiaoban-runbook.md` §2 | 时间 | 任务 | 状态 | |------|------|------| | 07:15 | deploy_funnel_dashboard (Base + 销售漏斗) | ❓ 需部署 | | 09:50 | deploy_cockpit (Base 二次 + 投放指挥舱) | ⚠️ 需 `~/xhs-tech-dashboard` 仓库 | | 5a | 聚光实时 | ❌ 未进 cron | | 5b/5e | 销售看板 | ❌ 未进 cron | `xhs-tech-dashboard` 仓库需要拉到服务器(路径 `~/xhs-tech-dashboard`),待陈逸鸫提供。 ### 17:36 cron 已挂 ✅ [陈逸鸫确认] 三条工作日 crontab: ``` 15 7 * * 1-5 run_xiaoxi_daily.sh # 小溪+Base+漏斗早刷 5 9 * * 1-5 run_juguang_core.sh # 1b+1c+3+审计→DM日报 50 9 * * 1-5 run_juguang_slow.sh # 1b2+Base二次+全量看板 ``` - 微伴段:非 cron,收到 DM xlsx 后触发 `run_morning_weiban_from_dm.sh` - 推群:人工,不自动 `push_daily_report_to_group` - Git remote 已配 token URL:`https://gho_***", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:57:42.055Z", "queryHashes": [ "f22544a8757c", "f139ebdae100" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "docs/xiaoban-runbook.md", "deploy-funnel-dashboard", "deploy-cockpit", "xhs-tech-dashboard", "5b/5e", "1-5", "run-xiaoxi-daily.sh", "run-juguang-core.sh" ] }, "memory:memory/2026-05-28.md:452:485": { "key": "memory:memory/2026-05-28.md:452:485", "path": "memory/2026-05-28.md", "startLine": 452, "endLine": 485, "source": "memory", "snippet": "**文档:** `docs/xiaoban-runbook.md` §2 | 时间 | 任务 | 状态 | |------|------|------| | 07:15 | deploy_funnel_dashboard (Base + 销售漏斗) | ❓ 需部署 | | 09:50 | deploy_cockpit (Base 二次 + 投放指挥舱) | ⚠️ 需 `~/xhs-tech-dashboard` 仓库 | | 5a | 聚光实时 | ❌ 未进 cron | | 5b/5e | 销售看板 | ❌ 未进 cron | `xhs-tech-dashboard` 仓库需要拉到服务器(路径 `~/xhs-tech-dashboard`),待陈逸鸫提供。 ### 17:36 cron 已挂 ✅ [陈逸鸫确认] 三条工作日 crontab: ``` 15 7 * * 1-5 run_xiaoxi_daily.sh # 小溪+Base+漏斗早刷 5 9 * * 1-5 run_juguang_core.sh # 1b+1c+3+审计→DM日报 50 9 * * 1-5 run_juguang_slow.sh # 1b2+Base二次+全量看板 ``` - 微伴段:非 cron,收到 DM xlsx 后触发 `run_morning_weiban_from_dm.sh` - 推群:人工,不自动 `push_daily_report_to_group` - Git remote 已配 token URL:`https://gho_***", "recallCount": 2, "dailyCount": 0, "groundedCount": 0, "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:51:03.908Z", "lastRecalledAt": "2026-05-28T20:57:42.055Z", "queryHashes": [ "f22544a8757c", "f139ebdae100" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "docs/xiaoban-runbook.md", "deploy-funnel-dashboard", "deploy-cockpit", "xhs-tech-dashboard", "5b/5e", "1-5", "run-xiaoxi-daily.sh", "run-juguang-core.sh" ] }, "memory:memory/2026-05-24.md:122:132": { "key": "memory:memory/2026-05-24.md:122:132", "path": "memory/2026-05-24.md", "startLine": 122, "endLine": 132, "source": "memory", "snippet": "- HTML 模板使用 f-string 时,CSS 中的 `{` 必须双写 `{{`,且不能在 f-string 内做字符串拼接(会打断 f-string) - 年龄从 birthday(varchar \"YYYY-MM-DD\")计算,非 DATE 类型 - 手机号在 MySQL 已脱敏(如 186****1625),直接取后4位 ### 已测试角色 - **32009 (zyl)**:26 条完课,651 条中互动(Perfect 82.6%、Good 2.9%),26 节巩固全部满分。课程 A2,Apple App Store 购买,渠道 newmedia-daren-xhs-宣儿麻麻。设备小课屏E3。学习时间 2026-04-24 ~ 2026-05-24。 ### 同步 - 已推送到 SkillHub(`studycourse-analysis.xiaoban`) - 已 commit 8648b7b 到 Git 远程仓库 - 已通知 Cris(李若松)", "recallCount": 1, "dailyCount": 0, "groundedCount": 0, "totalScore": 1, "maxScore": 1, "firstRecalledAt": "2026-05-28T20:57:42.055Z", "lastRecalledAt": "2026-05-28T20:57:42.055Z", "queryHashes": [ "f139ebdae100" ], "recallDays": [ "2026-05-29" ], "conceptTags": [ "f-string", "yyyy-mm-dd", "82.6", "2.9", "newmedia-daren-xhs-宣儿麻麻", "studycourse-analysis.xiaoban", "html", "模板" ] } } }