From f4f6938b3410b641127bdd9917ad67299cdd4b31 Mon Sep 17 00:00:00 2001 From: maogeigei Date: Thu, 3 Sep 2026 10:15:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E6=8A=80=E8=83=BD=E6=A0=91=E7=9B=B8?= =?UTF-8?q?=E5=AF=B9=E8=B7=AF=E5=BE=84=E5=AE=A1=E8=AE=A1+=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E5=BC=95=E7=94=A8=E8=A7=84=E8=8C=83=E5=9B=BA=E5=8C=96?= =?UTF-8?q?(P0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 审计 V1.0 全树(主技能+references+全部subskills及嵌套)Windows/Unix 绝对路径与 md 断链 - 豁免判定: 环境判别锚点/路径配置表/示例路径保留; browser-harness/envs 由 gitignore 兜底不随分发 - 修复: SKILL.md 七节越级引用 ../../../失误与规避记录.md 改语义说明(仅开发机维护场景); mcn-dou-analysis 内嵌 nuwa-skill-main 断链(多语言/社区/评分卡/示例 LICENSE)改官方 GitHub URL(源+dsh 副本同步) - 新增 references/规则/路径引用规范.md(相对路径铁律: 允许项~占位/__file__推导/URL + 禁令盘符/Unix/越级 + 豁免 + 自检), 模板同步 V1.0+4 自有 subskills+dsh 4 副本 - 5 源 SKILL.md + 4 dsh SKILL.md 挂 🔴 路径引用引用行 - 自有内容 md 断链复验=0; 临时审计脚本已清理 --- .workbuddy/memory/2026-09-03.md | 9 ++ project/短视频脚本创作/V1.0/SKILL.md | 10 +- .../references/接口调用/自动化任务清理规范.md | 104 ++++++++++++++++++ .../V1.0/references/规则/路径引用规范.md | 57 ++++++++++ .../V1.0/subskills/mcn-data-insight/SKILL.md | 2 + .../references/规则/路径引用规范.md | 57 ++++++++++ .../scripts/fetch_filtered_data.py | 6 +- .../scripts/fetch_meishi_30days.py | 5 +- .../subskills/douyin-top-account/SKILL.md | 12 +- .../subskills/nuwa-skill/README.md | 8 +- .../examples/sun-yuchen-perspective/README.md | 2 +- .../references/fidelity-scorecard.md | 2 +- .../V1.0/subskills/mcn-dou-analysis/SKILL.md | 2 + .../references/规则/路径引用规范.md | 57 ++++++++++ .../subskills/nuwa-skill-main/README.md | 6 +- .../examples/sun-yuchen-perspective/README.md | 2 +- .../references/fidelity-scorecard.md | 2 +- .../V1.0/subskills/mcn-script-review/SKILL.md | 1 + .../references/规则/路径引用规范.md | 57 ++++++++++ .../V1.0/subskills/mcn-video-prompt/SKILL.md | 2 + .../references/规则/路径引用规范.md | 57 ++++++++++ 21 files changed, 437 insertions(+), 23 deletions(-) create mode 100644 project/短视频脚本创作/V1.0/references/接口调用/自动化任务清理规范.md create mode 100644 project/短视频脚本创作/V1.0/references/规则/路径引用规范.md create mode 100644 project/短视频脚本创作/V1.0/subskills/mcn-data-insight/references/规则/路径引用规范.md create mode 100644 project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/references/规则/路径引用规范.md create mode 100644 project/短视频脚本创作/V1.0/subskills/mcn-script-review/references/规则/路径引用规范.md create mode 100644 project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/references/规则/路径引用规范.md diff --git a/.workbuddy/memory/2026-09-03.md b/.workbuddy/memory/2026-09-03.md index e42a2f2..e531f16 100644 --- a/.workbuddy/memory/2026-09-03.md +++ b/.workbuddy/memory/2026-09-03.md @@ -35,3 +35,12 @@ - 验证:非 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) diff --git a/project/短视频脚本创作/V1.0/SKILL.md b/project/短视频脚本创作/V1.0/SKILL.md index b67a900..cc5261d 100644 --- a/project/短视频脚本创作/V1.0/SKILL.md +++ b/project/短视频脚本创作/V1.0/SKILL.md @@ -8,8 +8,8 @@ description: > 触发场景:写脚本、创作短视频、生成脚本、拆解对标视频、分析爆款视频、 诊断脚本质量、设计账号人设、选题策划、生成分镜、广告植入设计、生成创作回顾。 version: "1.0" -updated_at: "2026-09-02" -last_change: "工作台新增第7条「AI 任务入口技能契约(P0)」:所有 AI 会话任务入口须遵守功能入口×技能调用契约(prompt=技能前缀常量+业务正文+skills 参数级挂载),新增/修改入口前先读 mcn-work-shop/docs/AI会话任务输入输出对照.md(含新增入口检查清单7项)——防裸 prompt 跳步/技能声明混入业务串/BROWSER_HINT 误注入(09-02 提炼/分镜/复盘三入口缺约束修复后固化,data-pages.js 四前缀常量);原第7/8条顺延为8/9;09-02 前:工作台任务执行方式铁律固化(创作/改写/复盘必须走 POST /api/run+skills 参数,禁会话内手写草稿)+09-01 调度机制实测定稿+端口 8899→8900" +updated_at: "2026-09-03" +last_change: "触发条件新增🧹后台任务清理场景:用户问后台任务/清理过期失败任务时按 references/接口调用/自动化任务清理规范.md 执行(09-03 新增,全环境通用:只清过期或错误失败的一次性任务,禁清未来/周期/运行中任务,删除走宿主工具禁直改库);09-02 前:工作台新增第7条「AI 任务入口技能契约(P0)」:所有 AI 会话任务入口须遵守功能入口×技能调用契约(prompt=技能前缀常量+业务正文+skills 参数级挂载),新增/修改入口前先读 mcn-work-shop/docs/AI会话任务输入输出对照.md(含新增入口检查清单7项)——防裸 prompt 跳步/技能声明混入业务串/BROWSER_HINT 误注入(09-02 提炼/分镜/复盘三入口缺约束修复后固化,data-pages.js 四前缀常量);原第7/8条顺延为8/9;09-02 前:工作台任务执行方式铁律固化(创作/改写/复盘必须走 POST /api/run+skills 参数,禁会话内手写草稿)+09-01 调度机制实测定稿+端口 8899→8900" deployment: "source" agent_created: true --- @@ -47,8 +47,9 @@ agent_created: true ## 触发条件 -当用户表达以下任一意图时加载本技能:🖊️脚本创作 / 🔍分析拆解 / 👤账号定位 / 📊诊断评估 / 💡选题创意 +当用户表达以下任一意图时加载本技能:🖊️脚本创作 / 🔍分析拆解 / 👤账号定位 / 📊诊断评估 / 💡选题创意 / 🧹后台任务清理 +> 🧹 用户说「后台在执行什么任务 / 没用的任务可以清空吗 / 清理过期或失败任务」时:**不创作**,按 `references/接口调用/自动化任务清理规范.md` 执行——先只读盘点 → 列清单确认 → 走宿主工具逐条删;**只清过期/错误失败的一次性任务**,禁清未来/周期/运行中任务。 > 详细触发示例见:[帮助文档.md](帮助文档.md) --- @@ -365,10 +366,11 @@ Skill部署到非原始开发路径时,所有用户新增的创作流程/接 创作流程、知识库、素材库标准库中禁止硬编码任何具体账号信息(账号名/角色名/专属机制/专属路径)。素材库存具体物品是设计目的不算硬编码;产出目录(dsh 部署环境 `D:\dshworkspace\创作任务\`、开发机与用户环境桌面 `MCNSkill项目/`,或用户自定义路径)全允许。 > 判定标准+替换对照表+验证命令见:[创作流程规范.md](references/创作流程规范.md) 六 +> **🔴 技能内一切文件引用必须用相对路径**(绝对路径随部署机器变化失效;md 链接相对自身文件解析、禁止越级出技能根)→ [路径引用规范.md](references/规则/路径引用规范.md) ### 七、审计与修复工作方式 -审计发现问题后修复时,逐条读取→逐条修改→逐条验证,禁止批量读取准备批量修改。执行中发现的失误及规避规则记录到项目根目录 [失误与规避记录.md](../../../失误与规避记录.md),持续追加。 +审计发现问题后修复时,逐条读取→逐条修改→逐条验证,禁止批量读取准备批量修改。执行中发现的失误及规避规则记录到**项目根目录** `失误与规避记录.md`(技能包外项目级维护文档,**仅开发机技能维护场景使用**;部署到用户环境/技能包不包含此文件,无需记录),持续追加。 --- diff --git a/project/短视频脚本创作/V1.0/references/接口调用/自动化任务清理规范.md b/project/短视频脚本创作/V1.0/references/接口调用/自动化任务清理规范.md new file mode 100644 index 0000000..47d612a --- /dev/null +++ b/project/短视频脚本创作/V1.0/references/接口调用/自动化任务清理规范.md @@ -0,0 +1,104 @@ +# 自动化任务清理规范(09-03 定稿) + +> **用途**:后台自动化任务(一次性任务)积攒过多时,安全清理**过期 / 执行失败**的任务。 +> **适用环境**:WorkBuddy 全环境通用(开发机 / dsh 部署环境 / 用户环境)——automations 表是 WorkBuddy 宿主自带(`~/.workbuddy/workbuddy.db`),不依赖 MCN 工作台,任何装了本技能的 WorkBuddy 都能执行。 +> **红线(用户明确)**:**只能清理「过期」或「错误/失败」的任务**,禁止清理未来任务 / 周期任务 / 运行中任务。 + +## 一、触发场景 + +用户表达以下任一意图时,按本文档执行(不需要走创作流程): +- 「后台在执行什么任务?」 +- 「没用的任务可以清空吗 / 清一下后台任务 / 把过期任务删掉」 +- 「清理自动化任务 / 任务太多了」 + +执行前先**只读盘点 → 列出清单 → 用户确认 → 再删**,禁止未经确认批量删除。 + +## 二、判定标准(只清这两类) + +自动化任务表 `automations` 存储任务定义,运行记录在 `automation_runs`,运行状态在 `automation_runtime_state`。 + +| 类别 | 可清理条件(全部满足) | 典型 | +|---|---|---| +| 🟢 **过期历史任务** | `schedule_type='once'`(一次性)且计划时间已过,且**已跑完**(有 run 记录且终态 ACCEPTED、`result_success=1`) | 工作台批量创作/复盘跑完后的任务定义 | +| 🔴 **错误/失败任务** | `schedule_type='once'` 且已终结但**未成功**:run 终态 PENDING_REVIEW / `result_success=0` / runtime_state 有 `last_error`(如 user_cancel 中断) | 被用户取消的导入、出错的复盘 | +| ⚪ **死任务**(可选,需用户点头) | `schedule_type='once'` 且**从未运行**(无 run 记录)且计划时间已过期(如 >24h 前),确认不会被调度器补跑 | 旧版重复任务、被新版取代的任务 | + +### 禁止清理(硬性) + +| 情形 | 原因 | +|---|---| +| `schedule_type='recurring'`(周期任务) | 未来还会按 rrule 触发 | +| 计划时间在**未来**(`scheduled_at` / `next_run_at` 未到) | 还没执行 | +| `automation_runtime_state.running=1` | 正在执行 | +| run 状态 QUEUED / IN_PROGRESS(排队/进行中) | 尚未终结 | +| `deleted_at` 已非空 | 已删过,无需处理 | + +## 三、执行步骤 + +### 第 1 步:只读盘点(SQL 查询,只读不改) + +数据库:`~/.workbuddy/workbuddy.db`(Windows: `C:\Users\<用户名>\.workbuddy\workbuddy.db`;macOS/Linux: `~/.workbuddy/workbuddy.db`)。**只用只读模式打开**(SQLite URI `mode=ro`),任务表可能被宿主进程占用,只读查询不受影响。 + +```bash +# 审计三表:automations(任务定义)/ automation_runs(运行历史)/ automation_runtime_state(运行状态) +python3 -c " +import sqlite3, os, datetime, json +db = os.path.expanduser('~/.workbuddy/workbuddy.db') +con = sqlite3.connect(f'file:{db}?mode=ro', uri=True) +con.row_factory = sqlite3.Row +cur = con.cursor() +def ts(v): + if v is None: return None + try: return datetime.datetime.fromtimestamp(int(v)/1000).strftime('%m-%d %H:%M') + except: return v + +print('=== 1) 真正在跑(running=1,禁止清理)===') +for r in cur.execute('SELECT automation_id, running, last_error FROM automation_runtime_state WHERE running=1').fetchall(): + print(dict(r)) + +print() +print('=== 2) 每个任务:类型/计划时间/是否已跑/是否成功 ===') +rows = cur.execute(''' +SELECT a.id, a.name, a.status, a.schedule_type, a.scheduled_at, a.next_run_at, a.last_run_at, + COUNT(r.automation_id) AS run_cnt, + SUM(CASE WHEN r.result_success=1 THEN 1 ELSE 0 END) AS ok_cnt, + MAX(CASE WHEN r.status IN ('QUEUED','IN_PROGRESS') THEN 1 ELSE 0 END) AS active_run +FROM automations a LEFT JOIN automation_runs r ON r.automation_id = a.id +WHERE a.deleted_at IS NULL +GROUP BY a.id ORDER BY a.created_at +''').fetchall() +for r in rows: + d = dict(r) + d['scheduled_at'] = ts(d['scheduled_at']); d['next_run_at'] = ts(d['next_run_at']); d['last_run_at'] = ts(d['last_run_at']) + print(json.dumps(d, ensure_ascii=False)) +" +``` + +### 第 2 步:按判定标准归档 + +对上面输出逐条归档到三类:**🟢 过期已完成** / **🔴 错误失败** / **⚪ 从未运行的死任务**(这三类之外的:未来任务 / recurring / running / QUEUED / IN_PROGRESS → 一律保留)。 + +### 第 3 步:列清单给用户确认 + +用表格呈现:`任务名 | ID | 计划时间 | 归档类别 | 建议动作(删除/保留)`,等用户明确同意后再删。 + +### 第 4 步:删除(走宿主工具,禁止直改数据库) + +删除必须通过 WorkBuddy 宿主自动化工具逐条执行(`automation_update`,mode=delete),**严禁**用 SQL `DELETE` / `UPDATE` 直写 automations 表(宿主可能正持有连接;且工具删除是受支持的软删,会正确置 `deleted_at`)。 + +> 工具删除幂等安全:对已删除任务重复删会返回 `already deleted or does not exist`(success:true),不会报错。 + +### 第 5 步:复核 + +```python +# 只读复核:有效任务应为 0 或仅剩应保留项 +SELECT COUNT(*) FROM automations WHERE deleted_at IS NULL; +SELECT COUNT(*) FROM automation_runtime_state WHERE running=1; -- 应为 0 +``` + +## 四、补充事实(实测,便于判断) + +- **宿主不会自动清理**:一次性任务跑完(ACCEPTED)后任务定义保留、状态仍 ACTIVE,调度器只扫未来时间,不会再触发——但也不会自动删除 → 需人工/按本规范清理 +- **删除不影响任何产物**:已生成的脚本/复盘/会话历史在 `automation_runs`(保留),删任务定义只移除调度入口,不影响历史记录与产出文件 +- 工具删除为**软删**(置 `deleted_at`),表行物理保留,逻辑上不可见 +- 命名线索:`创作指令`/`复盘指令`/`重写-xxx(videoID)`/`修复-videoID`/`解析视频-xxx` 均为一次性任务;带明确未来重复意图(周报/日报)才会是 recurring diff --git a/project/短视频脚本创作/V1.0/references/规则/路径引用规范.md b/project/短视频脚本创作/V1.0/references/规则/路径引用规范.md new file mode 100644 index 0000000..446a3ce --- /dev/null +++ b/project/短视频脚本创作/V1.0/references/规则/路径引用规范.md @@ -0,0 +1,57 @@ +# 路径引用规范(相对路径铁律,P0) + +> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。 + +## 一、铁律(3 条) + +1. **技能包内引用一律相对**:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符 `C:\`、`D:\`… 与 Unix `/Users/`、`/home/`… 均禁)。 +2. **md 链接相对「该 md 文件自身」所在目录解析**(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。 +3. **引用不得越级出技能根**:禁止 `../` 跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 URL / 语义描述。 + +## 二、允许项(这些可以写) + +| 写法 | 示例 | 说明 | +|------|------|------| +| 相对技能根路径 | `references/创作流程规范.md`、`scripts/fetch.py` | 引用包内文件 | +| md 相对链接(示例写法) | `[规范](../接口调用/某文件.md)` | 相对该 md 所在文件解析,目标在包内 | +| 用户级路径(`~`/占位) | `~/.workbuddy/workbuddy.db`、`{主目录}/.dsh/...` | 用户级,跨机器一致;Windows 用 `%USERPROFILE%` 语义的 `{用户名}` 占位 | +| `__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` 运行时判定,允许出现于规则文档 | + +## 三、禁令项(这些绝对禁止) + +- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。 +- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。 +- **越级引用**:`../../..` 跳出技能根指向包外文件。 +- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。 +- **硬编码用户名/盘符到产出路径**:`C:\Users\maidou\Desktop\...` 必须写 `{用户名}` 占位 + 运行时解析。 + +## 四、例外(明确豁免) + +| 场景 | 说明 | +|------|------| +| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 | +| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 | +| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) | +| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 | +| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 | + +## 五、设置引用时的操作要点 + +1. **新建/修改任何 md 引用或代码路径**:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。 +2. **Python 脚本读写文件**:统一用 `__file__` 推导技能根常量(如 `BASE_DIR`),再 `os.path.join(BASE_DIR, ...)` 拼子路径;禁止字符串拼接盘符。 +3. **md 链接加完必须自检**:确认目标文件真实存在(相对自身文件解析),`../` 层数不超过技能根。 +4. **引用技能包外但必需的本地文件**:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。 + +## 六、自检方法(交付前跑一遍) + +- **盘符/Unix 绝对路径扫描**:对技能包文本文件搜 `[A-Za-z]:[\\/]`、`/(Users|home|tmp|opt|etc|var|root|usr|Applications)/`,人工复核命中行是否属「允许/豁免」类别。 +- **md 断链校验**:正则 `\]\(([^)]+)\)` 提取相对链接 → 相对文件目录解析 → 目标不存在即断链;跳过 http/https/file/mailto/# 锚点、含空格/`<>`/`$`/`|` 的命令示例、`workUrl/url/link/链接` 等 API 字段伪链接。 +- **越级检查**:任何解析后超出技能根的链接即违规。 + +--- + +*变更记录:2026-09-03 初建(全技能树相对路径审计定稿,随 V1.0 与各 subskills 分发;各技能副本内容一致,升级时批量同步)。* diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/SKILL.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/SKILL.md index 61e9f28..02ab2fe 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/SKILL.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/SKILL.md @@ -64,6 +64,8 @@ export REDFOX_API_KEY="ak_xxx..." ## 安全约束(所有技能统一执行) +> **🔴 路径引用铁律**:技能内一切文件引用必须用**相对路径**(md 链接相对自身文件解析、代码用 `__file__` 推导技能根;绝对路径随部署机器变化失效,禁止越级出技能根)→ [路径引用规范.md](references/规则/路径引用规范.md) + > 以下规则在安装时已写入各技能的 SKILL.md / core_workflow.md / Python 脚本中: | 规则 | 说明 | diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/references/规则/路径引用规范.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/references/规则/路径引用规范.md new file mode 100644 index 0000000..446a3ce --- /dev/null +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/references/规则/路径引用规范.md @@ -0,0 +1,57 @@ +# 路径引用规范(相对路径铁律,P0) + +> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。 + +## 一、铁律(3 条) + +1. **技能包内引用一律相对**:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符 `C:\`、`D:\`… 与 Unix `/Users/`、`/home/`… 均禁)。 +2. **md 链接相对「该 md 文件自身」所在目录解析**(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。 +3. **引用不得越级出技能根**:禁止 `../` 跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 URL / 语义描述。 + +## 二、允许项(这些可以写) + +| 写法 | 示例 | 说明 | +|------|------|------| +| 相对技能根路径 | `references/创作流程规范.md`、`scripts/fetch.py` | 引用包内文件 | +| md 相对链接(示例写法) | `[规范](../接口调用/某文件.md)` | 相对该 md 所在文件解析,目标在包内 | +| 用户级路径(`~`/占位) | `~/.workbuddy/workbuddy.db`、`{主目录}/.dsh/...` | 用户级,跨机器一致;Windows 用 `%USERPROFILE%` 语义的 `{用户名}` 占位 | +| `__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` 运行时判定,允许出现于规则文档 | + +## 三、禁令项(这些绝对禁止) + +- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。 +- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。 +- **越级引用**:`../../..` 跳出技能根指向包外文件。 +- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。 +- **硬编码用户名/盘符到产出路径**:`C:\Users\maidou\Desktop\...` 必须写 `{用户名}` 占位 + 运行时解析。 + +## 四、例外(明确豁免) + +| 场景 | 说明 | +|------|------| +| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 | +| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 | +| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) | +| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 | +| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 | + +## 五、设置引用时的操作要点 + +1. **新建/修改任何 md 引用或代码路径**:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。 +2. **Python 脚本读写文件**:统一用 `__file__` 推导技能根常量(如 `BASE_DIR`),再 `os.path.join(BASE_DIR, ...)` 拼子路径;禁止字符串拼接盘符。 +3. **md 链接加完必须自检**:确认目标文件真实存在(相对自身文件解析),`../` 层数不超过技能根。 +4. **引用技能包外但必需的本地文件**:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。 + +## 六、自检方法(交付前跑一遍) + +- **盘符/Unix 绝对路径扫描**:对技能包文本文件搜 `[A-Za-z]:[\\/]`、`/(Users|home|tmp|opt|etc|var|root|usr|Applications)/`,人工复核命中行是否属「允许/豁免」类别。 +- **md 断链校验**:正则 `\]\(([^)]+)\)` 提取相对链接 → 相对文件目录解析 → 目标不存在即断链;跳过 http/https/file/mailto/# 锚点、含空格/`<>`/`$`/`|` 的命令示例、`workUrl/url/link/链接` 等 API 字段伪链接。 +- **越级检查**:任何解析后超出技能根的链接即违规。 + +--- + +*变更记录:2026-09-03 初建(全技能树相对路径审计定稿,随 V1.0 与各 subskills 分发;各技能副本内容一致,升级时批量同步)。* diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_filtered_data.py b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_filtered_data.py index c0a8952..a576759 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_filtered_data.py +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_filtered_data.py @@ -13,6 +13,9 @@ from urllib.request import Request, urlopen KEEP_CATEGORIES = {"生活 vlog", "小剧场", "亲子", "美食", "情感", "颜值造型", "旅行"} +# 技能根目录:本文件位于 <技能根>/scripts/ 下,用 __file__ 推导(迁移到用户环境路径不变,禁止写死开发机绝对路径) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + # API DAILY_API = "https://redfox.hk/story/api/dy/search/likesRank" WEEKLY_API = "https://redfox.hk/story/api/dy/search/hotContentRank" @@ -110,7 +113,8 @@ def save_json(data, filepath): print(f" 已保存: {filepath}") if __name__ == "__main__": - base_dir = r"D:\AgentSkill\ThirdPartySkills\RedFox数据" + # 输出到技能根目录下的 RedFox数据/(相对路径,随迁移生效) + base_dir = os.path.join(BASE_DIR, "RedFox数据") print("=" * 60) print("红狐数据获取 - 赛道过滤 + JSON 归档") diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_meishi_30days.py b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_meishi_30days.py index a957fb7..b15c823 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_meishi_30days.py +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/scripts/fetch_meishi_30days.py @@ -9,7 +9,10 @@ from urllib.request import Request, urlopen from urllib.error import HTTPError, URLError API_BASE = "https://redfox.hk/story/api/dy/search/likesRank" -OUTPUT_DIR = r"D:\AgentSkill\ThirdPartySkills\RedFox数据\美食" + +# 输出到技能根目录下的 RedFox数据/美食/(技能根=本文件上两级;__file__ 推导保证迁移到用户环境路径不变) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +OUTPUT_DIR = os.path.join(BASE_DIR, "RedFox数据", "美食") def fetch_one_day(api_key, date_str): """获取指定日期的美食赛道数据""" diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/douyin-top-account/SKILL.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/douyin-top-account/SKILL.md index 00b05d1..9b8a6e1 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/douyin-top-account/SKILL.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/douyin-top-account/SKILL.md @@ -103,22 +103,22 @@ python scripts/generate_report.py --data /path/to/data_full.json --limit 50 **每次查询无论结果多少,都必须将查询结果 JSON 保存**,目录不存在时自动创建。 -**抖音账号日榜(必做,2026-08-18 起)**:每次获取 50 条,保存到 `D:\dshworkspace\抖音榜单/`,文件名带榜单日期区分: +**抖音账号日榜(必做,2026-08-18 起)**:每次获取 50 条,保存到 `RedFox数据/账号榜单/`(相对技能根目录,禁止写死开发机绝对路径),文件名带榜单日期区分: ```bash -mkdir -p "D:/dshworkspace/抖音榜单" +mkdir -p "RedFox数据/账号榜单" python scripts/fetch_rank.py --query "最新抖音日榜" --limit 50 \ - --output "D:/dshworkspace/抖音榜单/抖音账号日榜_<榜单日期>.json" + --output "RedFox数据/账号榜单/抖音账号日榜_<榜单日期>.json" ``` -**抖音周榜(必做,2026-08-19 起)**:**按保留 7 个赛道分别获取,不拿全品类**。每个赛道取 TOP50,保存到 `D:\dshworkspace\抖音榜单/`,文件名带赛道与周起始日期区分: +**抖音周榜(必做,2026-08-19 起)**:**按保留 7 个赛道分别获取,不拿全品类**。每个赛道取 TOP50,保存到 `RedFox数据/账号榜单/`,文件名带赛道与周起始日期区分: ```bash # 保留 7 赛道(API 标准名):生活vlog 小剧场 亲子 美食 情感 颜值造型 旅行(2026-09-01 起剔除化妆美容、二次元) -mkdir -p "D:/dshworkspace/抖音榜单" +mkdir -p "RedFox数据/账号榜单" for cat in 生活vlog 小剧场 亲子 美食 情感 颜值造型 旅行; do python scripts/fetch_rank.py --period week --category "$cat" --limit 50 \ - --output "D:/dshworkspace/抖音榜单/抖音周榜_${cat}_<周起始日期>.json" + --output "RedFox数据/账号榜单/抖音周榜_${cat}_<周起始日期>.json" done ``` diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/README.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/README.md index 4928a66..4d2735a 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/README.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/README.md @@ -10,7 +10,7 @@ > *「你想蒸馏的下一个员工,何必是同事」* -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/alchaincyf/nuwa-skill/blob/main/LICENSE) [![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Standard-green)](https://agentskills.io) [![skills.sh](https://img.shields.io/badge/skills.sh-Compatible-blue)](https://skills.sh) [![Multi-Runtime](https://img.shields.io/badge/Runtime-Claude%20Code%20·%20Codex%20·%20Cursor%20·%20OpenClaw%20·%20Hermes-blueviolet)](#安装) @@ -33,7 +33,7 @@ **其他语言 / Other Languages:** -[English](README_EN.md) · [日本語](README_JA.md) · [한국어](README_KO.md) · [Español](README_ES.md) +[English](https://github.com/alchaincyf/nuwa-skill/blob/main/README_EN.md) · [日本語](https://github.com/alchaincyf/nuwa-skill/blob/main/README_JA.md) · [한국어](https://github.com/alchaincyf/nuwa-skill/blob/main/README_KO.md) · [Español](https://github.com/alchaincyf/nuwa-skill/blob/main/README_ES.md)
@@ -231,9 +231,9 @@ git clone https://github.com/alchaincyf/nuwa-skill <上面对应的路径> 女娲的生态由社区一起长大,但走两条不同的路: - **`SKILL.md` 是核心资产,不接受外部PR改动**。发现方法论的bug或改进点→开issue讨论,被采纳的想法由维护者实现并在commit中致谢(先例见PR #59) -- **社区蒸馏的人物skill走 [COMMUNITY.md](COMMUNITY.md) 索引**:放你自己的仓库(star归你),跑一遍[保真度评分卡](references/fidelity-scorecard.md)拿到B级以上,提一行PR即可收录 +- **社区蒸馏的人物skill走 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md) 索引**:放你自己的仓库(star归你),跑一遍[保真度评分卡](references/fidelity-scorecard.md)拿到B级以上,提一行PR即可收录 -完整规则见 [CONTRIBUTING.md](CONTRIBUTING.md)。社区已有的合集、多人格编排和主题应用,见 [COMMUNITY.md](COMMUNITY.md)。 +完整规则见 [CONTRIBUTING.md](https://github.com/alchaincyf/nuwa-skill/blob/main/CONTRIBUTING.md)。社区已有的合集、多人格编排和主题应用,见 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md)。 --- diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/examples/sun-yuchen-perspective/README.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/examples/sun-yuchen-perspective/README.md index 3ba2f53..8385452 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/examples/sun-yuchen-perspective/README.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/examples/sun-yuchen-perspective/README.md @@ -4,7 +4,7 @@ > *「宁可背负骂名把事情做成,也不做悲剧英雄。」* -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/alchaincyf/nuwa-skill/blob/main/LICENSE) [![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-blueviolet)](https://claude.ai/code) [![Nuwa](https://img.shields.io/badge/Made%20with-女娲.skill-orange)](https://github.com/alchaincyf/nuwa-skill) diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/references/fidelity-scorecard.md b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/references/fidelity-scorecard.md index e23a93e..3fb1081 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/references/fidelity-scorecard.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-data-insight/subskills/nuwa-skill/references/fidelity-scorecard.md @@ -53,7 +53,7 @@ - 女娲Phase 4的通过标准是**内部质检**(生成过程中的关卡) - 评分卡是**对外报告**(生成完成后的出厂检验,任何人可复跑验证) -- 社区贡献的人物skill申请收录进 [COMMUNITY.md](../COMMUNITY.md) 索引时,评分卡≥B是准入门槛(见 [CONTRIBUTING.md](../CONTRIBUTING.md)) +- 社区贡献的人物skill申请收录进 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md) 索引时,评分卡≥B是准入门槛(见 [CONTRIBUTING.md](https://github.com/alchaincyf/nuwa-skill/blob/main/CONTRIBUTING.md)) ## 反作弊 diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/SKILL.md b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/SKILL.md index fe27cd9..800888f 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/SKILL.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/SKILL.md @@ -35,6 +35,8 @@ description: "MCN 达人爆款视频解析与人设卡生成技能:达人账 ## 一、项目规则(红线) +> 🔴 **技能内一切文件引用必须用相对路径**(绝对路径随部署机器变化失效;md 链接相对自身文件解析、禁止越级出技能根)→ [路径引用规范.md](references/规则/路径引用规范.md) + | 规则 | 说明 | |------|------| | 达人账号表.xlsx | **只能根据用户明确要求添加/修改账号**,不得自行添加或扩充。用户说加谁就加谁。输入信息中的账号若不在表中,**先添加到表**:账号ID自增、抖音号/抖音ID(sec_uid)/抖音地址存文本格式,其余字段留空待补。**字段结构(15列)**:账号ID/达人昵称/抖音号/抖音ID/抖音地址/粉丝数/解析状态/人设卡/更新时间/获赞数/关注数/作品数/IP属地/简介/备注。 | diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/references/规则/路径引用规范.md b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/references/规则/路径引用规范.md new file mode 100644 index 0000000..446a3ce --- /dev/null +++ b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/references/规则/路径引用规范.md @@ -0,0 +1,57 @@ +# 路径引用规范(相对路径铁律,P0) + +> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。 + +## 一、铁律(3 条) + +1. **技能包内引用一律相对**:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符 `C:\`、`D:\`… 与 Unix `/Users/`、`/home/`… 均禁)。 +2. **md 链接相对「该 md 文件自身」所在目录解析**(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。 +3. **引用不得越级出技能根**:禁止 `../` 跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 URL / 语义描述。 + +## 二、允许项(这些可以写) + +| 写法 | 示例 | 说明 | +|------|------|------| +| 相对技能根路径 | `references/创作流程规范.md`、`scripts/fetch.py` | 引用包内文件 | +| md 相对链接(示例写法) | `[规范](../接口调用/某文件.md)` | 相对该 md 所在文件解析,目标在包内 | +| 用户级路径(`~`/占位) | `~/.workbuddy/workbuddy.db`、`{主目录}/.dsh/...` | 用户级,跨机器一致;Windows 用 `%USERPROFILE%` 语义的 `{用户名}` 占位 | +| `__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` 运行时判定,允许出现于规则文档 | + +## 三、禁令项(这些绝对禁止) + +- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。 +- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。 +- **越级引用**:`../../..` 跳出技能根指向包外文件。 +- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。 +- **硬编码用户名/盘符到产出路径**:`C:\Users\maidou\Desktop\...` 必须写 `{用户名}` 占位 + 运行时解析。 + +## 四、例外(明确豁免) + +| 场景 | 说明 | +|------|------| +| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 | +| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 | +| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) | +| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 | +| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 | + +## 五、设置引用时的操作要点 + +1. **新建/修改任何 md 引用或代码路径**:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。 +2. **Python 脚本读写文件**:统一用 `__file__` 推导技能根常量(如 `BASE_DIR`),再 `os.path.join(BASE_DIR, ...)` 拼子路径;禁止字符串拼接盘符。 +3. **md 链接加完必须自检**:确认目标文件真实存在(相对自身文件解析),`../` 层数不超过技能根。 +4. **引用技能包外但必需的本地文件**:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。 + +## 六、自检方法(交付前跑一遍) + +- **盘符/Unix 绝对路径扫描**:对技能包文本文件搜 `[A-Za-z]:[\\/]`、`/(Users|home|tmp|opt|etc|var|root|usr|Applications)/`,人工复核命中行是否属「允许/豁免」类别。 +- **md 断链校验**:正则 `\]\(([^)]+)\)` 提取相对链接 → 相对文件目录解析 → 目标不存在即断链;跳过 http/https/file/mailto/# 锚点、含空格/`<>`/`$`/`|` 的命令示例、`workUrl/url/link/链接` 等 API 字段伪链接。 +- **越级检查**:任何解析后超出技能根的链接即违规。 + +--- + +*变更记录:2026-09-03 初建(全技能树相对路径审计定稿,随 V1.0 与各 subskills 分发;各技能副本内容一致,升级时批量同步)。* diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/README.md b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/README.md index 4928a66..772dd2d 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/README.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/README.md @@ -33,7 +33,7 @@ **其他语言 / Other Languages:** -[English](README_EN.md) · [日本語](README_JA.md) · [한국어](README_KO.md) · [Español](README_ES.md) +[English](https://github.com/alchaincyf/nuwa-skill/blob/main/README_EN.md) · [日本語](https://github.com/alchaincyf/nuwa-skill/blob/main/README_JA.md) · [한국어](https://github.com/alchaincyf/nuwa-skill/blob/main/README_KO.md) · [Español](https://github.com/alchaincyf/nuwa-skill/blob/main/README_ES.md)
@@ -231,9 +231,9 @@ git clone https://github.com/alchaincyf/nuwa-skill <上面对应的路径> 女娲的生态由社区一起长大,但走两条不同的路: - **`SKILL.md` 是核心资产,不接受外部PR改动**。发现方法论的bug或改进点→开issue讨论,被采纳的想法由维护者实现并在commit中致谢(先例见PR #59) -- **社区蒸馏的人物skill走 [COMMUNITY.md](COMMUNITY.md) 索引**:放你自己的仓库(star归你),跑一遍[保真度评分卡](references/fidelity-scorecard.md)拿到B级以上,提一行PR即可收录 +- **社区蒸馏的人物skill走 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md) 索引**:放你自己的仓库(star归你),跑一遍[保真度评分卡](references/fidelity-scorecard.md)拿到B级以上,提一行PR即可收录 -完整规则见 [CONTRIBUTING.md](CONTRIBUTING.md)。社区已有的合集、多人格编排和主题应用,见 [COMMUNITY.md](COMMUNITY.md)。 +完整规则见 [CONTRIBUTING.md](https://github.com/alchaincyf/nuwa-skill/blob/main/CONTRIBUTING.md)。社区已有的合集、多人格编排和主题应用,见 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md)。 --- diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/examples/sun-yuchen-perspective/README.md b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/examples/sun-yuchen-perspective/README.md index 3ba2f53..8385452 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/examples/sun-yuchen-perspective/README.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/examples/sun-yuchen-perspective/README.md @@ -4,7 +4,7 @@ > *「宁可背负骂名把事情做成,也不做悲剧英雄。」* -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/alchaincyf/nuwa-skill/blob/main/LICENSE) [![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-blueviolet)](https://claude.ai/code) [![Nuwa](https://img.shields.io/badge/Made%20with-女娲.skill-orange)](https://github.com/alchaincyf/nuwa-skill) diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/references/fidelity-scorecard.md b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/references/fidelity-scorecard.md index e23a93e..3fb1081 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/references/fidelity-scorecard.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-dou-analysis/subskills/nuwa-skill-main/references/fidelity-scorecard.md @@ -53,7 +53,7 @@ - 女娲Phase 4的通过标准是**内部质检**(生成过程中的关卡) - 评分卡是**对外报告**(生成完成后的出厂检验,任何人可复跑验证) -- 社区贡献的人物skill申请收录进 [COMMUNITY.md](../COMMUNITY.md) 索引时,评分卡≥B是准入门槛(见 [CONTRIBUTING.md](../CONTRIBUTING.md)) +- 社区贡献的人物skill申请收录进 [COMMUNITY.md](https://github.com/alchaincyf/nuwa-skill/blob/main/COMMUNITY.md) 索引时,评分卡≥B是准入门槛(见 [CONTRIBUTING.md](https://github.com/alchaincyf/nuwa-skill/blob/main/CONTRIBUTING.md)) ## 反作弊 diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-script-review/SKILL.md b/project/短视频脚本创作/V1.0/subskills/mcn-script-review/SKILL.md index 860d597..da315b9 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-script-review/SKILL.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-script-review/SKILL.md @@ -25,6 +25,7 @@ agent_created: true - **经验沉淀**:新问题/新经验写入 `Creation-Review-Method/README.md` 经验库 > ⚠️ **核心约束**:本技能只做**分析与建议**,不修改脚本、不触发创作流程、不改 short-video-script 的创作步骤文件。 +> 🔴 **技能内一切文件引用必须用相对路径**(绝对路径随部署机器变化失效;md 链接相对自身文件解析、禁止越级出技能根)→ [路径引用规范.md](references/规则/路径引用规范.md) --- diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-script-review/references/规则/路径引用规范.md b/project/短视频脚本创作/V1.0/subskills/mcn-script-review/references/规则/路径引用规范.md new file mode 100644 index 0000000..446a3ce --- /dev/null +++ b/project/短视频脚本创作/V1.0/subskills/mcn-script-review/references/规则/路径引用规范.md @@ -0,0 +1,57 @@ +# 路径引用规范(相对路径铁律,P0) + +> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。 + +## 一、铁律(3 条) + +1. **技能包内引用一律相对**:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符 `C:\`、`D:\`… 与 Unix `/Users/`、`/home/`… 均禁)。 +2. **md 链接相对「该 md 文件自身」所在目录解析**(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。 +3. **引用不得越级出技能根**:禁止 `../` 跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 URL / 语义描述。 + +## 二、允许项(这些可以写) + +| 写法 | 示例 | 说明 | +|------|------|------| +| 相对技能根路径 | `references/创作流程规范.md`、`scripts/fetch.py` | 引用包内文件 | +| md 相对链接(示例写法) | `[规范](../接口调用/某文件.md)` | 相对该 md 所在文件解析,目标在包内 | +| 用户级路径(`~`/占位) | `~/.workbuddy/workbuddy.db`、`{主目录}/.dsh/...` | 用户级,跨机器一致;Windows 用 `%USERPROFILE%` 语义的 `{用户名}` 占位 | +| `__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` 运行时判定,允许出现于规则文档 | + +## 三、禁令项(这些绝对禁止) + +- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。 +- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。 +- **越级引用**:`../../..` 跳出技能根指向包外文件。 +- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。 +- **硬编码用户名/盘符到产出路径**:`C:\Users\maidou\Desktop\...` 必须写 `{用户名}` 占位 + 运行时解析。 + +## 四、例外(明确豁免) + +| 场景 | 说明 | +|------|------| +| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 | +| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 | +| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) | +| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 | +| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 | + +## 五、设置引用时的操作要点 + +1. **新建/修改任何 md 引用或代码路径**:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。 +2. **Python 脚本读写文件**:统一用 `__file__` 推导技能根常量(如 `BASE_DIR`),再 `os.path.join(BASE_DIR, ...)` 拼子路径;禁止字符串拼接盘符。 +3. **md 链接加完必须自检**:确认目标文件真实存在(相对自身文件解析),`../` 层数不超过技能根。 +4. **引用技能包外但必需的本地文件**:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。 + +## 六、自检方法(交付前跑一遍) + +- **盘符/Unix 绝对路径扫描**:对技能包文本文件搜 `[A-Za-z]:[\\/]`、`/(Users|home|tmp|opt|etc|var|root|usr|Applications)/`,人工复核命中行是否属「允许/豁免」类别。 +- **md 断链校验**:正则 `\]\(([^)]+)\)` 提取相对链接 → 相对文件目录解析 → 目标不存在即断链;跳过 http/https/file/mailto/# 锚点、含空格/`<>`/`$`/`|` 的命令示例、`workUrl/url/link/链接` 等 API 字段伪链接。 +- **越级检查**:任何解析后超出技能根的链接即违规。 + +--- + +*变更记录:2026-09-03 初建(全技能树相对路径审计定稿,随 V1.0 与各 subskills 分发;各技能副本内容一致,升级时批量同步)。* diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/SKILL.md b/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/SKILL.md index 4141019..c58009e 100644 --- a/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/SKILL.md +++ b/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/SKILL.md @@ -435,6 +435,8 @@ F4 输出 = 主题 + 导演阐述 + 完整提示词(代码块包裹)。多 ## 核心规则 +> 🔴 **技能内一切文件引用必须用相对路径**(绝对路径随部署机器变化失效;md 链接相对自身文件解析、禁止越级出技能根)→ [路径引用规范.md](references/规则/路径引用规范.md) + > 综合两大参考技能+1个2.5时间测算参考的最佳实践提炼,执行以本节为准。流程级规则详见 `references/制作流程/分镜提示词制作流程.md`。 **平台与合规:** diff --git a/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/references/规则/路径引用规范.md b/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/references/规则/路径引用规范.md new file mode 100644 index 0000000..446a3ce --- /dev/null +++ b/project/短视频脚本创作/V1.0/subskills/mcn-video-prompt/references/规则/路径引用规范.md @@ -0,0 +1,57 @@ +# 路径引用规范(相对路径铁律,P0) + +> 适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 **开发机 / dsh 环境 / 用户环境** 三种机器,**绝对路径随机器变化必然失效**,故技能内一切文件引用一律使用**相对路径**。 + +## 一、铁律(3 条) + +1. **技能包内引用一律相对**:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符 `C:\`、`D:\`… 与 Unix `/Users/`、`/home/`… 均禁)。 +2. **md 链接相对「该 md 文件自身」所在目录解析**(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。 +3. **引用不得越级出技能根**:禁止 `../` 跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 URL / 语义描述。 + +## 二、允许项(这些可以写) + +| 写法 | 示例 | 说明 | +|------|------|------| +| 相对技能根路径 | `references/创作流程规范.md`、`scripts/fetch.py` | 引用包内文件 | +| md 相对链接(示例写法) | `[规范](../接口调用/某文件.md)` | 相对该 md 所在文件解析,目标在包内 | +| 用户级路径(`~`/占位) | `~/.workbuddy/workbuddy.db`、`{主目录}/.dsh/...` | 用户级,跨机器一致;Windows 用 `%USERPROFILE%` 语义的 `{用户名}` 占位 | +| `__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` 运行时判定,允许出现于规则文档 | + +## 三、禁令项(这些绝对禁止) + +- **Windows 盘符绝对路径**:`C:\Users\maidou\...`、`D:\AgentSkill\...`(含正反斜杠两种写法)——除「环境判别锚点/路径配置规则表」语境外的任何引用位置。 +- **Unix 绝对路径**:`/Users/maidou/...`、`/home/...`、`/tmp/...`(shebang `#!/usr/bin/env python3` 除外)。 +- **越级引用**:`../../..` 跳出技能根指向包外文件。 +- **引用技能包外文档**:md 链接指向不存在于包内的本地文件(如仓库根的维护文档)——部署环境无此文件即断链。 +- **硬编码用户名/盘符到产出路径**:`C:\Users\maidou\Desktop\...` 必须写 `{用户名}` 占位 + 运行时解析。 + +## 四、例外(明确豁免) + +| 场景 | 说明 | +|------|------| +| 仅开发机工具 | 不随技能分发的目录(如 `mcn-work-shop/`),内部可保留开发机路径 | +| 环境判别/路径配置文档 | `路径配置.md`、SKILL.md 环境判定节——锚点 `D:\AgentSkill`、`.dsh`、`D:\dshworkspace\...` 是**规则内容**不是引用,保留 | +| 示例/教学文本 | `C:/Videos/demo.mp4`、`C:/path/to/file` 等明确示例(`path/to`、`demo` 字样) | +| 历史日志 | `.workbuddy/memory/` 既有日志保留原样,不改写历史 | +| 第三方整包 | 整包拷贝的第三方技能(如 browser-harness/lieflat-charts/参考skills/)内部自带约定不重写;但**本技能对它们的引用**仍须相对路径 | + +## 五、设置引用时的操作要点 + +1. **新建/修改任何 md 引用或代码路径**:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。 +2. **Python 脚本读写文件**:统一用 `__file__` 推导技能根常量(如 `BASE_DIR`),再 `os.path.join(BASE_DIR, ...)` 拼子路径;禁止字符串拼接盘符。 +3. **md 链接加完必须自检**:确认目标文件真实存在(相对自身文件解析),`../` 层数不超过技能根。 +4. **引用技能包外但必需的本地文件**:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。 + +## 六、自检方法(交付前跑一遍) + +- **盘符/Unix 绝对路径扫描**:对技能包文本文件搜 `[A-Za-z]:[\\/]`、`/(Users|home|tmp|opt|etc|var|root|usr|Applications)/`,人工复核命中行是否属「允许/豁免」类别。 +- **md 断链校验**:正则 `\]\(([^)]+)\)` 提取相对链接 → 相对文件目录解析 → 目标不存在即断链;跳过 http/https/file/mailto/# 锚点、含空格/`<>`/`$`/`|` 的命令示例、`workUrl/url/link/链接` 等 API 字段伪链接。 +- **越级检查**:任何解析后超出技能根的链接即违规。 + +--- + +*变更记录:2026-09-03 初建(全技能树相对路径审计定稿,随 V1.0 与各 subskills 分发;各技能副本内容一致,升级时批量同步)。*