09-10 工作台:配置收敛、复盘字段契约修复、原创选题分镜支持、榜单期号区间显示
配置收敛:
- 端口/DB名/产出根/榜单目录单源化到 mcn-work-shop/config.json,代码层统一经 load-config.js 读取
- 新增 get-port.js 供 start.bat 读端口(bat 内嵌 node -e 会被 cmd 截断,读到的是兜底值)
- start.bat 修复失效的 managed node 路径(原写死 22.22.2 已不存在),改为遍历 versions 自动探测
复盘诊断页(真 bug 修复):
- 问题清单严重度全部显示成绿色 + 修改建议不显示:模型输出 {sev:'high',fix} 与前端读取 {severity:'高',suggestion} 字段名与取值均不匹配
- 前端新增 normIssue 归一化,兼容 sev/severity/level 与中英取值,并回补所属维度显示
- 在 submit-review-tasks 与诊断/复盘 prompt 中固化 issues_json 字段契约,从源头防 schema 漂移
分镜提示词:
- 原创选题(video_id 为空)原本无生成入口(分镜按 video_id 查询)
- listStoryboards 支持按 rewrite_id 查询,前端放开入口、切版本重查,并补落库指令(此前入库靠模型自由发挥)
榜单展示:
- 期号改为显示区间「08/31 ~ 09/06」,避免被误读为单日(期号=该周周一)
- 后端新增 collectRanges,从落盘文件读真实 dateStart/dateEnd 随 API 返回(日榜 start=end 不显区间)
其他:
- 清理 dsh 环境废弃后的历史叙述类废话(16 文件约 18 处),文末变更记录区保留
- 新增 docs/工作台UI规范.md(设计 token / 布局 / 8 页面路由 / 12 类组件 / 9 条已知坑)
This commit is contained in:
1 parent
3926d742fd
commit
0165144292
58 files changed
+895
-263
No files matched your search
@@ -0,0 +1,148 @@
|
||||
# 2026-09-10
|
||||
|
||||
## 打开工作台 + 仓库路径迁移发现
|
||||
- 启动 MCN工作台:`D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0\mcn-work-shop\server.js 8900` → http://127.0.0.1:8900 返回 200,正常。
|
||||
- **★仓库本地路径已变更**:`D:\AgentSkill\mcn-video-script` → `D:\AI技能\mcn-short-video`(`D:\AgentSkill` 已不存在)。
|
||||
- **技能软链失效并已修复**:`C:\Users\maidou\.workbuddy\skills\短视频工作台` 原 junction → 失效旧路径 `D:\AgentSkill\mcn-video-script\project\短视频脚本创作\V1.0`(文件系统残留、目标不存在)。
|
||||
- 修法:node `fs.unlinkSync` 删旧链 → PowerShell `New-Item -ItemType Junction -Path <link> -Target "D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0"`。
|
||||
- 验证:isSymbolicLink=true、children=7、SKILL.md 存在。
|
||||
- **待办(未执行,等用户确认)**:仓库内 30+ 文件仍写死 `D:\AgentSkill\...` 旧路径(含 V1.0/SKILL.md、references-add/路径配置.md、V1.0/references/规则/路径引用规范.md、Lite1.0、各 subskills、mcn-work-shop/server.js、browser-harness venv 配置等),需做全量路径迁移(注意豁免三类:禁止性规则示例行、变更记录历史行、references-add/路径配置.md)。
|
||||
|
||||
## 路径治本:环境判定锚点重构为「仓库特征判定」+ 全树写死路径清理
|
||||
- **先分类再动手**:全树扫描命中 77 处 `AgentSkill`,分三类——A 环境判定锚点 37 处(规范明确豁免)、B 真实读写路径 8 处(真违规)、C 历史/审计文本 8 处(豁免)。用户确认方案后执行。
|
||||
- **新判据(v2 · 两步)**:① 技能路径含 `.dsh` 路径段 → dsh 部署环境;② 不含 `.dsh` → `git -C {技能目录} rev-parse --show-toplevel` 返回仓库根 = 开发机,失败 = 用户环境(无 git 兜底向上找 `.git`)。**必须 `.dsh` 先判**(`~/.dsh` 自身是 git 仓库)。产出根目录三环境结果不变。
|
||||
- **实测验证**:从软链 `C:\Users\maidou\.workbuddy\skills\短视频工作台` 执行 `git rev-parse --show-toplevel` → `D:/AI技能/mcn-short-video`,正确识别开发机。
|
||||
- **改动 21 文件**:规范层(`references/规则/路径引用规范.md` + 4 份 subskills 副本 + 4 份 `路径配置.md` + README);判定节(dou-analysis / mcn-video-prompt 的 SKILL.md 与 references(-add));MCP 规范 2 份;Lite1.0(SKILL.md + 路径配置 + README)。
|
||||
- **B 类修复**:`server.js` 新增 `BROWSER_LOCK_FILE = path.join(ROOT,'.browser-lock')` / `SESSION_CWD = ROOT`;`SESSION_CWD_PATTERN` 由 `'%mcn-workshop%'` 放宽为 `'%mcn-work%'`(兼容历史+新建会话);2 个 `.cjs` prompt 内 DB 路径改用既有 `DB` 常量;`V1.0/SKILL.md` 运行时 `cwds` 改 `<工作台目录>`。
|
||||
- **★Lite1.0 结构事实**:`Lite1.0/` 下**无 `subskills/`**(实测),未内置 mcn-dou-analysis。原 SKILL.md 依赖段落既写死 `D:\AgentSkill\mcn-dou-analysis` 又未同步 09-02 结构变更 → 改为「未内置 + 需用请改用 V1.0,或先同步进 subskills 后按相对路径调用」。
|
||||
- **BROWSER_LOCK 契约同步**:dou-analysis `references/浏览器搜索抖音账号操作规范.md` 5.6 节 8 处盘符硬编码 → 相对 `.browser-lock`(会话 cwd 即工作台目录)。
|
||||
- **残留核对**:`AgentSkill` 仅剩 13 处,全为豁免三类;`mcn-video-script` 1 处、`MCNVideo AI` 3 处均属历史文本。当前规则行零残留。
|
||||
- **验证**:3 个 JS `--check` 通过;工作台重启后 8900 单实例监听、HTTP 200。
|
||||
- **沉淀**:V1.0 SKILL.md frontmatter(updated_at 09-10 + last_change)、`references-add/变更日志.md`、`失误与规避记录.md #017`。
|
||||
- **★B 类违规的实锤后果(取证)**:`D:\AI技能\mcn-workshop\` 下发现 3 个 **0 字节**垃圾文件,文件名是**被剥掉反斜杠的完整路径**:
|
||||
- `AgentSkillmcn-video-scriptproject短视频脚本创作V1.0mcn-work-shopmcn-plugin.db`(09-01 16:24)← 对应 `build-create-prompts.cjs` / `submit-review-tasks.cjs` prompt 里写死的 DB 绝对路径
|
||||
- `AgentSkillmcn-workshopmcn-plugin.db`(09-01 18:31)← 对应旧 `cwd` + `mcn-plugin.db`
|
||||
- `mcn-plugin.db`(09-01 12:26)
|
||||
真实 DB 为 `mcn-work-shop/mcn-plugin.db`(4.2 MB,09-07 16:29)。→ 证明写死路径曾导致 AI 会话**落库写偏**(0 字节文件),与失误记录 #015「0 字节误建文件」同类。**未删除,待用户确认**。
|
||||
- **未处理/待确认**:① `D:\AI技能\mcn-workshop\` 3 个 0 字节垃圾文件是否清理(该目录还有 `outputs/` 09-01~09-04 产物,勿整体删);② `D:\AgentSkill` 整目录已不存在,用户级 MEMORY.md 里 `ThirdPartySkills` / `AgentPlatform` 两个仓库的本地路径也一并失效(maxdepth 3 未搜到迁移后位置)。
|
||||
|
||||
## dsh 部署环境废弃:三环境 → 两环境(判定简化为一步)
|
||||
- **触发**:用户纠正「第一步 技能路径含 .dsh 路径段 ② dsh 部署环境 —— 没有这个环境了」。实测:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 仅剩 profiles/、`D:\dshworkspace` 整个目录不存在。
|
||||
- **判据 v3(一步)**:删 `.dsh` 路径段判定步骤,仅保留 `git -C {技能目录} rev-parse --show-toplevel` = 仓库根=开发机 / 失败=用户环境(无 git 兜底向上找 .git)。三环境 → 两环境。产出结果不变(两环境本就同构桌面 MCNSkill项目/)。
|
||||
- **改动范围(20+ 文件,续 v2)**:
|
||||
- 判定层:4 份 路径配置.md(V1.0/Lite1.0 + dou-analysis + video-prompt)
|
||||
- SKILL 层:V1.0/Lite1.0/dou-analysis/video-prompt/data-insight 的 SKILL.md
|
||||
- 标准库:5 份 路径引用规范.md(三种机器→两种机器)+ 创作流程规范 + 11_脚本检查和诊断 + 4_账号设定解析和确认 + MCP_工具调用规范 + 自动化任务清理规范
|
||||
- 数据源层:fetch_week_ranks.py(删 .dsh 分支代码)、dsh-data.js(删 isDshDeploy 分支)、data-pages.js、douyin-{rise-ranking,weekly-surge,content-surge,daily-hot}/SKILL.md、抖音数据规则.md
|
||||
- 账号分析层:账号数据分析方法 + feature/01,03,04,06 + 铁律避坑规则/账号信息获取执行避坑 + 浏览器搜索抖音账号操作规范(159/175)
|
||||
- README:references-add/README + dou-analysis/video-prompt 的 references(-add)/README
|
||||
- **清理「dsh 原库」过时描述**:dou-analysis SKILL.md 52 行 + 铁律避坑 32/34 行 + feature/01 16 行 + dsh-data.js 13 行注释(dsh 原库已下线,工作台 DB 唯一读写副本)。
|
||||
- **残留核对**:全树扫描 .dsh/dshworkspace/dsh 部署/dsh 环境/dsh_MCNProject/②dsh/③用户环境 —— 当前有效规则零残留,剩余全为豁免(变更记录历史行 +「09-10 起 dsh 环境已废弃」说明 + 路径引用规范用户级路径示例 {主目录}/.dsh/...)。
|
||||
- **验证**:dsh-data.js `--check` OK;fetch_week_ranks.py `py_compile` OK;工作台重启 HTTP 200。
|
||||
- **沉淀**:变更日志新增 09-10 dsh 废弃条目;V1.0 SKILL.md frontmatter last_change 更新。
|
||||
- **踩坑**:并行 Edit 同一文件(浏览器搜索抖音账号操作规范.md 159/175 行)发生写竞态,175 行修改丢失 → 串行补做。教训同 #016「同文件多处修改必须串行」。
|
||||
|
||||
## 工作台配置收敛:端口/DB/目录单源化(config.json + load-config.js)
|
||||
- **触发**:用户问「这些设定能否用配置,所有文件和脚本都引用,避免有调整时到处修改」。确认:只收敛代码层 + config.json 放 mcn-work-shop 内。
|
||||
- **新增**:`mcn-work-shop/config.json`(port/dbName/outputRoot/businessDataDir/extraRoots)+ `mcn-work-shop/load-config.js`(读取唯一入口 + 默认值唯一来源)。
|
||||
- **改动**:
|
||||
- `server.js`:`CFG = loadConfig()`;`PORT_BASE = argv[2] || CFG.port`(argv 仍优先);`DEFAULT_ROOT` 用 `CFG.outputRoot`;DB 用 `CFG.dbName`;`saveConfig` 合并写盘保留其它字段;错误提示 dbName 动态化。
|
||||
- `dsh-data.js`:删本地 loadCfg,`DSH_DB` / 榜单目录改 CFG。
|
||||
- 4 个辅助 .cjs(build-create-prompts / submit-review-tasks / poll-create-tasks / poll-review-tasks):DB / API 端口 / prompt 内 dbName 字面量 → CFG 动态。
|
||||
- `public/data-pages.js`:新增 `const BASE = location.origin`,SKILL_HINT_VIDEO_PARSE / SKILL_HINT_ANALYZE / saveHintOf 里 3 处 `http://localhost:8900` 改 BASE(前端读不到 server 端 config.json,用 location.origin 让回调端口自动跟随当前访问地址)。
|
||||
- `start.bat`:端口用 `for /f` + load-config 读 config.json,不再写死 8900。
|
||||
- **★踩坑(重要)**:`load-config.cjs` 用 `.cjs` 扩展名时 `require('./load-config')` 无扩展名解析 MODULE_NOT_FOUND(Node 不把 .cjs 当无扩展 require 目标)→ 改名 `load-config.js`(无 package.json,默认 CommonJS)即自动生效。**node --check 只查语法不执行 require,此坑运行时才暴露**。
|
||||
- **验证**:8 文件 `--check` 全通过;`loadConfig()` 正确读回全字段;工作台重启 HTTP 200(端口/产出根均从 config 读)。
|
||||
- **沉淀**:变更日志新增配置收敛条目;V1.0 SKILL.md frontmatter last_change 更新。
|
||||
|
||||
## 配置收敛后功能验证 + start.bat 修复
|
||||
- **实测功能正常**:重启后逐个探测依赖 config 的接口——`/api/roots` 返回 `defaultRoot=C:\Users\maidou\Desktop\MCNSkill项目`(CFG.outputRoot 生效)、`/api/dsh/stats`(accounts 7 / analyses 12 / rewrites 27 / reviews 11,CFG.dbName 生效)、`/api/dsh/accounts`、`/api/dsh/rewrites`、`/api/dsh/ranking`(250 条榜单,CFG.businessDataDir 生效)全部 200 且数据正确。前端 index.html 引用 5 个静态资源(echarts/app.js/help-guide.js/data-pages.js/style.css)**5/5 可用**;`/data-pages.js` 200、含 `const BASE = location.origin`、无 `localhost:8900` 残留。**★静态资源是根映射 `/data-pages.js`,不是 `/public/data-pages.js`(后者 404,曾误判为故障)**。
|
||||
- **★start.bat 既有 bug(非本次引入,顺手修复)**:写死的 managed node 路径 `...\versions\22.22.2\node.exe` **已不存在**(实际 `22.22.2-3`)→ 原逻辑静默回退系统 node。改为 `for /d` 遍历 `%USERPROFILE%\.workbuddy\binaries\node\versions\*` 自动探测,版本升级免改脚本。
|
||||
- **★bat 内嵌 JS 的坑**:`for /f ... in (`node -e "console.log(require('./load-config')...)"`)` 被 cmd 解析截断报错(引号/括号/单引号嵌套)→ 端口读到的是**兜底值而非真实值**(表面 8900 看着对,实则没读 config)。改为独立脚本 `get-port.js`(`console.log(require('./load-config').loadConfig().port)`),bat 只执行简单命令 `"%NODE_EXE%" get-port.js`。
|
||||
- **实证方法**:临时把 config.json port 改 8905 → start.bat 输出 `PORT=8905`(证明真读 config,非兜底)→ 改回 8900。区分技巧:测试脚本里把兜底值写成 `FALLBACK8900`,输出 8900 才说明是真读。
|
||||
- **踩坑(工具层)**:用 node `-e` 生成 .bat 时,路径里的 `\n`(如 `\binaries\node`)**被 JS 当换行转义**,生成坏 bat 报「命令语法不正确」。生成 bat 要用 Write 工具写后,再用 node 把 LF 统一转 CRLF(`t.replace(/\r?\n/g,'\r\n')`)——cmd 对 LF 换行解析异常。
|
||||
|
||||
## 工作台 UI 规范文档梳理
|
||||
- **产出**:`mcn-work-shop/docs/工作台UI规范.md`(新建)。全部从 style.css(824 行)/app.js/data-pages.js/index.html **提取现状基线**,非凭空制定。
|
||||
- **结构**:技术基线 → 设计语言 → 设计 token → 布局框架 → 页面路由(8 个) → 组件规范(12 类) → 关键交互约定 → 已知坑(9 条) → 迭代流程 → 文件索引。
|
||||
- **★关键事实(后续 UI 迭代直接查文档,此处留索引)**:
|
||||
- 色彩:10 个 `:root` 变量(bg/panel/border/text/dim/primary/primary-soft/accent/danger/shadow)+ 扩展色(表头 #f6f8fa、链接 #4a90e2、主色 hover #2a5fd0、文件类型色 md紫/json红/xlsx绿/txt灰)
|
||||
- 圆角阶梯 6/8/10/12/14px;z-index:顶栏 10 / 弹窗遮罩 100 / Toast 200(表头 sticky 为 1)
|
||||
- **滚动铁律**:`html,body{overflow:hidden}` + `main#view{height:calc(100vh - 55px)}`——**55px 是实测值**(padding20+行高34+边框1),写 54px 底部溢出 1px 触发第二层滚动条
|
||||
- **榜单表格必须 `table-layout:fixed`**:auto 布局下 100% 表格富余空间按比例摊薄,**min-width 压不住**
|
||||
- **榜单三 tab 行高必须统一**:表格 td 固定 42px(功能列 btn-sm 撑高,其他 tab 本仅 34.7px)、首页预览行 min-height 40px,否则切换整表跳动
|
||||
- **两套同名 `.tabs/.tab` 并存**:顶栏胶囊式(L38-45,active 蓝底白字)vs 数据页下划线式(L520-523,active 蓝字+蓝下划线,**后者覆盖前者**)→ 新增页须确认拿到哪套
|
||||
- `.modal-mask[hidden]` 必须显式 `display:none`(`.modal-mask` 是 flex,会覆盖 HTML hidden 属性→弹窗关不掉)
|
||||
- 数值列:右对齐 + `font-variant-numeric: tabular-nums`(不加会导致翻页时数字左右跳)
|
||||
- 图标:`.ic{vertical-align:-0.18em}`(去掉会与文字基线错开);`svgIcon()` Lucide 24×24 stroke2 + `ICON_COLORS` 功能色映射
|
||||
- 字段对齐用 **grid 列轨道共享**(R44/R45:每行独立 flex 会被内容长短顶偏;超宽字段如「账号定位」要移出共享网格,否则把轨道撑成等宽 232.5px 大片留白)
|
||||
- 静态资源**根映射** `/data-pages.js`(`/public/xxx` 一律 404,曾误判为故障)
|
||||
|
||||
## 榜单更新「周不全」问题诊断(未修复,待用户确认)
|
||||
- **用户现象**:点「更新榜单」后,周榜数据期不全(相关周缺)。
|
||||
- **★真相:本次更新本身是成功的**——会话 `624d7a3e`(标题「更新榜单数据」,cwd=mcn-work-shop)实际执行 8 次 API、落盘 8 个 JSON:视频热榜/点赞榜各 08-31(2 次,`fetch_week_ranks.py --board both`)、账号日榜 09-08(1 次,`fetch_rank.py --period day`)、账号周榜 5 赛道各 08-31(5 次)。无缓存跳过、无失败。
|
||||
- **根因(设计缺口,非执行失败)**:`SKILL_HINT_RANKING` 的语义是**只抓「最新一期」+ 幂等跳过已存在**,**没有任何回溯补齐缺失期次的逻辑** → 历史缺口永远补不上。
|
||||
- **实测期次现状(`/api/dsh/ranking` 返回的 dates)**:
|
||||
| board | 日期列表 | 说明 |
|
||||
|---|---|---|
|
||||
| week 账号周榜 | 08-31/08-24/08-17/08-10 | 4 周完整(历史累积) |
|
||||
| hot 视频热榜 | 08-31/08-24 | **缺 08-10、08-17**(09-03 才上线该榜) |
|
||||
| likes 点赞榜 | 08-31/08-24 | **缺 08-10、08-17** |
|
||||
| day 账号日榜 | 09-08/09-02 | **缺 09-03~09-07 共 5 天**(期间没点更新) |
|
||||
→ 用户切 tab 时看到 week 有 4 周而 hot/likes 只有 2 周,即"没有所有相关周"。
|
||||
- **脚本能力是够的(没用上)**:`fetch_week_ranks.py` 有 `--date`(周标号周一)与 `--force`;`fetch_rank.py` 有 `--date`(目标日期)。完全可指定历史期次补齐,但 prompt 里没要求。
|
||||
- **补齐成本估算**:hot 2 周 + likes 2 周 + day 5 天 = **9 次红狐 API**(按次计费,需用户确认)。
|
||||
- **附带发现(非 bug,设计如此,易被误认为数据少)**:`dsh-data.js` 的 `RANK_KEEP=[生活记录,生活vlog,小剧场,亲子,美食,旅行]`,`board!=='week'`(即 day/hot/likes)在**条目层**做白名单过滤→文件 50 条被筛成:hot 28、likes 24、**day 仅 10**。日榜只剩 10 条最反直觉。修改口径需动 `dsh-data.js:490-495`。
|
||||
- **★★最终结论(红狐官方规则,账号周榜无问题)**:用户追问「为什么没有 9 月 7 号周榜」。实测 `fetch_rank.py --period week --date 2026-09-07` → **API 报错 code=3203**,红狐返回原文:
|
||||
> 查询结果为空…常见原因:①日期未到更新时间——**日榜每日 20:00 后可查昨日、周榜每周一 20:00 后可查上周**、月榜每月 1 号后可查上月;②周榜应传该周周一…
|
||||
→ **账号周榜(week)最新可用期就是上一周**,09-07 周要等 **09-14(下周一)20:00** 后才出榜。所以 09-10 时最新一期为 08-31 是**正确的**,此前会话「本周未走完」的解释**结论正确**(措辞可更精确为"红狐周榜周一 20:00 后才出上周完整榜")。
|
||||
- **热榜/点赞榜是另一套 API,口径不同(可滚动)**:`fetch_week_ranks.py --date 2026-09-07` 实测**能返回完整 50 条**(dateStart=09-07/dateEnd=09-13,首条发布 09-07 22:59)。因其为作品榜滚动聚合,未结束的周也有数据;但这是**本周至今的滚动值**,明天再取会变。
|
||||
- **默认统一取上一周是刻意对齐(非 bug)**:四个榜若 hot/likes 取本周、week 取上周,会出现**同期不同期号**(热榜 09-07 / 账号榜 08-31)造成困惑。故 `last_full_week()` 与 `_get_smart_offset()=1` 统一回退一期,是与账号榜(受 API 硬限制)对齐的结果。
|
||||
- **结论:功能本身没问题**,是红狐数据规则所致。若用户坚持要热榜"本周滚动值",需接受与账号榜不同期,可单独加(用 `--date <本周一>`)。
|
||||
- 用 `fetch_week_ranks.py --board hot --date 2026-09-07`(输出到临时目录 `D:/tmp/ranktest-0907`)→ **成功返回完整 50 条**(72.3KB,dateStart=2026-09-07 / dateEnd=2026-09-13,首条发布时间 2026-09-07 22:59:51)。
|
||||
- 即**红狐 API 对「进行中的本周」照样返回完整 50 条**,不是"没出榜"。
|
||||
- 真正原因:**脚本默认策略主动回退一期**——`fetch_week_ranks.py` 的 `last_full_week()`(本周一 −7 天)与 `fetch_rank.py` 的 `_get_date_range(offset=1)`(注释明写"默认 1(上一期)")。两者都支持抓本周:`fetch_week_ranks.py --date <本周一>`;`fetch_rank.py` 关键词映射里 `("本周", 0, ...)` 即 offset=0,或 `--date 2026-09-07`。
|
||||
- **待用户决策**:是否把默认口径从「上一完整周」改为「本周」。注意本周数据是**滚动的**(每天都在变,今天抓的 09-07 周榜明天会更新),原设计选上一完整周可能是为归档稳定性。可选:①本周优先(新,滚动)②保留上周为归档 + 额外抓本周标「进行中」③保持现状由用户手动 `--date` 补。
|
||||
- **赛道筛选正常**(用户已确认不是问题):`RANK_KEEP` 白名单过滤符合设计,勿动。
|
||||
|
||||
## 榜单期号显示改为区间(已实施)
|
||||
- **诉求**:用户理解 08-31 已是最新周后,要求**改展示方式**——期号 `2026-08-31` 易被误读成"仅 8/31 单日",实际覆盖 08-31~09-06。
|
||||
- **改动**:
|
||||
- `dsh-data.js`:新增 `collectRanges(board, files)`(读落盘文件的 `dateStart/dateEnd`,按 date 去重取首个文件)→ `rankingMeta` 与 `getRanking` 均返回 `ranges: {date:{start,end}}`(empty 也补 `ranges:{}`)。**不前端推算周日**,用文件真实区间更准(日榜 start=end)。
|
||||
- `app.js`:新增全局 `fmtRankPeriod(date, ranges)`(定义在 `fmtSize` 后,data-pages.js 可直接用——同全局脚本作用域);`_rankPreview` 加 `ranges`,首页预览日期标签改用它。
|
||||
- `data-pages.js`:`mkState` 加 `ranges`、`loadMeta` 存 `s.ranges`、榜单页 toolbar 日期改 `fmtRankPeriod` 并加 `rank-period` 类。
|
||||
- `style.css`:`.rank-date-label` min-width 62→**104px**(容纳"08-31 ~ 09-06",防切期抖动);新增 `.rank-period{min-width:104px;text-align:center;display:inline-block;white-space:nowrap}`。
|
||||
- **显示结果**:周榜「08-31 ~ 09-06」、日榜「09-08」(单日不显区间)、缺 ranges 时兜底原期号。
|
||||
- **格式微调(同日)**:用户偏好斜杠 → `mm` 增加 `.replace(/-/g,'/')`,最终显示**「08/31 ~ 09/06」/ 日榜「09/08」**。app.js、style.css 版本号 → `20260910b`。
|
||||
|
||||
## 复盘诊断页两个问题定位(未修,待确认)
|
||||
- **问题①:叙事逻辑 60 分标黄,但问题清单全绿**(真 bug,且连带一个)。
|
||||
- **根因=落库字段契约不匹配**:`submit-review-tasks.cjs` 的 prompt 只写 `issues_json=问题清单 JSON`,**未规定 schema** → 模型自由发挥。
|
||||
- 实测 `script_review.id=13`(total=60,用户所看)原始 issue:
|
||||
`{"sev":"high","dim":"叙事逻辑","loc":"场8…","issue":"时间线矛盾…","fix":"改成…","step":"S7…"}`
|
||||
- 前端 `data-pages.js:2046/2108/2201` 读的是 `{severity:'高'/'中', issue, suggestion}`:
|
||||
- `sev` vs `severity` → 读不到 → **兜底绿色**(故全绿)
|
||||
- `"high"` vs `'高'` → 取值语言也不同
|
||||
- `fix` vs `suggestion` → **修改建议同样读不到、没显示**(连带 bug,用户尚未提及)
|
||||
- 数据佐证:6 条记录里 id=13/11/9/8 的 severity 全空,仅 id=12("低")、id=10("中"2/"低"6) 有中文值 → **模型输出不稳定**,schema 必须固化。
|
||||
- 评分条颜色是另一套:`diagScoreColor = v>=75?'#3a9e6d':v>=60?'#d99a2b':'#d9534f'`(60→黄),与 severity 无关,故出现"60分黄+问题全绿"的矛盾观感。
|
||||
- **问题②:分镜提示词没有生成按钮**(非 bug,设计限制)。
|
||||
- 该脚本 `rewrite_log.id=38` 的 **video_id=null(原创选题)**。
|
||||
- `data-pages.js:2290-2295`:`vid>0` 才渲染「生成分镜」按钮;否则显示"该脚本为原创选题(无关联视频),暂不支持分镜提示词"。
|
||||
- 后端 `dsh-data.js:302` 查询 `storyboard_log WHERE video_id=?` —— **只按 video_id**,原创选题查不到。
|
||||
- 若要支持:`storyboard_log` 本身有 `rewrite_id` 字段,需改后端查询支持 rewriteId + 前端入口放开 + 生成 prompt 改落 rewrite_id。
|
||||
- **修复方向(待用户定)**:①在 `submit-review-tasks.cjs`(及复盘弹窗 prompt)固化 issues_json schema(建议沿用技能规范中文「高/中/低」+ 字段名 severity/issue/suggestion/dim/loc/step);②前端加字段容错(同时兼容 sev/fix/英文值),让已有脏数据也能正确显色与显示建议。
|
||||
- **验证**:3 文件 `--check` 通过;四榜 API 均返回 ranges(week 4 期/hot·likes 2 期/day 2 期,区间正确);版本号 bump style.css+app.js→`20260910a`、data-pages.js→`20260910c`;重启 HTTP 200。
|
||||
|
||||
## 清理「dsh 已废弃」类废话(用户指出)
|
||||
- **触发**:用户指出 `SKILL_HINT_RANKING` 里「09-10 起 dsh 环境已废弃,无 dsh 分支)」属于废话——环境都没了,prompt/规则里再讲"何时废弃、曾有几个环境"对当前执行毫无价值。
|
||||
- **★分类处置原则(可复用)**:
|
||||
1. **prompt / 规则正文里的历史叙述 → 全删**(模型与执行者只需要"现在怎么做")
|
||||
2. **代码注释里描述变更动作**(如"09-10 去掉 dsh 分支:…")→ 删,只留定稿日期
|
||||
3. **"无 dsh 分支"这类陈述不存在的东西** → 删(陈述一个不存在的事物=噪音)
|
||||
4. **文末「变更记录」历史区 / 变更日志.md → 保留**(append-only 归档,是正常文档元数据,不是噪音)
|
||||
5. **禁止性护栏**(如"不要再按 .dsh 路径段做分支判断")→ **精简保留**:去掉日期与"已下線"经过叙述,只留"禁止做什么"
|
||||
- **改动 16 个文件约 18 处**:data-pages.js(prompt)、dsh-data.js(注释)、3 份 路径配置.md(V1.0/Lite1.0/video-prompt,删变更公告+"无 dsh 分支"+护栏精简)、V1.0+Lite1.0 的 references-add/README.md、mcn-video-prompt 的 SKILL.md + references/README.md + references-add/README.md、mcn-dou-analysis SKILL.md + references-add/README.md(2)、douyin-weekly-surge SKILL.md、MCP_工具调用规范.md、mcn-data-insight SKILL.md、创作流程规范.md。
|
||||
- **验证**:dsh-data.js / data-pages.js `--check` 通过;版本号 bump 至 `?v=20260910b`;工作台重启后接口全 200(榜单日期新增 2026-08-31 一期,读取正常);`/data-pages.js` 字符数 145080→145053(正好少 27 = 删掉那句)。
|
||||
- **注意**:data-pages.js 里剩余 44 处 `dsh` 全是 `/api/dsh/*` 接口路径与代码标识符(工作台 API 命名空间,与"dsh 部署环境"无关),**不可动**。
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
# MCNVideo AI 项目长期记忆(09-03 三次压缩;权威源=SKILL.md+references,此处仅索引+红线)
|
||||
# MCNVideo AI 项目长期记忆(09-10 四次压缩;权威源=SKILL.md+references,此处仅索引+红线)
|
||||
|
||||
## 环境判定 + 产出落盘(08-26 定稿)
|
||||
- 两步:①本机无 `D:\AgentSkill`=③用户环境;有→②技能在 `D:\AgentSkill\` 下=①开发机、含 `.dsh`=②dsh。单一 `.dsh` 锚点会把用户环境误判为开发机(P0 已修)
|
||||
## ★仓库路径(09-10 迁移)
|
||||
- **本地路径:`D:\AI技能\mcn-short-video`**(原 `D:\AgentSkill\mcn-video-script`,`D:\AgentSkill` 已不存在);远程 `[email protected]:maogeigei/mcn-short-video.git`
|
||||
- 技能软链 `C:\Users\maidou\.workbuddy\skills\短视频工作台` = junction → `D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0`
|
||||
|
||||
## 环境判定 + 产出落盘(09-10 判据重构 v2 · 仓库特征判定)
|
||||
- **两步**:①技能路径含 `.dsh` 路径段 → ②dsh 部署环境;②不含 `.dsh` → `git -C {技能目录} rev-parse --show-toplevel` 返回仓库根 = ①开发机、失败 = ③用户环境(无 git 兜底向上找 `.git`)。**必须 `.dsh` 先判**(`~/.dsh` 自身是 git 仓库)。**锚点禁写死盘符**(原 `D:\AgentSkill` 锚点随仓库迁移失效,曾致开发机误判为用户环境)
|
||||
- 产出:①③=桌面 `MCNSkill项目/{账号名}/`;②dsh=`D:\dshworkspace\`。权威=`references-add/路径配置.md`(运行时优先)
|
||||
|
||||
|
||||
## 核心技能
|
||||
- **短视频工作台**(09-03 由「短视频脚本创作」更名,对外统一名)源=`project/短视频脚本创作/{V1.0,Lite1.0}`(**repo 目录保留旧名**,改的只是注册/显示名);V1.0 name=短视频工作台 含 MCP/Dify,Lite1.0 name=短视频工作台 Lite 去接口。**★软链事实(09-03)**:`C:\Users\maidou\.workbuddy\skills\短视频工作台`=junction→`D:\...\project\短视频脚本创作\V1.0\`(同一文件 md5 一致,改源即自动同步;**所有 SKILL_HINT_*/skills 参数用新注册名**)。**★09-03 junction 两次失效**:被替换成空目录(11:11,疑似宿主扫描/迁移)致 SKILL_HINT_* 加载失败;征兆=技能加载失败先查此路径 children==0;修法=node `unlinkSync` 删旧链/空目录 → PowerShell `New-Item -ItemType Junction`(目标路径必须已不存在否则 exit 1;junction 不能用 rmdir,报 Not a directory)。**同步策略(09-07 更新)**:只改 V1.0 源;Lite1.0 默认不动,术语统一类不同步(如需同步由用户手动发起);dsh 技能副本(short-video-script)**项目不存在(09-07 用户确认),已废弃,勿再考虑**。🧹清理自动化按 `references/接口调用/自动化任务清理规范.md`(禁 recurring/未来/running/QUEUED,走宿主软删)
|
||||
- **MCN工作台(Web 品牌=短视频工作台;09-04 由 R43 曾用名 MCN热点雷达 改回)**(仅 V1.0)`V1.0/mcn-work-shop/`(零依赖 Node,**端口 8900**,argv 可指定;8899 旧值错误)。AI 任务=`POST /api/run` 写 automations(once+显式 next_run_at+5s)→轮询 `/api/run/status`;调度实测=工作台 `自动化任务调度机制.md`(scheduled_at 须 +60s、并发≈3 QUEUED、改 server.js 须重启)。**★创作/改写类 prompt 必须带 SKILL_HINT_CREATE 前缀**(漏=模型跳步直出;新增入口必查)。AI选题 `/api/ai/topics`(Dify recall~50s;key 内置 `scripts/MCN_CYLG_API.py`;curl 中文被 CDN 拦用 Python)。复盘页 prompt 按 mcn-script-review。UI 改完必重开页面带 `?v=YYYYMMDDx`
|
||||
- **短视频工作台**(09-03 由「短视频脚本创作」更名,对外统一名)源=`project/短视频脚本创作/{V1.0,Lite1.0}`(**repo 目录保留旧名**,改的只是注册/显示名);V1.0 name=短视频工作台 含 MCP/Dify,Lite1.0 name=短视频工作台 Lite 去接口。**★软链事实(09-10 更新)**:`C:\Users\maidou\.workbuddy\skills\短视频工作台`=junction→`D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0\`(09-10 因仓库迁移重建;同一文件 md5 一致,改源即自动同步;**所有 SKILL_HINT_*/skills 参数用新注册名**)。**★09-03 junction 两次失效**:被替换成空目录(11:11,疑似宿主扫描/迁移)致 SKILL_HINT_* 加载失败;征兆=技能加载失败先查此路径 children==0;修法=node `unlinkSync` 删旧链/空目录 → PowerShell `New-Item -ItemType Junction`(目标路径必须已不存在否则 exit 1;junction 不能用 rmdir,报 Not a directory)。**同步策略(09-10 更新)**:只改 V1.0 源;Lite1.0 默认不动,如需同步由用户发起(09-10 用户授权同步了环境判定口径 + dou-analysis 依赖修正);**★Lite1.0 目录下无 `subskills/`(实测)→ 未内置 mcn-dou-analysis**;dsh 技能副本(short-video-script)**项目不存在(09-07 用户确认),已废弃,勿再考虑**。🧹清理自动化按 `references/接口调用/自动化任务清理规范.md`(禁 recurring/未来/running/QUEUED,走宿主软删)
|
||||
- **MCN工作台(Web 品牌=短视频工作台;09-04 由 R43 曾用名 MCN热点雷达 改回)**(仅 V1.0)`V1.0/mcn-work-shop/`(零依赖 Node,**端口 8900**,argv 可指定;8899 旧值错误)。AI 任务=`POST /api/run` 写 automations(once+显式 next_run_at+5s)→轮询 `/api/run/status`;调度实测=工作台 `自动化任务调度机制.md`(scheduled_at 须 +60s、并发≈3 QUEUED、改 server.js 须重启)。**★创作/改写类 prompt 必须带 SKILL_HINT_CREATE 前缀**(漏=模型跳步直出;新增入口必查)。**★UI 规范文档=`mcn-work-shop/docs/工作台UI规范.md`**(09-10 梳理:设计 token/布局/8 页面路由/12 类组件/9 条已知坑;UI 迭代先查此文件)。关键铁律:`main#view` 高 `calc(100vh-55px)`(写 54 会溢出 1px 触发第二层滚动条)、榜单表格必须 `table-layout:fixed`、榜单三 tab 行高统一(表格 42px/预览 40px)、两套同名 `.tabs/.tab`(数据页下划线式覆盖顶栏胶囊式)、`.modal-mask[hidden]` 须显式 `display:none`、数值列 `tabular-nums`、`.ic` 的 `vertical-align:-0.18em`。AI选题 `/api/ai/topics`(Dify recall~50s;key 内置 `scripts/MCN_CYLG_API.py`;curl 中文被 CDN 拦用 Python)。复盘页 prompt 按 mcn-script-review。UI 改完必重开页面带 `?v=YYYYMMDDx`。**★配置收敛(09-10)**:端口/DB名/产出根/榜单目录单源化到 `mcn-work-shop/config.json`,代码层统一经 `load-config.js`(唯一入口+默认值)读,改设定只改 config.json;前端 data-pages.js 用 `location.origin` 动态取回调地址(前端读不到 server 端 config.json);start.bat 经 `get-port.js` 读端口(`for /f` 内嵌 node -e 会被 cmd 截断,必须走独立脚本);**start.bat 的 managed node 用 `for /d` 遍历 versions 自动探测**(写死版本号会随升级失效)。**坑1**:`.cjs` 的 `require('./x')` 无扩展名会 MODULE_NOT_FOUND → 配置模块须 `.js`。**坑2**:静态资源是根映射 `/data-pages.js`,`/public/xxx` 一律 404-config 读端口。**坑**:`.cjs` 文件 `require('./load-config')` 无扩展名会 MODULE_NOT_FOUND(Node 不把 .cjs 当无扩展 require 目标)→ 配置模块须用 `.js` 扩展名
|
||||
- **mcn-dou-analysis** 源=`V1.0/subskills/mcn-dou-analysis/`、dsh 副本同构。F1信息/F2视频表(13列xlsx)/F3设定/F4分析/F5解析/F6设定卡片SVG。红线:达人表15列、TOP6(点赞+分享降序)、≥60条停、29赛道枚举、浏览器 9223 调试实例+标签页复用、**身份标识禁从 DB 回填**(留空待浏览器回填)、源技能只读单向同步。F6 配色按调性分深浅两系(深=深沉催泪;浅=明快甜美如玫瑰金 #D6A3A9→#9A5563;「治愈」回读情绪锚点)。browser-harness 执行 F1/F2 前必检。**★产物入库(09-01)**:落盘后须 `POST /api/import/account` 直写 mcn-plugin.db(analysis.json→account_video_analysis、content.json→account_video_source、设定/分析 md→account_persona/account_analysis、xlsx→account_videos);aweme_id 匹配删全角标点+下划线转空格、幂等删旧保新;选题读最新 3 条解析拼 prompt
|
||||
- **mcn-data-insight(09-03)**:纯 11 个红狐系数据获取子技能包;`dou-analysis/subskills/nuwa-skill-main/` 是另一账号方法论勿混。**榜单即查即缓存落盘**(红狐计费+同日快照→先 ls 命中免 API);桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单\`、dsh=`D:\dshworkspace\抖音榜单\`;文件名不加数据源前缀
|
||||
- **mcn-data-insight(09-03)**:纯 11 个红狐系数据获取子技能包;`dou-analysis/subskills/nuwa-skill-main/` 是另一账号方法论勿混。**榜单即查即缓存落盘**(红狐计费+同日快照→先 ls 命中免 API);桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单\`、dsh=`D:\dshworkspace\抖音榜单\`;文件名不加数据源前缀。**★红狐周期规则(09-10 实测,code=3203 原文)**:日榜每日 20:00 后可查昨日、**周榜每周一 20:00 后可查上周**、月榜每月 1 号后可查上月 → 账号周榜(week,`fetch_rank.py`)最新可用期恒为上一周,本周须等下周一 20:00,故"刷新拿最新周期"得到上周**属正常非 bug**。热榜/点赞榜(hot/likes,`fetch_week_ranks.py`)为另一套作品榜 API,**未结束的周也能返回 50 条滚动值**(`--date <本周一>` 可取,明天再取会变);脚本 `last_full_week()` 默认统一回退一期是为与账号榜对齐、避免"同期不同期号",**勿随意改默认**
|
||||
- **短视频分镜脚本** `project/短视频提示词生成/`:F1反推图/F2反推视频/F3生图/F4分镜(>5s 时间戳分段;模板 A剧情/B Vlog/C旁白/D产品/E氛围)
|
||||
|
||||
## 创作红线(权威=SKILL.md+references/创作流程规范.md)
|
||||
@@ -18,6 +23,8 @@
|
||||
|
||||
## 工作方式红线
|
||||
- 治本原则:从根因修机制→重执行验证;禁补数据/临时绕过
|
||||
- **★锚点禁写死盘符(09-10)**:环境/路径判定一律用**仓库特征**(`.dsh` 路径段、git 检出),禁用 `D:\AgentSkill` 类盘符地标;「允许项」≠不会坏,仓库/环境迁移时须主动复核豁免写法
|
||||
- **盘点类任务**:先确认扫描范围无遗漏(09-10 首轮 `skipDirs` 误含 `references` → 漏扫 24 处);下「违规」结论前必先读对应规范文件按规范分类(09-10 曾把 37 处豁免锚点误报为违规)
|
||||
- 改完必重开(`?v=` 防缓存);排查顺序=先重开排除旧缓存再改代码
|
||||
- 逐条修复:读一条→改一条→验证一条,禁批量读;批量后复查式修复
|
||||
- git:2h push 一次本地随时 commit;push 前 fetch;代理 socks5://127.0.0.1:10800 破坏连接需清 local proxy;杀 node 用 PowerShell `Stop-Process`;push 后 origin 跟踪引用可能被沙箱吞需重建 refs/remotes;**★`git rm -r` 大范围被 SIGTERM 中断=只删盘不写索引+index.lock**→删 lock+checkout 恢复+纯 `rm -rf`+`git add -A -- 精确路径`
|
||||
@@ -26,7 +33,8 @@
|
||||
- **Chrome 不主动关闭**(9223/用户 Chrome/daemon 连接保留;只回收自启临时实例)
|
||||
- .dsh 单向只读:禁反向写回(除非用户明确授权)
|
||||
- 三层沉淀:治本(技能文件)→失误(append 日志)→记忆;日志 append-only;frontmatter updated_at/last_change
|
||||
- **★清理「XX已废弃」类废话的判据(09-10)**:环境/规则废弃后,prompt 与规则正文里"何时废弃、曾有几个分支、路径已不存在"这类历史叙述=噪音→**全删**(执行者只需"现在怎么做");代码注释里的变更动作叙述→删,只留定稿日期;"无 X 分支"这类陈述不存在事物的→删。**保留两类**:①文末「变更记录」历史区/变更日志(append-only 归档);②禁止性护栏(精简为"禁止做什么",去掉日期与下线经过)。例:dsh 环境废弃后清理 16 文件 18 处(注意 `/api/dsh/*` 是工作台 API 命名空间,与 dsh 环境无关,不可动)
|
||||
- 生成网页必先读 taste-skill 与 impeccable
|
||||
|
||||
## 历史事件(摘要)
|
||||
07-17 大炮方法;07-29 短剧库 V5.0;07-30 短视频库 V2.0;08-11/12 素材库扁平化+产物链铁律;08-16 赛道 8→27;08-17 三态创作;08-20 分镜落库;08-21 Lite1.0;08-22 .dsh 只读;08-25 更名 mcn-video-script;08-26 路径重构+两步模型;08-27 dou-analysis+分镜解耦+工作台;08-31 数据预览条/调度器结论;09-01 产物入库+清理规范;09-02 AI创作弹窗 v2-v4+Chrome 不关红线;09-03 data-insight 瘦身、软链事实+junction 二次失效修复+git rm 坑、技能更名「短视频脚本创作→短视频工作台」(repo 路径不变);09-04 主 SKILL.md 子技能索引(6 子技能相对路径)+browser-harness 环境修复+**全量路径审计**:源技能 maidou/MCNVideo AI/废弃目录名(当前规则行)零残留;豁免三类=禁止性规则示例行、变更记录历史行、references-add/路径配置.md;dsh short-video-script SKILL.md 为刻意差异化(324 行无 subskills)不同步
|
||||
07-17 大炮方法;07-29 短剧库 V5.0;07-30 短视频库 V2.0;08-11/12 素材库扁平化+产物链铁律;08-16 赛道 8→27;08-17 三态创作;08-20 分镜落库;08-21 Lite1.0;08-22 .dsh 只读;08-25 更名 mcn-video-script;08-26 路径重构+两步模型;08-27 dou-analysis+分镜解耦+工作台;08-31 数据预览条/调度器结论;09-01 产物入库+清理规范;09-02 AI创作弹窗 v2-v4+Chrome 不关红线;09-03 data-insight 瘦身、软链事实+junction 二次失效修复+git rm 坑、技能更名「短视频脚本创作→短视频工作台」(repo 路径不变);09-04 主 SKILL.md 子技能索引(6 子技能相对路径)+browser-harness 环境修复+**全量路径审计**:源技能 maidou/MCNVideo AI/废弃目录名(当前规则行)零残留;豁免三类=禁止性规则示例行、变更记录历史行、references-add/路径配置.md;dsh short-video-script SKILL.md 为刻意差异化(324 行无 subskills)不同步;**09-10 仓库迁移至 `D:\AI技能\mcn-short-video`+软链重建+环境判定锚点重构为「仓库特征判定」(21 文件统一口径)+工作台 cwd/BROWSER_LOCK 改 ROOT 动态推导 + `SESSION_CWD_PATTERN` 放宽为 `%mcn-work%` + Lite1.0 dou-analysis 依赖修正(Lite 无 subskills,未内置)+**dsh 部署环境废弃(三环境→两环境,判据 v3 一步 git 检出,20+ 文件去 dsh 分支)+工作台配置收敛(config.json 单源化,端口/DB/目录经 load-config.js 统一读取)**
|
||||
Reference in new issue
Block a user