254 lines
4.8 KiB
Markdown
254 lines
4.8 KiB
Markdown
|
|
# GetSkill 项目总结
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
**GetSkill** 是一个用于管理 OpenClaw 技能的命令行工具,支持从 getskill.work 搜索、安装和更新技能文件。
|
|||
|
|
|
|||
|
|
## 核心特性
|
|||
|
|
|
|||
|
|
### 1. 零外部依赖
|
|||
|
|
- 仅使用 Node.js 内置模块
|
|||
|
|
- 轻量级,安装快速
|
|||
|
|
- 无需担心依赖冲突
|
|||
|
|
|
|||
|
|
### 2. Git 集成
|
|||
|
|
- 自动检测 Git 安装状态
|
|||
|
|
- Windows 平台自动下载 Git 安装程序
|
|||
|
|
- macOS/Linux 提供安装指南
|
|||
|
|
- 通过 Git 管理技能版本
|
|||
|
|
|
|||
|
|
### 3. 跨平台支持
|
|||
|
|
- Windows (32/64位)
|
|||
|
|
- macOS
|
|||
|
|
- Linux (多发行版)
|
|||
|
|
- 自动适配操作系统路径
|
|||
|
|
|
|||
|
|
### 4. 双目录架构
|
|||
|
|
```
|
|||
|
|
~/.claude/
|
|||
|
|
├── skills/ # 技能文件(.md)
|
|||
|
|
└── skills-cache/ # Git 仓库缓存
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 技术架构
|
|||
|
|
|
|||
|
|
### 依赖模块(全部为 Node.js 内置)
|
|||
|
|
|
|||
|
|
| 模块 | 用途 |
|
|||
|
|
|------|------|
|
|||
|
|
| `https/http` | API 请求和文件下载 |
|
|||
|
|
| `fs` | 文件系统操作 |
|
|||
|
|
| `path` | 路径处理 |
|
|||
|
|
| `os` | 系统信息获取 |
|
|||
|
|
| `child_process` | 执行 Git 命令 |
|
|||
|
|
|
|||
|
|
### 核心函数
|
|||
|
|
|
|||
|
|
| 函数 | 功能 |
|
|||
|
|
|------|------|
|
|||
|
|
| `searchSkills()` | 从 API 搜索技能 |
|
|||
|
|
| `downloadSkill()` | 安装技能(Git clone) |
|
|||
|
|
| `updateSkill()` | 更新技能(Git pull) |
|
|||
|
|
| `checkGitInstalled()` | 检测 Git |
|
|||
|
|
| `ensureGitInstalled()` | 确保 Git 可用 |
|
|||
|
|
| `cloneOrUpdateRepo()` | Git 仓库管理 |
|
|||
|
|
| `copySkillFiles()` | 复制技能文件 |
|
|||
|
|
|
|||
|
|
## API 接口设计
|
|||
|
|
|
|||
|
|
### 搜索接口
|
|||
|
|
```
|
|||
|
|
GET https://getskill.work/api/skills/search?q=<关键词>
|
|||
|
|
|
|||
|
|
Response:
|
|||
|
|
{
|
|||
|
|
"skills": [
|
|||
|
|
{
|
|||
|
|
"id": "skill-id",
|
|||
|
|
"name": "skill-name",
|
|||
|
|
"description": "描述",
|
|||
|
|
"git_url": "https://github.com/...",
|
|||
|
|
"author": "作者"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 详情接口
|
|||
|
|
```
|
|||
|
|
GET https://getskill.work/api/skills/<技能ID>
|
|||
|
|
|
|||
|
|
Response:
|
|||
|
|
{
|
|||
|
|
"id": "skill-id",
|
|||
|
|
"name": "skill-name",
|
|||
|
|
"git_url": "https://github.com/...",
|
|||
|
|
"description": "描述",
|
|||
|
|
"files": ["skill.md"],
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 命令行界面
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 搜索
|
|||
|
|
getskill search <关键词>
|
|||
|
|
|
|||
|
|
# 安装
|
|||
|
|
getskill install <技能名称>
|
|||
|
|
|
|||
|
|
# 更新
|
|||
|
|
getskill update <技能名称>
|
|||
|
|
|
|||
|
|
# 列出
|
|||
|
|
getskill list
|
|||
|
|
|
|||
|
|
# 路径
|
|||
|
|
getskill path
|
|||
|
|
|
|||
|
|
# 清理
|
|||
|
|
getskill clean
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 文件结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
getskill/
|
|||
|
|
├── index.js # 主程序(578 行)
|
|||
|
|
├── package.json # 项目配置
|
|||
|
|
├── README.md # 使用文档
|
|||
|
|
├── EXAMPLES.md # 使用示例
|
|||
|
|
├── CONTRIBUTING.md # 贡献指南
|
|||
|
|
├── CHANGELOG.md # 变更日志
|
|||
|
|
├── LICENSE # MIT 许可证
|
|||
|
|
├── verify.js # 验证脚本
|
|||
|
|
├── .gitignore # Git 忽略文件
|
|||
|
|
└── .npmignore # NPM 忽略文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发统计
|
|||
|
|
|
|||
|
|
- **总代码行数**: ~580 行(index.js)
|
|||
|
|
- **函数数量**: 15+ 个
|
|||
|
|
- **支持的命令**: 6 个
|
|||
|
|
- **支持的平台**: 3 个(Windows/macOS/Linux)
|
|||
|
|
- **外部依赖**: 0 个
|
|||
|
|
|
|||
|
|
## 工作流程
|
|||
|
|
|
|||
|
|
### 安装流程
|
|||
|
|
```
|
|||
|
|
用户执行: getskill install commit-helper
|
|||
|
|
↓
|
|||
|
|
检查 Git 是否安装
|
|||
|
|
↓
|
|||
|
|
调用 API 获取技能详情(含 git_url)
|
|||
|
|
↓
|
|||
|
|
执行 git clone 到缓存目录
|
|||
|
|
↓
|
|||
|
|
复制 .md 文件到 skills 目录
|
|||
|
|
↓
|
|||
|
|
完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 更新流程
|
|||
|
|
```
|
|||
|
|
用户执行: getskill update commit-helper
|
|||
|
|
↓
|
|||
|
|
检查缓存目录是否存在仓库
|
|||
|
|
↓
|
|||
|
|
进入仓库目录
|
|||
|
|
↓
|
|||
|
|
执行 git pull
|
|||
|
|
↓
|
|||
|
|
重新复制 .md 文件
|
|||
|
|
↓
|
|||
|
|
完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 特殊处理
|
|||
|
|
|
|||
|
|
### Git 自动安装
|
|||
|
|
|
|||
|
|
#### Windows
|
|||
|
|
1. 检测系统架构(32/64位)
|
|||
|
|
2. 下载对应的 Git 安装程序
|
|||
|
|
3. 显示下载进度
|
|||
|
|
4. 启动安装向导
|
|||
|
|
5. 提示用户完成安装后重新运行
|
|||
|
|
|
|||
|
|
#### macOS
|
|||
|
|
- 提示使用 Homebrew: `brew install git`
|
|||
|
|
- 提供 Homebrew 安装链接
|
|||
|
|
|
|||
|
|
#### Linux
|
|||
|
|
- 根据发行版提供对应命令
|
|||
|
|
- 支持 apt、yum、dnf、pacman
|
|||
|
|
|
|||
|
|
## 错误处理
|
|||
|
|
|
|||
|
|
- 网络错误:捕获并提示
|
|||
|
|
- Git 未安装:自动引导安装
|
|||
|
|
- API 失败:显示错误信息
|
|||
|
|
- 文件不存在:创建目录
|
|||
|
|
- 仓库克隆失败:显示 Git 错误
|
|||
|
|
|
|||
|
|
## 使用场景
|
|||
|
|
|
|||
|
|
1. **开发者**: 快速安装和更新技能
|
|||
|
|
2. **团队**: 统一技能版本管理
|
|||
|
|
3. **CI/CD**: 自动化技能部署
|
|||
|
|
4. **学习者**: 探索可用技能
|
|||
|
|
|
|||
|
|
## 性能特点
|
|||
|
|
|
|||
|
|
- 轻量级:无外部依赖
|
|||
|
|
- 快速:直接使用 Git
|
|||
|
|
- 可靠:Git 版本控制
|
|||
|
|
- 缓存:避免重复下载
|
|||
|
|
|
|||
|
|
## 安全考虑
|
|||
|
|
|
|||
|
|
- 仅使用 HTTPS 连接
|
|||
|
|
- 不存储敏感信息
|
|||
|
|
- Git URL 验证
|
|||
|
|
- 沙箱化技能目录
|
|||
|
|
|
|||
|
|
## 未来计划
|
|||
|
|
|
|||
|
|
- [ ] 技能版本管理
|
|||
|
|
- [ ] 依赖解析
|
|||
|
|
- [ ] 离线模式
|
|||
|
|
- [ ] 配置文件支持
|
|||
|
|
- [ ] Shell 自动补全
|
|||
|
|
- [ ] 技能备份/恢复
|
|||
|
|
- [ ] 交互式安装
|
|||
|
|
- [ ] 单元测试
|
|||
|
|
|
|||
|
|
## 发布清单
|
|||
|
|
|
|||
|
|
- [x] 核心功能实现
|
|||
|
|
- [x] Git 自动检测
|
|||
|
|
- [x] 跨平台支持
|
|||
|
|
- [x] 文档完善
|
|||
|
|
- [x] 验证脚本
|
|||
|
|
- [x] 示例文档
|
|||
|
|
- [ ] 单元测试
|
|||
|
|
- [ ] CI/CD 集成
|
|||
|
|
- [ ] NPM 发布
|
|||
|
|
|
|||
|
|
## 贡献者
|
|||
|
|
|
|||
|
|
- workskills.store - 初始开发
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
MIT License - 详见 LICENSE 文件
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**项目状态**: ✅ 功能完整,准备发布 v1.0.0
|
|||
|
|
|
|||
|
|
**最后更新**: 2026-03-21
|