mirror of
https://github.com/iflytek/skillhub.git
synced 2026-09-24 00:55:35 +00:00
fix(builtin-skills): accept immutable CDN UUID filenames
Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
This commit is contained in:
parent
ae71f816bb
commit
5aa038d188
3 changed files with 18 additions and 4 deletions
|
|
@ -35,7 +35,8 @@ manifest 需要维护四个字段:
|
|||
- `slug`:Skill 在 `@global` 下的 slug。
|
||||
- `version`:期望同步的 Skill 版本。
|
||||
- `url`:Skill zip 包的云存储 HTTPS 链接。
|
||||
- `sha256`:发布制品的 SHA-256,小写 64 位十六进制字符串。
|
||||
- `sha256`:发布制品内容的 SHA-256,小写 64 位十六进制字符串。它是完整性依据,
|
||||
不要求 URL 的文件名必须等于 SHA-256;CDN 自动生成 UUID 文件名也可以使用。
|
||||
|
||||
## 2. Manifest 配置
|
||||
|
||||
|
|
@ -87,6 +88,7 @@ manifest 文件格式如下:
|
|||
- 每一项必须同时填写 `slug`、`version`、`url`、`sha256`。
|
||||
- `slug` 必须符合 SkillHub slug 规则。
|
||||
- `sha256` 必须是小写 64 位十六进制字符串,并与 URL 返回的原始 zip 字节一致。
|
||||
- `url` 最后路径段必须是 `.zip` 文件;文件名可以是 SHA-256、UUID 或 CDN 生成的不可变名称。
|
||||
- 同一个 `slug + version` 重复出现时,只处理第一条,后续重复项会被跳过。
|
||||
- manifest 最多处理前 100 条 entries。
|
||||
- 同一个 `slug` 的多个版本建议按从旧到新的顺序排列;运行时按 manifest 文件顺序处理,不做自动版本排序。
|
||||
|
|
@ -236,7 +238,7 @@ SKILLHUB_BUILTIN_SKILLS_ENABLED=false
|
|||
|
||||
更新一个已有内置 Skill 的推荐步骤:
|
||||
|
||||
1. 不要覆盖已经发布过的旧版本 zip 内容。
|
||||
1. 不要覆盖已经发布过的旧版本 zip 内容;URL 对应对象必须保持不可变。
|
||||
2. 在 `SKILL.md` 中提升 `version`。
|
||||
3. 重新打包并上传新的 zip 文件。
|
||||
4. 在 manifest 中新增一条同 `slug`、新 `version` 的记录。
|
||||
|
|
@ -279,7 +281,7 @@ SKILLHUB_BUILTIN_SKILLS_ENABLED=false
|
|||
- manifest JSON 格式合法。
|
||||
- 每个 item 都包含 `slug`、`version`、`url`、`sha256`。
|
||||
- 每个 `sha256` 都与 URL 下载到的原始 zip 字节一致。
|
||||
- URL 使用 `https://bjcdn.openstorage.cn/...` 或可信子域名。
|
||||
- URL 使用 `https://bjcdn.openstorage.cn/...` 或可信子域名,并以 `.zip` 结尾;文件名不必等于 SHA-256。
|
||||
- zip 根目录直接包含 `SKILL.md`,或只有一个顶层 Skill 目录且该目录包含 `SKILL.md`。
|
||||
- `SKILL.md name` 归一化后的 slug 与 manifest `slug` 一致。
|
||||
- `SKILL.md version` 与 manifest `version` 一致。
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ for coordinate in packaged_runtime_coordinates:
|
|||
assert parsed_url.scheme == "https", coordinate
|
||||
assert parsed_url.hostname == "bjcdn.openstorage.cn", coordinate
|
||||
assert not parsed_url.query and not parsed_url.fragment, coordinate
|
||||
assert parsed_url.path.endswith(f'/{artifact["sha256"]}.zip'), coordinate
|
||||
assert parsed_url.path.lower().endswith('.zip'), coordinate
|
||||
PY
|
||||
|
||||
python3 - "$first" <<'PY'
|
||||
|
|
|
|||
|
|
@ -60,6 +60,12 @@
|
|||
"url": "https://bjcdn.openstorage.cn/open_res/xfyundoc/2026-07-31/fae63ded-f222-4583-a723-d6d9529360e0/skillhub-builtin-skills/frontend-design/1.0.0/67b2f34163874e56ba43a0a9ed3d1012d752615a1a80f0c26608a702d9fe394e.zip",
|
||||
"sha256": "67b2f34163874e56ba43a0a9ed3d1012d752615a1a80f0c26608a702d9fe394e"
|
||||
},
|
||||
{
|
||||
"slug": "ledger-tasks-yylo",
|
||||
"version": "1.0.0",
|
||||
"url": "https://bjcdn.openstorage.cn/aicontest/2026-09-22/5fac3d84-44db-4b90-a707-a820a096a2a4.zip",
|
||||
"sha256": "1b8aa3bb329a4f8551f7e262eb1faab1b1e3111b2b2053278aa2e6996099215b"
|
||||
},
|
||||
{
|
||||
"slug": "linkedin-post-formatter",
|
||||
"version": "1.0.0",
|
||||
|
|
@ -72,6 +78,12 @@
|
|||
"url": "https://bjcdn.openstorage.cn/open_res/xfyundoc/2026-07-31/6cf347a7-ccc5-4016-b4ca-6263959a1b08/skillhub-builtin-skills/meeting-note-summarizer/1.0.0/5add401203f323bc1cbb350f306d3a5d3f3b16c2ad6578e7cab55d2c196152ca.zip",
|
||||
"sha256": "5add401203f323bc1cbb350f306d3a5d3f3b16c2ad6578e7cab55d2c196152ca"
|
||||
},
|
||||
{
|
||||
"slug": "orca-replay",
|
||||
"version": "1.0.0",
|
||||
"url": "https://bjcdn.openstorage.cn/aicontest/2026-09-22/2c7f87a4-b339-47f5-9a8e-f0ad1caad2c6.zip",
|
||||
"sha256": "9184ae8bafab208fe468c9f6b5053ca76dd9e594a96ea57ff66cb370196dbd4b"
|
||||
},
|
||||
{
|
||||
"slug": "plugin-scanner",
|
||||
"version": "1.0.0",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue