- 审计 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; 临时审计脚本已清理
5.0 KiB
5.0 KiB
路径引用规范(相对路径铁律,P0)
适用:本技能树(主技能 + references/references-add + scripts + 全部 subskills 及嵌套 subskills)。技能会被部署到 开发机 / dsh 环境 / 用户环境 三种机器,绝对路径随机器变化必然失效,故技能内一切文件引用一律使用相对路径。
一、铁律(3 条)
- 技能包内引用一律相对:md 链接、代码文件操作、配置路径,只允许相对路径,禁止绝对路径(Windows 盘符
C:\、D:\… 与 Unix/Users/、/home/… 均禁)。 - md 链接相对「该 md 文件自身」所在目录解析(不是相对技能根);链接目标必须在技能包内,或用 URL 指向外部。
- 引用不得越级出技能根:禁止
../跳出本技能根引用技能包外文件(技能包外文件不存在于部署环境)。确实需要的包外文件 → 要么移入技能包,要么改为 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/)内部自带约定不重写;但本技能对它们的引用仍须相对路径 |
五、设置引用时的操作要点
- 新建/修改任何 md 引用或代码路径:先问「这段代码/文档会被部署到用户环境吗?」——会 → 用相对路径或允许项写法。
- Python 脚本读写文件:统一用
__file__推导技能根常量(如BASE_DIR),再os.path.join(BASE_DIR, ...)拼子路径;禁止字符串拼接盘符。 - md 链接加完必须自检:确认目标文件真实存在(相对自身文件解析),
../层数不超过技能根。 - 引用技能包外但必需的本地文件:先评估移入包内;无法移入 → 去掉链接改为语义描述并注明「仅开发机维护场景」。
六、自检方法(交付前跑一遍)
- 盘符/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 分发;各技能副本内容一致,升级时批量同步)。