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

@@ -87,12 +87,11 @@ export REDFOX_API_KEY="ak_xxx..."
### 落盘目标(按运行环境 + 数据源分层)
> 桌面 `MCNSkill项目\` 顶层先分「业务账号层 / 三方数据层」:账号产出(分析、脚本等)直挂账号文件夹,**三方数据统一下 `三方数据\{数据源}\`**——后续数据获取不止一个数据源,每个数据源一个文件夹(当前红狐数据源=`红狐数据\`),其下再按数据类型分(抖音榜单/信息源数据/作品数据…)。**文件名不加数据源前缀**(保持 `抖音周榜_` 等榜名开头,兼容 dsh 工作台 RANKING_DIR 正则 `^抖音周榜_`)。
> 桌面 `MCNSkill项目\` 顶层先分「业务账号层 / 三方数据层」:账号产出(分析、脚本等)直挂账号文件夹,**三方数据统一下 `三方数据\{数据源}\`**——后续数据获取不止一个数据源,每个数据源一个文件夹(当前红狐数据源=`红狐数据\`),其下再按数据类型分(抖音榜单/信息源数据/作品数据…)。**文件名不加数据源前缀**(保持 `抖音周榜_` 等榜名开头,兼容工作台 RANKING_DIR 正则 `^抖音周榜_`)。
| 环境 | 落盘目录 |
|---|---|
| ①③ 用户环境 / 开发机(本机无 `.dsh`) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(Windows/macOS 按系统解析桌面,禁止硬编码用户目录) |
| ② dsh 环境(本机有 `.dsh`) | `D:\dshworkspace\抖音榜单\`(兼容工作台 RANKING_DIR 现有读取) |
| 开发机 / 用户环境(两环境同构) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(Windows/macOS 按系统解析桌面,禁止硬编码用户目录) |
### 目录结构(09-03 起分目录管理,按工作台 tab 对齐)
@@ -112,7 +111,7 @@ export REDFOX_API_KEY="ak_xxx..."
| 3 点赞榜 | 作品维七日点赞飙升 | `点赞榜/抖音周榜_点赞榜_{周一}.json` | ✅ 已实现(fetch_week_ranks.py,全品类 TOP50) |
| 4 涨粉榜 | 账号维涨粉榜 | 平铺 `抖音涨粉榜_{赛道}_{日期}.json` | ✅ 已实现(douyin-rise-ranking 子技能命名,未接入工作台 tab) |
> **周粒度抓取器(工作台 视频热榜/点赞榜 数据源,09-03 重构定稿)**:`scripts/fetch_week_ranks.py` —— **不传赛道(type)= 全品类,每榜每期仅 1 次 API 调用**(禁止逐赛道/逐日循环)。hot = likesRank 传 周一~周日(服务端周聚合);likes = hotContentRank **source 必须为「抖音每日点赞飙升榜」生产名**(写「抖音七日点赞飙升榜-GitHub」返回空,09-03 实测修正),startTime 传周日(七日口径)。**★API 单次上限 TOP50**(limit=100 / page=2 / offset=50 均被忽略,09-03 实测),无 51-100 名获取途径,勿再探测。list 条目补 `rank`;顶层 `category:"全部"`(实际赛道在 list[].category,展示端按条目赛道筛选/下拉去重)。用法:`python scripts/fetch_week_ranks.py --board both [--date 2026-08-24] [--force]`。落盘目录解析同工作台(env `MCN_RANKING_DIR` → `.dsh` 部署 `D:\dshworkspace\抖音榜单` → 桌面 `三方数据\红狐数据\抖音榜单`)。**成本铁律(09-03 固化)**:涉及多赛道/多日/多窗口循环的付费调用前,必须先向用户确认调用次数与范围,禁止未经确认直接批量调用。
> **周粒度抓取器(工作台 视频热榜/点赞榜 数据源,09-03 重构定稿)**:`scripts/fetch_week_ranks.py` —— **不传赛道(type)= 全品类,每榜每期仅 1 次 API 调用**(禁止逐赛道/逐日循环)。hot = likesRank 传 周一~周日(服务端周聚合);likes = hotContentRank **source 必须为「抖音每日点赞飙升榜」生产名**(写「抖音七日点赞飙升榜-GitHub」返回空,09-03 实测修正),startTime 传周日(七日口径)。**★API 单次上限 TOP50**(limit=100 / page=2 / offset=50 均被忽略,09-03 实测),无 51-100 名获取途径,勿再探测。list 条目补 `rank`;顶层 `category:"全部"`(实际赛道在 list[].category,展示端按条目赛道筛选/下拉去重)。用法:`python scripts/fetch_week_ranks.py --board both [--date 2026-08-24] [--force]`。落盘目录解析同工作台(env `MCN_RANKING_DIR` → 桌面 `三方数据\红狐数据\抖音榜单`,**无 dsh 分支**)。**成本铁律(09-03 固化)**:涉及多赛道/多日/多窗口循环的付费调用前,必须先向用户确认调用次数与范围,禁止未经确认直接批量调用。
> 子技能 douyin-daily-hot(视频热榜)/ douyin-content-surge(点赞榜)日粒度归档沿用各自 SKILL.md 命名;**工作台周粒度文件一律 fetch_week_ranks.py 落盘对应子目录**,避免日/周口径混入。douyin-weekly-surge(官方七日口径)落盘 `抖音七日飙升榜_…` 命名保留,未接入工作台 tab。
@@ -50,15 +50,15 @@
数据按类型分三个文件夹存放;**榜单数据**因属「同日期固定快照」+ API 按调用计费,**采用业务数据目录落盘 + 查询先查本地缓存命中免 API**(09-03 定稿规范):
| 数据类型 | 归档目录(①③用户/开发机) | 归档目录(②dsh 环境) | 说明 |
|---|---|---|---|
| **榜单数据**(账号周榜/视频热榜/点赞榜/涨粉榜/日榜/月榜/七日飙升等) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(按运行系统解析桌面,禁止硬编码用户目录) | `D:\dshworkspace\抖音榜单\` | 桌面顶层先分「业务账号/三方数据」:三方数据统一 `三方数据\{数据源}\`(当前=红狐数据);文件命名 `{榜名}_{赛道}_{数据日期}.json` 不加数据源前缀;详见 [SKILL.md 榜单数据落盘规范](../../SKILL.md) |
| **信息源数据**(AI信息源、短剧信息源等) | `RedFox数据\信息源数据\YYYY-MM\` | 同(沙箱内) | 按月分文件夹 |
| **作品数据**(单作品爬取、账号诊断等) | `RedFox数据\作品数据\YYYY-MM-DD\` | 同 | 按日分文件夹 |
| 数据类型 | 归档目录(开发机 / 用户环境同构) | 说明 |
|---|---|---|
| **榜单数据**(账号周榜/视频热榜/点赞榜/涨粉榜/日榜/月榜/七日飙升等) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(按运行系统解析桌面,禁止硬编码用户目录) | 桌面顶层先分「业务账号/三方数据」:三方数据统一 `三方数据\{数据源}\`(当前=红狐数据);文件命名 `{榜名}_{赛道}_{数据日期}.json` 不加数据源前缀;详见 [SKILL.md 榜单数据落盘规范](../../SKILL.md)。**09-10 起 dsh 环境已废弃**(`D:\dshworkspace` 不存在),原「②dsh 环境」列删除 |
| **信息源数据**(AI信息源、短剧信息源等) | `RedFox数据\信息源数据\YYYY-MM\` | 按月分文件夹 |
| **作品数据**(单作品爬取、账号诊断等) | `RedFox数据\作品数据\YYYY-MM-DD\` | 按日分文件夹 |
### 2.2 日期命名规则
> 以下示例归档目录 = 表 2.1 对应环境的目录内(①③ = `三方数据\红狐数据\抖音榜单\`;② dsh = `D:\dshworkspace\抖音榜单\`)。
> 以下示例归档目录 = 表 2.1 的 `三方数据\红狐数据\抖音榜单\` 内(**无 dsh 分支**)。
- 归档文件夹日期按 **数据实际日期** 命名,**不是获取日期**。
- 例:8月8日获取8月7日的日榜 → 存入 `抖音榜单\抖音视频热榜_美食_2026-08-07.json`
@@ -1,6 +1,6 @@
# 路径引用规范(相对路径铁律,P0)
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / 用户环境** 两种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
## 一、铁律(3 条)
@@ -18,12 +18,12 @@
| `__file__` 动态推导 | `BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))` | 脚本定位技能根,跨环境可迁移 |
| 环境变量 | `os.getenv("REDFOX_API_KEY")`、`MCN_RANKING_DIR` | 值由外部注入 |
| URL | `https://github.com/...` | 外部资源 |
| 环境判别锚点 | 「本机是否存在 `D:\AgentSkill`」「技能路径是否含 `.dsh`」 | 仅作**是否存在/是否包含**的判定条件,**禁止**将其作为实际读写路径 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/`、`D:\dshworkspace\创作任务\` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
| 环境判别锚点 | 「技能目录是否处于 git 检出内」 | 仅作**是否存在**的判定条件,**禁止**将其作为实际读写路径;锚点必须用**仓库特征**(git 检出),禁止用写死盘符 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
## 三、禁令项(这些绝对禁止)
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\MyRepo\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。
- **越级引用**:`../../..` 跳出技能根指向包外文件。
- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。
@@ -34,7 +34,7 @@
| 场景 | 说明 |
|------|------|
| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 git 检出特征是**规则内容**不是引用,保留 |
| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) |
| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 |
| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 |
@@ -50,13 +50,10 @@ CATEGORY_ALL = "全部"
def resolve_ranking_dir():
"""与 mcn-work-shop/dsh-data.js resolveRankingDir 同款:env → .dsh 部署 → 桌面 抖音榜单"""
"""与 mcn-work-shop/dsh-data.js resolveRankingDir 同款:env → 桌面 抖音榜单(09-10 起无 dsh 分支)"""
env = os.environ.get("MCN_RANKING_DIR", "").strip()
if env:
return env
here = os.path.abspath(__file__)
if ".dsh" in here.replace("\\", "/"):
return r"D:\dshworkspace\抖音榜单"
home = os.path.expanduser("~")
rel = os.path.join("MCNSkill项目", "三方数据", "红狐数据", "抖音榜单")
candidates = [
@@ -50,6 +50,6 @@ description: 抖音每日点赞飙升榜查询工具。日度收录全平台抖
## 安全约束
- **API Key**:仅通过 `os.getenv("REDFOX_API_KEY")` 获取,禁止读取系统文件
- **文件操作**:对话回复仅输出 Markdown 表格(不暴露原始 JSON);**榜单数据落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)——日粒度归档命名 `抖音点赞榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(①③环境)或 `D:\dshworkspace\抖音榜单\`(②dsh 环境)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)。工作台「点赞榜」周粒度文件(`抖音周榜_点赞榜_{赛道}_{周一}.json`)由主技能 `scripts/fetch_week_ranks.py` 统一落盘,本技能不做周粒度输出。
- **文件操作**:对话回复仅输出 Markdown 表格(不暴露原始 JSON);**榜单数据落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)——日粒度归档命名 `抖音点赞榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(开发机与用户环境同构,**无 dsh 分支**)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)。工作台「点赞榜」周粒度文件(`抖音周榜_点赞榜_{赛道}_{周一}.json`)由主技能 `scripts/fetch_week_ranks.py` 统一落盘,本技能不做周粒度输出。
- **网络请求**:脚本使用 `urllib.request`(标准库),禁止调用外部脚本或 subprocess
- **输出内容**:仅输出 Markdown 表格格式榜单,不暴露原始 JSON
@@ -10,7 +10,7 @@ description: 抖音每日最热作品榜,日度收录全平台抖音作品,
1. **路径沙箱**:文件操作限定在技能根目录内
2. **API Key**:仅 `os.getenv("REDFOX_API_KEY")`,禁止 .env/dotenv/配置文件读取
3. **无系统命令**:不调用 subprocess/eval/exec/system()
4. **输出限定**:仅 stdout(Markdown 表格对话回复);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md) 「榜单数据落盘规范」)——日粒度归档命名:`抖音视频热榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(①③环境)或 `D:\dshworkspace\抖音榜单\`(②dsh 环境)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)。工作台「视频热榜」周粒度文件(`抖音周榜_视频热榜_{赛道}_{周一}.json`)由主技能 `scripts/fetch_week_ranks.py` 统一落盘,本技能不做周粒度输出。
4. **输出限定**:仅 stdout(Markdown 表格对话回复);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md) 「榜单数据落盘规范」)——日粒度归档命名:`抖音视频热榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(开发机与用户环境同构,**无 dsh 分支**)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)。工作台「视频热榜」周粒度文件(`抖音周榜_视频热榜_{赛道}_{周一}.json`)由主技能 `scripts/fetch_week_ranks.py` 统一落盘,本技能不做周粒度输出。
## 执行流程
@@ -10,7 +10,7 @@ description: 抖音涨粉账号推荐(涨粉榜)查询工具。统计抖音
1. **路径沙箱**:文件操作限定在技能根目录内;产物落盘走主技能白名单例外(见下)
2. **API Key**:仅 `os.getenv("REDFOX_API_KEY")`,禁止 .env/dotenv/配置文件读取
3. **无系统命令**:不调用 subprocess/eval/exec/system()
4. **输出限定**:仅 stdout(Markdown 表格对话回复 + JSON 原始数据);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)——命名 `抖音涨粉榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(①③环境)或 `D:\dshworkspace\抖音榜单\`(②dsh 环境)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)
4. **输出限定**:仅 stdout(Markdown 表格对话回复 + JSON 原始数据);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)——命名 `抖音涨粉榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(开发机与用户环境同构,**无 dsh 分支**)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)
## 执行流程
@@ -68,7 +68,7 @@ cd {SKILL_ROOT} && python scripts/douyin_weekly_surge.py --full #
### 5. 交付
- 直接输出 Markdown 表格(对话回复);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)—— `抖音七日飙升榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(①③环境)或 `D:\dshworkspace\抖音榜单\`(②dsh 环境)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)
- 直接输出 Markdown 表格(对话回复);**榜单数据同时落盘到业务数据目录**(白名单例外,详则见主 [SKILL.md](../../SKILL.md)「榜单数据落盘规范」)—— `抖音七日飙升榜_{赛道}_{数据日期}.json`,目标 `桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\`(开发机与用户环境同构)。**查询前先 `ls` 本地缓存命中免 API**(同榜名+赛道+数据日期全机器只调一次 API)
- 详情参阅 `references/api-config.md`(API 详情)和 `references/interaction-guide.md`(交互示例)
## 安全约束
@@ -39,24 +39,24 @@ description: "MCN 达人爆款视频解析与人设卡生成技能:达人账
| 规则 | 说明 |
|------|------|
| 达人账号表.xlsx(外部数据文件,不入技能包) | 账号登记台账为**外部数据文件,技能包不内置**(09-03 起:原内置副本为 08-26 早期过期数据已删除)。**权威台账 = 数据目录的桌面 `MCNSkill项目/达人账号表.xlsx`(①开发机/③用户环境,含俊希等最新登记);②dsh 环境侧数据已停更(dshworkspace 遗留表为 08-26 死数据),不作为权威、不维护**。表缺失时按 15 列结构现场新建:账号ID/达人昵称/抖音号/抖音ID/抖音地址/粉丝数/解析状态/人设卡/更新时间/获赞数/关注数/作品数/IP属地/简介/备注。**只能根据用户明确要求添加/修改账号**,不得自行添加或扩充。用户说加谁就加谁。输入信息中的账号若不在表中,**先添加到表**:账号ID自增、抖音号/抖音ID(sec_uid)/抖音地址存文本格式,其余字段留空待补。 |
| 达人账号表.xlsx(外部数据文件,不入技能包) | 账号登记台账为**外部数据文件,技能包不内置**(09-03 起:原内置副本为 08-26 早期过期数据已删除)。**权威台账 = 数据目录的桌面 `MCNSkill项目/达人账号表.xlsx`(开发机与用户环境同构);dsh 侧已整套下线(09-10:`D:\dshworkspace` 不存在),其遗留表不再作为任何来源**。表缺失时按 15 列结构现场新建:账号ID/达人昵称/抖音号/抖音ID/抖音地址/粉丝数/解析状态/人设卡/更新时间/获赞数/关注数/作品数/IP属地/简介/备注。**只能根据用户明确要求添加/修改账号**,不得自行添加或扩充。用户说加谁就加谁。输入信息中的账号若不在表中,**先添加到表**:账号ID自增、抖音号/抖音ID(sec_uid)/抖音地址存文本格式,其余字段留空待补。 |
| 数据格式 | 账号原始数据保存为 **原始 JSON 格式**,不用 Markdown。 |
| 文件夹命名 | 统一使用 `账号分析/` 作为根目录(默认产出根目录按三环境判定:**①开发机/③用户环境** 桌面 `~/Desktop/MCNSkill项目/`(`{达人昵称}/` 账号层直挂);**②dsh环境** `D:\dshworkspace\解析任务\`;**实际产出路径以 `references/路径配置.md` 为准**),子文件夹以达人昵称命名。视频文件夹命名规则:`视频标题(去特殊符号)_标签1_标签2`(去掉账号名标签和#号)。 |
| 文件夹命名 | 统一使用 `账号分析/` 作为根目录(默认产出根目录按**两环境判定**:开发机与用户环境**同构** → 桌面 `~/Desktop/MCNSkill项目/`(`{达人昵称}/` 账号层直挂);**实际产出路径以 `references/路径配置.md` 为准**),子文件夹以达人昵称命名。视频文件夹命名规则:`视频标题(去特殊符号)_标签1_标签2`(去掉账号名标签和#号)。 |
| 视频筛选标准 | 先按发布时间过滤**最近三个月**,排除**视频时长>15分钟**的视频,再按点赞+分享总量降序排列,取 TOP 6(不再设30W互动量门槛)。**实际满足条件的视频不足 6 条时,按实际条数取(TOPn 的 n=实际解析条数,如王微斯 4 条→TOP4)**,产出文件(设定 md/卡片)的「TOPn」均按实际条数写,不写 6。**本参数为唯一权威参数**:只在 SKILL.md 定义,其他文件(feature/流程/方法/避坑等)引用此处,**不得重复写数字**;调整只改本行,改后自检:`references/` 下 *.md 用 `grep "TOP ?[0-9]|凑满[0-9]|默认取[0-9]"` 应无残留,并同步 `scripts/excel_tool.py` 与 `scripts/select_top6.py` 两处 `count` 默认值(执行镜像)。 |
| 视频获取数量(**唯一权威参数**) | **≥60 条即停止滚动**;若滚动到底部后无法加载更多视频,也立即停止(两个条件先到者为准,禁止无限滚动)。本参数只在 SKILL.md 定义,其他文件(feature/操作规范等)引用此处,不得重复写数字;调整只改本行。 |
| 视频补充规则 | 解析失败或无法解析的视频,从视频数据中按排名规则(点赞+分享降序)取下一位视频补充,直至凑满「视频筛选标准」规定的数量(数量见上「视频筛选标准」唯一权威参数)。 |
| 人设卡方法论 | 必须结合 **脚本创作技能 + 女娲造人术** 两个技能库综合生成,不可仅凭通用知识。**人设卡聚焦内容创作本身(内容基因/打法/情绪/视听/规则/差异化壁垒的内容侧),不含商业化变现路径分析**(商业化/市场分析归功能四账号数据分析)。**人设卡统一 12 段结构**(账号核心定位→内容基因→类型库→情绪结构→视听风格→内容打法→内容规则→系列内容规划→差异化壁垒→红线清单→当前需解决的问题→设定分析说明),详见 `references/人设卡生成方法.md` 5.3。 |
| 账号类型判定 | 生成人设卡前**必须先判定账号类型**,不同类型使用不同模板结构。判定标准见 `references/人设卡生成方法.md`。 |
| 浏览器操作规范(红线) | **执行任何浏览器操作(功能一/二及任何网页获取)前,必须先读取 `references/浏览器搜索抖音账号操作规范.md` 全文**,严格遵守:① 环境前置(清除代理环境变量、固定 9223 调试 Chrome 实例);② **标签页复用(5.5)**——操作前检查已打开标签页,有则 goto_url 直接导航复用,无才 new_tab 新建,用完不关闭;③ 登录检测(弹登录窗口停止操作提示用户);④ 滚动收集技巧(.route-sc 容器);⑤ **访问账号主页必须走搜索路径→模拟点击进入,禁止直接构造 `/user/{sec_uid}` 地址跳转**;⑥ **视频数据提取首选列表组件 Fiber `defaultDataList`(一次拿全含 createTime),禁止逐条打开 `/video/{id}` 视频页抓字段**(详见规范「提取方法优先级」);⑦ **浏览器进程生命周期:已开启的 Chrome(9223 调试实例/用户 Chrome)一律不主动关闭,除非用户明确要求**(详见规范 5.7)。浏览器要求由插件 prompt 注入与本规范双重保证。 |
| browser-harness 依赖(红线) | 功能一/二(浏览器抓取)执行前**必须先检测 browser-harness 是否可用**:检测方法(任一即可判定)——① 可执行文件存在性:`~/.local/bin/browser-harness.exe`(Windows)/ `~/.local/bin/browser-harness`(macOS/Linux);② `command -v browser-harness`(macOS/Linux)/ `where browser-harness`(Windows)有输出。**未安装 → 提醒用户安装**(可跳过:改用三方数据 API / MCP 兜底数据源,但功能一/二浏览器抓取无法执行;同意后安装)→ 执行 `uv tool install --python 3.12 --upgrade --force browser-harness` → `browser-harness doctor` 验证三要素(工具/daemon/Chrome)全绿。**技能本体位置(09-02 调整)**:主技能 `短视频工作台/subskills/browser-harness/`(源仓库 `project/短视频脚本创作/V1.0/subskills/browser-harness/`,含 envs 环境与 src;**不再挂在 mcn-dou-analysis 下**);dsh 部署环境 `~/.dsh/skills/browser-harness/`(随 dsh_MCNProject 仓库分发,换机器自带)。检测与安装细节见 `references/浏览器搜索抖音账号操作规范.md` 第五节。 |
| 账号信息数据源(红线) | 获取达人账号信息(功能一)**必须浏览器优先**:browser-harness 打开抖音网页版访问达人主页提取(昵称/抖音号/抖音ID(sec_uid)/抖音地址/粉丝数/获赞数/关注数/作品数/IP属地/简介等)。**禁止从任何数据库读取账号字段回填账号表(含身份标识 sec_uid/抖音号/抖音地址)**:工作台库 `mcn-plugin.db` 的 `hot_accounts` 表 = MCP 内部账号库(`list_hot_accounts`/`hot_account_detail`)的**本地副本,读取其数据填表等同违反本红线**;dsh 原库(`~/.dsh/mcn-plugin.db`)同样只读参考。这些库仅用于**流程状态参考**(判断是否已有解析/产出),**不是功能一数据源**;账号表登记(Step 1.0)只占位 账号ID+达人昵称,抖音号/sec_uid/地址等一律留空,**待浏览器抓取后回填**(浏览器抓取到的值才写)。仅当浏览器无法访问(账号搜索不到/主页打不开等)时才可兜底补充,并须注明数据来源。详见 `references/铁律避坑规则/账号信息获取执行避坑.md`。 |
| browser-harness 依赖(红线) | 功能一/二(浏览器抓取)执行前**必须先检测 browser-harness 是否可用**:检测方法(任一即可判定)——① 可执行文件存在性:`~/.local/bin/browser-harness.exe`(Windows)/ `~/.local/bin/browser-harness`(macOS/Linux);② `command -v browser-harness`(macOS/Linux)/ `where browser-harness`(Windows)有输出。**未安装 → 提醒用户安装**(可跳过:改用三方数据 API / MCP 兜底数据源,但功能一/二浏览器抓取无法执行;同意后安装)→ 执行 `uv tool install --python 3.12 --upgrade --force browser-harness` → `browser-harness doctor` 验证三要素(工具/daemon/Chrome)全绿。**技能本体位置(09-02 调整)**:主技能 `短视频工作台/subskills/browser-harness/`(源仓库 `project/短视频脚本创作/V1.0/subskills/browser-harness/`,含 envs 环境与 src;**不再挂在 mcn-dou-analysis 下**;**09-10 起无 dsh 部署环境**)。检测与安装细节见 `references/浏览器搜索抖音账号操作规范.md` 第五节。 |
| 账号信息数据源(红线) | 获取达人账号信息(功能一)**必须浏览器优先**:browser-harness 打开抖音网页版访问达人主页提取(昵称/抖音号/抖音ID(sec_uid)/抖音地址/粉丝数/获赞数/关注数/作品数/IP属地/简介等)。**禁止从任何数据库读取账号字段回填账号表(含身份标识 sec_uid/抖音号/抖音地址)**:工作台库 `mcn-plugin.db` 的 `hot_accounts` 表 = MCP 内部账号库(`list_hot_accounts`/`hot_account_detail`)的**本地副本,读取其数据填表等同违反本红线**。这些库仅用于**流程状态参考**(判断是否已有解析/产出),**不是功能一数据源**;账号表登记(Step 1.0)只占位 账号ID+达人昵称,抖音号/sec_uid/地址等一律留空,**待浏览器抓取后回填**(浏览器抓取到的值才写)。仅当浏览器无法访问(账号搜索不到/主页打不开等)时才可兜底补充,并须注明数据来源。详见 `references/铁律避坑规则/账号信息获取执行避坑.md`。 |
| 已有数据处理(统一决策) | 用户要求「获取账号数据/提取账号设定/分析视频」时,**库中已有 ≠ 可直接使用**:实时数据(账号信息/视频列表)必须重新获取(红线禁回填);分析产物(人设卡/视频解析/分析报告)**复用优先 + 询问是否更新**,只对增量(新视频/未解析)补获取;「已有」须校验内容质量(存在≠有效,假数据视为无)。分场景决策表见 `references/铁律避坑规则/已有数据处理规则.md`(收敛更新时间检查/卡片覆盖询问/表格复用/入库去重等散落规则)。 |
| 赛道标准枚举(29个,**唯一权威**) | 赛道(track/「赛道」键)取值必须属于以下 **29 个赛道**(28 标准 + 1 补充):个人才艺 / 生活vlog / 财富理财 / 二次元 / 居家装修 / 学习教育 / 小剧场 / 数码科技 / 旅行 / 美食 / 美妆(原「化妆美容」统一更名) / 动物 / 亲子 / 汽车 / 情感 / 三农 / 健康医学 / 潮流风尚 / 舞蹈才艺 / 颜值造型 / 人文 / 音乐 / 影视 / 身体锻炼 / 体育 / 明星娱乐 / 游戏 / 其他 / **剧情**(剧情为用户指定保留,不归一)。**不带「赛道」后缀**(如「生活vlog」);人设卡/账号设定「赛道」键取首段(" / " 分隔)后去后缀,不在 29 个枚举内则归一到最接近标准值或置空待确认。本参数只在 SKILL.md 定义(源:`dsh-plugin-dev/references/赛道标准枚举.md`),其他文件引用此处,调整只改本行。 |
| 账号数据分析(功能四) | 独立于人设卡,聚焦「数据表现规律」(内容表现规律/月度趋势/差异化壁垒/商业化空间),产出独立文件 `{达人昵称}账号数据分析.md`,**不与功能三人设卡嵌套**。方法论见 `references/账号数据分析方法.md`。 |
| 数据分析依据(红线) | 功能四所有分析结论必须有明确数据依据:具体到视频标题 + 具体数值。后台私有数据拿不到时(完播率/留存率/GMV等)标「无数据」,**禁止用间接推断或定性描述替代**。 |
| 数据分析两段式(红线) | 功能四强制「**逐条拆解 → 汇总分析**」两段式:先对每条入选视频重度调用源技能逐条拆解(拆解内容单独保存到各视频自己的文件夹),**拆解全部完成后**才能进入汇总分析,禁止跳过逐条拆解直接写报告。 |
| 源技能路径与同步 | 生成账号设定/分析视频数据时,**调用源技能** `{源技能目录}/references/` 下的对应文件(`创作流程/4_账号设定解析和确认.md`、`创作流程/3_对标视频账号拆解.md`、`知识库/01_账号设定/`、`知识库/08_对话风格/`、`知识库/12_爆款拆解/`、`知识库/11_广告植入/` 等)。**三环境判定(锚点 = 本机是否存在 `D:\AgentSkill`,与技能装在什么路径无关)**:① 开发机 = 本机有 `D:\AgentSkill` 且技能路径在 `D:\AgentSkill\` 下(源技能);② dsh 环境 = 本机有 `D:\AgentSkill` 且技能路径含 `.dsh`(如 `C:\Users\{用户名}\.dsh\skills\`);③ 用户环境 = 本机**没有** `D:\AgentSkill`(技能装在哪、什么路径都是用户环境)。`{源技能目录}` 仅在 ①/② 存在,③ 不存在(用本技能自有知识库)。**源技能只读,禁止修改(不提供任何改前评估流程,一律视为不可写)**;本技能只能**从源技能单向同步**:① 从源技能**定位相关文件**(账号设定提炼实际依赖);② **重新整理为适合本技能的流程和知识库**(按本技能自有体系组织,**不复刻源技能目录结构**)。源技能为权威源;本技能 `references/知识库/账号设定/`(账号设定专用)与 `references/知识库/视频拆解/`(账号数据分析专用,23文件)为重组后的自有知识库,③用户环境独立使用。 |
| 部署场景修改规则 | **仅 ③ 用户环境(本机没有 `D:\AgentSkill`)适用本规则**;① 开发机 / ② dsh 环境(本机有 `D:\AgentSkill`)不适用本规则。用户环境:源技能路径不存在,标准库 `references/`(含自有知识库 `知识库/账号设定/` + `知识库/视频拆解/`)**永远不变**。用户新增/修改内容统一写入 `references-add/` 增量库,**目录结构与标准库镜像对齐**:`feature/`(功能级增量,按 `01_获取账号信息/02_获取视频/03_提炼账号设定/04_分析视频数据` 命名,对应标准库 `references/feature/`)、`知识库/`(方法论增量)、`铁律避坑规则/`(铁律与避坑)。运行时 `references/` + `references-add/` 取并集、标准库优先。**功能禁用判定 = 标准库与增量库中该功能文件都不存在**(只删标准库、增量库仍有时功能仍启用)。产出路径以 `references/路径配置.md` 为准(①开发机/②dsh环境并入标准库;③ 用户环境迁移回 `references-add/` 见其 README)。详见 `references-add/README.md`。 |
| 源技能路径与同步 | 生成账号设定/分析视频数据时,**调用源技能** `{源技能目录}/references/` 下的对应文件(`创作流程/4_账号设定解析和确认.md`、`创作流程/3_对标视频账号拆解.md`、`知识库/01_账号设定/`、`知识库/08_对话风格/`、`知识库/12_爆款拆解/`、`知识库/11_广告植入/` 等)。**两环境判定(仓库特征判定:看技能是否处于源技能 git 检出内——`git -C {技能目录} rev-parse --show-toplevel`;与技能装在什么路径无关)**:① 开发机 = 技能**处于源技能 git 检出内**(源技能);② 用户环境 = 技能**不在任何 git 检出内**(技能装在哪、什么路径都是用户环境)。`{源技能目录}` 仅在 ① 存在,② 不存在(用本技能自有知识库)。**源技能只读,禁止修改(不提供任何改前评估流程,一律视为不可写)**;本技能只能**从源技能单向同步**:① 从源技能**定位相关文件**(账号设定提炼实际依赖);② **重新整理为适合本技能的流程和知识库**(按本技能自有体系组织,**不复刻源技能目录结构**)。源技能为权威源;本技能 `references/知识库/账号设定/`(账号设定专用)与 `references/知识库/视频拆解/`(账号数据分析专用,23文件)为重组后的自有知识库,②用户环境独立使用。 |
| 部署场景修改规则 | **仅 ② 用户环境(技能不在任何 git 检出内)适用本规则**;① 开发机(技能处于源技能 git 检出内)不适用本规则。用户环境:源技能路径不存在,标准库 `references/`(含自有知识库 `知识库/账号设定/` + `知识库/视频拆解/`)**永远不变**。用户新增/修改内容统一写入 `references-add/` 增量库,**目录结构与标准库镜像对齐**:`feature/`(功能级增量,按 `01_获取账号信息/02_获取视频/03_提炼账号设定/04_分析视频数据` 命名,对应标准库 `references/feature/`)、`知识库/`(方法论增量)、`铁律避坑规则/`(铁律与避坑)。运行时 `references/` + `references-add/` 取并集、标准库优先。**功能禁用判定 = 标准库与增量库中该功能文件都不存在**(只删标准库、增量库仍有时功能仍启用)。产出路径以 `references/路径配置.md` 为准(①开发机并入标准库;② 用户环境迁移回 `references-add/` 见其 README)。详见 `references-add/README.md`。 |
| 技能边界(红线) | 本技能是**账号分析技能**,产出止步于账号分析侧交付物:达人账号表更新(功能一)、短视频数据表格(功能二)、账号设定人设卡(功能三)、账号数据分析报告(功能四)、视频解析产物(功能五)。凡需**生成或改写脚本**(含「基于账号设定替换事件重写」等轻量场景),**必须切换到「短视频工作台」技能走 S1-S11 全流程**(含 S11 脚本检查和诊断:数字账取证、开场钩子铁律、编导终审验收),**禁止在本技能会话内直接手写脚本交付**。 |
---
@@ -79,7 +79,7 @@ description: "MCN 达人爆款视频解析与人设卡生成技能:达人账
| 技能 | 路径 |
|------|------|
| 脚本创作技能(权威源) | `{源技能目录}`(**三环境判定**:① 开发机 = 本机有 `D:\AgentSkill` 且技能在 `D:\AgentSkill\` 下;② dsh 环境 = 本机有 `D:\AgentSkill` 且技能路径含 `.dsh`;③ 用户环境 = 本机没有 `D:\AgentSkill`(源技能不存在)。当前机器源技能路径 `D:/AgentSkill/mcn-video-script/project/短视频脚本创作/V1.0`;生成设定/分析数据时调用此源;**只读,禁止修改,只能从源技能同步到本技能**;本技能 `references/知识库/` 为账号设定 + 账号数据分析两个专用重组库,按两步法同步,不复刻源技能目录结构) |
| 脚本创作技能(权威源) | `{源技能目录}`(**两环境判定(仓库特征判定)**:看技能是否处于源技能 git 检出内(`git -C {技能目录} rev-parse --show-toplevel`)——在 = ① 开发机、不在 = ② 用户环境(源技能不存在)。**`{源技能目录}` 定位**:本技能内嵌部署时 = 本技能所在技能树的根(即本技能目录上两级,该目录中同时含 `SKILL.md` 与 `subskills/`);独立部署时按上述判定在 ① 环境中定位。生成设定/分析数据时调用此源;**只读,禁止修改,只能从源技能同步到本技能**;本技能 `references/知识库/` 为账号设定 + 账号数据分析两个专用重组库,按两步法同步,不复刻源技能目录结构) |
| 女娲造人术(nuwa-skill) | `subskills/nuwa-skill-main/`(已内嵌,无需跨 skill 调用) |
| 人设卡生成方法 | `references/人设卡生成方法.md`(账号类型判定+模板结构+深度分析,已吸收V2.0模板核心;综合人设卡统一12段结构,独立可执行) |
| 账号设定知识库(自有) | `references/知识库/账号设定/`(功能三人设选项+IP体系+对话风格9法) |
@@ -92,7 +92,7 @@ description: "MCN 达人爆款视频解析与人设卡生成技能:达人账
| 功能六流程 | `references/feature/06_生成账号设定卡片.md`(生成账号设定卡片五步执行:读设定→读模板样例→模块映射→SVG手绘→验证交付) |
| 账号设定卡模板样例 | `references/样例/`(最佳成品模板:`模板_旧梦留声机账号设定卡.svg` + 渲染参考 `参考_旧梦留声机_账号设定卡_长图版.png`;新账号复用版式骨架与样式常量,内容全替换) |
| 产出路径配置 | `references/路径配置.md`(🔴 产出路径唯一权威配置:用户自定义路径最高优先,默认桌面 `账号分析/` 兜底) |
| 增量库(references-add) | `references-add/`(③ 用户环境场景的增量库机制;当前①开发机/②dsh环境状态仅保留 README 机制说明,原增量已并入标准库:`references/路径配置.md` + `references/铁律避坑规则/`(含功能三`账号设定执行避坑.md` + 功能四`账号数据分析执行避坑.md`)) |
| 增量库(references-add) | `references-add/`(② 用户环境场景的增量库机制;当前 ①开发机 状态仅保留 README 机制说明,原增量已并入标准库:`references/路径配置.md` + `references/铁律避坑规则/`(含功能三`账号设定执行避坑.md` + 功能四`账号数据分析执行避坑.md`)) |
### 2.3 MCP 工具(myai-mcp-production)
@@ -1,19 +1,19 @@
# references-add(增量库)—— 机制说明
> **三环境判定(两步判定,与 SKILL.md 一致)**:第一步查本机是否存在 `D:\AgentSkill`——**无 = ③ 用户环境**(技能无论装在哪、什么路径);有 → 第二步看技能路径——**在 `D:\AgentSkill\` 下 = ① 开发机(源技能)**、**含 `.dsh` = ② dsh 部署环境**(如 `{主目录}/.dsh/skills/`)。
> **两环境判定(一步判定 · 仓库特征判定,与 SKILL.md 一致)**:判断技能是否**处于源技能 git 检出内**(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根)——**在 = ① 开发机(源技能)**、**不在 = ② 用户环境**(技能无论装在哪、什么路径)。
>
> **references-add 机制只服务 ③ 用户环境**:① 开发机 / ② dsh 环境标准库 `references/` 可正常修改(新增内容直接并入标准库对应位置),本目录可仅保留本说明(机制文档);③ 用户环境部署后标准库 `references/` **永远不变**,新增/修改内容统一写入本目录。
> **references-add 机制只服务 ② 用户环境**:① 开发机标准库 `references/` 可正常修改(新增内容直接并入标准库对应位置),本目录可仅保留本说明(机制文档);② 用户环境部署后标准库 `references/` **永远不变**,新增/修改内容统一写入本目录。
## 用途
当本技能(MCNDouAnalysis)被部署到**③ 用户环境**(本机没有 `D:\AgentSkill`)时,本技能的标准库 `references/`(含自有知识库 `知识库/账号设定/` + `知识库/视频拆解/`)在部署后**永远不变**。用户在使用过程中新增/修改的流程、方法论、分析方式、铁律等内容,统一整理到本文件夹。
当本技能(MCNDouAnalysis)被部署到**② 用户环境**(技能不在任何 git 检出内)时,本技能的标准库 `references/`(含自有知识库 `知识库/账号设定/` + `知识库/视频拆解/`)在部署后**永远不变**。用户在使用过程中新增/修改的流程、方法论、分析方式、铁律等内容,统一整理到本文件夹。
## 核心原则
| 目录 | 定位 | 内容来源 | 修改策略 |
|:---:|------|------|------|
| `references/` | 原始标准库(内置) | 开发时固化(含从源技能按两步法重组的账号设定知识库 + 视频拆解知识库) | **部署后永远不变** |
| `references-add/` | 动态增量库 | ③ 用户环境中用户对话中积累 | 随使用持续增长 |
| `references-add/` | 动态增量库 | ② 用户环境中用户对话中积累 | 随使用持续增长 |
## 目录结构
@@ -57,14 +57,13 @@ references/(标准库) + references-add/(增量库) → 取并集
## 修改规则(区分场景,判定标准与 SKILL.md 一致)
| 场景 | 判断依据(两步判定) | 生成设定调用的文件 | 修改方式 |
| 场景 | 判断依据(一步判定:看是否处于源技能 git 检出内) | 生成设定调用的文件 | 修改方式 |
|------|---------|------------------------|---------|
| **① 开发机** | 本机有 `D:\AgentSkill` 且技能路径在 `D:\AgentSkill\` 下(源技能) | 调用源技能对应文件 | **源技能只读,禁止修改**;只能从源技能**单向同步**到本技能:按两步法(① 从源技能定位相关文件 → ② 重组为本技能自有流程/知识库)同步到 `references/知识库/`;标准库 `references/` 可正常修改(开发机直接改标准库,不使用增量库机制) |
| **② dsh 环境** | 本机有 `D:\AgentSkill` 且技能路径含 `.dsh`(如 `{主目录}/.dsh/skills/`) | 调用源技能对应文件 | **源技能只读,禁止修改**;只能从源技能**单向同步**到本技能:按两步法(① 从源技能定位相关文件 → ② 重组为本技能自有流程/知识库)同步到 `references/知识库/`;标准库 `references/` 可正常修改,增量内容直接并入标准库对应位置 |
| **③ 用户环境** | 本机**没有** `D:\AgentSkill`(技能装在哪、什么路径都是用户环境) | 调用本技能 `references/`(标准库,含账号设定 + 视频拆解自有知识库) | **不修改 `references/`**,新增/修改内容写入 `references-add/` 对应目录 |
| **① 开发机** | 技能**处于源技能 git 检出内**(源技能) | 调用源技能对应文件 | **源技能只读,禁止修改**;只能从源技能**单向同步**到本技能:按两步法(① 从源技能定位相关文件 → ② 重组为本技能自有流程/知识库)同步到 `references/知识库/`;标准库 `references/` 可正常修改(开发机直接改标准库,不使用增量库机制) |
| **② 用户环境** | 技能**不在任何 git 检出内**(技能装在哪、什么路径都是用户环境) | 调用本技能 `references/`(标准库,含账号设定 + 视频拆解自有知识库) | **不修改 `references/`**,新增/修改内容写入 `references-add/` 对应目录 |
## ③ 用户环境启用流程(如未来部署)
## ② 用户环境启用流程(如未来部署)
1. 把 `references/路径配置.md`、`references/铁律避坑规则/` 移回 `references-add/` 对应位置
2. 删除标准库中③ 用户环境不需要的增量内容
2. 删除标准库中② 用户环境不需要的增量内容
3. 按本文件「修改规则」维护增量库
@@ -13,7 +13,7 @@
### Step 1.0 账号表登记(前置)
先检查数据目录的 `达人账号表.xlsx`(**外部数据文件,不入技能包**,位置见 SKILL.md 红线「达人账号表.xlsx」行;**表缺失时先按 15 列结构现场新建**),输入信息中的账号若不在表中,先添加到表:**只占位 账号ID(自增)+ 达人昵称**;抖音号/抖音ID(sec_uid)/抖音地址等身份标识字段**留空,待浏览器抓取后回填**(浏览器抓取到的值才写,存文本格式防科学计数法),其余字段(粉丝数/解析状态/更新时间等)同样留空待补。**禁止从工作台库(`mcn-plugin.db` 的 `hot_accounts` 表 = MCP 内部账号库本地副本)/ dsh 原库 / MCP 内部账号库读取任何字段填表**——身份标识也一样,一律浏览器抓取(红线见 SKILL.md「账号信息数据源」)。再继续获取数据。
先检查数据目录的 `达人账号表.xlsx`(**外部数据文件,不入技能包**,位置见 SKILL.md 红线「达人账号表.xlsx」行;**表缺失时先按 15 列结构现场新建**),输入信息中的账号若不在表中,先添加到表:**只占位 账号ID(自增)+ 达人昵称**;抖音号/抖音ID(sec_uid)/抖音地址等身份标识字段**留空,待浏览器抓取后回填**(浏览器抓取到的值才写,存文本格式防科学计数法),其余字段(粉丝数/解析状态/更新时间等)同样留空待补。**禁止从工作台库(`mcn-plugin.db` 的 `hot_accounts` 表 = MCP 内部账号库本地副本)/ MCP 内部账号库读取任何字段填表**——身份标识也一样,一律浏览器抓取(红线见 SKILL.md「账号信息数据源」)。再继续获取数据。
### 浏览器搜索抖音账号ID
@@ -77,7 +77,7 @@ id = "{detailId}"
> 完整方法见 `references/人设卡生成方法.md`(账号类型判定 + 三种模板结构 + 女娲造人术深度分析 + 综合人设卡结构)
**必须使用两个技能库综合生成,缺一不可:**
- 脚本创作技能 → 源技能 `{源技能目录}/references/`(结构骨架,调用 `创作流程/4_账号设定解析和确认.md` + `创作流程/3_对标视频账号拆解.md` + `知识库/01_账号设定/` + `知识库/08_对话风格/`;①开发机/②dsh环境优先调用源技能。V2.0 模板核心已吸收进 `references/人设卡生成方法.md`,③用户环境独立使用;选项体系在 `references/知识库/账号设定/`)
- 脚本创作技能 → 源技能 `{源技能目录}/references/`(结构骨架,调用 `创作流程/4_账号设定解析和确认.md` + `创作流程/3_对标视频账号拆解.md` + `知识库/01_账号设定/` + `知识库/08_对话风格/`;①开发机优先调用源技能。V2.0 模板核心已吸收进 `references/人设卡生成方法.md`,②用户环境独立使用;选项体系在 `references/知识库/账号设定/`)
- 女娲造人术 → `subskills/nuwa-skill-main/`(深度分析方法)
**人设卡统一 12 段结构**:账号核心定位 → 账号内容基因 → 类型库(按账号类型适配)→ 情绪结构 → 视听风格 → 内容打法 → 内容规则 → 系列内容规划 → 差异化壁垒 → 红线清单 → 当前需解决的问题 → 设定分析说明。**人设卡聚焦内容创作本身(含差异化壁垒的内容侧"为什么别人做不了"),不含商业化变现路径分析**(商业化/市场分析归功能四账号数据分析)。
@@ -35,7 +35,7 @@
2. 按发布时间过滤近4个月
3. 按月份分组,每月取最好1条 + 最差1条
4. 补齐 MCP 解析:入选视频无解析的先提交解析(`upload_douyin_video` → 等待 → `short_video_detail`)
5. **逐条拆解(重度调用源技能 + 自有拆解知识库)**:按 `references/账号数据分析方法.md` 3.0 对每条入选视频完整拆解(调用源技能 `{源技能目录}/references/` 的拆解知识库,见《账号数据分析方法.md》3.0 源技能依赖表;**本技能自有拆解知识库 `references/知识库/视频拆解/`(23文件)③用户环境独立运行**,无源技能时以自有知识库为准),拆解分析保存到各视频自己的文件夹(`视频分析/{视频文件夹}/{视频标题}_拆解分析.md`)
5. **逐条拆解(重度调用源技能 + 自有拆解知识库)**:按 `references/账号数据分析方法.md` 3.0 对每条入选视频完整拆解(调用源技能 `{源技能目录}/references/` 的拆解知识库,见《账号数据分析方法.md》3.0 源技能依赖表;**本技能自有拆解知识库 `references/知识库/视频拆解/`(23文件)②用户环境独立运行**,无源技能时以自有知识库为准),拆解分析保存到各视频自己的文件夹(`视频分析/{视频文件夹}/{视频标题}_拆解分析.md`)
6. **汇总分析**:拆解全部完成后,结合拆解文件 + 表格数据,按 3.1-3.6 维度逐项分析(月度趋势/爆款共性/低表现共性/内容要素关联/差异化壁垒/商业化空间);报告内容层结论必须回溯到拆解文件
7. 产出 `{达人昵称}账号数据分析.md`
@@ -59,7 +59,7 @@
| 文件 | 用途 |
|------|------|
| `references/账号数据分析方法.md` | 完整方法(六维分析维度/报告8章结构/13条报告质量自查红线) |
| `references/知识库/视频拆解/` | 功能四拆解知识库(23文件:开场/框架/情绪/钩子/植入/拆解,③用户环境独立运行) |
| `references/知识库/视频拆解/` | 功能四拆解知识库(23文件:开场/框架/情绪/钩子/植入/拆解,②用户环境独立运行) |
| `references/解析结果格式规范.md` | 目录结构权威源 |
| `references/接口调用/MCP_工具调用规范.md` | MCP 安装/登录/降级规范(Step 7 补解析 + 拆解降级) |
| `references/铁律避坑规则/账号数据分析执行避坑.md` | 功能四执行避坑(14个问题按工具/数据/流程/分析四类归档) |
@@ -47,7 +47,7 @@
| 6 | 参考某账号样式 | 用户指定「像 XX 那样做」 | 读被参考账号的卡片做样式参考(版式+底色跟该账号风格),内容仍用本账号设定 |
| 7 | 调整已有卡片 | 用户说改现有卡片的某处 | **直接改 SVG 文件**(单点修改,不重走功能三/全流程) |
**环境路径**:① 开发机 / ③ 用户环境 = `桌面/MCNSkill项目/{账号名}/`;② dsh 环境 = `D:\dshworkspace\解析任务\{达人昵称}/`(以 `references/路径配置.md` 为唯一权威)。
**环境路径**:开发机与用户环境**同构** = `桌面/MCNSkill项目/{账号名}/`(**无 dsh 分支**,以 `references/路径配置.md` 为唯一权威)。
**双向联动维护(修改时两边一起修改)**:
- 设定 md 与设定卡 = **同一账号信息的两种载体**,任一边修改,另一边必须同步:
@@ -17,8 +17,8 @@
| 环境 | 判定条件 | 安装内容 |
|------|---------|---------|
| **开发环境** | 本机存在 `D:\AgentSkill` 且 Skill 根目录路径在 `D:\AgentSkill\` 下(源技能仓库) | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **非开发环境** | 部署到其他路径(组员机器、服务器) | 只装 `myai-mcp-production`(正式),不装测试环境 |
| **开发环境** | Skill 根目录**处于源技能 git 检出内**(源技能仓库,`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根) | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **非开发环境** | 部署到其他路径(组员机器、服务器;不在任何 git 检出内) | 只装 `myai-mcp-production`(正式),不装测试环境 |
---
@@ -156,7 +156,7 @@
## 五、browser-harness 调用方式(环境 SOP)
> **环境说明(2026-09-02 调整)**:browser-harness 由 uv 工具安装,可执行文件位置**按系统区分**——Windows:`~/.local/bin/browser-harness.exe`;macOS/Linux:`~/.local/bin/browser-harness`;**技能本体位置(09-02 起)**——主技能 `短视频工作台/subskills/browser-harness/`(源仓库:`project/短视频脚本创作/V1.0/subskills/browser-harness/`,含 `envs/browser-harness/` 环境与 `src/`;**不再挂在 mcn-dou-analysis 下**);dsh 部署环境 `~/.dsh/skills/browser-harness/`(随 dsh_MCNProject 仓库分发,换机器自带)。
> **环境说明(2026-09-02 调整)**:browser-harness 由 uv 工具安装,可执行文件位置**按系统区分**——Windows:`~/.local/bin/browser-harness.exe`;macOS/Linux:`~/.local/bin/browser-harness`;**技能本体位置(09-02 起)**——主技能 `短视频工作台/subskills/browser-harness/`(源仓库:`project/短视频脚本创作/V1.0/subskills/browser-harness/`,含 `envs/browser-harness/` 环境与 `src/`;**不再挂在 mcn-dou-analysis 下**;**09-10 起无 dsh 部署环境**)。
### 5.0 环境检查与安装(每次浏览器任务前【必做】)
@@ -172,7 +172,7 @@
- **可跳过**:改用三方数据 API / MCP 兜底数据源,但功能一/二浏览器抓取无法执行
- **同意安装**:`uv tool install --python 3.12 --upgrade --force browser-harness`(`--python 3.12` 防止选中过旧版本;`--upgrade --force` 覆盖旧安装)
- **技能本体**:源仓库 `project/短视频脚本创作/V1.0/subskills/browser-harness/`(主技能 `短视频工作台/subskills/browser-harness/`);dsh 部署环境 `~/.dsh/skills/browser-harness/`(随 dsh_MCNProject 仓库分发;如缺失可从 browser-harness 仓库的 `browser-harness skill` 命令重新生成)
- **技能本体**:源仓库 `project/短视频脚本创作/V1.0/subskills/browser-harness/`(主技能 `短视频工作台/subskills/browser-harness/`;**09-10 起无 dsh 部署环境**;如缺失可从 browser-harness 仓库的 `browser-harness skill` 命令重新生成)
- **安装后验证**:`command -v browser-harness`(macOS/Linux)/ `where browser-harness`(Windows)有输出 + `browser-harness doctor` 三要素全绿,再进入下方 5.1 环境准备
### 5.1 环境准备(每次浏览器任务前【必做】)
@@ -262,30 +262,33 @@ PY
**锁规则(每个需要浏览器的任务必须遵守)**:
1. **锁文件**:`D:\AgentSkill\mcn-workshop\.browser-lock`(工作台 `/api/run` 对浏览器类任务已自动注入本约束到 prompt,AI 会话执行时遵守即可)
1. **锁文件位置**:**工作台目录下的 `.browser-lock`**(工作台目录 = 本技能根下的 `mcn-work-shop/`)。工作台 `/api/run` 对浏览器类任务会把**运行时解析出的绝对路径**注入 prompt,AI 会话执行时**以注入的路径为准**;此处不写死盘符。
- 工作台触发的会话 cwd 即**工作台目录**,故可直接用相对路径 `.browser-lock`(推荐,跨机器可迁移)
- 手工执行(cwd 不是工作台目录)时,先定位工作台目录再拼 `.browser-lock`
2. **操作前**:检查锁文件是否存在(`ls`)→ 存在则等 10 秒重试(最多 18 次 ≈ 3 分钟)
3. **死锁保护**:锁文件修改时间超过 10 分钟 → 视为死锁,可删除后抢占
4. **拿锁**:`echo "<任务名> <时间戳>" > D:\AgentSkill\mcn-workshop\.browser-lock` → 才操作浏览器
5. **释放**:浏览器操作全部完成后(无论成败)`rm -f D:\AgentSkill\mcn-workshop\.browser-lock`
4. **拿锁**:`echo "<任务名> <时间戳>" > .browser-lock` → 才操作浏览器
5. **释放**:浏览器操作全部完成后(无论成败)`rm -f .browser-lock`
6. **串行协调**:多个任务抢锁 = 先到先用;拿到锁的任务完成后释放,下一个任务继续;标签页复用规则(5.5)仅在自己持有锁期间适用
```bash
# 前置:确认当前目录就是工作台目录(目录内含 .browser-lock 与 server.js)
# 拿锁(互斥,带重试)
for i in $(seq 1 18); do
if [ ! -f "D:/AgentSkill/mcn-workshop/.browser-lock" ]; then
echo "$(date '+%H:%M:%S') ${任务名}" > "D:/AgentSkill/mcn-workshop/.browser-lock"
if [ ! -f ".browser-lock" ]; then
echo "$(date '+%H:%M:%S') ${任务名}" > ".browser-lock"
break
fi
# 死锁保护:锁超过 10 分钟强制抢占
if [ -f "D:/AgentSkill/mcn-workshop/.browser-lock" ] && [ $(($(date +%s) - $(stat -c %Y "D:/AgentSkill/mcn-workshop/.browser-lock" 2>/dev/null || echo 0))) -gt 600 ]; then
rm -f "D:/AgentSkill/mcn-workshop/.browser-lock"
if [ -f ".browser-lock" ] && [ $(($(date +%s) - $(stat -c %Y ".browser-lock" 2>/dev/null || echo 0))) -gt 600 ]; then
rm -f ".browser-lock"
continue
fi
sleep 10
done
# ... 浏览器操作 ...
# 释放锁(无论成败)
rm -f "D:/AgentSkill/mcn-workshop/.browser-lock"
rm -f ".browser-lock"
```
```bash
@@ -1,6 +1,6 @@
# 路径引用规范(相对路径铁律,P0)
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / 用户环境** 两种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
## 一、铁律(3 条)
@@ -18,12 +18,12 @@
| `__file__` 动态推导 | `BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))` | 脚本定位技能根,跨环境可迁移 |
| 环境变量 | `os.getenv("REDFOX_API_KEY")`、`MCN_RANKING_DIR` | 值由外部注入 |
| URL | `https://github.com/...` | 外部资源 |
| 环境判别锚点 | 「本机是否存在 `D:\AgentSkill`」「技能路径是否含 `.dsh`」 | 仅作**是否存在/是否包含**的判定条件,**禁止**将其作为实际读写路径 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/`、`D:\dshworkspace\创作任务\` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
| 环境判别锚点 | 「技能目录是否处于 git 检出内」 | 仅作**是否存在**的判定条件,**禁止**将其作为实际读写路径;锚点必须用**仓库特征**(git 检出),禁止用写死盘符 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
## 三、禁令项(这些绝对禁止)
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\MyRepo\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。
- **越级引用**:`../../..` 跳出技能根指向包外文件。
- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。
@@ -34,7 +34,7 @@
| 场景 | 说明 |
|------|------|
| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 git 检出特征是**规则内容**不是引用,保留 |
| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) |
| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 |
| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 |
@@ -50,16 +50,16 @@
### 3.0 逐条拆解(汇总前必做)
**重度调用源技能 + 本技能自有拆解知识库**(源技能为权威源,仅①开发机/②dsh环境存在;本技能自有知识库③用户环境独立运行):
**重度调用源技能 + 本技能自有拆解知识库**(源技能为权威源,仅①开发机存在;本技能自有知识库②用户环境独立运行):
| 源技能文件(权威源,路径相对 `{源技能目录}/references/`,仅①开发机/②dsh环境存在) | 用于 |
| 源技能文件(权威源,路径相对 `{源技能目录}/references/`,仅①开发机存在) | 用于 |
|-----------|------|
| `创作流程/3_对标视频账号拆解.md` | 拆解主流程:逐条视频按拆解步骤完整过一遍 |
| `知识库/12_爆款拆解/爆款文案反推工作流_13字段标准化拆解.md` | 逐条标准化拆解字段(选题/钩子/框架/情绪/结尾等) |
| `知识库/11_广告植入/广告植入方法论.md` | 带品牌视频的植入方式评估(五种植入方式/黄金位/口播花字分工/卖点分层/自然度) |
| `知识库/03_框架节奏` `04_爆款开场` `06_剧情钩子` `07_情绪共鸣` | 拆解各内容维度时的评判标准 |
> **本技能自有拆解知识库 `references/知识库/视频拆解/`(23文件)**:与上表源技能文件对应(两步法重组为本技能自有体系),③用户环境无源技能时以自有知识库为准拆解,深度不受限。拆解时源技能(①开发机/②dsh环境)与自有知识库取并集、源技能优先。
> **本技能自有拆解知识库 `references/知识库/视频拆解/`(23文件)**:与上表源技能文件对应(两步法重组为本技能自有体系),②用户环境无源技能时以自有知识库为准拆解,深度不受限。拆解时源技能(①开发机)与自有知识库取并集、源技能优先。
> **五维诊断模型说明**:单条视频数据表现诊断沿用五维模型(传播力/留存力/互动力/转化力/内容力),维度定义见本方法论 四(报告结构·二)(不依赖源技能文件——源技能 V2.0 已删除独立五维模型文件,数据诊断标准以本方法论为准)。
@@ -129,7 +129,7 @@
### 3.6 商业化空间分析
> 原"人设卡"中的广告植入相关内容移至此处。
> **植入方式分析必须参考《广告植入方法论》**(源技能 `知识库/11_广告植入/广告植入方法论.md`,本技能自有 `references/知识库/视频拆解/植入01_广告植入方法.md` ③用户环境独立使用):用「五种植入方式(口播/画面/情节/场景/体验)+ 植入黄金位(四段式)+ 口播花字分工 + 卖点分层 + 自然度评估」评估植入好坏,禁止只用"硬广/软广"浅标签。
> **植入方式分析必须参考《广告植入方法论》**(源技能 `知识库/11_广告植入/广告植入方法论.md`,本技能自有 `references/知识库/视频拆解/植入01_广告植入方法.md` ②用户环境独立使用):用「五种植入方式(口播/画面/情节/场景/体验)+ 植入黄金位(四段式)+ 口播花字分工 + 卖点分层 + 自然度评估」评估植入好坏,禁止只用"硬广/软广"浅标签。
> **已验证的「好的植入」范式**(示例数据仅作方法说明,不代表当前分析账号):「痛点场景化口播 + 剧情道具回收」——口播嵌在剧情痛点场景(如约会/形象焦虑类痛点)而非中段打断情绪,产品梗提前埋设、剧情结尾回收。对标案例:该类植入视频点赞 80万+(示例账号近4个月 TOP1/2)。
- 当前是否有广告植入
@@ -5,13 +5,14 @@
## 一、默认路径(用户未自定义时生效)
**先判断运行环境(三环境两步判定),再按运行系统解析桌面路径:**
**先判断运行环境(两环境判定 · 仓库特征判定,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项目/`(与开发机同构) |
> **09-10 起 dsh 部署环境已废弃**(`~/.dsh/skills/` 与 `D:\dshworkspace` 均不存在)——不再有 dsh 分支与 `D:\dshworkspace\解析任务\` 产出路径。历史条目见文末「变更记录」。
桌面路径按运行系统自动解析:
@@ -21,7 +22,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`,返回仓库根即 **① 开发机**;命令失败即 **② 用户环境**。无 git 环境时兜底:从技能目录向上逐级查找,任一级存在 `.git` 目录/文件即开发机,查到盘符根仍未命中即用户环境
- 开发机与用户环境产出**同构** → 桌面 `MCNSkill项目/{达人昵称}/`
- ⚠️ **不存在 dsh 分支**:dsh 侧已整套下线(09-10),不要再按 `.dsh` 路径段或 `D:\dshworkspace` 做任何分支判断
2. 再判断当前运行系统(Windows / macOS),拼接桌面路径
3. 目录不存在则自动创建
4. 产出结构:`{产出根目录}/{达人昵称}/…`(内部文件结构不变,仅根目录可变)
@@ -49,7 +53,7 @@
## 三、解析规则(优先级从高到低)
1. 本文件「用户自定义路径」记录 → 用自定义路径(最新一条生效)
2. 本文件默认路径 → 按三环境两步判定确定产出根目录(本机无 `D:\AgentSkill` → 桌面 `MCNSkill项目/`;有且技能路径含 `.dsh` → `D:\dshworkspace\解析任务\`;有且不含 `.dsh` → 桌面 `MCNSkill项目/`),再按系统拼接桌面路径
2. 本文件默认路径 → 按两环境判定确定产出根目录(在源技能 git 检出内 = 开发机 → 桌面 `MCNSkill项目/`;不在任何 git 检出内 = 用户环境 → 桌面 `MCNSkill项目/`。**两者同构**,均无 dsh 分支),再按系统拼接桌面路径
3. 路径含 `~` 时自动展开为用户主目录
4. 路径含 `{用户名}` 时替换为当前系统用户名
5. 目录不存在时自动创建
@@ -58,3 +62,5 @@
- 2026-08-26:产出路径改为三级优先级(借鉴脚本创作技能):① dsh 环境 + 主工作区 `D:\dshworkspace` 存在 → `D:\dshworkspace\解析任务\`;② dsh 环境但无主工作区(异机部署)→ 桌面 `DSHSkill项目/账号分析/`;③ 非 dsh → 桌面 `MCNSkill项目/账号分析/`。产出结构 `{达人昵称}/…` 不变。
- 2026-08-26(三环境重构 + 账号层直挂,对齐脚本创作技能定稿):环境判定由「dsh vs 非 dsh」改为**三环境两步判定**(①本机无 `D:\AgentSkill`=用户环境;②有且技能路径含 `.dsh`=dsh 部署环境;③有且不含 `.dsh`=开发机);`DSHSkill项目/` 根目录**整体废弃**(原「dsh 异机兜底」场景并入用户环境);非 dsh 产出根目录由 `MCNSkill项目/账号分析/` 改为 `MCNSkill项目/`——去掉技能文件夹层,`{达人昵称}/` 直挂(与脚本创作 `MCNSkill项目/{账号名}/` 同根);dsh 部署环境产出 `D:\dshworkspace\解析任务\` 不变。产出结构 `{达人昵称}/…` 不变。
- 2026-09-10(判定锚点重构 v2 · 仓库特征判定):环境判定锚点由「本机是否存在 `D:\AgentSkill`」改为**仓库特征判定**——第一步查技能路径是否含 `.dsh`(含 = dsh 部署环境),第二步用 `git -C {技能目录} rev-parse --show-toplevel` 判断技能是否处于源技能 git 检出内(在 = 开发机,不在 = 用户环境;无 git 时兜底为向上逐级查找 `.git`)。产出根目录三环境结果**完全不变**,仅判定依据改变。**根因**:仓库本地路径迁移导致写死盘符锚点失效 → 开发机被误判为「用户环境」。(用户确认:"改为仓库特征判定";对齐脚本创作技能定稿)
- 2026-09-10(环境模型精简 v3 · 三环境 → 两环境):**dsh 部署环境整体废弃**(用户确认:"第一步 技能路径含 .dsh 路径段 ② dsh 部署环境 没有这个环境了")。实测依据:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 下仅剩 `profiles/`、`D:\dshworkspace` 整个目录不存在。故删除 `.dsh` 判定分支与 `D:\dshworkspace\解析任务\` 产出路径,判定简化为**一步**。剩余两环境产出本就同构(桌面 `MCNSkill项目/`),产出结果不变。(对齐脚本创作技能定稿)
@@ -29,6 +29,6 @@
| 数据 | 允许来源 | 禁止来源 |
|------|---------|---------|
| 账号身份标识(抖音号/sec_uid/抖音地址) | **浏览器抓取**(browser-harness 访问抖音主页) | 工作台库 `mcn-plugin.db`(hot_accounts 表 = MCP 内部账号库本地副本)、dsh 原库、MCP `list_hot_accounts`/`hot_account_detail` |
| 账号身份标识(抖音号/sec_uid/抖音地址) | **浏览器抓取**(browser-harness 访问抖音主页) | 工作台库 `mcn-plugin.db`(hot_accounts 表 = MCP 内部账号库本地副本)、MCP `list_hot_accounts`/`hot_account_detail` |
| 账号统计数据(粉丝/获赞/关注/作品/IP/简介) | **浏览器抓取**(网页实时值) | 同上(MCP 兜底仅限浏览器无法访问时,须注明来源) |
| 流程状态参考(是否已解析/已生成) | 工作台库/dsh 库**只读参考** | ——(只用于判断,不回填账号表) |
| 流程状态参考(是否已解析/已生成) | 工作台库**只读参考** | ——(只用于判断,不回填账号表) |
@@ -1,6 +1,6 @@
# 路径引用规范(相对路径铁律,P0)
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / 用户环境** 两种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
## 一、铁律(3 条)
@@ -18,12 +18,12 @@
| `__file__` 动态推导 | `BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))` | 脚本定位技能根,跨环境可迁移 |
| 环境变量 | `os.getenv("REDFOX_API_KEY")`、`MCN_RANKING_DIR` | 值由外部注入 |
| URL | `https://github.com/...` | 外部资源 |
| 环境判别锚点 | 「本机是否存在 `D:\AgentSkill`」「技能路径是否含 `.dsh`」 | 仅作**是否存在/是否包含**的判定条件,**禁止**将其作为实际读写路径 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/`、`D:\dshworkspace\创作任务\` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
| 环境判别锚点 | 「技能目录是否处于 git 检出内」 | 仅作**是否存在**的判定条件,**禁止**将其作为实际读写路径;锚点必须用**仓库特征**(git 检出),禁止用写死盘符 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
## 三、禁令项(这些绝对禁止)
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\MyRepo\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。
- **越级引用**:`../../..` 跳出技能根指向包外文件。
- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。
@@ -34,7 +34,7 @@
| 场景 | 说明 |
|------|------|
| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 git 检出特征是**规则内容**不是引用,保留 |
| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) |
| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 |
| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 |
@@ -499,11 +499,11 @@ F4 输出 = 主题 + 导演阐述 + 完整提示词(代码块包裹)。多
### 二、过程产物目录(产出落盘位置)
> **⛔ 产出路径唯一权威:`references-add/路径配置.md`**。执行分镜创作前必须先读该文件;用户自定义路径优先。默认路径按运行环境判定(两步:第一步查本机 `D:\AgentSkill` 是否存在——**无 = ③用户环境**(技能无论装在哪、什么路径);有 → 第二步看技能自身路径——**在 `D:\AgentSkill\` 下 = ①开发机**、**含 `.dsh` = ②dsh 环境**):dsh 环境**优先操作主工作区** `D:\dshworkspace\创作任务\`(与脚本创作技能同根同构),无主工作区时并入用户环境;开发机/用户环境为**用户桌面 `MCNSkill项目/`**(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构,Windows/macOS 自动适配)。按账号名/提示词编号建子目录(编号默认继承上游脚本编号)。
> **⛔ 产出路径唯一权威:`references-add/路径配置.md`**。执行分镜创作前必须先读该文件;用户自定义路径优先。默认路径按运行环境判定(一步 · **仓库特征判定**:看技能是否处于源技能 git 检出内(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根)——**在 = ①开发机**、**不在 = ②用户环境**(技能无论装在哪、什么路径)):开发机与用户环境**同构**,均为**用户桌面 `MCNSkill项目/`**(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构,Windows/macOS 自动适配)。**09-10 起无 dsh 环境**(`~/.dsh/skills/` 与 `D:\dshworkspace` 均不存在),不再有 dsh 分支。按账号名/提示词编号建子目录(编号默认继承上游脚本编号)。
```
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时并入用户环境)
└── {账号名}/ ← 对应账号(从上游脚本创作上下文继承,来自 references-add/路径配置.md;开发机/用户环境为 桌面 MCNSkill项目/{账号名}/,账号层直挂)
桌面 MCNSkill项目/ ← 唯一产出根目录(开发机/用户环境同构,Windows/macOS 自动适配)
└── {账号名}/ ← 对应账号(从上游脚本创作上下文继承,来自 references-add/路径配置.md;账号层直挂)
└── 提示词{编号}/ ← 与「脚本{编号}」平级(编号默认继承上游脚本编号)
├── 00_剧本分析.md ← Step 1 剧本分析(5维度)
├── 01_需求分析与路径.md ← Step 2-3 需求分析+路径分流
@@ -528,13 +528,12 @@ D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主
### 部署环境检测
根据**两步判定模型**判断当前环境(第一步查本机 `D:\AgentSkill` 是否存在;有 → 第二步看技能自身路径):
根据**一步判定模型(仓库特征判定)**判断当前环境(看技能是否处于源技能 git 检出内):
| 环境 | 判定条件 | 增量机制 | 新增内容写入位置 |
|:---:|:---|:---|:---|
| **①开发机** | 本机有 `D:\AgentSkill` 且技能路径在 `D:\AgentSkill\` 下 | 不启用 references-add/ | 直接写入 `references/` 对应子目录 |
| **②dsh 部署环境** | 本机有 `D:\AgentSkill` 且技能路径含 `.dsh` | 启用 references-add/ | 写入 `references-add/` 对应子目录,不修改 `references/` |
| **③用户环境** | 本机无 `D:\AgentSkill`(技能无论装在哪、什么路径,如 `~/.workbuddy/skills/...`) | 启用 references-add/ | 写入 `references-add/` 对应子目录,不修改 `references/` |
| **①开发机** | 技能处于源技能 git 检出内(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根) | 不启用 references-add/ | 直接写入 `references/` 对应子目录 |
| **②用户环境** | 技能不在任何 git 检出内(技能无论装在哪、什么路径,如 `~/.workbuddy/skills/...`) | 启用 references-add/ | 写入 `references-add/` 对应子目录,不修改 `references/` |
### 冲突检测与修复
@@ -7,7 +7,7 @@
```
references-add/
├── README.md ← 本文件
├── 路径配置.md ← 产出路径唯一权威(dsh 环境优先 `D:\dshworkspace\创作任务\`、无主工作区时并入用户环境;开发机/用户环境 桌面 MCNSkill项目/{账号名}/提示词{编号}/ 账号层直挂,运行时必读)
├── 路径配置.md ← 产出路径唯一权威(开发机/用户环境同构:桌面 MCNSkill项目/{账号名}/提示词{编号}/ 账号层直挂。运行时必读)
├── 制作流程/ ← 新增/变更的制作流程文件
├── 接口调用/ ← 新增的 API 接口文档与平台规范
└── 知识库/ ← 新增知识(15 维度,与 references/ 结构对应)
@@ -38,13 +38,12 @@ references-add/
### 部署环境检测
根据**两步判定模型**判断当前环境(第一步查本机 `D:\AgentSkill` 是否存在;有 → 第二步看技能自身路径):
根据**一步判定模型(仓库特征判定)**判断当前环境(看技能是否处于源技能 git 检出内):
| 环境 | 判定条件 | 增量机制 | 新增内容写入位置 |
|:---:|:---|:---|:---|
| **①开发机** | 本机有 `D:\AgentSkill` 且技能路径在 `D:\AgentSkill\` 下 | 不启用 references-add/ | `references/` 对应子目录 |
| **②dsh 部署环境** | 本机有 `D:\AgentSkill` 且技能路径含 `.dsh` | 启用 references-add/(本目录) | `references-add/` 对应子目录 |
| **③用户环境** | 本机无 `D:\AgentSkill`(技能无论装在哪、什么路径) | 启用 references-add/(本目录) | `references-add/` 对应子目录 |
| **①开发机** | 技能处于源技能 git 检出内(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根) | 不启用 references-add/ | `references/` 对应子目录 |
| **②用户环境** | 技能不在任何 git 检出内(技能无论装在哪、什么路径) | 启用 references-add/(本目录) | `references-add/` 对应子目录 |
### 冲突检测与修复
@@ -81,7 +80,7 @@ references-add/
## 运行时加载规则
**仅非开发机环境生效**(②dsh 部署环境/③用户环境,即本机无 `D:\AgentSkill` 或技能路径含 `.dsh` 时)。同时加载 `references/` 和 `references-add/` 的内容,两者冲突时**以 references-add/ 为主**:
**仅非开发机环境生效**(②用户环境,即技能不在任何 git 检出内时)。同时加载 `references/` 和 `references-add/` 的内容,两者冲突时**以 references-add/ 为主**:
| 维度 | 加载规则 |
|:---|:---|
@@ -5,13 +5,12 @@
## 一、默认路径(用户未自定义时生效)
**先判定运行环境(两步:第一步查本机 `D:\AgentSkill` 是否存在——无 = 用户环境;有 → 第二步看技能自身路径),再按运行系统解析桌面路径:**
**先判定运行环境(一步 · 仓库特征判定:看技能是否处于源技能 git 检出内),再按运行系统解析桌面路径:**
| 判定步骤 | 条件 | 环境 | 默认产出根目录 |
| 判定 | 条件 | 环境 | 默认产出根目录 |
|:---|:---|:---|:---|
| 第一步 | 本机**无** `D:\AgentSkill`(源技能仓库目录,只存在于开发机) | ③ 用户环境(技能无论装在哪、什么路径) | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
| 第二步 | 本机有 `D:\AgentSkill`,且技能路径在 `D:\AgentSkill\` 下 | ① 开发机(源技能) | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
| 第二步 | 本机有 `D:\AgentSkill`,且技能路径含 `.dsh`(如 `C:\Users\{用户名}\.dsh\skills\storyboard-prompt`) | ② dsh 部署环境 | **优先** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录);无主工作区时并入用户环境 → 桌面 `MCNSkill项目/` |
| 一步判定 | 技能**处于源技能 git 检出内**(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根) | ① 开发机(源技能) | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
| 一步判定 | 技能**不在任何 git 检出内**(技能无论装在哪、什么路径) | ② 用户环境 | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
桌面路径按运行系统自动解析:
@@ -21,7 +20,8 @@
| macOS | `~/Desktop/`(即 `/Users/{用户名}/Desktop/`) |
**AI 执行规则:**
1. 先按两步判定运行环境——第一步查本机 `D:\AgentSkill` 是否存在(**无 = ③用户环境**,技能无论装在哪、什么路径);有 → 第二步看技能自身路径(**在 `D:\AgentSkill\` 下 = ①开发机**;**含 `.dsh` = ②dsh 环境**)。再按上表确定产出根目录(dsh 环境 → **优先操作** `D:\dshworkspace\创作任务\`,主工作区 `D:\dshworkspace` 存在即用(「创作任务」子目录不存在则创建);无主工作区时并入用户环境 → 桌面 `MCNSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂**(`{账号名}/提示词{编号}/`,与脚本创作同构))
1. 先按一步判定运行环境(**仓库特征判定**)——看技能是否处于源技能 git 检出内(`git -C "{技能目录}" rev-parse --show-toplevel` 返回仓库根 = **①开发机**,命令失败 = **②用户环境**;无 git 环境时兜底为从技能目录向上逐级查找 `.git`)。再按上表确定产出根目录(开发机/用户环境**同构** → 桌面 `MCNSkill项目/`,**账号层直挂**(`{账号名}/提示词{编号}/`,与脚本创作同构))
- ⚠️ 禁止按 `.dsh` 路径段或 `D:\dshworkspace` 做任何分支判断(该部署环境已不存在)
2. 再判断当前运行系统(Windows / macOS),拼接桌面路径
3. 目录不存在则自动创建
4. 产出结构:`{产出根目录}/{账号名}/提示词{编号}/…`(内部文件结构不变,仅根目录可变)
@@ -31,9 +31,9 @@
**产出结构示例(6步流程产物):**
```
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时并入用户环境)
桌面 MCNSkill项目/ ← 唯一产出根目录(开发机 / 用户环境同构;Windows/macOS 自动适配)
└── {账号名}/ ← 对应账号(从上游脚本创作上下文继承,与脚本创作同口径)
└── 提示词{编号}/ ← 与「脚本{编号}」平级(编号默认继承上游脚本编号;开发机/用户环境为 桌面 MCNSkill项目/{账号名}/提示词{编号}/,账号层直挂)
└── 提示词{编号}/ ← 与「脚本{编号}」平级(编号默认继承上游脚本编号)
├── 00_剧本分析.md ← Step 1 剧本分析(5维度)
├── 01_需求分析与路径.md ← Step 2-3
├── 02_段1提示词.md ← Step 4(多段时 02/03/04… 递增)
@@ -58,7 +58,7 @@ D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主
## 三、解析规则(优先级从高到低)
1. 本文件「用户自定义路径」记录 → 用自定义路径(最新一条生效)
2. 本文件默认路径 → 先按两步判定运行环境(第一步查本机 `D:\AgentSkill` 是否存在:无 = ③用户环境;有 → 第二步看技能路径:在 `D:\AgentSkill\` 下 = ①开发机、含 `.dsh` = ②dsh 环境),再按上表确定产出根目录(dsh 环境 → 优先 `D:\dshworkspace\创作任务\`、无主工作区时并入用户环境 → 桌面 `MCNSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂** `{账号名}/提示词{编号}/`),再按系统拼接桌面路径
2. 本文件默认路径 → 先按一步判定运行环境(看技能是否处于源技能 git 检出内:在 = ①开发机、不在 = ②用户环境),再按上表确定产出根目录(开发机/用户环境**同构** → 桌面 `MCNSkill项目/`,**账号层直挂** `{账号名}/提示词{编号}/`),再按系统拼接桌面路径
3. 路径含 `~` 时自动展开为用户主目录
4. 路径含 `{用户名}` 时替换为当前系统用户名
5. 目录不存在时自动创建
@@ -73,3 +73,5 @@ D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主
- 2026-08-26(第四次修订,与脚本创作两级规则对齐):dsh 部署环境改为**优先操作** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录,与脚本创作技能同根;用户指定:"dsh 环境下 分镜提示词也应该在 工作区 D:\dshworkspace\创作任务\{账号名}\提示词{编号}");主工作区不存在时兜底桌面 `DSHSkill项目/`。产出结构由 `{账号名}/{视频标题}/` 改为 `{账号名}/提示词{编号}/`——与脚本创作「脚本{编号}」平级,编号默认继承上游脚本编号,独立使用时按已有最大值递增。
- 2026-08-26(第五次修订,环境判定模型修正):判定锚点由「技能路径是否含 `.dsh`」单一判断改为**两步判定**——第一步查本机 `D:\AgentSkill` 是否存在(**无 = ③用户环境**,技能无论装在哪、什么路径);有 → 第二步看技能路径(**在 `D:\AgentSkill\` 下 = ①开发机**;**含 `.dsh` = ②dsh 环境**)。修复用户环境技能装在非 `.dsh` 路径(如 `~/.workbuddy/skills/`)时被误判为开发机、可能错误直接编辑 `references/` 的漏洞(用户指定:用户环境判定锚点是「本机没有 D:\AgentSkill」,与技能装在什么路径无关)。
- 2026-08-26(第六次修订,产出结构定稿):①开发机与③用户环境产出根目录由 `桌面 MCNSkill项目/分镜提示词/` 改为 `桌面 MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,去掉「分镜提示词」技能文件夹层,与脚本创作「脚本{编号}」同构;用户指定:"定稿产出结构:桌面\MCNSkill项目\{账号名}\{脚本文件夹}\(①开发机与③用户环境同构,账号层直挂);② dsh 部署环境不变 D:\dshworkspace\创作任务\{账号名}\脚本{编号}\")。dsh 环境产出不变。
- 2026-09-10(第七次修订,判定锚点重构 v2 · 仓库特征判定):环境判定锚点由「本机是否存在 `D:\AgentSkill`」改为**仓库特征判定**——第一步查技能路径是否含 `.dsh` 路径段(含 = dsh 部署环境),第二步用 `git -C {技能目录} rev-parse --show-toplevel` 判断技能是否处于源技能 git 检出内(在 = 开发机,不在 = 用户环境;无 git 时兜底为向上逐级查找 `.git`)。产出根目录三环境结果**完全不变**,仅判定依据改变。**根因**:仓库本地路径迁移导致写死盘符锚点失效 → 开发机被误判为「用户环境」,会重演第五次修订修复过的「误直接编辑 `references/`」漏洞。(用户确认:"改为仓库特征判定";与脚本创作技能同源定稿)
- 2026-09-10(第八次修订,环境模型精简 v3 · 三环境 → 两环境):**dsh 部署环境整体废弃**(用户确认:"第一步 技能路径含 .dsh 路径段 ② dsh 部署环境 没有这个环境了")。实测依据:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 下仅剩 `profiles/`、`D:\dshworkspace` 整个目录不存在。故删除 `.dsh` 判定步骤与 `D:\dshworkspace\创作任务\` 产出路径,判定简化为**一步**。剩余两环境产出本就同构(桌面 `MCNSkill项目/{账号名}/提示词{编号}/`),产出结果不变。(与脚本创作技能同源定稿)
@@ -62,13 +62,12 @@ references/
### 部署环境检测
根据**两步判定模型**判断当前环境(第一步查本机 `D:\AgentSkill` 是否存在;有 → 第二步看技能自身路径):
根据**一步判定模型(仓库特征判定)**判断当前环境(看技能是否处于源技能 git 检出内):
| 环境 | 判定条件 | references/ 权限 | 新增内容写入位置 |
|:---:|:---|:---|:---|
| **①开发机** | 本机有 `D:\AgentSkill` 且技能路径在 `D:\AgentSkill\` 下 | 可直接编辑 | `references/` 对应子目录 |
| **②dsh 部署环境** | 本机有 `D:\AgentSkill` 且技能路径含 `.dsh` | 只读 | `references-add/` 对应子目录 |
| **③用户环境** | 本机无 `D:\AgentSkill`(技能无论装在哪、什么路径) | 只读 | `references-add/` 对应子目录 |
| **①开发机** | 技能处于源技能 git 检出内(`git -C {技能目录} rev-parse --show-toplevel` 返回仓库根) | 可直接编辑 | `references/` 对应子目录 |
| **②用户环境** | 技能不在任何 git 检出内(技能无论装在哪、什么路径) | 只读 | `references-add/` 对应子目录 |
### 冲突检测与运行时优先级
@@ -1,6 +1,6 @@
# 路径引用规范(相对路径铁律,P0)
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / 用户环境** 两种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。
## 一、铁律(3 条)
@@ -18,12 +18,12 @@
| `__file__` 动态推导 | `BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))` | 脚本定位技能根,跨环境可迁移 |
| 环境变量 | `os.getenv("REDFOX_API_KEY")`、`MCN_RANKING_DIR` | 值由外部注入 |
| URL | `https://github.com/...` | 外部资源 |
| 环境判别锚点 | 「本机是否存在 `D:\AgentSkill`」「技能路径是否含 `.dsh`」 | 仅作**是否存在/是否包含**的判定条件,**禁止**将其作为实际读写路径 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/`、`D:\dshworkspace\创作任务\` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
| 环境判别锚点 | 「技能目录是否处于 git 检出内」 | 仅作**是否存在**的判定条件,**禁止**将其作为实际读写路径;锚点必须用**仓库特征**(git 检出),禁止用写死盘符 |
| 动态产出目录占位 | 桌面 `MCNSkill项目/{账号名}/` | 由各技能 `references(-add)/路径配置.md` 运行时判定,允许出现于规则文档 |
## 三、禁令项(这些绝对禁止)
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\MyRepo\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。
- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。
- **越级引用**:`../../..` 跳出技能根指向包外文件。
- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。
@@ -34,7 +34,7 @@
| 场景 | 说明 |
|------|------|
| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 |
| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 git 检出特征是**规则内容**不是引用,保留 |
| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) |
| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 |
| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 |