- 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 全关联,选题端到端返回贴合视频解析
8.0 KiB
8.0 KiB
2026-09-01 工作日志
调度链路修复后:重派 6 条俊希视频解析任务(00:02-00:08)
- 背景:08-31 深夜确认调度根因=automations scheduledAt 必须未来时间才补算 next_run_at;金丝雀任务(337935e0)已验证成功执行并开出会话 f4232ef1
- 重派(用户选「重派6条视频解析任务」):6 条 once 任务,scheduledAt 依次 00:03:07~00:08:09(未来时间错开 1 分钟),cwds=D:\AgentSkill\mcn-workshop(会话归 mcn-workshop 空间)
detailId 任务名 scheduledAt nextRunAt 补算 33022 俊希-解析视频-33022 00:03:07 ✅ 1788192187000 33021 俊希-解析视频-33021 00:04:08 ✅ 1788192248000 29596 俊希-解析视频-29596 00:05:08 ✅ 1788192308000 15729 俊希-解析视频-15729 00:06:09 ✅ 1788192369000 21514 俊希-解析视频-21514 00:07:09 ✅ 1788192429000 20164 俊希-解析视频-20164 00:08:09 ✅ 1788192489000 - 关键验证点:6 条全部返回 nextRunAt(此前卡住的 6 条即这批 detailId 全无 nextRunAt)→ 预期调度器逐条拾取、mcn-workshop 空间陆续出现 6 个后台自动化会话(1 任务=1 会话)
- prompt 自包含:明确 mcn-dou-analysis 技能路径 + 功能五解析 + MCP short_video_detail/upload_douyin_video + content.json 边界规则 + 落盘
桌面\MCNSkill项目\俊希\视频分析\{标题}_标签1_标签2\+ 完成后回解析摘要 - 待追加:6 条任务执行结果(automation_runs ACCEPTED / 会话创建 / 解析产出落盘)
调度器秒级准点实证 + 并行改期教训 + 工作台 next_run_at 修复(00:03-00:07)
- 33022 准点执行实证(调度器从未停摆):create 时补算 nextRunAt=00:03:07 → 调度器准点拾取 → automation_runs ACCEPTED(00:03:17)→ 会话 442280f0「解析俊希账号指定视频」completed。后台会话 5→6。即 create 时设 +60s 未来时间 → 秒级准点执行
- 改期教训(我的失误):为并行把 6 条 update 到 00:04:50(距 update 时刻仅 ~17s 余量)→ 客户端判定太近清空 next_run_at → 5 条卡死(33022 因已在 00:03:07 执行不受影响)。规则:automation_update 的 scheduledAt 必须留足够未来余量(实测 +60s 稳、+17s 失败),update 往返有几秒延迟,越近越险。已用 +60s(00:07:06)恢复 5 条,nextRunAt=1788192426000 全部补算成功
- 工作台 server.js 根因修复(08-31 P2 判断有误需纠正):实测证明客户端调度器按 next_run_at 扫描(33022 有 nextRunAt 才执行;工作台直写 SQLite 的 next_run_at=null 全卡死)。之前 P2「去掉 next_run_at 列(执行器用 scheduled_at/created_at)」是错误判断。修复:
/api/run①scheduled_at=now+5s(带秒,未来)②恢复 next_run_at 列 = Date.now()+5000(17 列)→ 工作台按钮触发后 +5s 调度器拾取,满足用户「10 秒内执行」诉求 - 「10 秒内」机制边界:Agent 侧 automation_update 受客户端补算阈值限制(余量不足不补算),无法稳定 10s 内;工作台直写 next_run_at=now+5s 可稳定 10s 内执行。用户诉求正确落点=工作台按钮链路
- 服务当前未运行(8899 无响应);server.js 已改+语法通过,下次启动生效
09-01 00:10 关键验证:并行执行实测通过 + 立即执行参数结论
- 5 任务并行实测(00:07:06 触发):调度器 00:07:32.7 全部拾取(拾取延迟 ~27s = 客户端扫描周期);3 个立即 IN_PROGRESS 各建会话(29596/33021/15729 working),2 个 QUEUED 排队(21514 pos1/20164 pos2)→ 客户端后台自动化并发上限≈3,超出排队(queuedPosition 标记);1任务=1会话 1:1 并行成立
- automation_runs 状态机:QUEUED(排队,有queuedPosition)→IN_PROGRESS(建会话,meta含conversationId/sessionId)→ACCEPTED(完成,meta含resultState/resultEvidence);表列=thread_id/automation_id/status/read_at/thread_title/source_cwd/runs_json/result_success/metadata_json
- 立即执行参数:不存在。已查 argv.json(仅IDE渲染参数)/settings.json(仅插件/sandbox/claw)/无 workbuddy CLI;客户端无并发数/扫描周期配置项 → 无法通过参数控制立即执行
- 工作台按钮已是最快路径:server.js /api/run 写 scheduledAt=now+5s + next_run_at=now+5000(17列),点击后 5s 进入调度器视野 + 扫描周期(≤30s) → 实际开始 5~35s
- 服务已重启(00:10:08, PID 23820),server.js 修复代码确认在位(369-375行)
09-01 00:25 并发方案A(浏览器锁)落地 + 端口迁移 8899→8900
- 方案A 落地:server.js /api/run 对浏览器类任务(正则匹配 账号信息|视频列表|保存并分析|采集|导入账号|网页采集|浏览器)自动注入【浏览器锁约束】——锁文件
D:/AgentSkill/mcn-workshop/.browser-lock,操作前查锁→10s重试×18次(3分钟)→死锁保护(超10分钟可抢占)→完成后删锁;规范文档新增 5.6 并发互斥节(含 bash 拿锁/释放示例) - 8899 被小米占用(新坑):
MiPCAudio.exe(小米 PC 管家音频共享服务)系统级占用 0.0.0.0:8899 且杀后自动复活(taskkill 无效)→ server.js 绑定 127.0.0.1:8899 不生效、curl/内置浏览器全 000 - 修复:server.js 支持
node server.js [端口]传参(PORT_BASE=argv[2]||8899),改用 8900 启动,HTTP 200 验证通过,内置浏览器已打开 - bash
&后台进程会被会话回收:必须用 run_in_background=true 方式启动长驻服务,普通&+ 重定向会在命令返回后被清理
09-01 分析产物入库闭环:工作台入库接口 + 选题读视频解析(根因→修复→验证)
- 根因链(用户连续追问查实):①账号分析技能产出只落盘文件(视频分析/),流程无入库步骤;②入库机制只在 dsh 插件(扫描「视频对标」目录+解析任务导入),技能与插件两套流程从未接通;③开发机无 dsh 接口 3080/3081;④库中俊希 persona/account_analysis/video_analysis/video_source 全 0 → 选题接口 /api/ai/topics 唯一真实输入=hot_accounts.content(账号定位文本 1517 字),「基于视频」是假象
- 方案(用户批准+方向纠正:入库必须实现在工作台,dsh 插件仅参考,直写工作台库副本):server.js 新增
POST /api/import/account(扫描账号产出目录直写 mcn-plugin.db:视频分析/*/analysis.json→account_video_analysis、content.json→account_video_source、账号设定.md→account_persona、账号数据分析.md→account_analysis、短视频表格.xlsx→account_videos upsert 补列表)+ 新增 scripts/export_video_map.py(python 读 xlsx 13列出 JSON 权威映射);/api/ai/topics 增加读最新 3 条视频解析 JOIN account_videos 拼入 prompt【该账号最近视频解析】 - aweme_id 匹配 bug 两轮:①首版包含匹配太宽松→多条互配覆盖(同 aweme_id 5删1);②精确/包含仍 4/6 失败——根因=xlsx 标题带全角标点「!」「”」(过生日vlog!/“爸王餐”vlog!)而文件夹名无标点,normTitle split('#') 后双向 includes 失败。修复:normTitle 删全角半角标点+下划线转空格+空格归一+trim;入库前清
aweme_id IS NULL AND video_id IS NULL脏数据。修复后 6/6 命中(含 7649305562131270921 等) - 验证闭环:入库返回 xlsx_rows=137/video_analysis=6/video_source=6/videos=137/persona=1(去重);JOIN 俊希 analysis 6 条+source 6 条、null 脏数据 0;选题接口 query 已含 3 条真实视频解析(过生日 33916 字等),端到端 Dify 返回 3 选题全部基于解析内容基因(嘴甜夸赞/播音腔/家庭结构符号)
- 技能文档同步:mcn-dou-analysis SKILL.md 功能五「可选写库」补充工作台入库方式 + 注意事项第 6 条记录标题匹配红线(全角标点坑)
- 服务 PID 27548→KKQ7LW(8900,修复后重启);git 待提交