技能全部升级
批量检查已安装的 SkillHub 技能并升级到最新版本,支持 skillhub 和 clawhub 两种 CLI 工具。
快速导航
| 用户意图 | 执行流程 |
|---|---|
| 批量升级所有技能 | → 1. 环境检测 → 2. 列出已安装技能 → 3. 逐个升级 |
| 升级指定技能 | → 1. 环境检测 → 2. 执行单个升级 |
| 仅查看可升级列表 | → 1. 环境检测 → 2. 列出技能及版本 |
AI 使用指南
场景判断
- 用户说「批量升级」「升级所有技能」→ 执行批量升级流程
- 用户说「升级 <技能名>」→ 执行单个升级
- 用户说「查看已安装技能」「有哪些技能」→ 仅列出,不升级
核心原则
- 优先使用 skillhub:所有操作优先使用
skillhub,不可用时回退到clawhub - 路径自动修正:skillhub 可能安装在
/root/.local/bin/skillhub,需先检测并修正 PATH - 逐个升级:依次升级每个技能,单个失败不影响其他
- 结果汇总:升级完成后汇总成功、失败和跳过的数量
操作流程
1. 环境检测
# 检测并修正 skillhub 路径
export PATH="$HOME/.local/bin:$PATH"
(command -v skillhub >/dev/null 2>&1 && skillhub --version) 2>/dev/null || \
(command -v clawhub >/dev/null 2>&1 && clawhub --cli-version) 2>/dev/null || \
echo "错误:未找到 skillhub 或 clawhub,请先安装"
2. 列出已安装技能
export PATH="$HOME/.local/bin:$PATH"
(command -v skillhub >/dev/null 2>&1 && skillhub list) 2>/dev/null || \
clawhub list 2>/dev/null
3. 批量升级
export PATH="$HOME/.local/bin:$PATH"
# 获取已安装技能列表
技能列表=$((command -v skillhub >/dev/null 2>&1 && skillhub list --json) 2>/dev/null || clawhub list --json 2>/dev/null)
# 逐个升级
成功数=0
失败数=0
for 技能 in $(echo "$技能列表" | jq -r '.[].name' 2>/dev/null); do
echo "正在升级:$技能"
if (command -v skillhub >/dev/null 2>&1 && skillhub upgrade "$技能" --yes) 2>/dev/null || \
clawhub upgrade "$技能" --yes 2>/dev/null; then
echo " ✓ 升级成功"
((成功数++))
else
echo " ✗ 升级失败"
((失败数++))
fi
done
echo ""
echo "========================================="
echo " 升级完成:成功 $成功数 个,失败 $失败数 个"
echo "========================================="
4. 升级单个技能
export PATH="$HOME/.local/bin:$PATH"
技能名称="<技能名称>"
(command -v skillhub >/dev/null 2>&1 && skillhub upgrade "$技能名称" --yes) 2>/dev/null || \
clawhub upgrade "$技能名称" --yes 2>/dev/null
完整批量升级脚本
#!/bin/bash
export PATH="$HOME/.local/bin:$PATH"
# === 检测命令行工具 ===
if command -v skillhub >/dev/null 2>&1; then
命令行工具="skillhub"
工具版本=$($命令行工具 --version 2>/dev/null || $命令行工具 -v 2>/dev/null)
elif command -v clawhub >/dev/null 2>&1; then
命令行工具="clawhub"
工具版本=$($命令行工具 --cli-version 2>/dev/null)
else
echo "错误:未找到 skillhub 或 clawhub"
exit 1
fi
echo "使用工具:$命令行工具 ($工具版本)"
# === 获取已安装技能列表 ===
echo "正在获取已安装技能列表..."
技能列表=$($命令行工具 list 2>&1)
if [ -z "$技能列表" ] || echo "$技能列表" | grep -q "No installed"; then
echo "当前没有已安装的技能"
exit 0
fi
echo "$技能列表"
echo ""
# === 提取技能名称并逐个升级 ===
成功数=0
失败数=0
跳过数=0
# 尝试解析技能名称(适配不同输出格式)
技能名称列表=$(echo "$技能列表" | grep -oE '[a-zA-Z0-9_-]+' | grep -vE '^(skillhub|clawhub|No|installed|skills)$' | sort -u)
for 技能 in $技能名称列表; do
echo "正在升级:$技能"
if $命令行工具 upgrade "$技能" --yes 2>&1 | grep -qE '(upgraded|already up to date|已是最新)'; then
echo " ✓ 完成"
((成功数++))
else
echo " ✗ 失败"
((失败数++))
fi
done
echo ""
echo "========================================="
echo " 升级完成:成功 $成功数 个,失败 $失败数 个"
echo "========================================="
交互示例
示例 1:批量升级所有技能
用户:「批量升级所有技能」
执行流程:
1. 检测 skillhub 是否可用
2. 列出已安装技能
3. 逐个执行升级
4. 汇总成功/失败数量
示例 2:升级指定技能
用户:「升级 server-chinese-setup 技能」
执行流程:
1. 检测环境
2. 执行 skillhub upgrade server-chinese-setup --yes
3. 汇报结果
故障排查
| 问题 | 解决方案 |
|---|---|
| skillhub 命令未找到 | export PATH="$HOME/.local/bin:$PATH" |
| 没有已安装的技能 | 先通过 skillhub install <技能名> 安装 |
| 升级失败 | 检查网络连接,或尝试 skillhub self-upgrade 先升级 CLI |
| 部分技能升级失败 | 不影响其他技能,可单独重试失败的技能 |