SkillHub 一键上传工具
自动处理SkillHub上传全流程,纯Python实现(零外部依赖),跨平台兼容Windows/macOS/Linux。
使用场景
当用户需要把本地skill目录发布/更新到SkillHub平台时触发。
功能特性
- ✅ 零外部依赖:使用 Python 标准库 urllib 构造 multipart/form-data,无需 curl
- ✅ 自动从SKILL.md的front matter提取元数据(slug/version/displayName/summary/description/tags等)
- ✅ 自动过滤不需要发布的文件:.git、pycache、.pyc、.csv/.html测试数据、dot文件等
- ✅ 完美解决Windows兼容性问题:SSL/TLS重置、cmd.exe分号截断、bash PATH混乱、中文编码
- ✅ 自动处理429限流,等待后自动重试
- ✅ 支持changelog自定义
- ✅ 跨平台兼容(Windows/macOS/Linux)
使用方法
基础命令
# 上传skill目录
python scripts/upload.py <skill目录路径> --token <你的skh_xxx token>
# 指定changelog
python scripts/upload.py <skill目录路径> --token <skh_xxx> --changelog "v1.1.0 新增XX功能"
参数说明
| 参数 | 必填 | 说明 |
|---|---|---|
path |
是 | 本地skill目录路径,必须包含SKILL.md |
--token |
是 | SkillHub API Token(skh_开头) |
--host |
否 | 自定义registry地址,默认 https://api.skillhub.cn |
--changelog |
否 | 版本更新说明 |
上传步骤
- 工具自动读取SKILL.md的YAML front matter作为元数据
- 自动过滤不允许上传的文件类型,只保留SkillHub支持的文件:
- 允许扩展名:.md, .py, .sh, .cmd, .txt, .json, .js, .ts, .yaml, .yml
- 自动排除目录:.git, pycache, node_modules, .workspace
- 自动排除文件:.gitignore, .DS_Store, .pyc, .pyo, 测试数据文件 - 使用 Python 标准库 urllib 原生构造 multipart/form-data 请求上传(无需 curl,跨平台)
- 遇到429限流自动等待60秒重试
- 返回发布结果和skill信息
输出示例
成功返回:
{
"ok": true,
"skillId": 101157,
"slug": "finance-expert-pack",
"version": "2.1.0",
"reviewStatus": "pending",
"securityScanStatus": "pending"
}
审核通过后即可在 https://www.skillhub.cn 搜索到。
常见问题
- Q: 提示"网络连接被重置"怎么办?
A: v1.1+ 已改用纯 Python urllib,不再依赖 curl;如仍失败请临时关闭VPN/代理/防火墙重试 - Q: 上传失败提示"请求过于频繁"?
A: 工具会自动等待重试,无需手动操作 - Q: 提示缺少slug/version/displayName?
A: 请确保SKILL.md的front matter包含这三个必填字段 - Q: 提示"版本X.X.X已存在"?
A: 更新 SKILL.md 里的 version 字段后重试(SkillHub 同版本号不能覆盖上传) - Q: 提示"slug 'xxx' 已被其他用户占用"?
A: slug 全局唯一,换一个独特的名字(建议加-pro或用户名后缀,如xxx-ccct) - Q: 上传的文件被拒绝/被安全扫描拦截?
A: 检查是否包含.env/*.key/密码硬编码;SKILL.md 及 scripts 里不能有真实凭据 - Q: Windows 下 curl 报错但 urllib 成功?
A: v1.1+ 已完全切换到 urllib,不需要 curl;如果看到 curl 相关报错,说明用的是旧版本,升级到最新脚本