Files
mcn-short-video/.workbuddy/memory/2026-08-27.md
T
maogeigei 79ae403b7b fix(MCN工作台): 修复刷新回首页(P0) + 周榜页全面对齐首页交互
- 根因: app.js 先于 data-pages.js 加载,boot 立即 router() 时 DataPages 未定义 → 数据页路由被当未知路由 → location.hash='#/' 回首页
- 修复: boot 改 DOMContentLoaded + 50ms 轮询等 DataPages 就绪再路由;router 兜底保护(数据页名+DataPages未定义不跳首页)
- 验证: browser-harness 真实验证(独立Chrome 9223调试实例) 直接访问/刷新/切换全部通过
- 首页周榜: 新增板块(前10+赛道日期筛选)、综合得分倒序排序、9列(新增粉丝/点赞/评论/分享+功能列)、导入按钮、去分页
- 完整周榜页(#/ranking): 对齐首页(赛道列前置、工具栏/分页右对齐、综合得分倒序+橙色、功能列居中、导入/查看按钮区分)
- 路由记忆: localStorage+cookie 双写,刷新后恢复上次页面
- 其他: AI写剧本→AI生成脚本、全部字体按比例放大+2(取整无小数)、外链新标签打开、btn-import/btn-view 样式
2026-08-27 20:43:39 +08:00

25 KiB
Raw Blame History

2026-08-27 工作日志

mcn-dou-analysis 定为主版本 + 源/dsh 差异判断(09:40-09:59)

  • 用户宣布 project/短视频脚本创作/V1.0/subskill/mcn-dou-analysis/ 为抖音账号分析技能主版本(源技能),已写入 MEMORY.md
  • 差异判断结论:dsh 副本(C:\Users\maidou\.dsh\skills\mcn-dou-analysis\)无独有新方法论内容需回流,全部差异四类:①环境路径特化(账号表→D:\dshworkspace\达人账号表.xlsx、路径配置/铁律避坑从 references-add 并入 references/、README 标注 dsh 状态)②位置互换内容一致(路径配置.md/铁律避坑 2 文件完全一致)③纯换行符差异(mcp-config.json、账号数据分析执行避坑.md)④注释补充
  • 源 references-add/创作流程/、知识库/01_账号设定、知识库/12_拆解评估 为空目录(无文件)

脚本注释回流(以 dsh 为准,09:55)

  • 背景:TOP6 定义分散是之前特意要治的问题,dsh 版脚本补充了「执行镜像」注释强化,用户指示以 dsh 为准回流
  • 修改(源技能 2 文件 6 处,代码逻辑零改动):
    • scripts/excel_tool.py 4 处:docstring 模式说明、用法示例注释、select_top6 函数 docstring、argparse help —— 均补「默认数量为 SKILL.md『视频筛选标准』的执行镜像,调整时须同步本处」
    • scripts/select_top6.py 2 处:顶部 docstring、# 解析 --count 注释
  • 验证:tr -d '\r' 后 diff 与 dsh 完全一致 ✅

待办/未决

  • references-add/README.md 两边差异已展示(dsh 版含「当前状态:②dsh环境」blockquote + ③用户环境启用流程;源版含「①开发机/②dsh环境」合并行)——用户要求"两边应该相同",统一方案待确认(建议通用中性版)

README 统一版(10:06 完成)

  • 用户指示:环境判断参考 SKILL.md 两步判定模型,两边应一致
  • 重写 references-add/README.md 为通用中性版,源 + dsh 同步(diff 验证 ✅ 完全一致):
    • 顶部「当前状态」blockquote → 三环境两步判定(与 SKILL.md 第 51 行完全一致:无 D:\AgentSkill=③用户环境;在 D:\AgentSkill\ 下=①开发机;含 .dsh=②dsh)+ references-add 机制只服务③的说明
    • 修改规则表格恢复三行齐全(①开发机/②dsh环境/③用户环境),①行补「开发机直接改标准库,不使用增量库机制」
    • 保留 dsh 版机制增强:②dsh「增量并入标准库」、③用户环境启用流程、标题「机制说明」
    • 措辞取 dsh 版:「获取视频列表」「(机制文档)」「③ 用户环境中」
  • 新发现(未处理):SKILL.md 第 75 行「当前机器源技能路径 D:/AgentSkill/mcn-video-script/project/V1.0」为过时路径——实际脚本创作技能在 project/短视频脚本创作/V1.0/(08-26 重构后),project/V1.0 是重构前旧结构;dsh 副本同样存在,需两边一起改,待用户确认

SKILL.md 源技能路径修正(10:08 完成,用户确认)

  • 修正 SKILL.md 第 75 行「脚本创作技能(权威源)」路径:D:/AgentSkill/mcn-video-script/project/V1.0 → D:/AgentSkill/mcn-video-script/project/短视频脚本创作/V1.0
  • 源 + dsh 两边同步修改;验证:新路径两边各 1 处 ✅、全技能范围旧路径 mcn-video-script/project/V1.0 零残留 ✅
  • 剩余 17 行 SKILL.md 差异均为原有 dsh 环境特化(账号表位置/路径配置位置/增量库状态说明),非本次引入,符合 .dsh 单向只读保留

「源精简=dsh」方案执行完成(10:10-10:30)

  • 用户选定:source references-add 只留 README.md(对齐 dsh 现状)
  • 移动结果:references/路径配置.md + references/铁律避坑规则/(账号设定执行避坑.md + 账号数据分析执行避坑.md)已从 references-add 并入源 references/ 标准库(时间戳 15:20/16:07 与 dsh 一致=真实 mv 保留时间戳;期间 mv/rmdir 报 "No such file" 为沙箱视图误报,真实磁盘已到位)
  • 引用更新(8 处,全部按 dsh 版对齐):SKILL.md ×3(行 40 引用+加粗、行 52 三环境括号说明、2.2 表补「产出路径配置」行 + 更新「增量库」行含「当前①开发机/②dsh环境状态」)+ feature ×5(01/02/05 路径配置、03/04 铁律避坑)+ 行 51 微小表述「③用户环境独立使用」
  • 验证:
    • references-add 两侧均只剩 README.md 且 diff 完全一致 ✅
    • references/ 全目录归一化 diff:仅剩 3 文件 4 处环境特化(feature/01、02 账号表路径 D:\dshworkspace\ ×3、feature/03 12段基准说明 ×1),按单向只读保留 ✅
    • SKILL.md 归一化 diff:17 处 → 5 处(账号表位置 ×2 处、账号类型判定行序互换 ×1、增量库状态视角 ×1——源=①开发机/dsh=②dsh),全部合理 ✅
    • references-add 残留引用:源仅剩 本地接口调用规范.md:4 历史来源说明(与 dsh 一致)✅
  • 铁律避坑规则 diff 经验:diff -r 直接对比中文 md 会因 CRLF/LF 误报整文件差异,必须 tr -d '\r' 归一化后对比;文件名含空格需用 find -print0 + while read -d '',for 循环按空格切分会把文件名拆断

账号信息数据源红线(10:16-10:25,用户环境反馈)

  • 反馈:昨天用户环境「分析账号/获取数据」时 AI 优先查 MCP 达人信息(list_hot_accounts/hot_account_detail),而非浏览器访问账号页面
  • 根因:文档默认流程虽是浏览器优先,但无显式红线;MCP 服务暴露带 account 工具且未标边界,AI 按工具名误用
  • 固化(源 + dsh 双副本同步 6 处编辑):SKILL.md 规则表「账号信息数据源(红线)」行(浏览器优先、如无必要不用 MCP、hot_account 非功能一数据源、浏览器访问不了才兜底+注明来源)、feature/01「数据源优先级(红线)」块、MCP_工具调用规范.md 工具清单「工具边界(数据源红线)」备注
  • 名称纠正(10:19 用户反馈):list_hot_accounts/hot_account_detail 不是热门账号/榜单,是 MCN 内部账号库(内部维护的达人账号,含人设/赛道/标签/代表作,非抖音页面实时数据;工具命名 hot_accounts 有误导性)——6 处文案已改「内部账号库查询」,验证「热门账号榜单/列表/详情」零残留 ✅、源/dsh 一致 ✅
  • 验证:三处新增源/dsh diff 一致 ✅(MCP 规范两侧完全一致)
  • 三层化沉淀:失误与规避记录 #013(已含内部账号库纠正)+ 本日志

10:25 同步到远程仓库

  • 提交 f025ad3(13M/3R/1A):mcn-dou-analysis 内嵌副本结构整合——references-add/ 的路径配置.md+铁律避坑规则2文件迁入 references/(git 识别为 rename),五功能文件/SKILL.md/MCP规范/excel_tool.py/select_top6.py 同步更新,记忆+失误记录
  • push 成功,browser-harness 未再误入(.gitignore 条目生效);origin/main = 本地 HEAD = f025ad3,工作区 0 改动;跟踪引用照旧重建

10:30-11:00 MCN工作台开发(V1.0 本地 Web 入口)

  • 用户需求:在 project/短视频脚本创作/V1.0/mcn-work-shop/ 开发工作台,方便使用技能 + 查看生成内容;形态=本地 Web 服务(非静态页);产出默认读桌面 MCNSkill项目 + 支持手动配置;挂成技能(说「打开工作台」自动拉起);不同步 dsh
  • 实现:server.js 零依赖 Node(http/fs/path 原生,端口8899占用自动+1)+ public/ 三件套(index.html/style.css/app.js 零 CDN)+ start.bat(managed node 优先回退系统 node)
    • API:/api/roots(默认+自定义根)/api/tree(递归目录树,深度≤4,跳隐藏/权限/占用)/api/read(md/json/txt/csv 在线预览,>5MB 拒绝)/api/download;路径白名单防穿越(默认根+自定义根,403 拦截)
    • 前端:🧭技能导航(5大功能块+典型问法+三种创作模式,数据对齐帮助文档)+📁产出浏览(账号树折叠/搜索过滤/迷你 markdown 渲染器/json 格式化/xlsx 下载提示/设置弹窗 localStorage 记忆根目录)
  • 验证全过:静态页 2744B+12983B+8573B、tree 5 账号中文路径正常、read md/json 正常、越权 403、xlsx 415 提示下载、download 正常
  • 技能挂载(仅 V1.0):SKILL.md 新增「MCN工作台」章节(触发语+启动步骤+两页签说明+不同步声明),last_change 更新;帮助文档开头补「打开工作台」提示行;dsh/Lite 均未改(用户明确,属刻意 divergence)
  • 边界:工作台是入口+查看器,技能执行仍在 WorkBuddy 对话(无网页→agent API);xlsx 暂不支持在线预览(零依赖取舍),后续可加服务端解析

工作台修复:文案更名 + 弹窗关闭失效(10:40)

  • 用户反馈 2 条:①「产出目录设置」改为「项目地址设置」②点击关闭按钮无法关闭弹窗
  • 修复:
    • 文案统一「产出目录」→「项目地址」(index.html 5 处:设置按钮 title/下拉 title/弹窗标题/说明/placeholder;app.js 错误提示;server.js 启动日志;SKILL.md 工作台章节),仅 V1.0,dsh/Lite 不动
    • 弹窗关闭失效根因:.modal-mask{display:flex} 作者样式优先级覆盖 hidden 属性 UA 默认 display:none,hidden=true 不生效 → style.css 补 .modal-mask[hidden]{display:none}(同优先级后声明胜出)
    • server.js 静态响应补 Cache-Control: no-store(否则浏览器缓存旧 css/js);之前一次 Edit 因缩进不匹配静默未生效,复查 grep 发现后重改
  • 验证:重启服务(8899,注意小米 MiPCAudio 也占 0.0.0.0:8899 但工作台用 127.0.0.1 互不冲突);curl 核验 api/静态 200、修复规则与文案已上线、响应头 no-store ✅;SKILL.md last_change 更新
  • 遗留:browser-harness 技能环境未安装(仅 SKILL.md),无法浏览器实测,用户刷新页面确认

工作台问法复制功能(10:44)

  • 用户问:能否点工作台功能按钮后 AI 会话自动处理?查证结论:不能——工作台功能卡是静态说明,WorkBuddy 无「网页/本地 HTTP → 触发会话」官方接口;触发入口仅对话框人工发话 + 官方「远程遥控」IM 机器人(企微/QQ/飞书/钉钉,Claw 设置);第三方博客的 URL scheme/本地 HTTP 方案无官方确认不可靠
  • 用户选定:功能卡改「点一下复制问法 → 粘贴对话执行」(AskUserQuestion 3 选 1)
  • 实现:qa-row 加 copyable + data-q + title;事件委托点击复制(去外层引号);navigator.clipboard.writeText + execCommand 兜底;toast 提示「已复制」1.8s;intro 提示行「点击任意问法即可复制」;CSS hover 高亮 + 📋 图标
  • 验证:curl 核验 app.js 8 处 / index.html 1 处 / style.css 5 处改动已上线 ✅;SKILL.md 工作台章节+last_change 更新;仅 V1.0 不同步 dsh/Lite

dsh 插件页面盘点(10:50,调研分析,未开发)

  • 对象:D:\dshworkspace\plugin_package(5 插件 3556 行 client.js 全读):dsh-plugin-mcn(主插件:首页+AI写脚本+AI写作复盘+AI会话)、douyin-accounts(热门账号)、douyin-account-detail(账号详情)、douyin-video-detail(视频详情)、mcn-schedule(计划任务)
  • 核心结论:dsh 插件页面 =「数据管理 + 任务触发」界面,全部依赖 dsh 宿主 /mcn/api/* + SQLite(db.js 存 account/video/rewrite/review/persona)+ MCP 解析 + AI 会话桥接(creative/rewrite/analyze/extract 触发 AI);我们的工作台 = 零依赖 Node 读产出文件,无 DB 无 AI 桥接 → 分层迁移:✅读文件可落地(视频详情3tab、账号设定、脚本/分镜查看,产出浏览已部分覆盖);⚠️需 DB 重建(账号/视频列表、周榜、复盘、计划任务);❌按钮触发AI在 WorkBuddy 无桥接做不了(上轮已确认)
  • 页面清单(8 视图):工作台首页(统计条+入口网格+抖音周榜)/热门账号/账号详情(信息卡+3tab+视频列表)/视频详情(信息卡+3tab)/AI写脚本(列表+源vsAI对比+分镜)/AI写作复盘(评分+报告)/AI会话(任务会话)/计划任务(定时CRUD)
  • 待用户决策落地范围

MCN工作台数据功能页开发完成(11:00-11:20)

  • 用户选定:全做 + 抖音周榜(数据在 D:\dshworkspace\抖音榜单),4 项:精致展示页/账号视频管理库/prompt 快捷触发/周榜
  • 数据源探查结论:dsh 库 ~/.dsh/mcn-plugin.db 有现成数据(hot_accounts 7 / account_videos 597 / account_video_source 39 / account_video_analysis 12 / account_persona 5 / rewrite_log 17 / storyboard_log 3 / script_review 2);周榜 JSON 抖音周榜_{赛道}_{日期}.json(9 赛道×2 日期,字段 rank/accountName/comprehensiveScore/followers/newFans/newLikes/newComments/newShares/newInteraction/profileUrl);达人账号表 D:\dshworkspace\达人账号表.xlsx
  • 技术路线:Node 22.22.2 node:sqlite 直接只读 dsh 库(实验性但可用);新增 dsh-data.js(数据访问层:listAccounts/listAccountVideos/getPersona/getVideoDetail/getVideoScript/listRewrites/listStoryboards/getReviewDetail/getReviewFull/getStats/rankingMeta/getRanking);server.js 注册 13 个 /api/dsh/* 路由
  • 前端重构:index.html 改为 hash 路由(首页/产出浏览/ranking/accounts/account/:id/video/:id/rewrites/reviews);app.js 拆为路由核心(工具/markdown/复制/首页/产出浏览/设置),新增 data-pages.js(6 个数据页:周榜/热门账号/账号详情/视频详情/AI写脚本/复盘)
  • 关键降级:所有「触发AI」按钮(导入/解析/改写/提炼/复盘/创作)→ 点一下复制 prompt 到剪贴板(WorkBuddy 无 AI 会话桥接);只读展示不写库
  • 修复:getRanking 参数 date 与局部变量重名(SyntaxError);视频详情标题被 esc 转义(infoGrid 加 raw 参数);账号详情视频 ID 加详情链接
  • 验证:13 个 API curl 全过(meta/stats/accounts/ranking/video-detail/rewrites 数据正确);前端 3 JS 语法检查过;静态资源 200
  • 遗留:browser-harness 环境未装,无法浏览器实测,页面运行时效果待用户点验;xlsx 在线预览未做(零依赖取舍)

工作台数据库隔离:复制 dsh 库到工作台(11:44)

  • 用户需求:数据库复制一份到工作台文件夹,两边数据各访问各的(工作台读自有副本,不再读 dsh 原库)
  • 执行:cp ~/.dsh/mcn-plugin.db → mcn-work-shop/mcn-plugin.db(4.2MB);dsh-data.js DSH_DB 从 homedir()/.dsh/mcn-plugin.db 改为 __dirname/mcn-plugin.db(移除 homedir import);server.js dshGuard 文案改「工作台数据库」
  • gitignore:根 .gitignore 加 mcn-work-shop/mcn-plugin.db(数据文件不提交 git)
  • 验证:重启服务,/api/dsh/meta 返回 dbPath=D:\AgentSkill\...\mcn-work-shop\mcn-plugin.db,accounts total 7 正常 ✅;SKILL.md 工作台章节数据边界同步更新
  • 隔离语义:工作台副本为静态快照,dsh 原库后续更新不会自动同步到工作台(需再手动复制);工作台只读副本不写回
  • 外链新标签打开(11:40 前置):视频/账号外链由 <a target=_blank> 改为 data-ext + 全局委托 window.open(url,'_blank'),被拦截时兜底复制链接

工作台图标全面扁平化(12:14)

  • 需求:美化所有页面,图标换成扁平化向量图标、不要底色(原 emoji 有彩色/底色感)
  • 实现:app.js 加 ICON_PATHS(Lucide 风格线性:24 viewBox / stroke currentColor / fill none)+ svgIcon(name,size) + initIcons()(把 [data-icon] 占位替换成 SVG);EXT_ICON 改图标名(md=file-text/json=file-code/xlsx/csv=table/bak=file);替换范围=header 按钮(home/help/settings)、logo(film)、首页 data-card(trending-up/users/pen/flask)、帮助页 5 功能块(lightbulb/pen/refresh/chart/wrench)、三模式(zap/users/wrench)、文件树目录/文件图标(folder/folder-open/file-*)、弹窗关闭 ✕→x、页面标题
  • CSS:.ic(inline-block/vertical-align/flex-shrink)+ .logo/.data-card-icon/.page-title/.mode-name/.recent-card-title/.modal h3/.ghost 加 flex 对齐 + 图标用主题色 currentColor 无底色
  • 保留的语义符号(非图标):✅❌⚠️ 状态、☆ 收藏、▾▸ 展开箭头、👈 提示
  • 验证:双文件语法过、跨文件无 svgIcon 冲突、静态资源 200 ✅
  • 微调(12:26):①功能图标加亮色区分(ICON_COLORS:trending-up橙红/users蓝/pen紫/flask绿/lightbulb金黄/refresh青/chart红/wrench深灰,svgIcon 按 name 注入 style color)②「AI写剧本」这类文字标题前去掉图标(recent-scripts 标题/recent-card 标题/data-pages 页面标题/三种创作模式标题),保留功能卡片图标(data-card/func-card)作视觉标识

首页新增 AI写剧本快捷卡片(11:48)

  • 需求:主页功能入口下方加「AI写剧本」卡片列表,点击快速查看剧本内容,最多 4 行
  • 后端:dsh-data.js 加 listRecentScripts(limit)(rewrite_log 联 hot_accounts/account_videos,status=done 有内容按 id 倒序取前 N);server.js 加 /api/dsh/recent-scripts?limit=4
  • 前端:renderHome 在 data-cards 后加 recent-scripts 区块(标题 + 「查看全部→」链到 #/rewrites);router 首页分支调 loadRecentScripts() 异步填充;openRecentScript 弹窗用 renderMarkdown 渲染 script_text 全文;app.js 加 fmtTime;style.css 加 recent-card 网格卡片样式
  • 验证:recent-scripts 返回 4 条(旧梦留声机账号,脚本长度 2614-4015),静态资源 200 ✅

帮助页拆分 + AI写剧本卡片迭代(11:52-11:57)

  • 功能帮助快速提问区(5大功能块+问法+三模式)独立成 #/help 页,header 加「❓帮助」按钮(设置左边),首页只留功能入口卡+AI写剧本卡
  • AI写剧本卡片迭代:2 列布局(minmax 380px)、最多 8 个(limit=8)、卡片 min-height 172px、预览 5 行(line-clamp 5)

修复:数据功能页全部无法点击(11:58,P0)

  • 症状:首页 4 个数据功能卡点击后跳回首页,看似"点不动"
  • 根因:app.js 加的 function fmtTime(函数声明,挂 window)与 data-pages.js 的 const fmtTime(全局词法绑定)跨 script 同名冲突 → SyntaxError: Identifier 'fmtTime' has already been declared → data-pages.js 整个加载失败 → window.DataPages 未定义 → router 走「未知路由→首页」兜底
  • 修复:app.js 的 fmtTime 重命名 fmtDate(3 处:定义 + 2 处使用),消除冲突
  • 验证:vm 模拟跨 script 全局,确认无冲突;node -c 双文件语法过;curl 确认 fmtDate 3 处 / fmtTime 零残留 ✅
  • 教训:多 script 文件共享全局作用域,function 声明 与 const/let 同名会跨文件冲突(node -c 单文件查不出);给全局工具函数命名前应 grep 全项目避免与其它文件撞名

19:25 工作台触发的 AI 会话归入 mcn-workshop 空间分组

  • 需求:工作台功能创建的 AI 会话显示到 mcn-workshop 空间分组
  • 机制:WorkBuddy 左侧会话栏按 cwd(工作目录)分组;workspaces 表每行一个空间(path+last_opened_at)
  • 实现:①创建目录 D:\AgentSkill\mcn-workshop 并插入 workspaces 表(路径格式必须与其他行一致 D:\AgentSkill\xxx;bash MSYS 会把反斜杠转正斜杠,需用 Write 写 node 脚本执行避开);②server.js /api/run 的 cwd 改为 D:\\AgentSkill\\mcn-workshop(cwds JSON 数组)
  • 验证:POST /api/run 后 cwds=["D:\\AgentSkill\\mcn-workshop"] ✅;WorkBuddy 消费后新会话 cwd=D:\AgentSkill\mcn-workshop、is_background_automation=1 ✅(会话 3b28ab3c)
  • 注意:8899 端口曾被旧实例/多实例占用(避让到 8900/8901),按端口清理 node 进程后恢复单一实例;MiPCAudio 占 0.0.0.0:8899 需排除(PID 20604)

12:31 同步到远程仓库

  • 提交 5f5b4f1(120 文件,含工作台 mcn-work-shop/ + impeccable/taste-skill 设计技能 + 记忆/文档)
  • 修正 .gitignore:mcn-work-shop/mcn-plugin.db → **/mcn-work-shop/mcn-plugin.db(带斜杠规则会锚定根目录,未匹配到 project/ 子路径,导致数据库副本被误暂存,已 git rm --cached)
  • push 成功 f025ad3..5f5b4f1;origin/main 跟踪引用照旧被沙箱拦截丢失,已手动重建 refs/remotes/origin/main

12:38 browser-harness 源码纳入版本管理(仅排除 Windows 环境)

  • 用户需求:仓库除 browser-harness 的 Windows 环境文件外,其余文件都要提交
  • 检查发现:browser-harness 是嵌套 git 仓库(clone 自 browser-use/browser-harness,main@f5eaf90),根 .gitignore 的 browser-harness/ 把整个目录都忽略了,导致 181 个源码文件(SKILL.md/README/src/skills/tests/docs,仅 460K)也没提交,不只是 envs 环境
  • 用户决策:删除嵌套 .git,envs 环境继续忽略

20:2x-20:3x 工作台路由刷新回首页问题(P0 排查修复 + browser-harness 真实验证)

  • 症状:访问 http://localhost:8899/#/ranking 刷新后 URL 变 #/ 回首页;外部浏览器/WorkBuddy 面板均复现;点击进入正常
  • 排查过程:①怀疑 iframe/sessionStorage(排除,外部浏览器也一样)→ ②Edge headless 复现但 virtual-time 与 await 冲突(首页同步渲染正常、数据页 await 挂起空 view,误导)→ ③注入探针发现 headless 加载 #/ranking 时 location.hash 变 #/(headless 特性)→ ④browser-harness 真实验证(用户提示可用,环境在 mcn-dou-analysis/subskills/browser-harness,用 PYTHONPATH=src + python -m browser_harness.run + BU_CDP_URL=http://127.0.0.1:9223 独立 Chrome 调试实例)→ ⑤诊断 __diag 实锤:setTimeout(0) 时 dp=undefined(data-pages.js 未加载完)
  • 真正根因:script 标签下载并行——app.js 先下载完执行,其末尾 boot 立即 router()(或 setTimeout(0))时 window.DataPages 尚未定义(data-pages.js 还在下载/未执行)→ 数据页路由被当未知路由 → location.hash='#/' 兜底回首页(URL 变 #/)。点击进入正常因页面运行中两 JS 已加载
  • 修复:boot 改为 DOMContentLoaded + 50ms 轮询等 DataPages 就绪再 router();router 兜底加保护(数据页名 + DataPages undefined 时不跳首页,等待下次)
  • 验证(browser-harness 实测):直接访问 #/ranking 渲染周榜页 ✅;#/ranking 刷新停留 ✅;首页↔周榜切换 ✅;周榜 20 行完整 ✅
  • 环境调用法(重要复用):BH=mcn-dou-analysis/subskills/browser-harness;PYTHONPATH="$BH/src" "$BH/envs/browser-harness/python.exe" -m browser_harness.run(heredoc 传 Python);独立调试 Chrome:chrome.exe --remote-debugging-port=9223 --user-data-dir=... + BU_CDP_URL=http://127.0.0.1:9223;PYTHONPATH 必须指向 src/(含 browser_harness 包)
  • 执行:rm -rf browser-harness/.git(2.7M);.gitignore browser-harness/ → **/browser-harness/envs/;git add -A 提交 175 源码 + .gitignore 共 176 文件
  • 继续忽略:envs/(191M conda 环境)、src/browser_harness.egg-info/(Python 打包元数据,6 文件)、pycache/
  • 提交:9248cbe,push 025d28f..9248cbe 成功,跟踪引用照旧重建,本地与远程一致

19:17 工作台按钮直接触发 WorkBuddy AI 会话(Automation 方案,推翻复制 prompt 结论)

  • 用户纠正:之前结论「WorkBuddy 无网页→会话触发接口,按钮只能复制 prompt」有误。用户提供 POC 文档(桌面「新建 文本文档 (2).txt」)+ 明确要求用 Automation 方案(非 CLI),让任务在左侧会话栏可见
  • dsh 插件参考(D:/dshworkspace/plugin_package/dsh-plugin-mcn):按钮 → POST /mcn/api/creative {prompt} → getOrCreateCreativeAgent(sid) 固定会话 + agent.followup(userMessage) 触发执行;执行中 409 防重;用户到 AI会话视图查看
  • WorkBuddy Automation 链路(实测验证):往 ~/.workbuddy/workbuddy.db 的 automations 表写 once 任务(scheduled_at=now)→ WorkBuddy 运行时自动消费(19:16:22 实测)→ 创建会话(automation_runs.thread_id / runtime_state.running_conversation_id)→ 左侧会话栏可见 → 结果落 automation_runs(result_success=1)
  • automations 表关键字段(用 automation_update 工具创建样本反推):id=automation-{毫秒}、status=ACTIVE、schedule_type=once、next_run_at=毫秒、scheduled_at=YYYY-MM-DDTHH:mm(本地无秒)、cwds=JSON数组、created_at/updated_at=毫秒、skills_json/connector_ids_json='[]'、model_id=deepseek-v4-flash、permission_mode=fullAccess、owner_user_id=当前用户ID(sessions.user_id)、owner_status=confirmed
  • 实现:server.js 加 POST /api/run(node:sqlite 写 automations,owner_user_id 从 sessions 最新取,cwd=D:/AgentSkill/mcn-video-script);data-pages.js firePrompt 从复制改为提交执行 + 5 秒防连点;SKILL.md 工作台章节 5 更新
  • 验证:curl POST /api/run 成功(automation-1787829463480),WorkBuddy 8 秒内消费(run IN_PROGRESS + 新会话 a16583b8)✅;node:sqlite 写 workbuddy.db 用事务测试无污染
  • 注意:CLI 方案(codebuddy -p)也验证可用但需 --model auto(默认模型 500),用户最终选用 Automation 方案