# use_vala_skillhub 管理 Vala SkillHub 上的技能:推送(上传)和安装。 SkillHub 基于 Gitea,每个技能对应一个 Git 仓库。 ## 命名规则 仓库名格式:`{skill_name}.{source_name}` - `skill_name`:技能目录名(如 `cron_job`、`web_scraper`) - `source_name`:来源名称,即当前数字员工的 name(如 `xiaoxi`) - 如果 `source_name` 为 `vala`,表示公司级别的官方技能 示例: - `cron_job.xiaoxi` — xiaoxi 的定时任务技能 - `web_scraper.vala` — 公司官方的爬虫技能 ## 配置 操作前需要确认以下配置(保存到 `~/.vala_skillhub_config`): | 配置项 | 说明 | 默认值 | |--------|------|--------| | `GITEA_URL` | Gitea 服务地址 | `https://git.valavala.com` | | `GITEA_TOKEN` | Gitea API Token(需有创建仓库和推送权限) | — | | `GITEA_OWNER` | SkillHub 统一账号 | `skillhub` | | `SOURCE_NAME` | 当前数字员工的 name,用于组合仓库名 | — | 如果配置文件不存在,请询问用户获取以上信息后创建: ```bash cat > ~/.vala_skillhub_config < GITEA_OWNER=skillhub SOURCE_NAME= EOF ``` 后续操作前先加载配置: ```bash source ~/.vala_skillhub_config ``` --- ## 操作一:推送技能到 SkillHub 将本地 `./skills` 下的技能目录推送到 SkillHub。 ### 流程 1. **确定仓库名**:`repo_name = {skill_dir_name}.{SOURCE_NAME}` 2. **检查远程仓库是否存在**: ```bash curl -s -o /dev/null -w "%{http_code}" \ "${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}" \ -H "Authorization: token ${GITEA_TOKEN}" ``` - 返回 200 → 仓库已存在,跳到步骤 4 - 返回 404 → 需要创建,执行步骤 3 3. **创建远程仓库**: ```bash curl -s -X POST "${GITEA_URL}/api/v1/user/repos" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d '{"name": "'${repo_name}'", "private": false, "description": "技能描述", "auto_init": false}' ``` 4. **在技能目录中初始化 Git 并推送**: ```bash cd ./skills/ git init git checkout -b main git add -A git commit -m "update: sync skill" git remote add origin https://oauth2:${GITEA_TOKEN}@${GITEA_URL#https://}/${GITEA_OWNER}/${repo_name}.git git push -u origin main --force ``` 5. **推送后清理 token**(安全起见): ```bash git remote set-url origin ${GITEA_URL}/${GITEA_OWNER}/${repo_name}.git ``` ### 批量推送 遍历 `./skills/` 下所有子目录,对每个目录重复以上流程。注意跳过 `use_vala_skillhub` 目录本身。 --- ## 操作二:从 SkillHub 安装技能 将 SkillHub 上的技能克隆到本地 `./skills` 目录。 ### 流程 1. **确定要安装的仓库名**(完整名,如 `cron_job.xiaoxi`) 2. **检查本地是否已存在**: - 已存在 → `git pull` 更新 - 不存在 → `git clone` ```bash repo_name="cron_job.xiaoxi" target_dir="./skills/${repo_name}" if [ -d "$target_dir" ]; then cd "$target_dir" && git pull else git clone "${GITEA_URL}/${GITEA_OWNER}/${repo_name}.git" "$target_dir" fi ``` --- ## 操作三:列出 SkillHub 上的技能 ```bash curl -s "${GITEA_URL}/api/v1/users/${GITEA_OWNER}/repos?page=1&limit=50&sort=updated" \ -H "Authorization: token ${GITEA_TOKEN}" ``` 返回 JSON 数组,每个元素包含 `name`、`description`、`updated_at` 等字段。如结果满 50 条,继续翻页 `page=2`。