Files
mcn-short-video/.workbuddy/memory/2026-09-03.md
T

124 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-03 工作日志
## 后台自动化任务全量清空(~/.workbuddy/workbuddy.db automations 表)
- **背景**:用户询问「后台在执行什么任务,没用的任务是否可以清空」
- **盘点结论**(只读查询 workbuddy.db):
- 运行状态表 automation_runtime_state 58 条全部 `running=0`——**当前无任何任务在执行/排队**
- automations 表 66 条全部为 once 一次性历史任务(65 ACTIVE + 1 PAUSED),created 08-27~09-02,无 recurring
- 57 条已跑完(ACCEPTED/成功),1 条被 user_cancel 中断(导入指令·周小闹 PENDING_REVIEW),8 条从未运行(08-31 旧重复任务,已被 09-01 uuid 新版取代)
- **执行**:经用户确认「全部清空 66 条」,逐条 automation_update mode=delete(软删机制,置 deleted_at)
- **验证**:非软删有效任务 0 / 软删 66 / running=0;automation_runs 58 条运行历史保留(产物与会话回溯不受影响)
- **要点**:删除任务定义不影响 automation_runs 历史与已生成产物;工具删除为软删(deleted_at),表行物理保留
## 清理规则固化进技能(09-03,用户定红线:只清过期/错误失败任务)
- **背景**:用户问「WorkBuddy 不会自动清除过期任务吗」→ 答不会(实测:66 条积压 08-27~09-02 全保留,跑完仍 ACTIVE,调度器只扫未来时间不再触发但也不自动删)→ 用户要求「加入 skill,部署到用户环境也能执行,只能清理过期或者错误失败任务」
- **新增**:`references/接口调用/自动化任务清理规范.md`(源 V1.0)——触发场景(🧹后台任务清理,不创作)、判定标准(🟢过期已完成 once/🔴错误失败/PENDING_REVIEW/last_error/⚪从未运行死任务;**禁清** recurring/未来时间/running=1/QUEUED/IN_PROGRESS/deleted_at 非空)、执行步骤(只读 SQL 盘点→归档→列清单确认→**走宿主 automation_update 删除禁直改库**→复核)、实测事实(宿主不自动清理/删除不影响产物/工具删除幂等软删)
- **SKILL.md 挂载**:触发条件区新增 🧹后台任务清理 场景 + frontmatter updated_at→2026-09-03、last_change 追加
- **同步三处**:源 `D:\AgentSkill\mcn-video-script\project\短视频脚本创作\V1.0\`(=WorkBuddy 用户技能目录软链 `C:\Users\maidou\.workbuddy\skills\短视频脚本创作`→V1.0,md5 一致同一文件)+ dsh 副本 `C:\Users\maidou\.dsh\skills\short-video-script\`(独立副本,需手动同步,updated_at/deployed_at→09-03);Lite1.0 默认不动(08-26 同步策略)
- **重要事实(09-03 实测)**:`C:\Users\maidou\.workbuddy\skills\短视频脚本创作` 是 → `/d/AgentSkill/mcn-video-script/project/短视频脚本创作/V1.0` 的符号链接——改源技能即改 WorkBuddy 用户技能,dsh 副本才是唯一需手动同步的独立副本
## mcn-data-insight 复制进短视频创作技能 subskills(09-03)
- 用户指令:把 `D:\AgentSkill\mcn-data-insight` 复制到 `project/短视频脚本创作/V1.0/subskills/mcn-data-insight`,**去掉 git**
- 源结构:SKILL.md(实为 third-party-skills-index 索引,19K)+ references/规则/ + `.workbuddy/`(内含 memory 工作日志 / scripts 3个 py / **skills 13 个第三方子技能 4.2M**:douyin-account-diagnosis、douyin-ai-feed、douyin-content-surge、douyin-daily-hot、douyin-hot-trend、douyin-prohibited-word、douyin-search、douyin-top-account、douyin-weekly-surge、douyin-works-crawler、multi-copywrite-alchemy、nuwa-skill、playlet-douyin-feed)
- 执行:整目录 cp -r → 删副本 .git → 37M→4.3M;无嵌套 .git;`ls .workbuddy/skills/` 13 子技能齐全
- 注意点(未处理,待用户定夺):该 SKILL.md 目录树描述为平铺(douyin-*/ 在根),实际子技能全在 `.workbuddy/skills/` 下——复制保持原样,未改引用;是否要在父 SKILL.md 注册该 subskill 未做
## mcn-data-insight .workbuddy 重组(09-03 续,R6)
- 用户指令:`.workbuddy` 中的 scripts 放上级、skills 迁上级并改名 **subskills**
- 执行:`mv .workbuddy/scripts scripts` + `mv .workbuddy/skills subskills`;`.workbuddy/` 仅剩 memory(原项目历史日志,用户约定「历史日志保留原路径不变」→ 未改其内部路径)
- 引用同步:Python 批量替换 21 个文件(负向后顾保护 `~/.workbuddy/` 用户级路径):
- `.workbuddy/scripts/`→`scripts/`(root SKILL.md setup 命令、抖音数据规则.md、13 子技能 py 报错提示/SKILL.md/README)
- `.workbuddy/skills/`→`subskills/`(douyin-search SKILL.md 命令示例、抖音数据规则.md 存放路径节)
- douyin-account-diagnosis 两个 README「放入 .workbuddy/skills/」语义为用户级安装 → 改 `~/.workbuddy/skills/`
- root SKILL.md:技能清单 目录列加 `subskills/` 前缀 ×10、结构树按新布局重写(新增 scripts/ + subskills/13 子技能清单)、更新记录追加 2026-09-03 行
- 保留未动:SKILL.md 安全审计状态表 + L77「存档于 .workbuddy/security-audit-*.md」+ 更新记录历史行(报告文件本就不随包分发,属原项目历史存档,待用户定夺是否清理)
- 验证:非 memory 范围 0 残留裸 `.workbuddy/scripts|skills`;修改过的 py py_compile 全过
- 结构定稿:`mcn-data-insight/{SKILL.md, references/规则/, scripts/(3py), subskills/(13子技能), .workbuddy/memory/}`
- 待用户决定:①.dsh 副本是否同步该新子技能(dsh short-video-script 结构待确认)②memory 是否移出 .workbuddy ③安全审计表/历史存档行是否清理 ④子技能 douyin-account-diagnosis 内同名嵌套目录是否平铺
## 全技能树相对路径审计与规则固化(R7/R8,09-03 上午)
- 范围:短视频脚本创作 V1.0 全树(主技能+references/references-add/scripts+全部 subskills 及嵌套)相对路径全面审计
- 扫描结论:Windows/Unix 绝对路径命中几乎全为「环境判别锚点(D:/AgentSkill 是否存在/.dsh)/路径配置表/示例路径」按设计保留;browser-harness/envs/(conda venv)有 .gitignore `**/browser-harness/envs/` 兜底不随分发,豁免
- 真实修复:①V1.0/SKILL.md 七节「失误与规避记录.md」越级引用 `../../../` 改语义说明(技能包外文件、仅开发机;源+dsh short-video-script 两处)②mcn-dou-analysis/subskills/nuwa-skill-main 断链(README 多语言/COMMUNITY/CONTRIBUTING + fidelity-scorecard + sun-yuchen LICENSE)→ 官方 GitHub URL,源+dsh 副本同步(同 mcn-data-insight/nuwa-skill 上轮修法)
- 自有内容 md 断链复验 = 0(剩余仅第三方参考包 seedance 黑神话项目/openstreetmap 内部示例,豁免)
- **Task #78 规则固化**:新建 `references/规则/路径引用规范.md`(P0:相对路径铁律+允许项~占位/__file__/URL+禁令盘符/Unix/越级+豁免仅开发机工具·路径配置·示例·历史日志+自检方法),模板同步 V1.0+4 自有 subskills(mcn-data-insight/dou-analysis/video-prompt/script-review 各 references/规则/)+dsh 4 副本(short-video-script/dou-analysis/storyboard-prompt/script-review);5 源 SKILL.md+dsh SKILL.md 各挂 🔴 引用行(dou-analysis 表格锚点插入须放标题后非表头间——dsh 初插错位已修)
- 规则文档示例链接用 code 包裹防断链校验误报(某文件.md 占位)
- 提交:V1.0 20 项(14M+6??:含之前遗留 frontmatter/后台清理触发条款+自动化任务清理规范.md)
## R9 mcn-data-insight 收尾(09-03 上午)
- 用户 4 点决定:①删 `.workbuddy/memory` ②清理 SKILL.md 历史存档行(安全审计表/存档说明/更新记录历史) ③去 douyin-account-diagnosis 同名嵌套 ④**dsh 部署**;追加决定:nuwa-skill **整体删除**、multi-copywrite-alchemy **移至桌面**(理由「这里应该都是数据获取技能」)
- **★git rm 沙箱坑(重要,2 次踩)**:`git rm -r` 删百级文件在本沙箱被 SIGTERM 反复中断 → 结果=只删磁盘不写索引(全变 ` D` 未暂存)+ 留 index.lock + 中断时范围失控半删除(曾把整个 subskills 树删掉)。修法:`rm -f .git/index.lock` 清锁 → `git checkout HEAD -- <路径>` 从 HEAD 恢复误删 → **纯 `rm -rf` 删磁盘 + `git add -A -- <精确路径>` 暂存**(不经 git rm)。规律:git rm 触大范围删除必被杀;rm+add 分离安全
- 删除构成(157 文件):`.workbuddy/memory` 9 + 内层嵌套 10 + nuwa-skill 133(git 跟踪数;186 含非跟踪)+ multi-copywrite-alchemy 5;nuwa/multi HEAD 零残留
- SKILL.md 大清理:frontmatter/简介改「**抖音数据获取技能集**(Third-party Skills 百宝箱)」,技能清单**补全 11 行**(douyin-search/top-account/playlet 原缺列表,文件数=git ls-files 实测),删 multi(#5)/nuwa(#8) 两详情节+15 分身表,目录树 11 子技能,安全审计表整表删,更新记录精简为一行 09-03,详情节编号 1-8 连续重排(内容含两处双 `---` 修复);抖音数据规则.md 同步 13→11
- **技能定位定稿:mcn-data-insight = 纯数据获取技能集(11 个红狐系子技能)**;nuwa-skill 已删——注意 mcn-dou-analysis/subskills/nuwa-skill-main 是**另一份**(账号分析方法论组件,保留勿混)
- 提交 `eaecdd4`(159 files, -41007 行)已 push origin(f4f6938..eaecdd4)
- dsh 部署完成:`C:\Users\maidou\.dsh\skills\mcn-data-insight\` 新建(与源 diff=0、79 文件,无 .workbuddy)→ commit `2c3cf98`;**pycache 误入库**(scripts/__pycache__ 2 pyc)→ 清理 commit `9cee86a` + `.dsh/.gitignore` 追加 `__pycache__/`、`*.pyc`(V1.0 源仓库本就忽略,磁盘 pycache 已删)。dsh 2 commit 本地未 push(2h 节奏)
- 桌面迁移:`C:\Users\maidou\Desktop\multi-copywrite-alchemy\`(5 文件:SKILL.md + references×4)
## git 收尾(09-03 上午补录)
- dsh 仓库:未提交变更 = R1-R8 期间同步的规则(short-video-script 09-03 后台清理触发/frontmatter、script-review v1.3、4 处路径引用规范.md、自动化任务清理规范.md、nuwa-skill-main 3 处 URL 修复)→ commit `9a90e19`(12 files +367/-14)已 push origin(bc810f1..9a90e19,含 2c3cf98/9cee86a 共 3 commit)
- 源仓库 2 commit(本地未 push,2h 节奏):
- `116b7a2` 记忆维护(2026-09-03.md 追加 + MEMORY.md 压缩 22746→10416 字节)
- `d57b830` 历史遗留落地:**发现根 `dist/` 5 文件 = 用户早前移到 `project/短视频对话题分析/dist/` 的参考产物**(100% rename 识别,screenshot 存档不可再生)→ 纳入跟踪而非删除;case_1 案例目录 28 文件确认删除(磁盘早已删)
- 坑:`git add -A -- <中文路径>` pathspec 不匹配(bash 传参编码)→ 改全量 `git add -A`(先确认工作树只剩目标变更);rename detection 会把「删根 dist + 新位置 untracked」自动配对成 rename,commit message 需按 rename 语义写
## 达人账号表移出 mcn-dou-analysis 技能包(09-03 上午)
- 用户问「技能包内为何有达人账号表,不需要就删除」→ 查明:表是技能工作流登记台账(SKILL.md 红线 L42 15 列 + 功能一/二/六 7 处引用),但**内置副本=08-26 过期数据**(仅小咪橘座/旧梦留声机 2 账号),权威台账在**桌面 MCNSkill项目/达人账号表.xlsx**(含俊希 JJX0827/281.9万粉 08-31 更新、3 账号、数据更新)——技能包副本从未再更新
- 处理(用户指示本地文件放桌面 MCNSkill项目):删除技能包内置 xlsx(零数据损失,桌面份更全)+ SKILL.md 红线行/Step 1.0 + feature/01 两处改为「达人账号表=**外部数据文件不入技能包**(存放于产出根目录同层,表缺失按 15 列现场新建)」;feature/02/06 逻辑引用保留原文
- 提交 `5ccaaef`(源仓库,本地未 push)
- 待办:dsh 副本 skills/mcn-dou-analysis SKILL.md 同 7 处引用且无表文件——同步说明段需用户授权
- **dsh 侧澄清(用户确认)**:`D:/dshworkspace/达人账号表.xlsx`(08-26 17:28)= dsh 环境遗留死数据,**内容重复 2 遍(损坏导出)+ 停更 + 无俊希**,用户确认「dsh 数据已经没更新了」→ 不作权威、不维护、不同步 dsh 副本 SKILL.md。红线说明修正为「权威台账=桌面 MCNSkill项目 份(①③环境)」→ 提交 `aaafeec`
## 目录改名 R13:mcn-video-script → mcn-short-video(移交用户手动,09-03 上午)
- 用户要求本地目录与远程 git 名统一(origin 早已是 `mcn-short-video`)
- 已完成前置:3 处硬编码路径引用更新并提交 `7d6048c`(build-create-prompts.cjs L75、submit-review-tasks.cjs L30 数据库路径;mcn-dou-analysis SKILL.md L82 源技能路径);软链 `短视频脚本创作` 已删待重建
- **改名被占用阻塞(Device or resource busy 反复)**:根因=多进程持句柄/cwd——pwd 实证 Bash 工具自身 cwd 曾停在目标目录内;Bash cwd 切出后仍 busy → node 4444 等工作台服务 + WorkBuddy.exe 多进程仍持句柄(netstat/wmic/PowerShell 通道均无法取进程命令行取证,wmic 已不可用、PS 通道空输出)
- **结论:用户手动执行改名**(需完全退出 WorkBuddy 释放句柄后资源管理器重命名)
- 改名后收尾待办:①重建软链 `ln -s "/d/AgentSkill/mcn-short-video/project/短视频脚本创作/V1.0" "/c/Users/maidou/.workbuddy/skills/短视频脚本创作"`;②push `7d6048c`(当时唯一未 push commit);③grep 残留 `mcn-video-script` 引用(memory 日志除外)
- **09-03 11:12 用户决定搁置改名** → 软链已重建(指向当前 mcn-video-script 路径,技能恢复可用);7d6048c 预改名引用已 `git revert` 回退(`09bc9be`,3 处路径恢复 mcn-video-script 全树零残留);日志补录 `3de1c0f`
## 工作台任务模型跟随用户 AUTO(09-03 11:17 实证定稿)
- **问题**:用户问工作台任务能否跟随 WorkBuddy 模型选择(如 AUTO)——R11 已知 /api/run model_id 钉死 deepseek-v4-flash
- **机制实证**:①调度器 `modelId: row.model_id ?? void 0` + `setSessionModel` —— **model_id 有值必强制指定会话模型**(这就是全跑 flash 根因);无值(NULL)不强制走宿主默认;②用户 UI 模型选择是**会话级**的(sessions.model 列),最近 6 条手动会话全 `'auto'`(AUTO=系统按复杂度自动路由,小写存储);③66 条历史任务 65 flash+1 pro 无 auto/null 案例;④models.json 空、settings 无 model 键(非全局设置)
- **方案 A 落地(用户选 A)**:server.js /api/run L569 model_id `'deepseek-v4-flash'`→`'auto'`(加 09-03 注释含回退说明:若调度不认 auto 改留 NULL)
- **端到端实证通过**:提交测试任务「模型跟随auto验证」→ automations.model_id='auto' → 调度拾取创建会话 `98f73483` **model='auto'**(对比旧任务会话 model=deepseek-v4-flash)→ run ACCEPTED result_success=1、session completed。**调度 API 接受 'auto' 字符串且等效 UI 选 AUTO**
- 提交 `cf359f4`(源仓库本地未 push)。测试任务/会话已留在左侧会话栏(可忽略)
- 遗留:若日后想任务级精细选模型(flash/pro/auto)→ 方案 C 前端弹窗下拉+后端透传,未做
- 服务启动坑(重踩):Bash 工具 `&` 后台进程随命令结束被回收(8900 连接被拒)→ 必须 Bash `run_in_background=true` 启动长驻服务;curl 需 `--noproxy "*"`(全局 socks 代理 127.0.0.1:10800 拦截 localhost 报 upstream connect failed)
## 升级:动态跟随用户模型选择(09-03 11:22 定稿,替代固定 auto)
- 用户追问「能否真正做到用户在 UI 选什么模型任务就用什么」→ **能**。修正认知:WorkBuddy 模型无全局设置(models.json 空/settings 无 model 键),是**会话级**(sessions.model);且此刻用户最新活跃手动会话 model='deepseek-v4-flash'+thought='high'(非 auto——auto 是 09-02 旧会话)
- **实现**:/api/run 提交任务前动态读 `最近活跃手动会话(is_background_automation=0 AND model非空)的 model` 写入 model_id;无手动会话兜底 'auto'。用户在 UI 切 auto/flash/pro → 任务随之
- **端到端实证通过**:测试任务「模型动态跟随验证2」→ model_id='deepseek-v4-flash'(=当时最新手动会话 model,读取匹配)→ 会话 model=flash → run ACCEPTED result_success=1、session completed
- 提交 `cea7d11`(源仓库本地未 push)。cf359f4(固定 auto)+ cea7d11(动态跟随)两次演进均留史
- 待 push 累计:7d6048c/09bc9be/3de1c0f/cf359f4/cea7d11(5 commit,2h 节奏);左侧会话栏留 2 个验证任务(auto验证/动态跟随验证2,可忽略或清理)
## 榜单落盘规范 + 三方数据分层(commit 4c18e7e)
- 目录结构实证落定:桌面 `MCNSkill项目\` 顶层分「业务账号/三方数据」——账号产出直挂账号文件夹,三方数据统一下 `三方数据\{数据源}\`(当前数据源=红狐数据 → `三方数据\红狐数据\抖音榜单\` 已建);文件名**不加数据源前缀**(保 `抖音周榜_` 开头兼容 dsh RANKING_DIR 正则 `^抖音周榜_`)
- 规范固化点(5 处文档已同步):①主 SKILL.md「榜单数据落盘规范」落盘目标表+数据源分层说明;②抖音数据规则.md §2.1(含②dsh 列 D:/dshworkspace/抖音榜单/)+§2.2 示例目录指代+§2.4 幂等铁律;③三子技能 SKILL.md(douyin-daily-hot/content-surge/weekly-surge 落盘路径)
- ai-feed 历史 output 缓存 6 文件(08-07~09 json+html)git rm --cached 解跟踪;.gitignore 现含 subskills/*/output/ + subskills/*/*.json + 抖音榜单/ + *.log
- 待 push 累计:7 个本地 commit(d34ea02..4c18e7e),2h 节奏
## 榜单数据迁移 + 工作台读取路径改造(commit 5bd9dc0)
- 数据迁移:D:/dshworkspace/抖音榜单 27 个周榜 json(9赛道×3期 08-10/17/24)→ 桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单\`(mv 完成,源目录已空)
- 工作台 dsh-data.js RANKING_DIR 改为运行时判定:MCN_RANKING_DIR env 优先 > `.dsh` 部署(__dirname 含 .dsh)回退 `D:/dshworkspace/抖音榜单` > ①③ 开发机/用户环境 = 桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单`(os.homedir 真实桌面解析,候选 Desktop/OneDrive Desktop/OneDrive 桌面,fs.existsSync 探测)
- 服务重启(旧 PID 39616 Stop-Process → run_in_background 新启 DIi3hG)→ ranking 接口实测 450 条(9×3×TOP50)读取正常;前端无硬编码路径(全走 /api/dsh/ranking 只改后端即可)
## 赛道规则五次调整:剔除颜值造型(commit cdbbe48)
- 周榜保留赛道 7→6:生活vlog/小剧场/亲子/美食/情感/旅行;颜值造型移入排除 21(09-03 用户指令)
- 同步三处权威白名单:fetch_filtered_data.py KEEP_CATEGORIES+docstring(6/21)、抖音数据规则 §1 表+JSON+演进记录(五次调整)、douyin-top-account SKILL.md 周榜循环注释
- 缓存目录仍含颜值造型历史文件(3期)未删——按新规则后续不再获取,旧文件是否清理待用户确认
## 赛道规则六次调整:剔除情感 + 缓存数据清理(R20)
- 周榜保留赛道 6→5:生活vlog/小剧场/亲子/美食/旅行;情感移入排除 22(09-03 用户连续指令「颜值造型 去掉」「情感 去掉」)
- 同步三处权威白名单(同五次调整三处):fetch_filtered_data.py KEEP_CATEGORIES+docstring(5/22+六次调整注释)、抖音数据规则 §1 表/JSON/演进记录、douyin-top-account SKILL.md 周榜循环(5 赛道)
- **缓存目录数据清理(用户指令「去掉的赛道 现有数据也要删除」)**:删除全部已剔除赛道历史文件 12 个(颜值造型 3 + 情感 3 + 二次元 3 + 化妆美容 3),目录现仅保留 5 赛道×3 期 = 15 文件
- 验证:py_compile OK + 断言(保留=5 赛道,颜值造型/情感不在)+ ranking 接口实测 categories=5(美食/生活vlog/旅行/小剧场/亲子)dates=3 total=250 读取正常
- 教训:用户「情感 去掉」紧接「颜值造型 去掉」=连续精简指令,需完整执行不可只当上一条确认
## 工作台「账号周榜」入口 →「热点数据」多榜 tab 页
- 用户指令:「账号周榜入口改为热点数据,里面用 tab 区分数据列表,和首页一样」
- 改动:app.js 首页入口卡片 title 账号周榜→热点数据(desc 多榜切换)、CRUMB_TITLES.ranking + router titles.ranking→热点数据;data-pages.js renderRanking 重构为多 tab 页——RANK_TABS 四 tab(week 账号周榜/hot 视频热榜/likes 点赞榜/fans 涨粉榜,与首页 rank-preview 一致),week 显示完整周榜列表(筛选/排序/分页/关注,原逻辑保留),其余 tab 显示「建设中」占位(与首页行为一致,后端 RANKING_DIR 目前仅周榜 json,后续数据落盘即可接入)
- 验证:node --check 两文件通过;服务 8900 存活、新 js 已生效(grep 热点数据=3/1);带 ?v= 打开 #/ranking 页面
- 纯前端静态改动,server.js 未变无需重启服务