[Bug]: 优化skill 市场的设计
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 58/100
調査の方向性
Start with the SkillHub adapter in skillhub.rs, especially the search item parsing, download, and detail URL handling mentioned in the issue. Compare its current ClawHub assumptions with SkillHub’s namespace.handle, /api/v1/download parameters, and homepage response field. Done means SkillHub searches can install skills successfully while existing ClawHub sources remain supported.
索引モデルが issue の本文から書いたものです。
説明
Summary
Area
Desktop app
Reproduction or evidence
👤 用户:
https://skillhub.cn
我用这个作为地址失败了
先实测一下这个地址到底返回什么,再判断是配置问题还是协议不兼容。
实测了两个域名,失败原因很明确:skillhub.cn 是前端站点,不是 API 根。
1. 为什么 https://skillhub.cn 一定失败
| 我实测的请求 | 结果 |
|---|---|
https://skillhub.cn/api/v1/search?q=&limit=2&page=0 |
200 text/html(7.4 KB SPA 壳,<title>SkillHub…</title>) |
https://skillhub.cn/api/v1/auth/me |
200 text/html(同样回落 SPA,证明该域所有路径都不返回 JSON) |
https://api.skillhub.cn/api/v1/search?q=&limit=2&page=0 |
200 application/json,{"results":[…]} |
站点 bundle skill-hub.bb2n2rxv.js 里有映射表:{"skillhub.cn": "https://api.skillhub.cn", "www.skillhub.cn": "https://api.skillhub.cn", "skillhub.tencent.com": "https://api.skillhub.tencent.com"} —— 页面域和 API 域是分离的。
所以后端 response.json() 拿到 HTML,报的就是 Invalid SkillHub search response(skillhub.rs:146-149),市场页显示成 腾讯 SkillHub: Invalid SkillHub search response。
2. 改成 https://api.skillhub.cn:能搜,但装不上
搜索形状刚好对得上(skillhub.rs:27-35 的 DTO 全命中):
{"results":[{"slug":"pdf","displayName":"PDF","summary":"…","description":"…",
"namespace":{"handle":"kunlungrowth","canonicalName":"@kunlungrowth/pdf"},
"homepage":"https://api.skillhub.cn/kunlungrowth/pdf","version":"1.0.0","downloads":47}]}
不需要 Token(公开可读)。
但下载有两个硬不兼容点,我都验证过了:
| 适配层假设(ClawHub) | skillhub.cn 实测 |
|---|---|
slug = 命名空间--名称 |
slug 只有 pdf,命名空间在 namespace.handle;抽查 20 条无一含 -- |
GET /api/v1/skills/{ns}/{slug}/download |
该路径返回 405(EdgeOne 拦的)。真实路由是 GET /api/v1/download?slug=pdf&namespace=kunlungrowth → 302 到 COS 的 zip(Content-Disposition: attachment; filename="pdf-1.0.0.zip") |
详情链接 {base}/space/{ns}/{name} |
不存在;真实主页是响应里的 homepage |
因为 split_once("--") 找不到分隔符就回落 global(skillhub.rs:102、skillhub.rs:160),下载必然打到 /api/v1/skills/global/pdf/download → 405 → 前端显示 SkillHub request failed with status 405。
顺带确认:zip 本身是合规的,根级 SKILL.md + references/* + _meta.json,unpack_package 的全部校验(大小、路径穿越、符号链接、保留名)都能过。所以只差“怎么找到这个 zip”。
3. 三个可选做法
A. 半可用(只改配置):地址填 https://api.skillhub.cn,Token 留空。能搜能看,点下载报 405。不推荐长期用。
B. 做协议适配(推荐,改动很小)——在 skillhub.rs 里做“双协议兼容”,不是替换:
SearchItem加namespace.handle,坐标归一成kunlungrowth--pdf给下载用,install_id仍保持skillhub:{base}#{坐标}形式不变(否则已装标记全失效);旧的ns--name继续支持,自建 ClawHub 部署不受影响。download:先试/api/v1/download?slug=&namespace=(并可带version),失败回退旧/api/v1/skills/{ns}/{name}/download。detail_url:优先用响应里的homepage,模板兜底。- 顺手把
downloads映射到installs(现在恒为 0,市场页“安装量排序”对这类源是死的)。
C. 纯手工迂回:curl -L "https://api.skillhub.cn/api/v1/download?slug=xxx&namespace=yyy" -o x.zip,解到用户 skills 目录或用“添加 Skill → 选文件夹”导入。缺点是没有“已安装”标记、没有更新能力。
4. 一个容易踩的点
skillhub.cn 和 skillhub.tencent.com 是同一套 API 的镜像(我实测两者 search 返回同一份数据),但 install_id 里嵌了 base 字符串,两个域混填会让同一个 skill 被当成两个源,已装标记不认。团队内统一用一个域。
Environment, if relevant
No response
- 主要言語
- Rust
- スター
- 2.3k
- フォーク
- 236
- 平均マージ
- 12時間 20分
- マージ済み PR(30日)
- 373
環境構築
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
GCWing/OpenBitFun のほかの issue
-
[Feature]: 模型服务表单缺少「图像生成」分类入口 —— 后端已支持 default_models.image_generation対応中かも @skyfireitdiy が 23 日前に担当しました。 オープン
難易度 2/5 半日 初心者へのやさしさ 74/100
GCWing/OpenBitFun#3279 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 49/100
GCWing/OpenBitFun#3809 ·
メンテナーはふだん 1 日以内に返信
-
[Bug]: 输出文字应该支持自然换行オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 57/100
GCWing/OpenBitFun#3796 ·
メンテナーはふだん 1 日以内に返信
-
[Bug]: 不能archive 错误使用的acp対応中かも @Raing5Days が今日担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
GCWing/OpenBitFun#3788 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
GCWing/OpenBitFun#3784 ·
メンテナーはふだん 1 日以内に返信
GCWing/OpenBitFun の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
max-sixty/worktrunk#4727 · コメント 7 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
follow-up
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
carrick-sh/carrick#1859 ·
メンテナーはふだん 1 日以内に返信
-
crate: spate-kafka documentation priority: medium
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信