Commit Graph
176 Commits
Author SHA1 Message Date
maogeigei cd0f876785 fix(workshop): AI创作弹窗v6 确认按钮移入输入框工具栏 + 间距10px 2026-09-02 16:47:48 +08:00
maogeigei 3e0de85795 fix(workshop): AI创作弹窗v5输入框布局对齐WorkBuddy参考(输入区在上/工具栏在下/外框圆角)
* data-pages.js confirmAiScript HTML 重排:paperclip/textarea/send 横向→textarea 上+toolbar 下
  (toolbar 内 paperclip + spacer + send)
* style.css:
  - .req-input-box flex row→column;border-radius 12→14;padding 0(让内部块各自控)
  - .req-input width:100%+box-sizing:border-box;padding 10/14/6
  - 新增 .req-input-toolbar(.req-spacer flex:1 推开两钮)
  - .req-send 34×34→32×32 圆角50%(贴合 WorkBuddy 圆形发送)
  - .req-paper 28×32→32×32(与 send 视觉对齐)
* CDP 9224 验证:结构(列向/圆角/toolbar 位置/按钮分布)全绿+autoGrow 多行自然下移
* 设计:req-create 仍保留在 .req-bar 左侧独立(对应弹窗外功能,不入输入框)
2026-09-02 16:36:58 +08:00
maogeigei 50bbed30f7 feat(workshop): AI创作弹窗v4-上传需求附件(doc/docx/txt/pdf)→AI打磨携带+创作上下文
* attachment-parser.js 零依赖(node:zlib)txt/docx/pdf纯文本提取;.doc明确400报错
* server.js 新增 POST /api/req/parse-attachment(20MB/30MB/3万字符限);
  /api/ai/clarify 入参增 attach 拼【附件素材】段(2万字符)
* data-pages.js confirmAiScript:req-input-box内左侧回形针(新ICON_PATHS paperclip)
  + 隐藏 file input + attach chip 行(paperclip+文件名+字数+×);
  空输入但有附件自动发引导语;sendTurn 携带 attach;
  buildCreatePrompt 增第5参 attachText→【附件素材】段并入创作 prompt
* style.css:req-attach-row/req-chip/chip-x/req-paper 系列样式;req-input-box padding-left 调
* 端到端 4 路径 API 验证 OK;CDP 9224 冒烟(纯Runtime+DataTransfer 注入 + 持久WS)全绿;
  真实 Dify 一轮打磨确认附件诉求已吸收进需求清单
* 测试样例 tmp/attach-tests/{req.txt,req.docx,old.doc}.b64(make_samples.py)
  9-02 16:31 已改中立内容,避免冒烟带真实账号名
2026-09-02 16:31:57 +08:00
maogeigei 4f79c9515e AI创作弹窗 v3 补完:textarea auto-grow + placeholder 单行化 + req-head 换行提示
参考 WorkBuddy 输入框体验补完最后细节:

- textarea auto-grow(data-pages.js confirmAiScript):
  - 新增 autoGrow() 闭包:style.height = auto + Math.min(scrollHeight, 100)px
  - input 事件绑定 autoGrow,输入多行自动增高(上限 100px = CSS max-height)
  - sendTurn 清空 + 错误恢复 input 后调 autoGrow 复位
  - 验证 cdp-autogrow-check.mjs:before 32→after 100(5 行 116px cap 到 100px),清空回 32 ✅
- placeholder 单行化(去掉"(Enter 发送,Shift+Enter 换行)"——rows=1 只显示一行,第二行被截断)
- req-head 末尾补"Enter 直接发送,Shift+Enter 换行"提示,键盘说明从 placeholder 迁到头部更显眼

git status 仅 2 文件(+25/-5),按 2 小时节奏暂不 push。
2026-09-02 16:14:50 +08:00
maogeigei 305c8f1a18 AI创作弹窗 v3:需求维度块+一体输入条(图标钮·去取消)
按用户 UI 要求收紧弹窗体验:

HTML(data-pages.js confirmAiScript):
- 弹窗加高 width 720→760 + height:min(840px,92vh) flex column
- 需求区改为 req-field 维度块(rf-title 标题在上,rf-val 内容在下),CSS 2 列 grid
- 输入条一体化:req-bar = [reqCreate ✓图标] [req-input-box 圆角胶囊(内嵌 textarea + 右侧 reqSend ↑图标)]
- 取消按钮整段删除(保留右上 × 关闭);提交创作改用 #reqCreate id + svg check 图标
- 附 ICON_PATHS 加 arrow-up/check 路径

