mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 05:50:44 +08:00
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
6.7 KiB
6.7 KiB
Skill 安装流程详细指南
本文档详细描述单个 skill 的安装流程,包括所有分支逻辑和异常处理。
流程图
开始
↓
接收用户输入 (URL / 名称 / GitHub短链)
↓
检测运行平台
↓
判断输入类型
├── URL ─────────→ 下载内容 ──→ 保存临时文件 ──→ 平台安装 ──→ 清理 ──→ 完成
│ ↑ │
│ └──────── 失败 ──────────────┘
│
├── 名称 ─────────→ Cocoloop API 搜索
│ │
成功? ──是──→ 展示结果 ──→ 用户确认 ──→ 下载安装 ──→ 完成
│ │否
│ ↓
│ clawhub install
│ │
成功? ──是──→ 完成
│ │否
│ ↓
│ GitHub API 搜索
│ │
成功? ──是──→ 展示结果 ──→ 用户确认 ──→ 下载安装 ──→ 完成
│ │否
│ ↓
│ 返回错误
│
└── GitHub短链 ───→ 获取仓库信息 ──→ 确认SKILL.md存在 ──→ 下载安装 ──→ 完成
详细步骤
第一步:平台检测
检测逻辑:
IF 环境变量 OPENCLAW_HOME 存在 或 /usr/local/openclaw 存在:
平台 = OpenClaw
安装命令 = "openclaw skills install"
安装目录 = ~/.openclaw/skills/
ELSE IF 环境变量 MOLILI_HOME 存在 或 /usr/local/molili 存在:
平台 = Molili
安装命令 = "molili skills install"
安装目录 = ~/.molili/skills/
ELSE IF 环境变量 CLAUDE_CODE_HOME 存在 或 /usr/local/claude-code 存在:
平台 = Claude Code
安装命令 = "claude skills install"
安装目录 = ~/.claude/skills/
ELSE:
平台 = 通用 (clawhub fallback)
安装命令 = "npx clawhub@latest install"
安装目录 = ~/.claude/skills/ (或 clawhub 默认目录)
第二步:URL 安装流程
完整流程:
-
发送 HTTP GET 请求
- URL: 用户提供的地址
- Headers:
User-Agent: Cocoloop-Skill-Manager/1.0
-
处理响应
- 状态码 200 → 获取内容,进入步骤 3
- 状态码 3xx → 从 Location header 获取跳转 URL,递归步骤 1
- 其他状态码 → 返回错误
-
保存临时文件
- 临时路径:
/tmp/cocoloop-{timestamp}.skill - 写入下载内容
- 临时路径:
-
执行平台安装命令
{platform.installCmd} /tmp/cocoloop-{timestamp}.skill -
清理与返回
- 安装成功 → 删除临时文件 → 返回成功
- 安装失败 → 保留临时文件(便于调试)→ 返回错误
异常处理:
| 异常情况 | 处理方式 |
|---|---|
| URL 无法访问 | 返回错误 "无法访问该 URL,请检查网络连接或 URL 是否正确" |
| 重定向过多 | 返回错误 "该 URL 重定向次数过多,可能存在循环跳转" |
| 下载内容为空 | 返回错误 "下载内容为空,请检查 URL 是否正确" |
| 安装命令失败 | 返回错误 "安装失败,临时文件保留在 {path},可尝试手动安装" |
第三步:名称搜索安装流程
3.1 Cocoloop API 搜索
请求:
GET https://api.cocoloop.cn/search={encoded_query}
成功响应示例:
{
"results": [
{
"name": "pdf-processor",
"description": "PDF processing and manipulation skill",
"url": "https://skills.cocoloop.cn/pdf-processor/v1.0.0.skill",
"version": "1.0.0",
"author": "cocoloop-team",
"downloads": 1500,
"rating": "S"
}
],
"total": 1
}
处理:
- 如果 results.length > 0 → 展示结果,询问用户选择
- 如果 results.length = 0 或 API 失败 → 进入 3.2
3.2 clawhub Fallback
执行:
npx clawhub@latest install {skill_name}
处理:
- 成功 → 完成安装
- 失败(退出码非0)→ 进入 3.3
3.3 GitHub API 搜索
请求:
GET https://api.github.com/search/repositories?q={query}+filename:SKILL.md&sort=stars&order=desc
Headers:
User-Agent: Cocoloop-Skill-Manager/1.0
成功响应处理:
results = data.items
.filter(repo => repo.name.includes(query) || repo.description?.includes(query))
.map(repo => ({
name: repo.name,
fullName: repo.full_name,
description: repo.description,
url: repo.html_url,
stars: repo.stargazers_count,
owner: {
name: repo.owner.login,
type: repo.owner.type // 'User' 或 'Organization'
}
}))
.slice(0, 5) // 取前5个
展示格式:
📋 GitHub 搜索结果 (找到 {total} 个):
1. company/pdf-processor ⭐ 1250
🏢 Organization | Advanced PDF processing tools
2. user/simple-pdf ⭐ 45
👤 User | Basic PDF operations
请选择要安装的 skill (输入序号,或输入 0 取消):
用户选择后:
- 获取仓库详情(确认存在 SKILL.md)
- 询问用户确认安装
- 下载 raw SKILL.md 和相关资源
- 打包为 .skill 文件(如果需要)
- 执行平台安装
第四步:GitHub 短链安装流程
输入格式识别:
- 包含
/但不以http开头 - 格式:
owner/repo或owner/repo/subpath
处理流程:
- 解析 owner 和 repo
- 调用 GitHub API 获取仓库信息:
GET https://api.github.com/repos/{owner}/{repo} - 检查是否存在 SKILL.md:
GET https://api.github.com/repos/{owner}/{repo}/contents/SKILL.md - 如果存在 → 展示仓库信息,询问确认
- 下载并安装
第五步:安全检查(可选但推荐)
在安装前或安装后,询问用户是否进行安全检查:
⚠️ 安全提醒: 该 skill 来源为 {source_level},建议进行安全检查。
是否进行 BSS 安全认证检查? [Y/n]
如果用户选择是:
- 执行 safety-check-guide.md 和 cocoloop-safe-check.md 中的检查流程
- 生成报告
- 如果评级 <= B,询问用户是否继续安装
安装后处理
安装完成后,执行:
- 验证安装是否成功(检查安装目录)
- 如果是更新操作,清理旧版本备份
- 可选:显示 skill 使用帮助
✅ 安装成功! Skill: pdf-processor 版本: 1.0.0 来源: cocoloop (S级认证) 使用方式: - 转换 PDF: 使用 pdf-processor 转换 xxx.pdf 为 docx - 合并 PDF: 使用 pdf-processor 合并 a.pdf b.pdf