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:
maogeigei committed 2026-09-10 18:28:42 +08:00
1 parent 6cb29a9877
commit c48902f063
58 files changed
+895 -263

No files matched your search

@@ -86,7 +86,7 @@ references-add/
|:---|:---|
| 文件命名 | `{编号}_{类型名}_{细分}.md`(如 `01_美食库_川菜.md`) |
| 字段结构 | 与 `references/素材库/` 同类型文件保持一致(四维标签:极致维度×适用场景×镜头维度×画面维度) |
| 04_对话库 | 账号专属,不设通用增量,仍在产出根目录 `{账号名}/`(dsh 部署环境 `D:\dshworkspace\创作任务\`;开发机与用户环境桌面 `MCNSkill项目/`,或用户自定义路径)下管理 |
| 04_对话库 | 账号专属,不设通用增量,仍在产出根目录 `{账号名}/`(开发机与用户环境同构:桌面 `MCNSkill项目/`,或用户自定义路径)下管理 |
| 分块定义 | 不设增量,统一使用 `references/素材库/分块定义/` |
## 与 references/ 的关系
@@ -120,4 +120,4 @@ references/(标准) + references-add/(增量) → 合并结果
| **素材库** | 调取素材时同时检索 `references/素材库/` 和 `references-add/素材库/`。取并集,标准库优先,增量作为补充 |
| **接口调用** | 需要调用外部接口时,同时查阅 `references/接口调用/` 和 `references-add/接口调用/`。两个目录的接口定义**均可用** |
| **铁律避坑** | 创作完成前,**必须**检索 `铁律避坑规则/通用/` + `铁律避坑规则/分赛道/{当前赛道}/{当前内容形式}/`,逐条检查是否违反铁律 |
| **路径配置** | 每次执行创作流程前,**先查** `路径配置.md`。有「用户自定义路径」记录 → 以用户指定为准(**覆盖标准库默认桌面路径**);无记录 → 按三环境两步判定(本机无 `D:\AgentSkill` → 用户环境 → 桌面 `MCNSkill项目/`;本机有且技能路径含 `.dsh` → dsh 部署环境 → `D:\dshworkspace\创作任务/`;本机有且不含 `.dsh` → 开发机 → 桌面 `MCNSkill项目/`),再按系统解析桌面路径。此维度为增量优先特例 |
| **路径配置** | 每次执行创作流程前,**先查** `路径配置.md`。有「用户自定义路径」记录 → 以用户指定为准(**覆盖标准库默认桌面路径**);无记录 → 按两环境判定(技能处于源技能 git 检出内 → 开发机 → 桌面 `MCNSkill项目/`;不在任何 git 检出内 → 用户环境 → 桌面 `MCNSkill项目/`。**两环境产出同构**),再按系统解析桌面路径。此维度为增量优先特例 |
@@ -7,6 +7,58 @@
---
## 2026-09-10(工作台配置收敛:端口/DB/目录单源化,代码层统一引用 config.json)
- **触发**:用户问「这些设定能否用配置,所有文件和脚本都引用,避免有调整时到处修改」。确认范围:只收敛代码层(不动文档/技能规范),配置放 `mcn-work-shop/config.json`。
- **目标**:工作台散落在 server.js / dsh-data.js / 4 个辅助脚本 / 前端 data-pages.js / start.bat 里的硬编码设定(端口 8900、DB 名 mcn-plugin.db、产出根 MCNSkill项目、榜单目录),统一收进 config.json,代码层一律从配置读,调整只需改 config.json 一处。
- **新增**:
- `mcn-work-shop/config.json`:单一配置源(port / dbName / outputRoot / businessDataDir / extraRoots)
- `mcn-work-shop/load-config.js`:配置读取唯一入口 + 默认值唯一来源(config 缺失/损坏回退 DEFAULTS)
- **改动**:
- `server.js`:`require('./load-config')` 取 CFG;`PORT_BASE = argv[2] || CFG.port`(argv 端口仍优先);`DEFAULT_ROOT` / `path.join(ROOT, CFG.dbName)` 从 CFG 读;`saveConfig` 合并写盘保留其它字段;错误提示「mcn-plugin.db」→ CFG.dbName 动态
- `dsh-data.js`:删本地 loadCfg,改用 loadConfig;`DSH_DB = path.join(__dirname, CFG.dbName)`;榜单目录 `path.join(...CFG.businessDataDir)`
- `build-create-prompts.cjs` / `submit-review-tasks.cjs` / `poll-create-tasks.cjs` / `poll-review-tasks.cjs`:DB / API 端口 / prompt 内 dbName 字面量 → CFG 动态
- `public/data-pages.js`:新增 `const BASE = location.origin`;SKILL_HINT_VIDEO_PARSE / SKILL_HINT_ANALYZE / saveHintOf 里的 `http://localhost:8900` 全部改 BASE 动态(前端读不到 server 端 config.json,用 location.origin 让回调地址端口自动跟随当前访问地址)
- `start.bat`:端口从 config.json 读取(`for /f` + load-config),不再写死 8900
- **踩坑**:`load-config.cjs` 用 `.cjs` 扩展名时,`require('./load-config')` 无扩展名解析会 MODULE_NOT_FOUND(Node 不会把 .cjs 作为无扩展 require 的解析目标)→ 重命名为 `load-config.js`(无 package.json,默认 CommonJS)后所有引用自动生效。node --check 只查语法不执行 require,此坑在运行时才暴露。
- **验证**:8 文件 node --check 全通过;`loadConfig()` 正确读回 config.json 全字段;工作台重启 HTTP 200(端口 8900、产出根 MCNSkill项目 均从 config 正确读取)。
## 2026-09-10(dsh 部署环境废弃:三环境 → 两环境,判定简化为一步)
- **触发**:用户确认「第一步 技能路径含 `.dsh` 路径段 ② dsh 部署环境 —— 没有这个环境了」。实测依据:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 下仅剩 `profiles/`、`D:\dshworkspace` 整个目录不存在。
- **判据 v3(一步 · 仓库特征判定)**:删除 `.dsh` 路径段判定步骤,仅保留 `git -C {技能目录} rev-parse --show-toplevel` 返回仓库根 = ①开发机、失败 = ②用户环境(无 git 兜底向上找 `.git`)。环境模型由三环境精简为两环境。
- **产出结果不变**:两环境(开发机/用户环境)产出本就同构(桌面 `MCNSkill项目/`),仅判定依据简化。
- **改动范围**:
- **判定层**:`V1.0/references-add/路径配置.md`、`Lite1.0/references-add/路径配置.md`、`subskills/mcn-dou-analysis/references/路径配置.md`、`subskills/mcn-video-prompt/references-add/路径配置.md`(判定表/执行规则/解析规则/变更记录,v3)
- **SKILL 层**:`V1.0/SKILL.md`(榜单读取 71/78、外部技能依赖 dsh 副本删除、产出路径表述)、`Lite1.0/SKILL.md`、`subskills/mcn-dou-analysis/SKILL.md`(42/44/51/52/58/59/82/95 行)、`subskills/mcn-video-prompt/SKILL.md`(502/505/531-539)、`subskills/mcn-data-insight/SKILL.md`(90-96/116 行)
- **标准库**:5 份 `references/规则/路径引用规范.md`(「三种机器」→「两种机器」)、`references/创作流程规范.md`、`references/创作流程/{11_脚本检查和诊断,4_账号设定解析和确认}.md`、`references/接口调用/{MCP_工具调用规范,自动化任务清理规范}.md`
- **数据源层**:`subskills/mcn-data-insight/scripts/fetch_week_ranks.py`(删 `.dsh` 分支代码)、`mcn-work-shop/dsh-data.js`(删 `isDshDeploy` 分支 + 注释)、`mcn-work-shop/public/data-pages.js`(SKILL_HINT_RANKING + 写库注释)、`subskills/mcn-data-insight/subskills/{douyin-rise-ranking,douyin-weekly-surge,douyin-content-surge,douyin-daily-hot}/SKILL.md`、`references/规则/抖音数据规则.md`
- **账号分析层**:`references/账号数据分析方法.md`、`references/feature/{01_获取账号信息,03_提炼账号设定,04_分析视频数据,06_生成账号设定卡片}.md`、`references/铁律避坑规则/账号信息获取执行避坑.md`(删「dsh 原库」)、`references/浏览器搜索抖音账号操作规范.md`(159/175 行 browser-harness dsh 部署环境)
- **README**:`references-add/README.md`(两处)、`subskills/mcn-dou-analysis/references-add/README.md`、`subskills/mcn-video-prompt/references-add/README.md`、`subskills/mcn-video-prompt/references/README.md`
- **残留核对**:全树扫描 `.dsh`/`dshworkspace`/`dsh 部署`/`dsh 环境`/`dsh_MCNProject`/`②dsh`/`③用户环境`——**当前有效规则零残留**,剩余命中全部为豁免三类:①变更记录/变更日志历史行;②「09-10 起 dsh 环境已废弃」说明文字;③`路径引用规范.md` 用户级路径示例 `{主目录}/.dsh/...`(DSH 工具配置目录,非部署环境)。工作台重启验证 HTTP 200,`dsh-data.js`/`fetch_week_ranks.py` 语法校验通过。
## 2026-09-10(路径治本:环境判定锚点重构为「仓库特征判定」+ 全树写死路径清理)
- **触发**:仓库本地路径由 `D:\AgentSkill\mcn-video-script` 迁移至 `D:\AI技能\mcn-short-video`,`D:\AgentSkill` 已不存在 → 全部以「本机是否存在 `D:\AgentSkill`」为锚点的环境判定**失效**,开发机被误判为「③ 用户环境」(产出落桌面、且误启用 references-add 增量分支)。同时发现技能目录 8 处**真实读写路径**写死盘符。
- **判据重构(新口径 v2 · 两步)**:
- 第一步:技能路径是否含 `.dsh` 路径段 → 含 = ② dsh 部署环境
- 第二步:不含 `.dsh` 时,`git -C {技能目录} rev-parse --show-toplevel` 能返回仓库根 = ① 开发机(处于源技能 git 检出内);命令失败 = ③ 用户环境。无 git 环境兜底:从技能目录向上逐级查找 `.git`
- ⚠️ 必须 `.dsh` 优先判定——`~/.dsh` 自身也是 git 仓库,先查 `.git` 会把 dsh 环境误判为开发机
- **产出根目录三环境结果完全不变**,仅判定依据改变
- **改动范围(21 个文件)**:
- **规范层**:`references/规则/路径引用规范.md`(允许项「锚点禁止用写死盘符」+ 禁令项示例 `D:\MyRepo` + 豁免表);`V1.0/references-add/路径配置.md`、`Lite1.0/references-add/路径配置.md`(判定表/执行规则/解析规则/变更记录);两份 `references-add/README.md`
- **标准库副本(4 份 `路径引用规范.md` 同步)**:`subskills/{mcn-data-insight,mcn-dou-analysis,mcn-script-review,mcn-video-prompt}/references/规则/`
- **子技能判定节**:`subskills/mcn-dou-analysis/{SKILL.md,references/路径配置.md,references-add/README.md}`、`subskills/mcn-video-prompt/{SKILL.md,references-add/README.md,references-add/路径配置.md,references/README.md}`
- **MCP 文档**:`references/接口调用/MCP_工具调用规范.md`、`subskills/mcn-dou-analysis/references/接口调用/MCP_工具调用规范.md`(开发/非开发环境判定)
- **Lite1.0**:`SKILL.md` 外部技能依赖段落(见下)
- **真实读写路径修复(B 类 8 处)**:
- `mcn-work-shop/server.js`:新增 `BROWSER_LOCK_FILE = path.join(ROOT, '.browser-lock')`、`SESSION_CWD = ROOT`;2 处 `const cwd` 与 `BROWSER_LOCK` 改用常量;`SESSION_CWD_PATTERN` 由 `'%mcn-workshop%'` 放宽为 `'%mcn-work%'`(**同时兼容历史会话 mcn-workshop 与新建会话 mcn-work-shop**,避免 6 小时清理对旧会话失效)
- `mcn-work-shop/build-create-prompts.cjs` / `submit-review-tasks.cjs`:prompt 内 DB 绝对路径 → 改用文件内既有 `DB` 常量插值
- `V1.0/SKILL.md` 第 5 条:文档里的运行时 `cwds=["D:\AgentSkill\mcn-workshop"]` → 改为 `<工作台目录>`(由 server.js 从 ROOT 动态推导)
- **Lite1.0 外部技能依赖修正(09-02 结构变更补同步)**:原段落仍写「三环境两步判定 + `D:\AgentSkill\mcn-dou-analysis` 外部路径」,既失效又未同步 09-02「mcn-dou-analysis 并入 `subskills/`」变更。修正为:**Lite1.0 目录下无 `subskills/`(实测),未内置该技能**;需要账号解析改用完整版「短视频工作台」V1.0,或先把技能同步进 `Lite1.0/subskills/` 后按相对路径 `subskills/mcn-dou-analysis/SKILL.md` 调用;禁止盘符绝对路径定位。
- **BROWSER_LOCK 契约同步**:`subskills/mcn-dou-analysis/references/浏览器搜索抖音账号操作规范.md` 5.6 节锁文件路径由 8 处盘符硬编码 → 改为相对 `.browser-lock`(工作台触发的会话 cwd 即工作台目录),并注明以工作台注入的绝对路径为准。
- **残留核对**:全树扫描 `AgentSkill` 剩 18 处(含本条目自身 5 处),**全部为豁免类别**——变更记录/变更日志行 11 处、frontmatter `last_change` 摘要 1 处、09-04/09-10 修正说明行 2 处、Lite 技能审计报告历史 2 处、路径引用规范修订脚注 1 处、本条目残留核对说明 1 处。**当前规则行零残留**。`mcn-video-script` 剩 1 处(变更记录行)、`MCNVideo AI` 剩 3 处(Lite 审计报告历史)。
## 2026-09-07(S1/S2 产物文件名改名:01_需求理解 / 02_需求补全)
- **决策**:产物文件名 01_需求拆分.md / 02_需求拆解.md(旧步骤名「需求拆分任务规划 / 任务需求拆解完善」残留,两词同音近义、与现行步骤名对不上)→ 改名 **01_需求理解.md**(S1 产物=五板块状态表)/ **02_需求补全.md**(S2 产物=归类+AI 补全)。命名口径:编号承担"属于哪步"(01=S1、02=S2),文件名承担"装了什么"(与 03_对标拆解~11_诊断报告 产物语义名体系一致;不采用对齐步骤名方案,避免与 references/创作流程/1_意图识别.md、2_需求完善.md 撞名)。
@@ -5,13 +5,12 @@
## 一、默认路径(用户未自定义时生效)
**先判断运行环境(三环境两步判定),再按运行系统解析桌面路径:**
**先判断运行环境(两环境判定 · 仓库特征判定,v3),再按运行系统解析桌面路径:**
| 运行环境 | 判断依据 | 默认产出根目录 |
|:---|:---|:---|
| dsh 部署环境 | 技能所在路径含 `.dsh`,且本机存在 `D:\AgentSkill`(如 `C:\Users\{用户名}\.dsh\skills\…`) | **优先** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录) |
| 开发机 | 技能所在路径不含 `.dsh`(源技能在 `D:\AgentSkill` 下) | 用户桌面 `MCNSkill项目/`(`{账号名}/脚本{编号}/` 直挂,无技能文件夹层) |
| 用户环境 | 本机不存在 `D:\AgentSkill`(技能装在用户机器上,路径不限、不一定含 `.dsh`) | 用户桌面 `MCNSkill项目/`(与开发机同构) |
| 开发机 | 技能**处于源技能 git 检出内**(`git -C {技能目录} rev-parse --show-toplevel` 能返回仓库根) | 用户桌面 `MCNSkill项目/`(`{账号名}/脚本{编号}/` 直挂,无技能文件夹层) |
| 用户环境 | 技能**不在任何 git 检出内**(技能装在用户机器上,路径不限,如 `~/.workbuddy/skills/…`) | 用户桌面 `MCNSkill项目/`(与开发机同构) |
桌面路径按运行系统自动解析:
@@ -21,7 +20,10 @@
| macOS | `~/Desktop/`(即 `/Users/{用户名}/Desktop/`) |
**AI 执行规则:**
1. 先做三环境两步判定:① 本机是否存在 `D:\AgentSkill`——不存在即**用户环境** → 桌面 `MCNSkill项目/`;② 本机存在时再看技能自身路径——含 `.dsh` 即 **dsh 部署环境** → **优先操作** `D:\dshworkspace\创作任务\`(「创作任务」子目录不存在则创建);不含 `.dsh` 即**开发机** → 桌面 `MCNSkill项目/`(开发机与用户环境同构:`MCNSkill项目/{账号名}/脚本{编号}/`)
1. 先做两环境判定(**仓库特征判定**):
- 判断技能是否处于**源技能 git 检出内**——执行 `git -C "{技能目录}" rev-parse --show-toplevel`,返回仓库根即 **① 开发机**;命令失败(或返回 NOT_IN_REPO)即 **② 用户环境**。无 git 环境时兜底:从技能目录向上逐级查找,任一级存在 `.git` 目录/文件即开发机,查到盘符根仍未命中即用户环境
- 开发机与用户环境产出**同构** → 桌面 `MCNSkill项目/{账号名}/脚本{编号}/`
- ⚠️ 禁止按 `.dsh` 路径段或 `D:\dshworkspace` 做任何分支判断(该部署环境已不存在)
2. 再判断当前运行系统(Windows / macOS),拼接桌面路径
3. 目录不存在则自动创建
4. 产出结构:`{产出根目录}/{账号名}/脚本{编号}/…`(内部文件结构不变,仅根目录可变)
@@ -49,7 +51,7 @@
## 三、解析规则(优先级从高到低)
1. 本文件「用户自定义路径」记录 → 用自定义路径(最新一条生效)
2. 本文件默认路径 → 按三环境两步判定确定产出根目录(本机无 `D:\AgentSkill` → 桌面 `MCNSkill项目/`;有且技能路径含 `.dsh` → `D:\dshworkspace\创作任务\`;有且不含 `.dsh` → 桌面 `MCNSkill项目/`),再按系统拼接桌面路径
2. 本文件默认路径 → 按两环境判定确定产出根目录(在源技能 git 检出内 = 开发机 → 桌面 `MCNSkill项目/`;不在任何 git 检出内 = 用户环境 → 桌面 `MCNSkill项目/`。**两者同构**),再按系统拼接桌面路径
3. 路径含 `~` 时自动展开为用户主目录
4. 路径含 `{用户名}` 时替换为当前系统用户名
5. 目录不存在时自动创建
@@ -61,3 +63,5 @@
- 2026-08-26(再修订):dsh 部署环境改为**优先操作** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录,与 .dsh 部署副本既有自定义路径记录一致;用户指定:"dsh 中优先操作 D:\dshworkspace\创作任务\");主工作区不存在时兜底桌面 `DSHSkill项目/`。产出结构不变。
- 2026-08-26(三环境重构):环境判定由两级改为**三环境两步判定**(①本机无 `D:\AgentSkill`=用户环境;②有且技能路径含 `.dsh`=dsh 部署环境;③有且不含 `.dsh`=开发机);`DSHSkill项目/` 根目录**整体废弃**(用户确认),原"dsh 异机兜底 DSHSkill项目/"场景并入用户环境 → 桌面 `MCNSkill项目/脚本创作/`;dsh 部署环境产出 `D:\dshworkspace\创作任务\` 不变。产出结构不变。
- 2026-08-26(层级精简):开发机与用户环境产出根目录由 `MCNSkill项目/脚本创作/` 改为 `MCNSkill项目/`——去掉技能文件夹层,`{账号名}/脚本{编号}/` 直挂(用户指定:"不论1还是3,都是 桌面\MCNSkill项目\{账号名}\{脚本名}\对应文件");dsh 部署环境不变。
- 2026-09-10(判定锚点重构 v2 · 仓库特征判定):环境判定锚点由「本机是否存在 `D:\AgentSkill`」改为**仓库特征判定**——第一步查技能路径是否含 `.dsh`(含 = dsh 部署环境),第二步用 `git -C {技能目录} rev-parse --show-toplevel` 判断技能是否处于源技能 git 检出内(在 = 开发机,不在 = 用户环境;无 git 时兜底为向上逐级查找 `.git`)。产出根目录三环境结果**完全不变**,仅判定依据改变。**根因**:仓库本地路径由 `D:\AgentSkill\mcn-video-script` 迁移至 `D:\AI技能\mcn-short-video`,写死盘符锚点失效 → 开发机被误判为「用户环境」;改为仓库特征判定后,仓库搬移到任何盘符/目录名均自动正确判定。(用户确认:"改为仓库特征判定")
- 2026-09-10(环境模型精简 v3 · 三环境 → 两环境):**dsh 部署环境整体废弃**(用户确认:"第一步 技能路径含 .dsh 路径段 ② dsh 部署环境 没有这个环境了")。实测依据:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 下仅剩 `profiles/`、`D:\dshworkspace` 整个目录不存在。故删除 `.dsh` 判定分支与 `D:\dshworkspace\创作任务\` 产出路径,环境判定简化为**一步判定**(是否处于源技能 git 检出内)。剩余两环境(开发机 / 用户环境)产出根目录**本就同构**(桌面 `MCNSkill项目/`),故产出结果完全不变。