diff --git a/README.md b/README.md index ae322e1..ffc0fe5 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,15 @@ Vala SkillHub 技能管理 —— 让数字员工推送和安装技能。 ## 功能 - **推送技能**:将本地 `./skills` 下的技能上传到 SkillHub(Gitea 仓库) -- **安装技能**:从 SkillHub 克隆技能到本地 `./skills` 目录 +- **安装技能**:从 SkillHub 下载技能到本地 `./skills` 目录 - **查看技能**:列出 SkillHub 上的所有技能 +## 设计要点 + +推送和安装均不在 `./skills` 目录内产生 `.git`,确保不影响 workspace 级别的 git 备份: +- **推送**:复制到 `./tmp/skill_push/` 临时目录,完成 git 推送后清理 +- **安装**:通过 Gitea API 下载归档解压,不使用 git clone + ## 命名规则 仓库名 = `技能名` + `.` + `来源名` @@ -24,10 +30,10 @@ Vala SkillHub 技能管理 —— 让数字员工推送和安装技能。 首次使用需提供配置,保存在 `~/.vala_skillhub_config`: - `GITEA_URL` — Gitea 服务地址(默认 `https://git.valavala.com`) -- `GITEA_TOKEN` — API Token -- `GITEA_OWNER` — SkillHub 账号(默认 `skillhub`) +- `GITEA_TOKEN` — API Token(需有组织仓库的创建和推送权限) +- `GITEA_OWNER` — SkillHub 组织名(默认 `vala_skillhub`) - `SOURCE_NAME` — 当前数字员工的 name ## 使用方式 -本技能面向 AI 数字员工使用。请参阅 `SKILL.md` 了解完整操作流程和关键命令。 +本技能面向 AI 数字员工使用。请参阅 `SKILL.md` 了解完整操作流程和命令。 diff --git a/SKILL.md b/SKILL.md index 9473888..e0f148e 100644 --- a/SKILL.md +++ b/SKILL.md @@ -2,7 +2,7 @@ 管理 Vala SkillHub 上的技能:推送(上传)和安装。 -SkillHub 基于 Gitea,每个技能对应一个 Git 仓库。 +SkillHub 基于 Gitea,每个技能对应一个独立的 Git 仓库。推送时使用 `./tmp` 临时目录,不在 `./skills` 内创建 `.git`,避免影响 workspace 级别的 git 备份。 ## 命名规则 @@ -24,7 +24,7 @@ SkillHub 基于 Gitea,每个技能对应一个 Git 仓库。 |--------|------|--------| | `GITEA_URL` | Gitea 服务地址 | `https://git.valavala.com` | | `GITEA_TOKEN` | Gitea API Token(需有创建仓库和推送权限) | — | -| `GITEA_OWNER` | SkillHub 统一账号 | `skillhub` | +| `GITEA_OWNER` | SkillHub 组织名 | `vala_skillhub` | | `SOURCE_NAME` | 当前数字员工的 name,用于组合仓库名 | — | 如果配置文件不存在,请询问用户获取以上信息后创建: @@ -33,7 +33,7 @@ SkillHub 基于 Gitea,每个技能对应一个 Git 仓库。 cat > ~/.vala_skillhub_config < -GITEA_OWNER=skillhub +GITEA_OWNER=vala_skillhub SOURCE_NAME= EOF ``` @@ -49,6 +49,8 @@ source ~/.vala_skillhub_config 将本地 `./skills` 下的技能目录推送到 SkillHub。 +**核心原则**:使用 `./tmp/skill_push/` 作为临时工作区,不在 `./skills` 内执行任何 git 操作,保持 workspace 干净。 + ### 流程 1. **确定仓库名**:`repo_name = {skill_dir_name}.{SOURCE_NAME}` @@ -64,26 +66,36 @@ source ~/.vala_skillhub_config 3. **创建远程仓库**: ```bash - curl -s -X POST "${GITEA_URL}/api/v1/user/repos" \ + curl -s -X POST "${GITEA_URL}/api/v1/orgs/${GITEA_OWNER}/repos" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d '{"name": "'${repo_name}'", "private": false, "description": "技能描述", "auto_init": false}' ``` -4. **在技能目录中初始化 Git 并推送**: +4. **复制到临时目录并推送**: ```bash - cd ./skills/ + # 清理并准备临时目录 + rm -rf ./tmp/skill_push/${repo_name} + mkdir -p ./tmp/skill_push/${repo_name} + + # 复制技能内容(不含隐藏文件的 .git 等) + cp -r ./skills/${skill_dir_name}/* ./tmp/skill_push/${repo_name}/ + cp -r ./skills/${skill_dir_name}/.[!.]* ./tmp/skill_push/${repo_name}/ 2>/dev/null || true + + # 在临时目录中执行 git 操作 + cd ./tmp/skill_push/${repo_name} git init git checkout -b main git add -A - git commit -m "update: sync skill" + git commit -m "update: sync skill $(date +%Y-%m-%d)" git remote add origin https://oauth2:${GITEA_TOKEN}@${GITEA_URL#https://}/${GITEA_OWNER}/${repo_name}.git git push -u origin main --force ``` -5. **推送后清理 token**(安全起见): +5. **清理临时目录**: ```bash - git remote set-url origin ${GITEA_URL}/${GITEA_OWNER}/${repo_name}.git + cd - + rm -rf ./tmp/skill_push/${repo_name} ``` ### 批量推送 @@ -94,25 +106,28 @@ source ~/.vala_skillhub_config ## 操作二:从 SkillHub 安装技能 -将 SkillHub 上的技能克隆到本地 `./skills` 目录。 +将 SkillHub 上的技能下载到本地 `./skills` 目录。 + +**注意**:不使用 `git clone`,而是下载归档解压,避免在 `./skills` 下产生 `.git` 目录。 ### 流程 1. **确定要安装的仓库名**(完整名,如 `cron_job.xiaoxi`) -2. **检查本地是否已存在**: - - 已存在 → `git pull` 更新 - - 不存在 → `git clone` - +2. **下载并解压**: ```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 + + mkdir -p "${target_dir}" + + # 通过 Gitea API 下载 tar.gz 归档并解压(自动尝试 main/master) + curl -sL "${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}/archive/main.tar.gz" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + | tar xz --strip-components=1 -C "${target_dir}" 2>/dev/null \ + || curl -sL "${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}/archive/master.tar.gz" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + | tar xz --strip-components=1 -C "${target_dir}" ``` --- @@ -120,7 +135,7 @@ source ~/.vala_skillhub_config ## 操作三:列出 SkillHub 上的技能 ```bash -curl -s "${GITEA_URL}/api/v1/users/${GITEA_OWNER}/repos?page=1&limit=50&sort=updated" \ +curl -s "${GITEA_URL}/api/v1/orgs/${GITEA_OWNER}/repos?page=1&limit=50&sort=updated" \ -H "Authorization: token ${GITEA_TOKEN}" ``` diff --git a/skill.json b/skill.json index c486a69..6cbb236 100644 --- a/skill.json +++ b/skill.json @@ -1,8 +1,8 @@ { "name": "use_vala_skillhub", - "version": "2.0.0", - "description": "管理 Vala SkillHub 上的技能:推送和安装", + "version": "3.0.0", + "description": "管理 Vala SkillHub 上的技能:推送和安装(通过临时目录,不影响 workspace git 备份)", "author": "vala", - "tags": ["skillhub", "git", "管理"], + "tags": ["skillhub", "git", "管理", "备份"], "config_file": "~/.vala_skillhub_config" }