reskill 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -20
- package/README.zh-CN.md +106 -20
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/index.js +42 -12
- package/dist/core/config-loader.d.ts +6 -0
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/skill-manager.d.ts.map +1 -1
- package/dist/index.js +31 -7
- package/dist/utils/git.d.ts +5 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,13 +19,13 @@ English | [简体中文](./README.zh-CN.md)
|
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# 1. Initialize project
|
|
22
|
-
reskill init
|
|
22
|
+
npx reskill init
|
|
23
23
|
|
|
24
24
|
# 2. Install a skill
|
|
25
|
-
reskill install github:anthropics/skills/frontend-design@latest
|
|
25
|
+
npx reskill install github:anthropics/skills/frontend-design@latest
|
|
26
26
|
|
|
27
27
|
# 3. List installed skills
|
|
28
|
-
reskill list
|
|
28
|
+
npx reskill list
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## What is reskill?
|
|
@@ -89,19 +89,19 @@ npx reskill <command>
|
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
91
|
# GitHub shorthand
|
|
92
|
-
reskill install github:user/skill@v1.0.0
|
|
92
|
+
npx reskill install github:user/skill@v1.0.0
|
|
93
93
|
|
|
94
94
|
# Full URL
|
|
95
|
-
reskill install https://github.com/user/skill
|
|
95
|
+
npx reskill install https://github.com/user/skill
|
|
96
96
|
|
|
97
97
|
# GitLab
|
|
98
|
-
reskill install gitlab:group/skill@latest
|
|
98
|
+
npx reskill install gitlab:group/skill@latest
|
|
99
99
|
|
|
100
100
|
# Private registry
|
|
101
|
-
reskill install gitlab.company.com:team/skill@v1.0.0
|
|
101
|
+
npx reskill install gitlab.company.com:team/skill@v1.0.0
|
|
102
102
|
|
|
103
103
|
# Default registry (from skills.json)
|
|
104
|
-
reskill install user/skill@v1.0.0
|
|
104
|
+
npx reskill install user/skill@v1.0.0
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
### Version Specification
|
|
@@ -116,19 +116,105 @@ reskill install user/skill@v1.0.0
|
|
|
116
116
|
|
|
117
117
|
## Commands
|
|
118
118
|
|
|
119
|
+
You can use `npx reskill` directly without global installation:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Initialize project
|
|
123
|
+
npx reskill init
|
|
124
|
+
|
|
125
|
+
# Install a skill from GitHub
|
|
126
|
+
npx reskill install github:anthropics/skills/frontend-design@latest
|
|
127
|
+
|
|
128
|
+
# Install from private GitLab
|
|
129
|
+
npx reskill install gitlab.company.com:team/internal-skill@v1.0.0
|
|
130
|
+
|
|
131
|
+
# List installed skills
|
|
132
|
+
npx reskill list
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Command Reference
|
|
136
|
+
|
|
119
137
|
| Command | Description |
|
|
120
138
|
|---------|-------------|
|
|
121
|
-
| `reskill init` | Initialize `skills.json` in current directory |
|
|
122
|
-
| `reskill install [skill]` | Install skills from `skills.json` or a specific skill |
|
|
123
|
-
| `reskill list` | List installed skills |
|
|
124
|
-
| `reskill info <skill>` | Show skill details |
|
|
125
|
-
| `reskill update [skill]` | Update all or specific skill |
|
|
126
|
-
| `reskill outdated` | Check for outdated skills |
|
|
127
|
-
| `reskill uninstall <skill>` | Remove a skill |
|
|
128
|
-
| `reskill link <path>` | Link local skill for development |
|
|
129
|
-
| `reskill unlink <skill>` | Unlink a local skill |
|
|
130
|
-
|
|
131
|
-
Run `reskill <command> --help` for detailed options.
|
|
139
|
+
| `npx reskill init` | Initialize `skills.json` in current directory |
|
|
140
|
+
| `npx reskill install [skill]` | Install skills from `skills.json` or a specific skill |
|
|
141
|
+
| `npx reskill list` | List installed skills |
|
|
142
|
+
| `npx reskill info <skill>` | Show skill details |
|
|
143
|
+
| `npx reskill update [skill]` | Update all or specific skill |
|
|
144
|
+
| `npx reskill outdated` | Check for outdated skills |
|
|
145
|
+
| `npx reskill uninstall <skill>` | Remove a skill |
|
|
146
|
+
| `npx reskill link <path>` | Link local skill for development |
|
|
147
|
+
| `npx reskill unlink <skill>` | Unlink a local skill |
|
|
148
|
+
|
|
149
|
+
Run `npx reskill <command> --help` for detailed options.
|
|
150
|
+
|
|
151
|
+
## Private GitLab Support
|
|
152
|
+
|
|
153
|
+
reskill fully supports private GitLab repositories, including self-hosted instances. Authentication is handled transparently through your system's git configuration.
|
|
154
|
+
|
|
155
|
+
### Authentication Methods
|
|
156
|
+
|
|
157
|
+
**SSH (Recommended)**
|
|
158
|
+
|
|
159
|
+
reskill uses your existing SSH configuration automatically:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Uses your ~/.ssh/id_rsa or ~/.ssh/id_ed25519 automatically
|
|
163
|
+
npx reskill install gitlab.company.com:team/private-skill@v1.0.0
|
|
164
|
+
|
|
165
|
+
# Or with explicit SSH URL
|
|
166
|
+
npx reskill install git@gitlab.company.com:team/private-skill.git@v1.0.0
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Ensure your SSH key is added to GitLab and ssh-agent is running.
|
|
170
|
+
|
|
171
|
+
**HTTPS with Git Credential**
|
|
172
|
+
|
|
173
|
+
For CI/CD or environments without SSH, configure git credential helper:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Store credentials (will prompt once, then remember)
|
|
177
|
+
git config --global credential.helper store
|
|
178
|
+
|
|
179
|
+
# Or use environment variable in CI
|
|
180
|
+
git config --global credential.helper '!f() { echo "username=oauth2"; echo "password=${GITLAB_TOKEN}"; }; f'
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
For GitLab CI/CD, use the built-in `CI_JOB_TOKEN`:
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
before_script:
|
|
187
|
+
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.com/".insteadOf "https://gitlab.company.com/"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Registry Configuration
|
|
191
|
+
|
|
192
|
+
Configure private registries in `skills.json`:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"registries": {
|
|
197
|
+
"internal": "https://gitlab.company.com",
|
|
198
|
+
"private": "git@gitlab.internal.io"
|
|
199
|
+
},
|
|
200
|
+
"skills": {
|
|
201
|
+
"company-standards": "internal:team/standards@latest",
|
|
202
|
+
"private-utils": "private:utils/helpers@v1.0.0"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Self-Hosted GitLab
|
|
208
|
+
|
|
209
|
+
For self-hosted GitLab instances with custom domains:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Direct installation
|
|
213
|
+
npx reskill install git.mycompany.io:team/skill@v1.0.0
|
|
214
|
+
|
|
215
|
+
# With explicit SSH URL
|
|
216
|
+
npx reskill install git@git.mycompany.io:team/skill.git@v1.0.0
|
|
217
|
+
```
|
|
132
218
|
|
|
133
219
|
## Configuration
|
|
134
220
|
|
|
@@ -215,7 +301,7 @@ my-project/
|
|
|
215
301
|
|
|
216
302
|
| Variable | Description | Default |
|
|
217
303
|
|----------|-------------|---------|
|
|
218
|
-
| `
|
|
304
|
+
| `RESKILL_CACHE_DIR` | Global cache directory | `~/.reskill-cache` |
|
|
219
305
|
| `DEBUG` | Enable debug logging | - |
|
|
220
306
|
|
|
221
307
|
## Development
|
package/README.zh-CN.md
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# 1. 初始化项目
|
|
22
|
-
reskill init
|
|
22
|
+
npx reskill init
|
|
23
23
|
|
|
24
24
|
# 2. 安装 skill
|
|
25
|
-
reskill install github:anthropics/skills/frontend-design@latest
|
|
25
|
+
npx reskill install github:anthropics/skills/frontend-design@latest
|
|
26
26
|
|
|
27
27
|
# 3. 列出已安装的 skills
|
|
28
|
-
reskill list
|
|
28
|
+
npx reskill list
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## 什么是 reskill?
|
|
@@ -90,19 +90,19 @@ npx reskill <command>
|
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
92
|
# GitHub 简写
|
|
93
|
-
reskill install github:user/skill@v1.0.0
|
|
93
|
+
npx reskill install github:user/skill@v1.0.0
|
|
94
94
|
|
|
95
95
|
# 完整 URL
|
|
96
|
-
reskill install https://github.com/user/skill
|
|
96
|
+
npx reskill install https://github.com/user/skill
|
|
97
97
|
|
|
98
98
|
# GitLab
|
|
99
|
-
reskill install gitlab:group/skill@latest
|
|
99
|
+
npx reskill install gitlab:group/skill@latest
|
|
100
100
|
|
|
101
101
|
# 私有 Registry
|
|
102
|
-
reskill install gitlab.company.com:team/skill@v1.0.0
|
|
102
|
+
npx reskill install gitlab.company.com:team/skill@v1.0.0
|
|
103
103
|
|
|
104
104
|
# 默认 Registry(来自 skills.json)
|
|
105
|
-
reskill install user/skill@v1.0.0
|
|
105
|
+
npx reskill install user/skill@v1.0.0
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
### 版本规范
|
|
@@ -117,19 +117,105 @@ reskill install user/skill@v1.0.0
|
|
|
117
117
|
|
|
118
118
|
## 命令
|
|
119
119
|
|
|
120
|
+
无需全局安装,直接使用 `npx reskill`:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# 初始化项目
|
|
124
|
+
npx reskill init
|
|
125
|
+
|
|
126
|
+
# 从 GitHub 安装 skill
|
|
127
|
+
npx reskill install github:anthropics/skills/frontend-design@latest
|
|
128
|
+
|
|
129
|
+
# 从私有 GitLab 安装
|
|
130
|
+
npx reskill install gitlab.company.com:team/internal-skill@v1.0.0
|
|
131
|
+
|
|
132
|
+
# 列出已安装的 skills
|
|
133
|
+
npx reskill list
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 命令参考
|
|
137
|
+
|
|
120
138
|
| 命令 | 说明 |
|
|
121
139
|
|------|------|
|
|
122
|
-
| `reskill init` | 在当前目录初始化 `skills.json` |
|
|
123
|
-
| `reskill install [skill]` | 安装 `skills.json` 中的所有 skills 或指定 skill |
|
|
124
|
-
| `reskill list` | 列出已安装的 skills |
|
|
125
|
-
| `reskill info <skill>` | 查看 skill 详情 |
|
|
126
|
-
| `reskill update [skill]` | 更新所有或指定 skill |
|
|
127
|
-
| `reskill outdated` | 检查过期的 skills |
|
|
128
|
-
| `reskill uninstall <skill>` | 卸载 skill |
|
|
129
|
-
| `reskill link <path>` | 链接本地 skill(开发用) |
|
|
130
|
-
| `reskill unlink <skill>` | 取消链接本地 skill |
|
|
131
|
-
|
|
132
|
-
运行 `reskill <command> --help` 查看详细选项。
|
|
140
|
+
| `npx reskill init` | 在当前目录初始化 `skills.json` |
|
|
141
|
+
| `npx reskill install [skill]` | 安装 `skills.json` 中的所有 skills 或指定 skill |
|
|
142
|
+
| `npx reskill list` | 列出已安装的 skills |
|
|
143
|
+
| `npx reskill info <skill>` | 查看 skill 详情 |
|
|
144
|
+
| `npx reskill update [skill]` | 更新所有或指定 skill |
|
|
145
|
+
| `npx reskill outdated` | 检查过期的 skills |
|
|
146
|
+
| `npx reskill uninstall <skill>` | 卸载 skill |
|
|
147
|
+
| `npx reskill link <path>` | 链接本地 skill(开发用) |
|
|
148
|
+
| `npx reskill unlink <skill>` | 取消链接本地 skill |
|
|
149
|
+
|
|
150
|
+
运行 `npx reskill <command> --help` 查看详细选项。
|
|
151
|
+
|
|
152
|
+
## 私有 GitLab 支持
|
|
153
|
+
|
|
154
|
+
reskill 完整支持私有 GitLab 仓库,包括自建实例。认证通过系统的 git 配置透明处理。
|
|
155
|
+
|
|
156
|
+
### 认证方式
|
|
157
|
+
|
|
158
|
+
**SSH(推荐)**
|
|
159
|
+
|
|
160
|
+
reskill 自动使用你已有的 SSH 配置:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# 自动使用 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519
|
|
164
|
+
npx reskill install gitlab.company.com:team/private-skill@v1.0.0
|
|
165
|
+
|
|
166
|
+
# 或使用显式的 SSH URL
|
|
167
|
+
npx reskill install git@gitlab.company.com:team/private-skill.git@v1.0.0
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
确保你的 SSH key 已添加到 GitLab,并且 ssh-agent 正在运行。
|
|
171
|
+
|
|
172
|
+
**HTTPS + Git Credential**
|
|
173
|
+
|
|
174
|
+
适用于 CI/CD 或无 SSH 的环境,配置 git credential helper:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 存储凭证(首次会提示输入,之后自动记住)
|
|
178
|
+
git config --global credential.helper store
|
|
179
|
+
|
|
180
|
+
# 或在 CI 中使用环境变量
|
|
181
|
+
git config --global credential.helper '!f() { echo "username=oauth2"; echo "password=${GITLAB_TOKEN}"; }; f'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
GitLab CI/CD 可使用内置的 `CI_JOB_TOKEN`:
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
before_script:
|
|
188
|
+
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.com/".insteadOf "https://gitlab.company.com/"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Registry 配置
|
|
192
|
+
|
|
193
|
+
在 `skills.json` 中配置私有 registry:
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"registries": {
|
|
198
|
+
"internal": "https://gitlab.company.com",
|
|
199
|
+
"private": "git@gitlab.internal.io"
|
|
200
|
+
},
|
|
201
|
+
"skills": {
|
|
202
|
+
"company-standards": "internal:team/standards@latest",
|
|
203
|
+
"private-utils": "private:utils/helpers@v1.0.0"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 自建 GitLab
|
|
209
|
+
|
|
210
|
+
对于使用自定义域名的自建 GitLab 实例:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# 直接安装
|
|
214
|
+
npx reskill install git.mycompany.io:team/skill@v1.0.0
|
|
215
|
+
|
|
216
|
+
# 使用显式的 SSH URL
|
|
217
|
+
npx reskill install git@git.mycompany.io:team/skill.git@v1.0.0
|
|
218
|
+
```
|
|
133
219
|
|
|
134
220
|
## 配置
|
|
135
221
|
|
|
@@ -216,7 +302,7 @@ my-project/
|
|
|
216
302
|
|
|
217
303
|
| 变量 | 说明 | 默认值 |
|
|
218
304
|
|------|------|--------|
|
|
219
|
-
| `
|
|
305
|
+
| `RESKILL_CACHE_DIR` | 全局缓存目录 | `~/.reskill-cache` |
|
|
220
306
|
| `DEBUG` | 启用调试日志 | - |
|
|
221
307
|
|
|
222
308
|
## 开发
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,SAkYvB,CAAC;AAEL,eAAe,cAAc,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import * as __WEBPACK_EXTERNAL_MODULE_node_fs__ from "node:fs";
|
|
3
|
-
import * as __WEBPACK_EXTERNAL_MODULE_commander__ from "commander";
|
|
4
3
|
import * as __WEBPACK_EXTERNAL_MODULE_node_path__ from "node:path";
|
|
4
|
+
import * as __WEBPACK_EXTERNAL_MODULE_node_url__ from "node:url";
|
|
5
|
+
import * as __WEBPACK_EXTERNAL_MODULE_commander__ from "commander";
|
|
5
6
|
import * as __WEBPACK_EXTERNAL_MODULE_chalk__ from "chalk";
|
|
6
7
|
import * as __WEBPACK_EXTERNAL_MODULE_node_os__ from "node:os";
|
|
7
8
|
import * as __WEBPACK_EXTERNAL_MODULE_node_child_process__ from "node:child_process";
|
|
@@ -290,20 +291,32 @@ class GitCloneError extends Error {
|
|
|
290
291
|
repoUrl;
|
|
291
292
|
originalError;
|
|
292
293
|
isAuthError;
|
|
294
|
+
urlType;
|
|
293
295
|
constructor(repoUrl, originalError){
|
|
294
296
|
const isAuthError = GitCloneError.isAuthenticationError(originalError.message);
|
|
297
|
+
const urlType = GitCloneError.detectUrlType(repoUrl);
|
|
295
298
|
let message = `Failed to clone repository: ${repoUrl}`;
|
|
296
299
|
if (isAuthError) {
|
|
297
|
-
message += '\n\nTip: For private repos, ensure git
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
300
|
+
message += '\n\nTip: For private repos, ensure git credentials are configured:';
|
|
301
|
+
if ('ssh' === urlType) {
|
|
302
|
+
message += '\n - Check ~/.ssh/id_rsa or ~/.ssh/id_ed25519';
|
|
303
|
+
message += '\n - Ensure SSH key is added to your Git hosting service';
|
|
304
|
+
} else {
|
|
305
|
+
message += "\n - Run 'git config --global credential.helper store'";
|
|
306
|
+
message += '\n - Or use a personal access token in the URL';
|
|
307
|
+
}
|
|
301
308
|
}
|
|
302
309
|
super(message);
|
|
303
310
|
this.name = 'GitCloneError';
|
|
304
311
|
this.repoUrl = repoUrl;
|
|
305
312
|
this.originalError = originalError;
|
|
306
313
|
this.isAuthError = isAuthError;
|
|
314
|
+
this.urlType = urlType;
|
|
315
|
+
}
|
|
316
|
+
static detectUrlType(url) {
|
|
317
|
+
if (url.startsWith('git@') || url.startsWith('ssh://')) return 'ssh';
|
|
318
|
+
if (url.startsWith('http://') || url.startsWith('https://')) return 'https';
|
|
319
|
+
return 'unknown';
|
|
307
320
|
}
|
|
308
321
|
static isAuthenticationError(message) {
|
|
309
322
|
const authPatterns = [
|
|
@@ -614,6 +627,11 @@ class ConfigLoader {
|
|
|
614
627
|
writeJson(this.configPath, toSave);
|
|
615
628
|
this.config = toSave;
|
|
616
629
|
}
|
|
630
|
+
ensureExists() {
|
|
631
|
+
if (this.exists()) return false;
|
|
632
|
+
this.create();
|
|
633
|
+
return true;
|
|
634
|
+
}
|
|
617
635
|
create(options) {
|
|
618
636
|
const config = {
|
|
619
637
|
...DEFAULT_SKILLS_JSON,
|
|
@@ -883,7 +901,8 @@ function installer_remove(targetPath) {
|
|
|
883
901
|
function copyDirectory(src, dest, options) {
|
|
884
902
|
const exclude = new Set(options?.exclude || [
|
|
885
903
|
'README.md',
|
|
886
|
-
'metadata.json'
|
|
904
|
+
'metadata.json',
|
|
905
|
+
'.reskill-commit'
|
|
887
906
|
]);
|
|
888
907
|
installer_ensureDir(dest);
|
|
889
908
|
const entries = external_node_fs_.readdirSync(src, {
|
|
@@ -1217,7 +1236,10 @@ class SkillManager {
|
|
|
1217
1236
|
resolved: repoUrl,
|
|
1218
1237
|
commit: cacheResult.commit
|
|
1219
1238
|
});
|
|
1220
|
-
if (!this.isGlobal && save
|
|
1239
|
+
if (!this.isGlobal && save) {
|
|
1240
|
+
this.config.ensureExists();
|
|
1241
|
+
this.config.addSkill(skillName, ref);
|
|
1242
|
+
}
|
|
1221
1243
|
const locationHint = this.isGlobal ? '(global)' : '';
|
|
1222
1244
|
logger.success(`Installed ${skillName}@${version} to ${skillPath} ${locationHint}`.trim());
|
|
1223
1245
|
const installed = this.getInstalledSkill(skillName);
|
|
@@ -1435,7 +1457,10 @@ class SkillManager {
|
|
|
1435
1457
|
resolved: repoUrl,
|
|
1436
1458
|
commit: cacheResult.commit
|
|
1437
1459
|
});
|
|
1438
|
-
if (!this.isGlobal && save
|
|
1460
|
+
if (!this.isGlobal && save) {
|
|
1461
|
+
this.config.ensureExists();
|
|
1462
|
+
this.config.addSkill(skillName, ref);
|
|
1463
|
+
}
|
|
1439
1464
|
const successCount = Array.from(results.values()).filter((r)=>r.success).length;
|
|
1440
1465
|
const failCount = results.size - successCount;
|
|
1441
1466
|
if (0 === failCount) logger.success(`Installed ${skillName}@${version} to ${successCount} agent(s)`);
|
|
@@ -1598,7 +1623,7 @@ const installCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('instal
|
|
|
1598
1623
|
label: config.displayName
|
|
1599
1624
|
}));
|
|
1600
1625
|
const selected = await __WEBPACK_EXTERNAL_MODULE__clack_prompts__.multiselect({
|
|
1601
|
-
message:
|
|
1626
|
+
message: `Select agents to install skills to ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].dim('(Space to toggle, Enter to confirm)')}`,
|
|
1602
1627
|
options: allAgentChoices,
|
|
1603
1628
|
required: true,
|
|
1604
1629
|
initialValues: allAgentTypes
|
|
@@ -1620,7 +1645,7 @@ const installCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('instal
|
|
|
1620
1645
|
hint: agents[a].skillsDir
|
|
1621
1646
|
}));
|
|
1622
1647
|
const selected = await __WEBPACK_EXTERNAL_MODULE__clack_prompts__.multiselect({
|
|
1623
|
-
message:
|
|
1648
|
+
message: `Select agents to install skills to ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].dim('(Space to toggle, Enter to confirm)')}`,
|
|
1624
1649
|
options: agentChoices,
|
|
1625
1650
|
required: true,
|
|
1626
1651
|
initialValues: installedAgents
|
|
@@ -1633,7 +1658,10 @@ const installCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('instal
|
|
|
1633
1658
|
}
|
|
1634
1659
|
}
|
|
1635
1660
|
let installGlobally = options.global ?? false;
|
|
1636
|
-
|
|
1661
|
+
const hasSkillsJson = configLoader.exists();
|
|
1662
|
+
if (void 0 !== options.global || skipConfirm || hasSkillsJson) {
|
|
1663
|
+
if (hasSkillsJson && void 0 === options.global) __WEBPACK_EXTERNAL_MODULE__clack_prompts__.log.info(`Found ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('skills.json')}, installing to project`);
|
|
1664
|
+
} else {
|
|
1637
1665
|
const scope = await __WEBPACK_EXTERNAL_MODULE__clack_prompts__.select({
|
|
1638
1666
|
message: 'Installation scope',
|
|
1639
1667
|
options: [
|
|
@@ -1925,8 +1953,10 @@ const updateCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('update'
|
|
|
1925
1953
|
process.exit(1);
|
|
1926
1954
|
}
|
|
1927
1955
|
});
|
|
1956
|
+
const cli_rslib_entry_dirname = (0, __WEBPACK_EXTERNAL_MODULE_node_path__.dirname)((0, __WEBPACK_EXTERNAL_MODULE_node_url__.fileURLToPath)(import.meta.url));
|
|
1957
|
+
const packageJson = JSON.parse((0, external_node_fs_.readFileSync)((0, __WEBPACK_EXTERNAL_MODULE_node_path__.join)(cli_rslib_entry_dirname, '../../package.json'), 'utf-8'));
|
|
1928
1958
|
const program = new __WEBPACK_EXTERNAL_MODULE_commander__.Command();
|
|
1929
|
-
program.name('reskill').description('AI Skills Package Manager - Git-based skills management for AI agents').version(
|
|
1959
|
+
program.name('reskill').description('AI Skills Package Manager - Git-based skills management for AI agents').version(packageJson.version);
|
|
1930
1960
|
program.addCommand(initCommand);
|
|
1931
1961
|
program.addCommand(installCommand);
|
|
1932
1962
|
program.addCommand(listCommand);
|
|
@@ -35,6 +35,12 @@ export declare class ConfigLoader {
|
|
|
35
35
|
* Save configuration
|
|
36
36
|
*/
|
|
37
37
|
save(config?: SkillsJson): void;
|
|
38
|
+
/**
|
|
39
|
+
* Ensure skills.json exists, create with defaults if not
|
|
40
|
+
*
|
|
41
|
+
* @returns true if file was created, false if it already existed
|
|
42
|
+
*/
|
|
43
|
+
ensureExists(): boolean;
|
|
38
44
|
/**
|
|
39
45
|
* Create default configuration
|
|
40
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAiBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAS/B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;IAejD;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC;IAUvC;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAiB5C;;OAEG;IACH,aAAa,IAAI,MAAM;IAKvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAUzC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYlC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI9C;AAED,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAiBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAS/B;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAQvB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;IAejD;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC;IAUvC;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAiB5C;;OAEG;IACH,aAAa,IAAI,MAAM;IAKvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAUzC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYlC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI9C;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAa,MAAM,mBAAmB,CAAC;AAcnF,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAa,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAU;gBAEd,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB;IAY/D;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;OAKG;IACH,aAAa,IAAI,MAAM;IAOvB;;;;;;OAMG;IACH,qBAAqB,IAAI,MAAM;IAM/B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAiBlC;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -277,20 +277,32 @@ class GitCloneError extends Error {
|
|
|
277
277
|
repoUrl;
|
|
278
278
|
originalError;
|
|
279
279
|
isAuthError;
|
|
280
|
+
urlType;
|
|
280
281
|
constructor(repoUrl, originalError){
|
|
281
282
|
const isAuthError = GitCloneError.isAuthenticationError(originalError.message);
|
|
283
|
+
const urlType = GitCloneError.detectUrlType(repoUrl);
|
|
282
284
|
let message = `Failed to clone repository: ${repoUrl}`;
|
|
283
285
|
if (isAuthError) {
|
|
284
|
-
message += '\n\nTip: For private repos, ensure git
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
286
|
+
message += '\n\nTip: For private repos, ensure git credentials are configured:';
|
|
287
|
+
if ('ssh' === urlType) {
|
|
288
|
+
message += '\n - Check ~/.ssh/id_rsa or ~/.ssh/id_ed25519';
|
|
289
|
+
message += '\n - Ensure SSH key is added to your Git hosting service';
|
|
290
|
+
} else {
|
|
291
|
+
message += "\n - Run 'git config --global credential.helper store'";
|
|
292
|
+
message += '\n - Or use a personal access token in the URL';
|
|
293
|
+
}
|
|
288
294
|
}
|
|
289
295
|
super(message);
|
|
290
296
|
this.name = 'GitCloneError';
|
|
291
297
|
this.repoUrl = repoUrl;
|
|
292
298
|
this.originalError = originalError;
|
|
293
299
|
this.isAuthError = isAuthError;
|
|
300
|
+
this.urlType = urlType;
|
|
301
|
+
}
|
|
302
|
+
static detectUrlType(url) {
|
|
303
|
+
if (url.startsWith('git@') || url.startsWith('ssh://')) return 'ssh';
|
|
304
|
+
if (url.startsWith('http://') || url.startsWith('https://')) return 'https';
|
|
305
|
+
return 'unknown';
|
|
294
306
|
}
|
|
295
307
|
static isAuthenticationError(message) {
|
|
296
308
|
const authPatterns = [
|
|
@@ -601,6 +613,11 @@ class ConfigLoader {
|
|
|
601
613
|
writeJson(this.configPath, toSave);
|
|
602
614
|
this.config = toSave;
|
|
603
615
|
}
|
|
616
|
+
ensureExists() {
|
|
617
|
+
if (this.exists()) return false;
|
|
618
|
+
this.create();
|
|
619
|
+
return true;
|
|
620
|
+
}
|
|
604
621
|
create(options) {
|
|
605
622
|
const config = {
|
|
606
623
|
...DEFAULT_SKILLS_JSON,
|
|
@@ -870,7 +887,8 @@ function installer_remove(targetPath) {
|
|
|
870
887
|
function copyDirectory(src, dest, options) {
|
|
871
888
|
const exclude = new Set(options?.exclude || [
|
|
872
889
|
'README.md',
|
|
873
|
-
'metadata.json'
|
|
890
|
+
'metadata.json',
|
|
891
|
+
'.reskill-commit'
|
|
874
892
|
]);
|
|
875
893
|
installer_ensureDir(dest);
|
|
876
894
|
const entries = external_node_fs_.readdirSync(src, {
|
|
@@ -1245,7 +1263,10 @@ class SkillManager {
|
|
|
1245
1263
|
resolved: repoUrl,
|
|
1246
1264
|
commit: cacheResult.commit
|
|
1247
1265
|
});
|
|
1248
|
-
if (!this.isGlobal && save
|
|
1266
|
+
if (!this.isGlobal && save) {
|
|
1267
|
+
this.config.ensureExists();
|
|
1268
|
+
this.config.addSkill(skillName, ref);
|
|
1269
|
+
}
|
|
1249
1270
|
const locationHint = this.isGlobal ? '(global)' : '';
|
|
1250
1271
|
logger.success(`Installed ${skillName}@${version} to ${skillPath} ${locationHint}`.trim());
|
|
1251
1272
|
const installed = this.getInstalledSkill(skillName);
|
|
@@ -1463,7 +1484,10 @@ class SkillManager {
|
|
|
1463
1484
|
resolved: repoUrl,
|
|
1464
1485
|
commit: cacheResult.commit
|
|
1465
1486
|
});
|
|
1466
|
-
if (!this.isGlobal && save
|
|
1487
|
+
if (!this.isGlobal && save) {
|
|
1488
|
+
this.config.ensureExists();
|
|
1489
|
+
this.config.addSkill(skillName, ref);
|
|
1490
|
+
}
|
|
1467
1491
|
const successCount = Array.from(results.values()).filter((r)=>r.success).length;
|
|
1468
1492
|
const failCount = results.size - successCount;
|
|
1469
1493
|
if (0 === failCount) logger.success(`Installed ${skillName}@${version} to ${successCount} agent(s)`);
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -13,7 +13,12 @@ export declare class GitCloneError extends Error {
|
|
|
13
13
|
readonly repoUrl: string;
|
|
14
14
|
readonly originalError: Error;
|
|
15
15
|
readonly isAuthError: boolean;
|
|
16
|
+
readonly urlType: 'ssh' | 'https' | 'unknown';
|
|
16
17
|
constructor(repoUrl: string, originalError: Error);
|
|
18
|
+
/**
|
|
19
|
+
* Detect URL type from repository URL
|
|
20
|
+
*/
|
|
21
|
+
static detectUrlType(url: string): 'ssh' | 'https' | 'unknown';
|
|
17
22
|
/**
|
|
18
23
|
* Check if an error message indicates an authentication problem
|
|
19
24
|
*/
|
package/dist/utils/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,aAAa,EAAE,KAAK,CAAC;IACrC,SAAgB,WAAW,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|