下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/playable--playable-skill-installer.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @playable/playable-skill-installer。- Install internal WorkBuddy skills from the CNB repo playable/workbuddy/playable-skill. Connector-first, login-fallback. Trigger when the user says '
- 安装 playable skill <
- slug>
- '
- , '
- 从 CNB 装 <
- …(完整说明见下方「阅读全文」)
阅读全文 (展开查看完整说明)
概述
playable-skill-installer
从内部 CNB 仓库 playable/workbuddy/playable-skill 的 skills/<slug>/ 目录,把指定技能包安装到本机 ~/.workbuddy/skills/<slug>/。
鉴权策略:连接器优先、登录态回退。
- 连接器优先:若 WorkBuddy 已连接 CNB 连接器(cnb-api / cnb-woa),优先用其提供的仓库归档 / 原始内容读取能力拉取
skills/<slug>(连接器自动携带鉴权,用户无需关心 token)。 - 登录态回退:若无可用连接器,运行本技能自带的
scripts/install.sh <slug> [branch](macOS/Linux)或scripts/install.ps1 <slug> [branch](Windows),它读取本地cnb login的~/.cnb/token(取其access_token),或环境变量CNB_TOKEN。
触发词
- “安装 playable skill <slug>” / “装一下 <slug> 技能”
- “从 CNB 装 <slug>” / “从 playable-skill 仓库安装 <slug>”
- 用户给出
playable/workbuddy/playable-skill与某个技能 slug,要求安装
执行步骤
- 解析参数:从用户语句中提取必填的
<slug>(技能包名);可选<branch>,默认main。 - 连接器优先:检查当前是否有可用的 CNB 连接器工具(如
cnb-api/cnb-woa连接器提供的仓库归档 / 文件内容读取工具)。若有,调用它拉取
playable/workbuddy/playable-skill 在 <branch> 分支下 skills/<slug> 路径的归档/原始内容,落盘为临时 .tgz,跳到第 4 步。
- 登录态回退:若无连接器,执行(macOS/Linux):
bash "<skill_dir>/scripts/install.sh" "<slug>" ["<branch>"](Windows 用 pwsh "<skill_dir>/scripts/install.ps1" "<slug>" ["<branch>"])。脚本会自动取 token 并下载,成功则直接跳到第 5 步;若报“未找到 CNB 凭证”,提示用户先 cnb login 或连接 CNB 连接器。
- (仅连接器路径)解包:若第 2 步拿到的是原始归档字节,将其写入临时
.tgz,校验 gzip 魔数(前 2 字节1f 8b),然后解压到临时目录,再把内层skills/<slug>移动到~/.workbuddy/skills/<slug>(见下方“重要约束”)。 - 校验与反馈:确认
~/.workbuddy/skills/<slug>/SKILL.md存在;告知用户“新开一个 WorkBuddy 对话后,该技能会按触发词自动加载”。
重要约束(已实测,必须遵守)
- CNB 归档实时生成、无需手工打包:
https://api.cnb.cool/<org>/<repo>/-/git/archive/<branch>/<path>在请求时由平台实时把该路径子树打成 gzip(tar.gz) 返回。你只需把技能作为普通文件提交到仓库skills/<slug>/即可。 - tar 包保留路径前缀:解压后顶层是
skills/<slug>/(不是<slug>/)。切勿直接tar -xzf ... -C ~/.workbuddy/skills/(会多套一层skills/)。正确做法:先解到临时目录,再mv <tmp>/skills/<slug> ~/.workbuddy/skills/<slug>。 - 路径不存在 → 500 + JSON(非 404):请求
skills/<slug>但该路径在仓库中不存在时,CNB 返回 HTTP 500 且 body 是 JSON,不是 gzip。安装前必须用 gzip 魔数 校验返回体,非 gzip 即报错退出,避免把错误 JSON 当归档解压。 - 公开仓库也要 Bearer:CNB 归档接口即使是公开仓库也必须带
Authorization: Bearer <token>,无法匿名下载。因此“完全免 token 的纯 HTTPS 直链”在 CNB 原生能力下做不到;token 由连接器或cnb login集中托管即可。 cnbCLI 的get-archive不可用:该命令强制Accept: application/vnd.cnb.api+json,会把归档二进制吞掉。请走上面的直连 HTTP(连接器或 install 脚本内已处理)。- 机密勿入包:技能包内不要放密钥;调用内部 API 时走环境变量。
自定义仓库(可选)
默认仓库固定为 playable/workbuddy/playable-skill。如需指向其他仓库,可用环境变量覆盖:CNB_SKILL_REPO(默认 playable/workbuddy/playable-skill)、CNB_SKILL_BRANCH(默认 main)、CNB_API_ENDPOINT(默认 https://api.cnb.cool)。