mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-10 03:53:16 +08:00
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
245 lines
6.7 KiB
Markdown
245 lines
6.7 KiB
Markdown
# 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 安装流程
|
||
|
||
完整流程:
|
||
|
||
1. **发送 HTTP GET 请求**
|
||
- URL: 用户提供的地址
|
||
- Headers:
|
||
```
|
||
User-Agent: Cocoloop-Skill-Manager/1.0
|
||
```
|
||
|
||
2. **处理响应**
|
||
- 状态码 200 → 获取内容,进入步骤 3
|
||
- 状态码 3xx → 从 Location header 获取跳转 URL,递归步骤 1
|
||
- 其他状态码 → 返回错误
|
||
|
||
3. **保存临时文件**
|
||
- 临时路径: `/tmp/cocoloop-{timestamp}.skill`
|
||
- 写入下载内容
|
||
|
||
4. **执行平台安装命令**
|
||
```bash
|
||
{platform.installCmd} /tmp/cocoloop-{timestamp}.skill
|
||
```
|
||
|
||
5. **清理与返回**
|
||
- 安装成功 → 删除临时文件 → 返回成功
|
||
- 安装失败 → 保留临时文件(便于调试)→ 返回错误
|
||
|
||
异常处理:
|
||
|
||
| 异常情况 | 处理方式 |
|
||
|---------|---------|
|
||
| URL 无法访问 | 返回错误 "无法访问该 URL,请检查网络连接或 URL 是否正确" |
|
||
| 重定向过多 | 返回错误 "该 URL 重定向次数过多,可能存在循环跳转" |
|
||
| 下载内容为空 | 返回错误 "下载内容为空,请检查 URL 是否正确" |
|
||
| 安装命令失败 | 返回错误 "安装失败,临时文件保留在 {path},可尝试手动安装" |
|
||
|
||
### 第三步:名称搜索安装流程
|
||
|
||
#### 3.1 Cocoloop API 搜索
|
||
|
||
请求:
|
||
```
|
||
GET https://api.cocoloop.cn/search={encoded_query}
|
||
```
|
||
|
||
成功响应示例:
|
||
```json
|
||
{
|
||
"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
|
||
|
||
执行:
|
||
```bash
|
||
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
|
||
```
|
||
|
||
成功响应处理:
|
||
```javascript
|
||
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 取消):
|
||
```
|
||
|
||
用户选择后:
|
||
1. 获取仓库详情(确认存在 SKILL.md)
|
||
2. 询问用户确认安装
|
||
3. 下载 raw SKILL.md 和相关资源
|
||
4. 打包为 .skill 文件(如果需要)
|
||
5. 执行平台安装
|
||
|
||
### 第四步:GitHub 短链安装流程
|
||
|
||
输入格式识别:
|
||
- 包含 `/` 但不以 `http` 开头
|
||
- 格式:`owner/repo` 或 `owner/repo/subpath`
|
||
|
||
处理流程:
|
||
1. 解析 owner 和 repo
|
||
2. 调用 GitHub API 获取仓库信息:
|
||
```
|
||
GET https://api.github.com/repos/{owner}/{repo}
|
||
```
|
||
3. 检查是否存在 SKILL.md:
|
||
```
|
||
GET https://api.github.com/repos/{owner}/{repo}/contents/SKILL.md
|
||
```
|
||
4. 如果存在 → 展示仓库信息,询问确认
|
||
5. 下载并安装
|
||
|
||
### 第五步:安全检查(可选但推荐)
|
||
|
||
在安装前或安装后,询问用户是否进行安全检查:
|
||
|
||
```
|
||
⚠️ 安全提醒: 该 skill 来源为 {source_level},建议进行安全检查。
|
||
是否进行 BSS 安全认证检查? [Y/n]
|
||
```
|
||
|
||
如果用户选择是:
|
||
1. 执行 [safety-check-guide.md](safety-check-guide.md) 和 [cocoloop-safe-check.md](cocoloop-safe-check.md) 中的检查流程
|
||
2. 生成报告
|
||
3. 如果评级 <= B,询问用户是否继续安装
|
||
|
||
## 安装后处理
|
||
|
||
安装完成后,执行:
|
||
1. 验证安装是否成功(检查安装目录)
|
||
2. 如果是更新操作,清理旧版本备份
|
||
3. 可选:显示 skill 使用帮助
|
||
```
|
||
✅ 安装成功!
|
||
|
||
Skill: pdf-processor
|
||
版本: 1.0.0
|
||
来源: cocoloop (S级认证)
|
||
|
||
使用方式:
|
||
- 转换 PDF: 使用 pdf-processor 转换 xxx.pdf 为 docx
|
||
- 合并 PDF: 使用 pdf-processor 合并 a.pdf b.pdf
|
||
```
|