SkillHub 追更:进内网之后,我改了这三件事
上一篇写的是为什么做这个集市、跟同类方案比取舍在哪。那时候它还是我自己的东西,怎么设计我说了算。
放进内网、真有人开始用之后,有几件事跟我预想的不一样。这篇不讲设计,讲我改了什么。一共三件:仓库关联上传从备用路径变成了主路径,多了一个谁都能往里放 skill 的默认仓库,加了原创标签和原创 tab。
仓库关联上传:我以为没人用,结果它成了主路径
上一篇写过这条路径:填仓库地址、分支、skill 路径三个字段,SkillHub 不克隆不落盘,详情页通过 GitLab API 实时取 SKILL.md 回来渲染。
上线之后我发现,我一开始把它的位置摆错了。
我原本以为主力是拖拽上传——"把文件夹拖进来就完事",听起来最省事。但内网里绝大多数人的 skill 本来就维护在 GitLab 上。让人先 clone 下来、拖进浏览器、再往集市传一份,等于把 Git 里已经有的东西复制了一遍,之后两边还得各自更新。真正用起来,拖拽反而是少数路径。
所以这次把仓库关联扶正了,它现在是上传 skill 的默认方式。表单只留三个字段:仓库 url、branch、skill_path。skill_path 之所以不能省,是因为仓库里未必只有一个 skill,skill 也未必在根目录,skills/code-review 和 code-review 都是常见放法,让传的人指清楚比在后端猜要可靠。
详情页会把仓库里的 SKILL.md 渲染出来。这一点比看起来重要:别人打开一个 skill,第一眼该看到的是它能干什么、怎么用,而不是一个下载按钮。何况这条路径下的 skill 是活的,仓库改了集市上跟着就是新的,读到的文档和拿到的代码永远是同一份。
代价上一篇说过,这里再重复一次:这类 skill 不跟版本号,跟分支走。要严格按版本回滚的,还是走上传那条路。
默认仓库:会提 MR,就能往集市里放 skill
第二件事是给 SkillHub 配了一个默认的 GitLab 仓库,skillhub-skills。
起因很实际:不是每个人都有兴趣为了传一个 skill 去开一个新的 Git 仓库。那就在集市旁边备一个公共仓库,谁都能往里放,SkillHub 自动扫描这个仓库,把里面的 skill 全部扫出来显示在集市上。
这么一来,上传 skill 就不只有"用 SkillHub 的表单"这一种方式了。你可以走团队本来就在用的那套 GitLab 流程:拉分支、提 MR、讨论、合并。这个 skill 该不该进集市、写得对不对,在 MR 里就谈完了,SkillHub 只负责把合并后的结果呈现出来。对一个内网团队来说,这大概是最省事的一条路——想让 skill 上集市的人不需要学任何一个新东西,会提 MR 就够了。
它和"关联自己的仓库"用的是同一套扫描和取文件的机制,区别在归属:默认仓库是"我懒得单独建仓库,顺手放公共的地方",自己的仓库是"我有一套东西要长期维护,不想跟别人的混在一起"。
原创标签:把搬运的和自己写的分开
第三件事是原创标签。
集市上的 skill 大部分是搬运来的——从外网上看到的、别的团队写的、同事分享的。之前它们和团队自己写的 skill 混在一起,除了详情页会显示原作者,列表上没有任何区别。
现在的规则是:上传时填了原作者和来源链接的,算搬运,不打原创标签;作者就是上传者本人的,才带这个标签。首页也多了一个原创 tab,把带标签的集中在一起。
我没有把判定做成"用户自己勾选'这是我原创的'"。勾选原创是空口一句话,谁都能勾;而填原作者和来源链接是件麻烦事,愿意填的人多半是真的在搬运。举证的责任放在搬运那一侧,原创标签才有意义。
标签本身不创造价值,能用标签筛出东西才行。原创 tab 要解决的具体问题是:搬运来的 skill 数量上天然占优,团队自己写的那几个会被淹没。给它们一个单独的入口,是为了让"我们自己产出了什么"这件事看得见。
三件事其实是一件事
前两件是一件事的两面:让 skill 留在 GitLab 上,SkillHub 少当仓库、多当索引。第三件事恰好是在这个前提下才更必要——当"搬运一个 skill"变得几乎没有成本时,谁在原创就得说清楚。
有一点得说清楚:上面这三样改动目前只跑在内网那一套上。内网的代码没法导出到外网,所以开源仓库暂时还是早先那一版,这些功能都还没进去——现在装到的还是老版本。
源码在 github.com/mikigo/skillhub-selfhost,Apache-2.0。
用的人最少的那条路
有件事值得记一下:最初想的那条路——拖拽上传、带版本管理——现在反而是用的人最少的一条。
做之前我以为版本管理是这个集市的核心,理由也说得通:skill 会一直更新,总得能回滚。真用起来才发现,内网的 skill 大多跟着仓库走,大家要的是"仓库改了,集市上自动就是新的",而不是"我能回到上一版"。
需求是从用户使用里长出来的,不是想出来的。想出来的那部分,得等真有人用了,才知道它到底算不算需求。