@dayinxisheng/skillctl 1.0.4 → 1.1.1
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 +21 -0
- package/README.md +65 -17
- 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/output.d.ts.map +1 -1
- package/dist/utils/output.js +5 -3
- package/dist/utils/output.js.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,27 @@ 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.1.1] - 2026-03-05
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **优化表格显示**:`status` 命令输出表格列间距增加到 10 个空格,提升可读性
|
|
12
|
+
|
|
13
|
+
## [1.1.0] - 2026-03-05
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- **仓库别名管理**:通过 `config add-repo/remove-repo` 管理常用仓库,简化拉取操作
|
|
17
|
+
- **镜像加速配置**:通过 `config set-mirror/unset-mirror` 配置国内 GitHub 镜像加速
|
|
18
|
+
- **URL 验证工具**:新增 `url-validator.ts` 验证和解析仓库 URL
|
|
19
|
+
- **ls-all 表格格式**:使用 `cli-table3` 显示 skill 描述信息
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- **config 命令重构**:改为子命令结构(`show`、`set-repo`、`add-repo`、`remove-repo`、`set-mirror`、`unset-mirror`)
|
|
23
|
+
- **pull 命令增强**:支持使用别名拉取,自动应用镜像配置
|
|
24
|
+
- **命令整合**:移除独立的 `set-repo` 和 `get-repo` 命令,功能合并到 config 子命令
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- 修复 pull 命令下载时的网络问题(通过镜像加速)
|
|
28
|
+
|
|
8
29
|
## [1.0.4] - 2026-03-05
|
|
9
30
|
|
|
10
31
|
### Changed
|
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
|
|
@@ -175,19 +177,43 @@ skillctl pull https://github.com/owner/repo \
|
|
|
175
177
|
path/to/skill1 \
|
|
176
178
|
path/to/skill2
|
|
177
179
|
|
|
178
|
-
# 使用国内镜像(加速访问)
|
|
179
|
-
skillctl pull https://ghfast.top/https://github.com/owner/repo path/to/skill
|
|
180
|
-
|
|
181
180
|
# 强制覆盖已存在的 skill(自动备份)
|
|
182
181
|
skillctl pull <repo-url> <path> --force
|
|
183
182
|
```
|
|
184
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
|
+
|
|
185
210
|
**特性:**
|
|
186
211
|
- 支持从 GitHub 仓库提取指定目录作为 skill
|
|
187
212
|
- 严格验证 SKILL.md 文件及 name 字段
|
|
188
213
|
- 下载进度显示
|
|
189
214
|
- 跨平台支持(Linux/macOS 使用 tar.gz,Windows 使用 zip)
|
|
190
|
-
-
|
|
215
|
+
- 支持仓库别名,简化常用仓库的拉取
|
|
216
|
+
- 支持镜像加速配置
|
|
191
217
|
|
|
192
218
|
### 6. 定位 Skill
|
|
193
219
|
|
|
@@ -209,22 +235,43 @@ skillctl locate brainstorming
|
|
|
209
235
|
## ⚙️ 配置管理
|
|
210
236
|
|
|
211
237
|
```bash
|
|
212
|
-
#
|
|
238
|
+
# 查看所有配置
|
|
213
239
|
skillctl config
|
|
240
|
+
# 或
|
|
241
|
+
skillctl config show
|
|
214
242
|
```
|
|
215
243
|
|
|
216
244
|
输出示例:
|
|
217
245
|
```
|
|
218
|
-
|
|
219
|
-
|
|
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
|
|
220
258
|
```
|
|
221
259
|
|
|
222
260
|
```bash
|
|
223
|
-
#
|
|
224
|
-
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
|
|
225
272
|
|
|
226
|
-
#
|
|
227
|
-
skillctl
|
|
273
|
+
# 取消镜像设置
|
|
274
|
+
skillctl config unset-mirror
|
|
228
275
|
```
|
|
229
276
|
|
|
230
277
|
## 💡 实用场景
|
|
@@ -322,7 +369,8 @@ src/
|
|
|
322
369
|
│ ├── downloader.ts # 下载工具
|
|
323
370
|
│ ├── archive-extractor.ts # 解压工具
|
|
324
371
|
│ ├── skill-validator.ts # Skill 验证
|
|
325
|
-
│
|
|
372
|
+
│ ├── github-parser.ts # GitHub URL 解析
|
|
373
|
+
│ └── url-validator.ts # URL 验证
|
|
326
374
|
└── types/ # TypeScript 类型定义
|
|
327
375
|
└── index.ts
|
|
328
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":"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;AAED,mDAAmD;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,GAAW;IAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AACzC,CAAC;AAED,mDAAmD;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;IACvB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC;IACxB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,IAAI,CAIN;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,IAAI,CAIN;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CA0BpE"}
|
package/dist/utils/output.js
CHANGED
|
@@ -42,19 +42,21 @@ export function printTable(headers, rows) {
|
|
|
42
42
|
const maxInRows = Math.max(...rows.map((r) => (r[i] || '').length));
|
|
43
43
|
return Math.max(h.length, maxInRows);
|
|
44
44
|
});
|
|
45
|
+
// 列间距(空格数)
|
|
46
|
+
const colSpacing = 10;
|
|
45
47
|
// 打印表头
|
|
46
48
|
const headerLine = headers
|
|
47
49
|
.map((h, i) => h.padEnd(colWidths[i]))
|
|
48
|
-
.join(' ');
|
|
50
|
+
.join(' '.repeat(colSpacing));
|
|
49
51
|
console.log(chalk.cyan(headerLine));
|
|
50
52
|
// 打印分隔线
|
|
51
|
-
const separator = colWidths.map((w) => '─'.repeat(w)).join(' ');
|
|
53
|
+
const separator = colWidths.map((w) => '─'.repeat(w)).join(' '.repeat(colSpacing));
|
|
52
54
|
console.log(chalk.gray(separator));
|
|
53
55
|
// 打印数据行
|
|
54
56
|
for (const row of rows) {
|
|
55
57
|
const line = row
|
|
56
58
|
.map((c, i) => (c || '').padEnd(colWidths[i]))
|
|
57
|
-
.join(' ');
|
|
59
|
+
.join(' '.repeat(colSpacing));
|
|
58
60
|
console.log(line);
|
|
59
61
|
}
|
|
60
62
|
}
|
package/dist/utils/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
3
|
+
"version": "1.1.1",
|
|
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
|
},
|