OpenAI Skills
OpenAI Skills 源码分析:URL 拆分、ZIP 预检与误导性的日志关键词
复现三个窄范围实现行为:含斜杠的 ref、解压前的路径检查,以及可能选中“0 failures”的倒序日志匹配。
你将学会
- 讨论算法前先追踪输入
- 先预检全部成员,再开始解压
- 按启发式的能力理解启发式
开始前需要
- 基础 Git、Python 与命令行知识
- 明确的仓库检查与修改权限边界
解释本章源码行为,应用验收清单,并区分目录与宿主。
先看结论
- URL 无法清晰表达分支时,将 ref 和路径分开。
- ZIP 成员预检先于解压,但不审核可执行内容。
- 日志子串匹配是调查线索,不是根因证明。
讨论算法前先追踪输入
安装器将 GitHub URL 拆成所有者、仓库、ref 和路径。对于 /tree/feature/demo/skills/example,它返回 ref 为 feature、路径为 demo/skills/example,不会推断 feature/demo 可能是一个完整分支名。经过哈希核对的 Python 探针复现了这一结果,这类场景更适合独立传入 ref 和路径。
相对路径检查拒绝绝对路径,以及规范化后以两个点开头的字符串。这个规则比较简单,也会拒绝 ..notes 这样的名称,而不仅是父目录跳转。名称校验则是另一项使用平台分隔符的单段检查。应按实际范围介绍它们,不要扩展成通用跨平台仓库验证器。
先预检全部成员,再开始解压
ZIP 辅助函数用 realpath 解析每个成员的目标,要求等于目标根目录,或以前缀“根目录加平台分隔符”开头。只有所有成员通过循环后才调用 extractall。我们给模拟压缩包先放正常成员,再放 ../escape.txt,结果在模拟解压方法执行前就被拒绝。
这个探针验证了顺序和选定路径分支,没有实际解压文件。它未覆盖压缩资源耗尽、恶意载荷执行、并发文件系统变化或所有操作系统。路径约束很有用,但技能即使被安全复制到目录内,仍可能含有不适合运行的命令。
按启发式的能力理解启发式
CI 脚本从后向前扫描日志,寻找 error、fail、traceback、timeout 等子串,再围绕最后匹配行截取有限窗口。“0 failures”仍然含有 fail,因此我们构造的日志把标记落在这里,而不是更早的真实错误。这说明提取片段只能作为线索,不能直接证明根因。
下面 JavaScript 是独立缩小版教学模型,不是完整 Python 脚本。给定输入返回索引 2,没有匹配时返回 -1;真实实现还有更多标记与窗口处理。三种语言版本中的模型和隔离 Python 函数均已执行,但没有使用 GitHub 账户、安装技能或运行真实智能体任务。
实施步骤
- 1
预测含斜杠分支 URL 的拆分结果。
- 2
验证后面的非法成员也会阻止解压。
- 3
比较真实错误与后续“0 failures”的匹配。
- 4
提出修改前检查完整上下文。
可复制示例
function lastMarker(lines) {
for (let i = lines.length - 1; i >= 0; i--) {
if (["error", "fail", "timeout"].some(word => lines[i].toLowerCase().includes(word))) return i;
}
return -1;
}
console.log(lastMarker(["ERROR first", "work", "0 failures"]));常见问题
压缩包探针实际解压文件了吗?
没有。它使用记录 extractall 调用的模拟对象;越界成员案例完全阻止了该调用。
JavaScript 示例来自上游仓库吗?
不是。它是独立的单一启发式教学模型,真实 Python 函数另行按固定源码哈希做了隔离测试。
资料来源
- README.md来源核查 2026-09-08
- skills/.system/skill-installer/SKILL.md来源核查 2026-09-08
- skills/.system/skill-installer/LICENSE.txt来源核查 2026-09-08
- skills/.system/skill-installer/scripts/install-skill-from-github.py来源核查 2026-09-08
- skills/.system/skill-installer/scripts/github_utils.py来源核查 2026-09-08
- skills/.system/skill-installer/scripts/list-skills.py来源核查 2026-09-08
- skills/.system/skill-creator/scripts/quick_validate.py来源核查 2026-09-08
- skills/.system/skill-creator/references/openai_yaml.md来源核查 2026-09-08
- skills/.curated/gh-fix-ci/SKILL.md来源核查 2026-09-08
- skills/.curated/gh-fix-ci/scripts/inspect_pr_checks.py来源核查 2026-09-08
- skills/.curated/gh-fix-ci/agents/openai.yaml来源核查 2026-09-08
- skills/.system/plugin-creator/SKILL.md来源核查 2026-09-08
- 当前官方技能指南来源核查 2026-09-08