CSS(style.css .req-* 段全重写 L209-272):
- .req-modal flex column gap:10px
- .req-sheet grid 2 列 + .req-field 卡片底(empty 浅色)
- .req-input-box 圆角 12 + focus-within halo + 无边框 textarea + 34x34 primary 蓝圆发送钮
- .req-send busy 状态:disabled 灰 + 14x14 白色旋转 spinner(@keyframes req-spin)
- .req-create 44x44 描边 ✓ 图标钮(hover 浅蓝底)

附带红利:弹窗提交按钮改 id 后,与账号列表 [data-create] 同名选择器歧义自然消失(之前 CDP 冒烟需 .req-modal [data-create] 限定,现改 #reqCreate 直接命中)

冒烟 cdp-req-v3-smoke.mjs 24s 一轮真打磨+提交捕获全绿:fields:10/empty:10/modalH:784/sendIsIcon:true/createIsIcon:true/hasCancel:false + 提交{label:创作指令, skills:[短视频脚本创作], hasPersona:true, reqRows:6, modalClosed:true}
2026-09-02 16:11:00 +08:00
maogeigei 1390268585 AI创作弹窗对话打磨 v2:单弹窗需求框+输入框+AI全程引导
废弃旧分步向导+跨会话打磨+md载入路径,改为单弹窗 confirmAiScript 重写。

改动:
- public/data-pages.js: confirmAiScript v2(L199-326)= REQ_FIELDS 10 项常量 + 顶部10行需求框常显(空值灰显"待定·由AI按人设自决")+ 中部对话流(u/ai气泡)+ 底部输入行 + 取消/提交创作;无 step/chip/AI按钮/载入按钮/上下步
- public/style.css: 删 .wizard-modal/.wz-/.ai-topic 旧样式;新增 .req-modal/.req-sheet/.req-dialog/.req-msg.mine/.req-msg.ai/.req-bubble/.req-input-row/.req-input/.req-send 全套
- server.js: 新增 POST /api/ai/clarify(紧跟 /api/ai/topics 之后)= 同步阻塞 Dify chat-messages 100s AbortController;入参 {accountName,turn,reqMd,history};query 拼装账号人设+当前需求+最近2轮历史+本轮输入;强制输出"对话+==REQ==+10行需求"模板
- 记忆:MEMORY.md 核心技能段补"AI创作弹窗对话打磨 v2"长期记忆;2026-09-02.md 追加完整收尾日志

关键设计:每轮重发 reqMd + 最近 2 轮 history 做无状态上下文;AI 可更新任意字段但严禁生成脚本正文;reqLines 仅取非空字段 + "未填由AI按人设自决"提示。

冒烟 tmp/cdp-req-dialog-smoke.mjs(CDP 9224)4 步端到端 53s 全绿:结构✓/双轮真实Dify打磨✓/需求框0→6→8字段✓/提交捕获{label:创作指令,skills:[短视频脚本创作],hasPersona:true,reqRows:8,modalClosed:true}✓。
2026-09-02 16:00:46 +08:00
maogeigei 04d65bb92a fix(workbench): AI脚本诊断标题弹窗对齐AI写脚本查看弹窗——rw-stack三列(源脚本可折叠|AI脚本版本切换|AI诊断:评分条+问题清单+评语+查看完整复盘报告),未诊断显示空态+开始复盘按钮,复盘运行中禁用更新诊断(09-02) 2026-09-02 14:37:14 +08:00
maogeigei 24358b2df3 fix(workbench): 复盘按钮按有无源脚本动态分支prompt——无源(输入选题/未解析视频)仅AI脚本评分,禁幻觉对比;查询失败保守沿用三模式(09-02) 2026-09-02 14:26:56 +08:00
maogeigei e66488b530 fix(workbench): AI脚本诊断生成方式列收拢两种取值——按video_id判定 参考选题/输入选题,删GEN死代码映射(09-02) 2026-09-02 14:22:30 +08:00
maogeigei f770348f4b feat(workbench): AI脚本诊断列表操作列表头居中(th-act)+已诊断行按钮改「更新」(按review_ai/compare done判定)(09-02) 2026-09-02 14:19:09 +08:00
maogeigei 0a4766b607 feat(workbench): 账号详情页抖音号可点击跳抖音主页——优先sec_uid拼/user/URL,兜底搜索链接,复用data-ext外链打开(09-02) 2026-09-02 14:16:25 +08:00
maogeigei 5f77c3ceb4 fix(workbench): AI脚本诊断分页器右对齐——list-footer单元素(仅分页器)时margin-left:auto,与其他页批量栏+分页器布局一致(09-02) 2026-09-02 14:14:05 +08:00
maogeigei 1011ab1434 feat(workbench): AI脚本诊断列表支持分页——每页20条前端切片,复用pager组件,空态colspan改动态(09-02) 2026-09-02 14:13:10 +08:00
maogeigei 337be0dbe1 docs(skill)+fix(skill-review): 复盘技能对齐创作技能09-01/09-02新增规则——①设定承接维度补场1结构性符号承接检查 ②新增执行方式判定节(工作台复盘走AI会话任务/一条脚本=一个独立上下文) v1.2→v1.3(09-02) 2026-09-02 13:16:54 +08:00
maogeigei 25757d77fc fix(skill): 工作台任务执行方式铁律固化——创作/改写/重写/复盘必须走AI会话任务,禁止会话内直接写脚本草稿(09-02)
- SKILL.md 关键规则新增「〇执行方式判定」(P0):工作台场景任务先判定执行方式,进工作台一律 POST /api/run + skills 参数绑定技能
- SKILL.md 工作台章节新增第6条铁律:重新执行历史任务=复用原prompt提交新任务,自动应用当前技能版本
- 自动化任务调度机制.md 新增第八节「重新执行历史任务的标准姿势」(取prompt→提交→轮询→验证落库)
- frontmatter updated_at 更新至 09-02
2026-09-02 12:04:22 +08:00
maogeigei eb082ec5a4 feat(workbench): 趋势图仅展示最新发布倒推半年数据(时间窗口过滤) 2026-09-02 11:40:43 +08:00
maogeigei 2f26a6a63e fix(workbench): 趋势图时间轴改从左到右新→旧(阅读习惯先看新发布) 2026-09-02 11:38:22 +08:00
maogeigei c31e99caea feat(workbench): 趋势图改单图双Y轴彩色版(点赞红/评论蓝,Y轴万单位) 2026-09-02 11:31:49 +08:00
maogeigei 96c531968b fix(workbench): 趋势图容器拆两层结构修复高度失效(CSS 后代选择器匹配) 2026-09-02 11:28:20 +08:00
maogeigei 0c7bf6f831 fix(workbench): 账号详情支持 hash 第三段直达 tab,趋势图失败显式提示 2026-09-02 11:26:30 +08:00
maogeigei 5c37e489ea 工作台视频列表页新增点赞/评论趋势折线图(lieflat-charts G8 骨架)
- 引入 lieflat-charts 第三方图表技能到 subskills/(SKILL.md+catalog+templates,已删嵌套 .git)
- ECharts 6.1.0 本地化至 mcn-work-shop/public/vendor/(零 CDN 依赖,离线可用)
- 账号详情视频列表 tab 上方新增趋势图:X=发布时间升序,点赞/评论双序列面积折线
  (G8 Rainfall 骨架:双 grid 独立量级、同 X 联动 pointer、tipLight tooltip、quarticOut 入场)
- 全量视频数据单独拉取(pageSize=500,不随分页变化);numOf 解析 'x.x万' 文本
- V1.0/SKILL.md 登记 lieflat-charts 外部技能依赖
2026-09-02 11:09:12 +08:00
maogeigei b1602ec173 账号详情:视频列表tab去掉标题,账号设定内容去左右20px间隔
- data-pages.js:persona tab 删除 <h3>视频列表</h3> 标题
- style.css:.persona-wrap padding 0 20px → 0
2026-09-02 10:55:12 +08:00
maogeigei c3769102c2 账号信息精简:去掉简介行,账号定位收起改4行
- data-pages.js:info tab 删除「简介」info-row
- style.css:.clamp-text max-height 240px→96px(4行),展开按钮阈值 200→120
2026-09-02 10:53:39 +08:00
maogeigei 74c9bfdf98 工作台账号详情tab调整:账号设定内联信息页,视频列表移入persona tab并改名
- info tab:移除视频列表表格,内联展示账号设定(空态/文字版/卡片+文字切换),小节标题「账号设定」
- persona tab:改为视频列表表格+分页/批量,tab 标签改名「视频列表」
- persona 加载改为 info tab 首屏并行加载(dvP/await 拆分),tab 点击处理器去冗余
2026-09-02 10:51:40 +08:00
maogeigei f1f6288b7b refactor(skill): 主技能 subskill 目录更名 subskills(09-02 用户要求)
- V1.0/subskill/ → V1.0/subskills/(browser-harness/mcn-dou-analysis/mcn-script-review/mcn-video-prompt,git 识别 R100 纯重命名保留历史)
- 路径说明同步:V1.0/SKILL.md(96/105行)、Lite1.0/SKILL.md(66行)、mcn-dou-analysis/SKILL.md 红线行、操作规范.md 159/175行、mcn-work-shop app.js SKILL_HINT_ACCOUNT
- 用户环境 ~/.workbuddy/skills/短视频脚本创作/ 与源仓库 V1.0 同 inode(junction),自动同步无需单独改
- mcn-dou-analysis 内部 subskills/nuwa-skill-main 为正常结构不受影响
2026-09-02 10:36:23 +08:00
maogeigei 19bf4949a9 docs(skill): 明确已开启 Chrome 不主动关闭红线(09-02 用户要求)
- 浏览器搜索抖音账号操作规范.md 新增 5.7 浏览器进程生命周期(红线)
- mcn-dou-analysis/SKILL.md 浏览器操作规范红线补第⑦条
- V1.0/SKILL.md browser-harness 小节补进程生命周期红线
2026-09-02 10:30:31 +08:00
maogeigei afbe52e809 refactor(skill): browser-harness 移出 mcn-dou-analysis 挂到主技能 subskill 下
- 目录移动: subskill/mcn-dou-analysis/subskills/browser-harness → subskill/browser-harness (envs 完整保留, git 仅跟踪源码)
- mcn-dou-analysis/SKILL.md browser-harness 依赖红线: 技能本体位置更新为 主技能 subskill (09-02 调整)
- references/浏览器搜索抖音账号操作规范.md: 环境说明+技能本体两处更新新路径
- V1.0/SKILL.md: 新增「外部技能依赖: 浏览器工具(browser-harness)」小节登记新位置
2026-09-02 10:27:44 +08:00
maogeigei 831fd0e123 工作台UI:账号详情去年龄/地区重排两行 + 视频信息字段对齐(video-grid单容器跨行列对齐) + 视频ID限宽220px
- 账号信息:行1=抖音号/作品数/获取视频,行2=赛道/AI制作/粉丝/获赞\n- 视频信息:8字段合并同一grid容器(2行x4列,minmax(min-content,max-content)+80px间隔),时长↔分享/发布时间↔收藏逐列对齐(CDP实测差0)\n- 视频ID .vid-limited 220px省略+hover全量\n- 新增 cdp-align-videoinfo.mjs 对齐测量脚本
2026-09-02 10:22:11 +08:00
maogeigei 714976c23a 技能: S6框架新增开场钩子场(场1)结构性符号承接检查(通用规则)
引用S5「结构性符号」概念,不硬编码账号/符号;修复RW31丢金额机制、RW27/29缺来源故事这类符号在S5→S9链路被稀释漏出的问题
2026-09-01 18:33:28 +08:00
maogeigei 6662cc70d9 工作台迭代:技能挂载收口(F1/F2补mcn-dou-analysis)+文案改名(AI脚本评分/AI脚本)+周榜关注按钮+AI写脚本列表页全量分页/关注优先/时间倒序/标题跳详情/发布时间筛选
- 8处/api/run入口全部参数级技能挂载\n- listVideos全量625条分页+关注优先+发布时间倒序+days筛选\n- .gitignore忽略数据库备份文件
2026-09-01 18:33:20 +08:00
maogeigei 5d6f78864a AI任务参数级技能挂载:/api/run支持skills参数写入automations.skills_json,前端创作/复盘/分镜/提炼按钮按技能名传参 2026-09-01 16:31:40 +08:00
maogeigei 2719246424 AI创作任务必须按短视频脚本创作技能执行(跨环境技能定位~/.workbuddy/skills);/api/run/status ACCEPTED归入done 2026-09-01 16:18:09 +08:00
maogeigei f05cddac22 视频详情信息卡标签行移到最后一行 2026-09-01 15:18:45 +08:00
maogeigei 8dcbdf6054 视频详情信息卡顶部加标题「视频信息」(带分隔线) 2026-09-01 15:17:57 +08:00
maogeigei 6dd0519c84 fix(工作台): 视频详情首行改「标签」标签+标签内容+查看视频链接合并,删原第4行标签 2026-09-01 15:16:20 +08:00
maogeigei cd89dd8166 fix(工作台): 视频详情首行恢复标签结构——「视频地址」标签+「查看视频」链接在标签后 2026-09-01 15:13:58 +08:00
maogeigei 1e2b8378c0 feat(工作台): 视频详情首行改「查看视频」可点击链接,不显示具体视频地址 2026-09-01 15:11:32 +08:00
maogeigei eb73c89b90 feat(工作台): 视频详情 toolbar 显示视频标题名称,信息卡首行改视频地址可点击链接 2026-09-01 15:08:01 +08:00
maogeigei aaabc297fc fix(工作台): 视频详情标题去重(toolbar静态+信息卡标题行)与2/3行字段等宽grid 2026-09-01 15:04:22 +08:00
maogeigei e43e5bbb6c feat(工作台): 视频列表加收藏列+数字列右对齐,视频详情页信息三行+标签排版 2026-09-01 14:56:46 +08:00
maogeigei 2e048459ea feat(工作台): 三列表(账号/视频/AI写脚本)批量操作——左下角图标按钮+勾选批量删除
- 后端: dsh-data.js batchDelete(kind,ids)——accounts 软删(del_flag=1)+连坐清 persona/analysis/videos/source/analysis/rewrite_log; videos|rewrites 删视频行+关联(video_id 与 aweme_id 双键,兼容 video_id=null 历史行); server.js POST /api/dsh/batch-delete(kind 校验+空 ids 幂等)
- 前端: data-pages.js batchBarHtml/bindBatchBar + 三列表勾选列+左下角批量操作条; 图标版——app.js 新增 check-square/trash 图标, 批量模式图标右侧出 trash/x+全选+计数; style.css 批量样式+--danger
- 修复 P0: 账号连坐删除漏删 account_videos 行(孤儿残留), 已补并复验
- 验证: API 实测(删测试账号/视频连坐全清+非法kind+空ids) + CDP UI 33项PASS + 端到端删除 PASS(cdp-verify-batch.mjs / cdp-verify-batch-e2e.mjs)
2026-09-01 14:31:46 +08:00
maogeigei 6bf0eca90e feat(工作台): mcn-workshop 会话超 6 小时自动清除(软删除)
- server.js 启动段新增 cleanupExpiredSessions(): cwd 含 mcn-workshop + status=completed + 最后活动超 6h 且未删 → 置 deleted_at 软删除
- 启动时执行一次 + setInterval 每小时自动检查; working 会话不删(安全红线)
- 实测: 清除 9 条(13.6h~114.8h) 保留 1 条(1.5h 新会话)
2026-09-01 14:13:17 +08:00
maogeigei 6e8698a469 test(工作台): 俊希测试用例重跑——TC-09/10+三入口输入输出+入库全链路验证
- cdp-test-junxi.mjs: 弹窗标题断言 AI写脚本→AI创作(09-01 改名同步);文案分支打印修正(首次/有设定正则区分)
- 实测验证:TC-09 界面链路 PASS(AI选题3方向);AI创作三入口 prompt 注入 PASS(账号设定前置/选题后置/无泄漏);TC-10 自动任务链路 PASS(automations→调度器→会话→脚本02落盘);入库 PASS(video_source 6条+persona幂等+videos去重)
- 库表澄清:source/analysis 无 account_id 列靠 video_id 关联,俊希行 video_id=null 属设计
2026-09-01 12:44:13 +08:00
maogeigei 3b09d73248 docs(分析技能+工作台): 固化已有数据处理规则(库中已有≠可直接使用,复用优先+询问更新)
- 新建 references/铁律避坑规则/已有数据处理规则.md:分场景决策表+判断依据(产出目录权威/质量校验/增量处理)+散落规则收敛出处
- SKILL.md 加「已有数据处理(统一决策)」引用行
- 工作台 docs/AI会话任务输入输出对照.md 关键细节加已有数据处理条目
2026-09-01 12:29:32 +08:00
maogeigei cce27c0ba2 fix(工作台): 去「AI改写脚本」措辞残留,统一为 AI脚本(生成分镜/表头/占位/文档)
- data-pages.js: 查看 tooltip/表头已改写/两处暂无占位/生成分镜 desc+prompt 改写脚本→AI脚本
- docs/AI会话任务输入输出对照.md: 改写对比弹窗→脚本对比弹窗、生成分镜输入/模板同步
- cdp-verify-gensb.mjs: 新增生成分镜措辞验证(hook confirmRun 断言无改写)
2026-09-01 12:24:06 +08:00
maogeigei 79b8a3d036 feat(工作台): AI创作输入输出梳理+顺序统一(账号设定前置)+类型列签约改内部
- data-pages.js: 未解析两分支账号设定前置; 账号详情 data-rewrite 补 url; 类型列 badge+筛选下拉 签约→内部(后端 type=signed 不变)
- docs/AI会话任务输入输出对照.md: 8类功能入口输入输出+触发链路+prompt结构模板
- cdp-verify-aicreate.mjs: 断言升级(hasTopic动态分支+顺序断言)
- cdp-verify-typebadge.mjs: 新增类型列改名验证(排除bio数据文本)
2026-09-01 12:20:20 +08:00
maogeigei e91c8046c6 feat(工作台): AI创作 分镜头表老视频先提炼选题再创作 + 修复 #/rewrites noPersonaNote 未定义 P0
- buildTopicBlock(): 有#选题段直接用;无(分镜头表等)带解析内容+提炼指令;空只带标题
- 账号详情视频列表 + #/rewrites 两入口同步改造,desc 注明分镜头表先提炼
- 修复 renderRewrites 分支引用未定义 noPersonaNote 导致弹窗打不开(ReferenceError)
- 验证脚本 cdp-verify-aicreate.mjs(hook confirmRun 捕获 prompt,按 hasTopic 动态断言)
2026-09-01 12:03:47 +08:00
maogeigei 818d00a28c fix(工作台): 视频拆解/视频分析字段映射修正闭环
- server.js 入库映射对齐 dsh 语义:content.json→source.content_json、analysis.json→source.analysis_json(视频拆解 tab)、*拆解分析.md→account_video_analysis(视频分析 tab)
- 清理 6 条俊希错位 account_video_analysis + 白昼小熊 id13 归位 source47.analysis_json
- 重跑入库验证:俊希 6 条 analysis_json 均写入、account_video_analysis 12 条=王微斯拆解分析(语义正确)
- 王微斯视频三 tab 验证通过(视频脚本/视频拆解/视频分析各就其位)
- 临时脚本已清理
2026-09-01 10:34:07 +08:00
maogeigei b34929e7db 修复视频列表表头假记录+时长显示:export_video_map 过滤非数字 aweme_id;fmtDuration 兼容 mm:ss 文本
- 根因1:export_video_map.py 未过滤表头行(aweme_id='视频ID' 非空被当数据导入)
- 根因2:fmtDuration 只认秒数,Number('01:31')=NaN→全部显示 '-';库存/接口为 mm:ss 文本
- 修复:aweme_id 纯数字校验过滤表头;fmtDuration 双兼容(数字秒+mm:ss/hh:mm:ss);清理库内表头假记录
- 验证:导出 136 条无异常,库 total=136/表头0/无时长0,接口 duration 正常显示
2026-09-01 10:20:44 +08:00
maogeigei 8ba83dd95c 账号分析产物入库闭环:工作台入库接口+选题读视频解析
- server.js 新增 POST /api/import/account:扫描账号产出目录直写 mcn-plugin.db(视频分析→analysis/source、账号设定→persona、账号数据分析→analysis、短视频表格.xlsx→videos upsert)
- 新增 scripts/export_video_map.py:python 读 xlsx 13列输出 JSON 权威 aweme_id 映射
- /api/ai/topics 增加读最新3条视频解析 JOIN account_videos 拼入 prompt,选题基于真实视频内容
- 修复 aweme_id 匹配:normTitle 删全角标点(xlsx「!」「”」vs 文件夹无标点,4/6 失败根因)+下划线转空格;入库前清 null 脏数据
- mcn-dou-analysis SKILL.md:功能五补充工作台入库方式+注意事项第6条匹配红线
- 验证:俊希 6 analysis+6 source+137 videos 入库,JOIN 全关联,选题端到端返回贴合视频解析
2026-09-01 10:12:36 +08:00