@dayinxisheng/skillctl 1.0.3 → 1.1.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/CHANGELOG.md +6 -0
- package/README.md +95 -14
- package/dist/commands/all-list.d.ts +1 -1
- package/dist/commands/all-list.d.ts.map +1 -1
- package/dist/commands/all-list.js +20 -11
- package/dist/commands/all-list.js.map +1 -1
- package/dist/commands/config.d.ts +24 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +71 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/pull.d.ts +2 -2
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +7 -4
- package/dist/commands/pull.js.map +1 -1
- package/dist/index.js +70 -18
- package/dist/index.js.map +1 -1
- package/dist/lib/config-manager.d.ts +29 -0
- package/dist/lib/config-manager.d.ts.map +1 -1
- package/dist/lib/config-manager.js +61 -0
- package/dist/lib/config-manager.js.map +1 -1
- package/dist/lib/pull-handler.d.ts.map +1 -1
- package/dist/lib/pull-handler.js +8 -3
- package/dist/lib/pull-handler.js.map +1 -1
- package/dist/lib/skill-manager.d.ts +5 -1
- package/dist/lib/skill-manager.d.ts.map +1 -1
- package/dist/lib/skill-manager.js +49 -1
- package/dist/lib/skill-manager.js.map +1 -1
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/url-validator.d.ts +26 -0
- package/dist/utils/url-validator.d.ts.map +1 -0
- package/dist/utils/url-validator.js +67 -0
- package/dist/utils/url-validator.js.map +1 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.4] - 2026-03-05
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- 更新 README.md,添加 `pull` 命令使用文档和示例
|
|
12
|
+
- 更新项目结构说明,包含新增的文件
|
|
13
|
+
|
|
8
14
|
## [1.0.3] - 2026-03-05
|
|
9
15
|
|
|
10
16
|
### Added
|
package/README.md
CHANGED
|
@@ -25,13 +25,13 @@ npm update -g @dayinxisheng/skillctl
|
|
|
25
25
|
告诉 skillctl 你的 skills 仓库在哪里(存储所有 skill 文件的目录):
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
skillctl set-repo ~/my-skills
|
|
28
|
+
skillctl config set-repo ~/my-skills
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
### 第二步:查看可用的 skills
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
skillctl all
|
|
34
|
+
skillctl ls-all
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
输出示例:
|
|
@@ -40,9 +40,11 @@ skillctl all-list
|
|
|
40
40
|
项目中所有可用的 Skills
|
|
41
41
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
Name Description
|
|
44
|
+
─────────────────────────────────────────────────────────────
|
|
45
|
+
brainstorming Turn ideas into validated designs...
|
|
46
|
+
frontend-design Generate frontend code from UI...
|
|
47
|
+
pdf-tools PDF manipulation tools...
|
|
46
48
|
|
|
47
49
|
ℹ 共找到 3 个 skills
|
|
48
50
|
位置: ~/my-skills
|
|
@@ -162,7 +164,58 @@ skillctl import my-new-skill
|
|
|
162
164
|
1. 将 skill 移动到你的项目仓库
|
|
163
165
|
2. 在原位置创建软链接
|
|
164
166
|
|
|
165
|
-
### 5.
|
|
167
|
+
### 5. 拉取 Skill
|
|
168
|
+
|
|
169
|
+
从 Git 仓库(如 GitHub)拉取 skill 到本地:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# 拉取单个 skill
|
|
173
|
+
skillctl pull https://github.com/owner/repo path/to/skill
|
|
174
|
+
|
|
175
|
+
# 拉取多个 skills
|
|
176
|
+
skillctl pull https://github.com/owner/repo \
|
|
177
|
+
path/to/skill1 \
|
|
178
|
+
path/to/skill2
|
|
179
|
+
|
|
180
|
+
# 强制覆盖已存在的 skill(自动备份)
|
|
181
|
+
skillctl pull <repo-url> <path> --force
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**使用仓库别名:**
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# 添加别名
|
|
188
|
+
skillctl config add-repo anthropic https://github.com/anthropics/anthropic-quickstarts
|
|
189
|
+
|
|
190
|
+
# 使用别名拉取
|
|
191
|
+
skillctl pull anthropic typescript/search
|
|
192
|
+
|
|
193
|
+
# 查看所有别名
|
|
194
|
+
skillctl config show
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**配置镜像加速:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# 设置镜像(用于加速访问 GitHub)
|
|
201
|
+
skillctl config set-mirror https://ghfast.top
|
|
202
|
+
|
|
203
|
+
# 之后所有 pull 命令都会自动使用镜像
|
|
204
|
+
skillctl pull https://github.com/owner/repo path/to/skill
|
|
205
|
+
|
|
206
|
+
# 取消镜像设置
|
|
207
|
+
skillctl config unset-mirror
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**特性:**
|
|
211
|
+
- 支持从 GitHub 仓库提取指定目录作为 skill
|
|
212
|
+
- 严格验证 SKILL.md 文件及 name 字段
|
|
213
|
+
- 下载进度显示
|
|
214
|
+
- 跨平台支持(Linux/macOS 使用 tar.gz,Windows 使用 zip)
|
|
215
|
+
- 支持仓库别名,简化常用仓库的拉取
|
|
216
|
+
- 支持镜像加速配置
|
|
217
|
+
|
|
218
|
+
### 6. 定位 Skill
|
|
166
219
|
|
|
167
220
|
查找 skill 的实际存储位置:
|
|
168
221
|
|
|
@@ -182,22 +235,43 @@ skillctl locate brainstorming
|
|
|
182
235
|
## ⚙️ 配置管理
|
|
183
236
|
|
|
184
237
|
```bash
|
|
185
|
-
#
|
|
238
|
+
# 查看所有配置
|
|
186
239
|
skillctl config
|
|
240
|
+
# 或
|
|
241
|
+
skillctl config show
|
|
187
242
|
```
|
|
188
243
|
|
|
189
244
|
输出示例:
|
|
190
245
|
```
|
|
191
|
-
|
|
192
|
-
|
|
246
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
247
|
+
配置信息
|
|
248
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
249
|
+
|
|
250
|
+
配置文件: ~/.config/skillctl/config.json
|
|
251
|
+
|
|
252
|
+
仓库路径: ~/my-skills
|
|
253
|
+
镜像加速: https://ghfast.top
|
|
254
|
+
|
|
255
|
+
仓库别名:
|
|
256
|
+
anthropic → https://github.com/anthropics/anthropic-quickstarts
|
|
257
|
+
my-skills → https://github.com/dayinxisheng/skills
|
|
193
258
|
```
|
|
194
259
|
|
|
195
260
|
```bash
|
|
196
|
-
#
|
|
197
|
-
skillctl set-repo /new/path/to/skills
|
|
261
|
+
# 设置仓库路径
|
|
262
|
+
skillctl config set-repo /new/path/to/skills
|
|
263
|
+
|
|
264
|
+
# 添加仓库别名
|
|
265
|
+
skillctl config add-repo <别名名称> <仓库URL>
|
|
266
|
+
|
|
267
|
+
# 删除仓库别名
|
|
268
|
+
skillctl config remove-repo <别名名称>
|
|
269
|
+
|
|
270
|
+
# 设置镜像加速
|
|
271
|
+
skillctl config set-mirror https://ghfast.top
|
|
198
272
|
|
|
199
|
-
#
|
|
200
|
-
skillctl
|
|
273
|
+
# 取消镜像设置
|
|
274
|
+
skillctl config unset-mirror
|
|
201
275
|
```
|
|
202
276
|
|
|
203
277
|
## 💡 实用场景
|
|
@@ -276,6 +350,7 @@ src/
|
|
|
276
350
|
│ ├── activate.ts # 激活命令
|
|
277
351
|
│ ├── deactivate.ts # 停用命令
|
|
278
352
|
│ ├── import.ts # 导入命令
|
|
353
|
+
│ ├── pull.ts # 拉取命令
|
|
279
354
|
│ ├── locate.ts # 定位命令
|
|
280
355
|
│ ├── status.ts # 状态命令
|
|
281
356
|
│ ├── list.ts # 列表命令
|
|
@@ -285,11 +360,17 @@ src/
|
|
|
285
360
|
├── lib/ # 核心业务逻辑
|
|
286
361
|
│ ├── config-manager.ts # 配置管理
|
|
287
362
|
│ ├── link-handler.ts # 软链接处理
|
|
363
|
+
│ ├── pull-handler.ts # 拉取处理逻辑
|
|
288
364
|
│ └── skill-manager.ts # Skill 管理
|
|
289
365
|
├── utils/ # 工具函数
|
|
290
366
|
│ ├── output.ts # 彩色输出
|
|
291
367
|
│ ├── errors.ts # 错误类型
|
|
292
|
-
│
|
|
368
|
+
│ ├── platform.ts # 平台检测
|
|
369
|
+
│ ├── downloader.ts # 下载工具
|
|
370
|
+
│ ├── archive-extractor.ts # 解压工具
|
|
371
|
+
│ ├── skill-validator.ts # Skill 验证
|
|
372
|
+
│ ├── github-parser.ts # GitHub URL 解析
|
|
373
|
+
│ └── url-validator.ts # URL 验证
|
|
293
374
|
└── types/ # TypeScript 类型定义
|
|
294
375
|
└── index.ts
|
|
295
376
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-list.d.ts","sourceRoot":"","sources":["../../src/commands/all-list.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"all-list.d.ts","sourceRoot":"","sources":["../../src/commands/all-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B7C"}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* All-list 命令 - 列出所有可用的 skills
|
|
2
|
+
* All-list 命令 - 列出所有可用的 skills(表格格式)
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { printHeader, printInfo
|
|
6
|
-
import
|
|
7
|
-
import { getProjectSkillsDir } from '../lib/skill-manager.js';
|
|
4
|
+
import { getAllSkillsWithDescriptions } from '../lib/skill-manager.js';
|
|
5
|
+
import { printHeader, printInfo } from '../utils/output.js';
|
|
6
|
+
import Table from 'cli-table3';
|
|
8
7
|
export async function allList() {
|
|
9
8
|
printHeader('项目中所有可用的 Skills');
|
|
10
|
-
const
|
|
11
|
-
if (
|
|
9
|
+
const skillsWithDesc = await getAllSkillsWithDescriptions();
|
|
10
|
+
if (skillsWithDesc.length === 0) {
|
|
12
11
|
printInfo('没有可用的 skills');
|
|
13
12
|
return;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
// 创建表格
|
|
15
|
+
const table = new Table({
|
|
16
|
+
head: ['Name', 'Description'],
|
|
17
|
+
colWidths: [30, 50],
|
|
18
|
+
wordWrap: true,
|
|
19
|
+
});
|
|
20
|
+
// 填充数据
|
|
21
|
+
for (const skill of skillsWithDesc) {
|
|
22
|
+
table.push([
|
|
23
|
+
skill.name,
|
|
24
|
+
skill.description || '',
|
|
25
|
+
]);
|
|
17
26
|
}
|
|
27
|
+
console.log(table.toString());
|
|
18
28
|
console.log();
|
|
19
|
-
printInfo(`共找到 ${
|
|
20
|
-
printKeyValue('位置', await getProjectSkillsDir());
|
|
29
|
+
printInfo(`共找到 ${skillsWithDesc.length} 个 skills`);
|
|
21
30
|
}
|
|
22
31
|
//# sourceMappingURL=all-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-list.js","sourceRoot":"","sources":["../../src/commands/all-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"all-list.js","sourceRoot":"","sources":["../../src/commands/all-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,4BAA4B,EAAE,CAAC;IAE5D,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,OAAO;IACP,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACnB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO;IACP,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,CAAC,IAAI;YACV,KAAK,CAAC,WAAW,IAAI,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,SAAS,CAAC,OAAO,cAAc,CAAC,MAAM,WAAW,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Config 命令 -
|
|
2
|
+
* Config 命令 - 配置管理(子命令结构)
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 显示配置信息
|
|
3
6
|
*/
|
|
4
7
|
export declare function showConfig(): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* 设置仓库路径
|
|
10
|
+
*/
|
|
11
|
+
export declare function configSetRepo(repoPath: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* 添加仓库别名
|
|
14
|
+
*/
|
|
15
|
+
export declare function configAddRepo(name: string, url: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 删除仓库别名
|
|
18
|
+
*/
|
|
19
|
+
export declare function configRemoveRepo(name: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* 设置镜像 URL
|
|
22
|
+
*/
|
|
23
|
+
export declare function configSetMirror(url: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* 取消镜像设置
|
|
26
|
+
*/
|
|
27
|
+
export declare function configUnsetMirror(): Promise<void>;
|
|
5
28
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BhD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvD"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,16 +1,84 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Config 命令 -
|
|
2
|
+
* Config 命令 - 配置管理(子命令结构)
|
|
3
|
+
*/
|
|
4
|
+
import { getConfigFile, getRepository, setRepository, getRepoAliases, addRepoAlias, removeRepoAlias, setMirrorUrl, getMirrorUrl, clearMirrorUrl, } from '../lib/config-manager.js';
|
|
5
|
+
import { printHeader, printInfo, printError, printSuccess } from '../utils/output.js';
|
|
6
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
7
|
+
/**
|
|
8
|
+
* 显示配置信息
|
|
3
9
|
*/
|
|
4
|
-
import { getConfigFile, getRepository } from '../lib/config-manager.js';
|
|
5
|
-
import { printInfo } from '../utils/output.js';
|
|
6
10
|
export async function showConfig() {
|
|
11
|
+
printHeader('配置信息');
|
|
7
12
|
printInfo(`配置文件: ${getConfigFile()}`);
|
|
8
13
|
const repo = await getRepository();
|
|
9
14
|
if (repo) {
|
|
15
|
+
// 展开波浪号
|
|
16
|
+
const expandedRepo = repo.replace('~', getHomeDir());
|
|
10
17
|
printInfo(`仓库路径: ${repo}`);
|
|
11
18
|
}
|
|
12
19
|
else {
|
|
13
20
|
printInfo('仓库路径: 未设置');
|
|
14
21
|
}
|
|
22
|
+
const mirror = await getMirrorUrl();
|
|
23
|
+
if (mirror) {
|
|
24
|
+
printInfo(`镜像加速: ${mirror}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
printInfo('镜像加速: 未设置');
|
|
28
|
+
}
|
|
29
|
+
const aliases = await getRepoAliases();
|
|
30
|
+
if (Object.keys(aliases).length > 0) {
|
|
31
|
+
console.log('\n仓库别名:');
|
|
32
|
+
const maxNameLength = Math.max(...Object.keys(aliases).map(n => n.length));
|
|
33
|
+
for (const [name, url] of Object.entries(aliases)) {
|
|
34
|
+
console.log(` ${name.padEnd(maxNameLength)} → ${url}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 设置仓库路径
|
|
40
|
+
*/
|
|
41
|
+
export async function configSetRepo(repoPath) {
|
|
42
|
+
await setRepository(repoPath);
|
|
43
|
+
printSuccess(`仓库路径已设置为: ${repoPath}`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 添加仓库别名
|
|
47
|
+
*/
|
|
48
|
+
export async function configAddRepo(name, url) {
|
|
49
|
+
await addRepoAlias(name, url);
|
|
50
|
+
printSuccess(`仓库别名已添加: ${name} → ${url}`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 删除仓库别名
|
|
54
|
+
*/
|
|
55
|
+
export async function configRemoveRepo(name) {
|
|
56
|
+
const aliases = await getRepoAliases();
|
|
57
|
+
if (!aliases[name]) {
|
|
58
|
+
printError(`仓库别名不存在: ${name}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
await removeRepoAlias(name);
|
|
62
|
+
printSuccess(`仓库别名已删除: ${name}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 设置镜像 URL
|
|
66
|
+
*/
|
|
67
|
+
export async function configSetMirror(url) {
|
|
68
|
+
await setMirrorUrl(url);
|
|
69
|
+
printSuccess(`镜像加速已设置为: ${url}`);
|
|
70
|
+
printInfo('现在使用 pull 命令时会自动应用此镜像');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 取消镜像设置
|
|
74
|
+
*/
|
|
75
|
+
export async function configUnsetMirror() {
|
|
76
|
+
const mirror = await getMirrorUrl();
|
|
77
|
+
if (!mirror) {
|
|
78
|
+
printInfo('镜像加速未设置');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
await clearMirrorUrl();
|
|
82
|
+
printSuccess('镜像加速已取消');
|
|
15
83
|
}
|
|
16
84
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pull.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pull 命令处理器
|
|
3
|
-
* 从 Git 仓库提取特定目录到 skills
|
|
3
|
+
* 从 Git 仓库提取特定目录到 skills 仓库(支持别名和镜像)
|
|
4
4
|
*/
|
|
5
5
|
import type { PullOptions } from '../types/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* 执行 pull 命令
|
|
8
|
-
* @param repoUrl - Git 仓库 URL
|
|
8
|
+
* @param repoUrl - Git 仓库 URL 或别名
|
|
9
9
|
* @param subpaths - 子路径列表
|
|
10
10
|
* @param options - 命令选项
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pull 命令处理器
|
|
3
|
-
* 从 Git 仓库提取特定目录到 skills
|
|
3
|
+
* 从 Git 仓库提取特定目录到 skills 仓库(支持别名和镜像)
|
|
4
4
|
*/
|
|
5
5
|
import { pull } from '../lib/pull-handler.js';
|
|
6
6
|
import { printError, printHeader } from '../utils/output.js';
|
|
7
7
|
import { SkillctlError } from '../utils/errors.js';
|
|
8
|
+
import { resolveAndValidateRepoUrl } from '../utils/url-validator.js';
|
|
8
9
|
/**
|
|
9
10
|
* 执行 pull 命令
|
|
10
|
-
* @param repoUrl - Git 仓库 URL
|
|
11
|
+
* @param repoUrl - Git 仓库 URL 或别名
|
|
11
12
|
* @param subpaths - 子路径列表
|
|
12
13
|
* @param options - 命令选项
|
|
13
14
|
*/
|
|
@@ -15,13 +16,15 @@ export async function pullCommand(repoUrl, subpaths, options) {
|
|
|
15
16
|
try {
|
|
16
17
|
// 验证参数
|
|
17
18
|
if (!repoUrl) {
|
|
18
|
-
throw new SkillctlError('请指定仓库 URL');
|
|
19
|
+
throw new SkillctlError('请指定仓库 URL 或别名');
|
|
19
20
|
}
|
|
20
21
|
if (!subpaths || subpaths.length === 0) {
|
|
21
22
|
throw new SkillctlError('请指定至少一个子路径');
|
|
22
23
|
}
|
|
24
|
+
// 解析和验证仓库 URL(支持别名和镜像检测)
|
|
25
|
+
const resolvedUrl = await resolveAndValidateRepoUrl(repoUrl);
|
|
23
26
|
const pullOptions = {
|
|
24
|
-
repoUrl,
|
|
27
|
+
repoUrl: resolvedUrl,
|
|
25
28
|
subpaths,
|
|
26
29
|
force: options.force || false,
|
|
27
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,QAAkB,EAClB,OAA6B;IAE7B,IAAI,CAAC;QACH,OAAO;QACP,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAgB;YAC/B,OAAO,EAAE,WAAW;YACpB,QAAQ;YACR,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;SAC9B,CAAC;QAEF,WAAW,CAAC,aAAa,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;QAExC,SAAS;QACT,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QAExE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,SAAS,YAAY,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,UAAU,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,7 @@ import { locate } from './commands/locate.js';
|
|
|
12
12
|
import { status } from './commands/status.js';
|
|
13
13
|
import { list } from './commands/list.js';
|
|
14
14
|
import { allList } from './commands/all-list.js';
|
|
15
|
-
import {
|
|
16
|
-
import { showConfig } from './commands/config.js';
|
|
15
|
+
import { showConfig, configSetRepo, configAddRepo, configRemoveRepo, configSetMirror, configUnsetMirror, } from './commands/config.js';
|
|
17
16
|
import { pullCommand } from './commands/pull.js';
|
|
18
17
|
import { createRequire } from 'node:module';
|
|
19
18
|
// 从 package.json 读取版本号
|
|
@@ -144,36 +143,89 @@ program
|
|
|
144
143
|
process.exit(1);
|
|
145
144
|
}
|
|
146
145
|
});
|
|
147
|
-
//
|
|
148
|
-
program
|
|
146
|
+
// Config 命令(子命令结构)
|
|
147
|
+
const configCmd = program
|
|
148
|
+
.command('config')
|
|
149
|
+
.description('配置管理');
|
|
150
|
+
// config show(默认)
|
|
151
|
+
configCmd
|
|
152
|
+
.command('show')
|
|
153
|
+
.description('显示所有配置')
|
|
154
|
+
.action(async () => {
|
|
155
|
+
try {
|
|
156
|
+
await showConfig();
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// config set-repo
|
|
163
|
+
configCmd
|
|
149
164
|
.command('set-repo')
|
|
150
|
-
.description('
|
|
165
|
+
.description('设置仓库路径')
|
|
151
166
|
.argument('<path>', '仓库路径')
|
|
152
167
|
.action(async (path) => {
|
|
153
168
|
try {
|
|
154
|
-
await
|
|
169
|
+
await configSetRepo(path);
|
|
155
170
|
}
|
|
156
171
|
catch (error) {
|
|
157
172
|
process.exit(1);
|
|
158
173
|
}
|
|
159
174
|
});
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
.command('
|
|
163
|
-
.description('
|
|
164
|
-
.
|
|
175
|
+
// config add-repo
|
|
176
|
+
configCmd
|
|
177
|
+
.command('add-repo')
|
|
178
|
+
.description('添加仓库别名')
|
|
179
|
+
.argument('<name>', '别名名称')
|
|
180
|
+
.argument('<url>', '仓库 URL')
|
|
181
|
+
.action(async (name, url) => {
|
|
165
182
|
try {
|
|
166
|
-
await
|
|
183
|
+
await configAddRepo(name, url);
|
|
167
184
|
}
|
|
168
185
|
catch (error) {
|
|
169
186
|
process.exit(1);
|
|
170
187
|
}
|
|
171
188
|
});
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
.command('
|
|
175
|
-
.description('
|
|
189
|
+
// config remove-repo
|
|
190
|
+
configCmd
|
|
191
|
+
.command('remove-repo')
|
|
192
|
+
.description('删除仓库别名')
|
|
193
|
+
.argument('<name>', '别名名称')
|
|
194
|
+
.action(async (name) => {
|
|
195
|
+
try {
|
|
196
|
+
await configRemoveRepo(name);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
// config set-mirror
|
|
203
|
+
configCmd
|
|
204
|
+
.command('set-mirror')
|
|
205
|
+
.description('设置镜像加速 URL')
|
|
206
|
+
.argument('<url>', '镜像 URL(如:https://ghfast.top)')
|
|
207
|
+
.action(async (url) => {
|
|
208
|
+
try {
|
|
209
|
+
await configSetMirror(url);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
// config unset-mirror
|
|
216
|
+
configCmd
|
|
217
|
+
.command('unset-mirror')
|
|
218
|
+
.description('取消镜像加速设置')
|
|
176
219
|
.action(async () => {
|
|
220
|
+
try {
|
|
221
|
+
await configUnsetMirror();
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
// 如果 config 没有子命令,默认执行 show
|
|
228
|
+
configCmd.action(async () => {
|
|
177
229
|
try {
|
|
178
230
|
await showConfig();
|
|
179
231
|
}
|
|
@@ -184,8 +236,8 @@ program
|
|
|
184
236
|
// Pull 命令
|
|
185
237
|
program
|
|
186
238
|
.command('pull')
|
|
187
|
-
.description('从 Git 仓库提取 skill
|
|
188
|
-
.argument('<repo-url>', 'Git 仓库 URL
|
|
239
|
+
.description('从 Git 仓库提取 skill 到本地(支持别名和镜像)')
|
|
240
|
+
.argument('<repo-url>', 'Git 仓库 URL 或别名(如:https://github.com/owner/repo 或别名)')
|
|
189
241
|
.argument('<subpath...>', '仓库中的子路径(可指定多个)')
|
|
190
242
|
.option('-f, --force', '强制覆盖已存在的 skill(会自动备份)')
|
|
191
243
|
.action(async (repoUrl, subpaths, options) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,4 +31,33 @@ export declare function getConfigDir(): string;
|
|
|
31
31
|
* 获取配置文件路径
|
|
32
32
|
*/
|
|
33
33
|
export declare function getConfigFile(): string;
|
|
34
|
+
/**
|
|
35
|
+
* 添加仓库别名
|
|
36
|
+
*/
|
|
37
|
+
export declare function addRepoAlias(name: string, url: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* 删除仓库别名
|
|
40
|
+
*/
|
|
41
|
+
export declare function removeRepoAlias(name: string): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* 获取所有仓库别名
|
|
44
|
+
*/
|
|
45
|
+
export declare function getRepoAliases(): Promise<Record<string, string>>;
|
|
46
|
+
/**
|
|
47
|
+
* 解析仓库别名
|
|
48
|
+
* 如果输入是别名,返回对应的 URL;否则返回原输入
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveRepoAlias(nameOrUrl: string): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* 设置镜像 URL
|
|
53
|
+
*/
|
|
54
|
+
export declare function setMirrorUrl(url: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* 获取镜像 URL
|
|
57
|
+
*/
|
|
58
|
+
export declare function getMirrorUrl(): Promise<string | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* 清除镜像 URL
|
|
61
|
+
*/
|
|
62
|
+
export declare function clearMirrorUrl(): Promise<void>;
|
|
34
63
|
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/lib/config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcxD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAY1D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/lib/config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcxD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAY1D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAID;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAGtE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AAID;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|
|
@@ -74,4 +74,65 @@ export function getConfigDir() {
|
|
|
74
74
|
export function getConfigFile() {
|
|
75
75
|
return CONFIG_FILE;
|
|
76
76
|
}
|
|
77
|
+
// ==================== 仓库别名管理 ====================
|
|
78
|
+
/**
|
|
79
|
+
* 添加仓库别名
|
|
80
|
+
*/
|
|
81
|
+
export async function addRepoAlias(name, url) {
|
|
82
|
+
const config = await readConfig();
|
|
83
|
+
if (!config.repos) {
|
|
84
|
+
config.repos = {};
|
|
85
|
+
}
|
|
86
|
+
config.repos[name] = url;
|
|
87
|
+
await writeConfig(config);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 删除仓库别名
|
|
91
|
+
*/
|
|
92
|
+
export async function removeRepoAlias(name) {
|
|
93
|
+
const config = await readConfig();
|
|
94
|
+
if (config.repos && config.repos[name]) {
|
|
95
|
+
delete config.repos[name];
|
|
96
|
+
await writeConfig(config);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 获取所有仓库别名
|
|
101
|
+
*/
|
|
102
|
+
export async function getRepoAliases() {
|
|
103
|
+
const config = await readConfig();
|
|
104
|
+
return config.repos || {};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 解析仓库别名
|
|
108
|
+
* 如果输入是别名,返回对应的 URL;否则返回原输入
|
|
109
|
+
*/
|
|
110
|
+
export async function resolveRepoAlias(nameOrUrl) {
|
|
111
|
+
const aliases = await getRepoAliases();
|
|
112
|
+
return aliases[nameOrUrl] || nameOrUrl;
|
|
113
|
+
}
|
|
114
|
+
// ==================== 镜像配置管理 ====================
|
|
115
|
+
/**
|
|
116
|
+
* 设置镜像 URL
|
|
117
|
+
*/
|
|
118
|
+
export async function setMirrorUrl(url) {
|
|
119
|
+
const config = await readConfig();
|
|
120
|
+
config.mirrorUrl = url;
|
|
121
|
+
await writeConfig(config);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 获取镜像 URL
|
|
125
|
+
*/
|
|
126
|
+
export async function getMirrorUrl() {
|
|
127
|
+
const config = await readConfig();
|
|
128
|
+
return config.mirrorUrl;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 清除镜像 URL
|
|
132
|
+
*/
|
|
133
|
+
export async function clearMirrorUrl() {
|
|
134
|
+
const config = await readConfig();
|
|
135
|
+
delete config.mirrorUrl;
|
|
136
|
+
await writeConfig(config);
|
|
137
|
+
}
|
|
77
138
|
//# sourceMappingURL=config-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/lib/config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAe;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC7B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC;IACzB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/lib/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-handler.d.ts","sourceRoot":"","sources":["../../src/lib/pull-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull-handler.d.ts","sourceRoot":"","sources":["../../src/lib/pull-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAC;AA+KjF;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAyCtE"}
|
package/dist/lib/pull-handler.js
CHANGED
|
@@ -15,6 +15,7 @@ import { validateSkillStrict, extractDisplayName } from '../utils/skill-validato
|
|
|
15
15
|
import { SkillAlreadyExistsError, SkillValidationError, } from '../utils/errors.js';
|
|
16
16
|
import { printInfo, printSuccess, printError } from '../utils/output.js';
|
|
17
17
|
import { isWindows } from '../utils/platform.js';
|
|
18
|
+
import { getMirrorUrl } from './config-manager.js';
|
|
18
19
|
/**
|
|
19
20
|
* 生成备份文件名
|
|
20
21
|
* @param skillName - skill 名称
|
|
@@ -164,17 +165,21 @@ export async function pull(options) {
|
|
|
164
165
|
// 获取 skills 目录
|
|
165
166
|
const skillsDir = await getProjectSkillsDir();
|
|
166
167
|
printInfo(`正在解析仓库信息...`);
|
|
167
|
-
//
|
|
168
|
+
// 解析仓库信息
|
|
169
|
+
let repoInfo;
|
|
168
170
|
try {
|
|
169
|
-
parseGitHubRepoUrl(repoUrl);
|
|
171
|
+
repoInfo = parseGitHubRepoUrl(repoUrl);
|
|
170
172
|
}
|
|
171
173
|
catch (error) {
|
|
172
174
|
printError(error instanceof Error ? error.message : '无法解析仓库 URL');
|
|
173
175
|
return results;
|
|
174
176
|
}
|
|
177
|
+
// 应用配置文件中的镜像(如果已设置)
|
|
178
|
+
const mirrorUrl = await getMirrorUrl();
|
|
179
|
+
const finalRepoUrl = mirrorUrl ? `${mirrorUrl}/https://github.com/${repoInfo.owner}/${repoInfo.repo}` : repoUrl;
|
|
175
180
|
// 逐个处理 subpath
|
|
176
181
|
for (const subpath of subpaths) {
|
|
177
|
-
const result = await pullSingleSkill(
|
|
182
|
+
const result = await pullSingleSkill(finalRepoUrl, subpath, skillsDir, force);
|
|
178
183
|
results.push(result);
|
|
179
184
|
// 如果失败且不是 force 模式,停止后续处理
|
|
180
185
|
if (result.status === 'failed' && !force) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-handler.js","sourceRoot":"","sources":["../../src/lib/pull-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAW,EAAE,EAAE,MAAM,EAAE,EAAE,EAAQ,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull-handler.js","sourceRoot":"","sources":["../../src/lib/pull-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill 管理器 - 核心业务逻辑
|
|
3
3
|
*/
|
|
4
|
-
import type { Scope, SkillStatus, LinkInfo, SkillValidationResult } from '../types/index.js';
|
|
4
|
+
import type { Scope, SkillStatus, LinkInfo, SkillValidationResult, SkillWithDescription } from '../types/index.js';
|
|
5
5
|
/**
|
|
6
6
|
* 获取激活目录路径
|
|
7
7
|
*/
|
|
@@ -46,4 +46,8 @@ export declare function getActiveSkills(scope: Scope): Promise<LinkInfo[]>;
|
|
|
46
46
|
* 定位 skill(在多个位置搜索)
|
|
47
47
|
*/
|
|
48
48
|
export declare function locateSkill(skillName: string): Promise<LinkInfo[]>;
|
|
49
|
+
/**
|
|
50
|
+
* 获取所有可用的 skills 及其描述
|
|
51
|
+
*/
|
|
52
|
+
export declare function getAllSkillsWithDescriptions(): Promise<SkillWithDescription[]>;
|
|
49
53
|
//# sourceMappingURL=skill-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/lib/skill-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/lib/skill-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA0BnH;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG3D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsBrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpF;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBtD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAa9D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA+BvE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0CxE;AAwCD;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAapF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill 管理器 - 核心业务逻辑
|
|
3
3
|
*/
|
|
4
|
-
import { readdir } from 'node:fs/promises';
|
|
4
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
5
6
|
import { join } from 'node:path';
|
|
6
7
|
import { getHomeDir, getCwd } from '../utils/platform.js';
|
|
7
8
|
import { isSymlink, resolveLink, createLink, removeLink, pathExists, isDirectory, validateLink, } from './link-handler.js';
|
|
@@ -212,4 +213,51 @@ export async function locateSkill(skillName) {
|
|
|
212
213
|
}
|
|
213
214
|
return results;
|
|
214
215
|
}
|
|
216
|
+
// ==================== Skill 描述获取 ====================
|
|
217
|
+
/**
|
|
218
|
+
* 从 SKILL.md 文件中提取描述信息
|
|
219
|
+
*/
|
|
220
|
+
async function getSkillDescription(skillName) {
|
|
221
|
+
const skillPath = await getSkillSourcePath(skillName);
|
|
222
|
+
const skillMdPath = join(skillPath, 'SKILL.md');
|
|
223
|
+
if (!existsSync(skillMdPath)) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
const content = await readFile(skillMdPath, 'utf-8');
|
|
228
|
+
// 从 YAML frontmatter 中提取 description
|
|
229
|
+
const descMatch = content.match(/description:\s*["']([^"']+)["']/);
|
|
230
|
+
if (descMatch && descMatch[1]) {
|
|
231
|
+
const description = descMatch[1].trim();
|
|
232
|
+
// 限制描述长度
|
|
233
|
+
return description.length > 50 ? description.slice(0, 47) + '...' : description;
|
|
234
|
+
}
|
|
235
|
+
// 如果没有找到 description 字段,尝试解析不带引号的
|
|
236
|
+
const descMatch2 = content.match(/description:\s*(.+)$/m);
|
|
237
|
+
if (descMatch2 && descMatch2[1]) {
|
|
238
|
+
const description = descMatch2[1].trim();
|
|
239
|
+
// 限制描述长度
|
|
240
|
+
return description.length > 50 ? description.slice(0, 47) + '...' : description;
|
|
241
|
+
}
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 获取所有可用的 skills 及其描述
|
|
250
|
+
*/
|
|
251
|
+
export async function getAllSkillsWithDescriptions() {
|
|
252
|
+
const allSkills = await getAllSkills();
|
|
253
|
+
const skillsWithDesc = [];
|
|
254
|
+
for (const skillName of allSkills) {
|
|
255
|
+
const description = await getSkillDescription(skillName);
|
|
256
|
+
skillsWithDesc.push({
|
|
257
|
+
name: skillName,
|
|
258
|
+
description,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return skillsWithDesc;
|
|
262
|
+
}
|
|
215
263
|
//# sourceMappingURL=skill-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../src/lib/skill-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../src/lib/skill-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface SkillStatus {
|
|
|
18
18
|
*/
|
|
19
19
|
export interface SkillctlConfig {
|
|
20
20
|
repository?: string;
|
|
21
|
+
mirrorUrl?: string;
|
|
22
|
+
repos?: Record<string, string>;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* 命令选项接口
|
|
@@ -72,6 +74,13 @@ export interface SkillMetadata {
|
|
|
72
74
|
name: string;
|
|
73
75
|
description?: string;
|
|
74
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Skill 带描述信息
|
|
79
|
+
*/
|
|
80
|
+
export interface SkillWithDescription {
|
|
81
|
+
name: string;
|
|
82
|
+
description?: string;
|
|
83
|
+
}
|
|
75
84
|
/**
|
|
76
85
|
* 下载任务状态
|
|
77
86
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL 验证工具
|
|
3
|
+
* 用于验证和解析 Git 仓库 URL
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 检测是否是镜像 URL 格式
|
|
7
|
+
* 镜像 URL 应该通过 config set-mirror 设置,而不是直接在 pull 命令中使用
|
|
8
|
+
*/
|
|
9
|
+
export declare function isMirrorUrlFormat(url: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* 验证是否是有效的 Git URL
|
|
12
|
+
* 支持:
|
|
13
|
+
* - https://github.com/owner/repo
|
|
14
|
+
* - git@github.com:owner/repo.git
|
|
15
|
+
* - git://github.com/owner/repo.git
|
|
16
|
+
*/
|
|
17
|
+
export declare function isGitUrl(url: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 解析并验证仓库 URL
|
|
20
|
+
* 1. 检查是否是已定义的别名 → 返回别名对应的 URL
|
|
21
|
+
* 2. 检测镜像 URL 格式 → 抛出错误
|
|
22
|
+
* 3. 验证是否是有效的 Git URL → 返回 URL
|
|
23
|
+
* 4. 都不是 → 抛出错误并显示可用别名
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveAndValidateRepoUrl(input: string): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=url-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-validator.d.ts","sourceRoot":"","sources":["../../src/utils/url-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS7C;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC9E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL 验证工具
|
|
3
|
+
* 用于验证和解析 Git 仓库 URL
|
|
4
|
+
*/
|
|
5
|
+
import { getRepoAliases } from '../lib/config-manager.js';
|
|
6
|
+
/**
|
|
7
|
+
* 检测是否是镜像 URL 格式
|
|
8
|
+
* 镜像 URL 应该通过 config set-mirror 设置,而不是直接在 pull 命令中使用
|
|
9
|
+
*/
|
|
10
|
+
export function isMirrorUrlFormat(url) {
|
|
11
|
+
const mirrorPatterns = [
|
|
12
|
+
/https?:\/\/[^/]+\/https?:\/\//, // 双重协议,如 https://mirror.com/https://github.com/...
|
|
13
|
+
/ghfast\.top/,
|
|
14
|
+
/ghproxy\.net/,
|
|
15
|
+
];
|
|
16
|
+
return mirrorPatterns.some(pattern => pattern.test(url));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 验证是否是有效的 Git URL
|
|
20
|
+
* 支持:
|
|
21
|
+
* - https://github.com/owner/repo
|
|
22
|
+
* - git@github.com:owner/repo.git
|
|
23
|
+
* - git://github.com/owner/repo.git
|
|
24
|
+
*/
|
|
25
|
+
export function isGitUrl(url) {
|
|
26
|
+
// HTTPS 格式
|
|
27
|
+
const httpsPattern = /^https?:\/\/.+\/.+\/.+$/;
|
|
28
|
+
// SSH 格式
|
|
29
|
+
const sshPattern = /^git@[\w.-]+:[\w.-]+\/[\w.-]+\.?git?$/;
|
|
30
|
+
// GIT 协议格式
|
|
31
|
+
const gitPattern = /^git:\/\/[\w.-]+\/[\w.-]+\/[\w.-]+\.?git?$/;
|
|
32
|
+
return httpsPattern.test(url) || sshPattern.test(url) || gitPattern.test(url);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 解析并验证仓库 URL
|
|
36
|
+
* 1. 检查是否是已定义的别名 → 返回别名对应的 URL
|
|
37
|
+
* 2. 检测镜像 URL 格式 → 抛出错误
|
|
38
|
+
* 3. 验证是否是有效的 Git URL → 返回 URL
|
|
39
|
+
* 4. 都不是 → 抛出错误并显示可用别名
|
|
40
|
+
*/
|
|
41
|
+
export async function resolveAndValidateRepoUrl(input) {
|
|
42
|
+
// 1. 检查是否是别名
|
|
43
|
+
const aliases = await getRepoAliases();
|
|
44
|
+
if (aliases[input]) {
|
|
45
|
+
return aliases[input];
|
|
46
|
+
}
|
|
47
|
+
// 2. 检测镜像 URL 格式
|
|
48
|
+
if (isMirrorUrlFormat(input)) {
|
|
49
|
+
throw new Error('检测到镜像 URL 格式。请使用以下方式配置镜像:\n' +
|
|
50
|
+
' skillctl config set-mirror <镜像URL>\n' +
|
|
51
|
+
'然后在 pull 命令中使用原始仓库 URL 即可。');
|
|
52
|
+
}
|
|
53
|
+
// 3. 验证是否是有效的 Git URL
|
|
54
|
+
if (!isGitUrl(input)) {
|
|
55
|
+
const aliasList = Object.keys(aliases).length > 0
|
|
56
|
+
? '\n可用的仓库别名:\n' + Object.entries(aliases)
|
|
57
|
+
.map(([name, url]) => ` ${name} → ${url}`)
|
|
58
|
+
.join('\n')
|
|
59
|
+
: '';
|
|
60
|
+
throw new Error(`无效的仓库 URL: ${input}\n` +
|
|
61
|
+
`支持的格式:\n` +
|
|
62
|
+
` https://github.com/owner/repo\n` +
|
|
63
|
+
` git@github.com:owner/repo.git${aliasList}`);
|
|
64
|
+
}
|
|
65
|
+
return input;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=url-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-validator.js","sourceRoot":"","sources":["../../src/utils/url-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,cAAc,GAAG;QACrB,+BAA+B,EAAE,mDAAmD;QACpF,aAAa;QACb,cAAc;KACf,CAAC;IACF,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,WAAW;IACX,MAAM,YAAY,GAAG,yBAAyB,CAAC;IAC/C,SAAS;IACT,MAAM,UAAU,GAAG,uCAAuC,CAAC;IAC3D,WAAW;IACX,MAAM,UAAU,GAAG,4CAA4C,CAAC;IAEhE,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAAa;IAC3D,aAAa;IACb,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,iBAAiB;IACjB,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,6BAA6B;YAC7B,wCAAwC;YACxC,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC;iBAC1C,IAAI,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,IAAI;YACvB,UAAU;YACV,mCAAmC;YACnC,kCAAkC,SAAS,EAAE,CAC9C,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dayinxisheng/skillctl",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Claude Skills 管理工具 - 管理 Claude Skills 的激活状态和项目归档",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"chalk": "^5.3.0",
|
|
31
|
+
"cli-table3": "^0.6.5",
|
|
31
32
|
"commander": "^12.1.0",
|
|
32
33
|
"ora": "^8.1.1"
|
|
33
34
|
},
|