eskill 1.0.28 → 1.0.29
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/cli.js +1 -1
- package/lib/installer.js +32 -18
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ const program = new Command();
|
|
|
13
13
|
program
|
|
14
14
|
.name('eskill')
|
|
15
15
|
.description('Unified AI Agent Skills Management - Install skills from Git URLs')
|
|
16
|
-
.version('1.0.
|
|
16
|
+
.version('1.0.29')
|
|
17
17
|
.option('-g, --global', '使用全局技能目录(~/.eskill/skills/),否则使用当前目录(./.claude/skills/)', false);
|
|
18
18
|
|
|
19
19
|
// 安装命令
|
package/lib/installer.js
CHANGED
|
@@ -58,10 +58,10 @@ function getEskillPackageDir() {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param {boolean} global -
|
|
61
|
+
* 获取技能目录
|
|
62
|
+
* @param {boolean} global - 是否使用全局目录
|
|
63
63
|
*/
|
|
64
|
-
function
|
|
64
|
+
function getSkillsDir(global = false) {
|
|
65
65
|
if (global) {
|
|
66
66
|
// 全局模式:使用 ~/.eskill/skills/
|
|
67
67
|
return join(homedir(), '.eskill', 'skills');
|
|
@@ -71,6 +71,20 @@ function getSkillsStorageDir(global = false) {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
/**
|
|
75
|
+
* 获取技能存储目录(用于元数据)
|
|
76
|
+
* @param {boolean} global - 是否使用全局目录
|
|
77
|
+
*/
|
|
78
|
+
function getSkillsStorageDir(global = false) {
|
|
79
|
+
if (global) {
|
|
80
|
+
// 全局模式:使用 ~/.eskill/skills/
|
|
81
|
+
return join(homedir(), '.eskill', 'skills');
|
|
82
|
+
} else {
|
|
83
|
+
// 本地模式:使用当前目录(项目根目录)
|
|
84
|
+
return process.cwd();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
74
88
|
/**
|
|
75
89
|
* 迁移旧位置的技能到新位置
|
|
76
90
|
* @param {boolean} global - 是否全局模式
|
|
@@ -326,17 +340,17 @@ export async function installFromGitUrl(gitUrl, options = {}) {
|
|
|
326
340
|
console.log(`路径: ${parsed.path}`);
|
|
327
341
|
}
|
|
328
342
|
|
|
329
|
-
//
|
|
330
|
-
const
|
|
343
|
+
// 获取技能目录(技能文件存放位置)
|
|
344
|
+
const skillsDir = getSkillsDir(global);
|
|
331
345
|
|
|
332
346
|
// 确保技能目录存在
|
|
333
|
-
if (!existsSync(
|
|
334
|
-
mkdirSync(
|
|
347
|
+
if (!existsSync(skillsDir)) {
|
|
348
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
335
349
|
}
|
|
336
350
|
|
|
337
351
|
// 确定技能名称
|
|
338
352
|
const skillName = parsed.path ? basename(parsed.path) : parsed.repo;
|
|
339
|
-
const targetPath = join(
|
|
353
|
+
const targetPath = join(skillsDir, skillName);
|
|
340
354
|
|
|
341
355
|
// 检查是否已存在
|
|
342
356
|
if (existsSync(targetPath)) {
|
|
@@ -389,8 +403,9 @@ export async function installFromGitUrl(gitUrl, options = {}) {
|
|
|
389
403
|
}
|
|
390
404
|
|
|
391
405
|
console.log(`\n✓ 技能已安装到: ${targetPath}`);
|
|
392
|
-
|
|
393
|
-
console.log(`
|
|
406
|
+
const metaLocation = global ? '~/.eskill/skills/.eskill-meta.json' : './.eskill-meta.json';
|
|
407
|
+
console.log(` 元数据位置: ${metaLocation}`);
|
|
408
|
+
console.log(` 说明: 技能永久保存,可提交到 Git`);
|
|
394
409
|
|
|
395
410
|
// 获取 git 版本信息
|
|
396
411
|
const commitHash = getGitCommitHash(sourcePath);
|
|
@@ -427,7 +442,7 @@ export function listSkills(agent = 'claude', global = false) {
|
|
|
427
442
|
// 自动迁移旧位置的技能
|
|
428
443
|
migrateOldSkills(global);
|
|
429
444
|
|
|
430
|
-
const skillDir =
|
|
445
|
+
const skillDir = getSkillsDir(global);
|
|
431
446
|
|
|
432
447
|
if (!existsSync(skillDir)) {
|
|
433
448
|
return [];
|
|
@@ -459,7 +474,7 @@ export function listSkills(agent = 'claude', global = false) {
|
|
|
459
474
|
* 删除技能
|
|
460
475
|
*/
|
|
461
476
|
export function removeSkill(skillName, agent = 'claude', global = false) {
|
|
462
|
-
const skillDir =
|
|
477
|
+
const skillDir = getSkillsDir(global);
|
|
463
478
|
const targetPath = join(skillDir, skillName);
|
|
464
479
|
|
|
465
480
|
if (!existsSync(targetPath)) {
|
|
@@ -475,7 +490,7 @@ export function removeSkill(skillName, agent = 'claude', global = false) {
|
|
|
475
490
|
* 清理所有技能(用于卸载)
|
|
476
491
|
*/
|
|
477
492
|
export function cleanupAllSkills(global = false) {
|
|
478
|
-
const skillDir =
|
|
493
|
+
const skillDir = getSkillsDir(global);
|
|
479
494
|
|
|
480
495
|
if (!existsSync(skillDir)) {
|
|
481
496
|
console.log('没有需要清理的技能');
|
|
@@ -513,10 +528,9 @@ export function cleanupAll() {
|
|
|
513
528
|
|
|
514
529
|
/**
|
|
515
530
|
* 获取技能存储目录路径
|
|
531
|
+
* 导出内部的 getSkillsDir 函数
|
|
516
532
|
*/
|
|
517
|
-
export
|
|
518
|
-
return getSkillsStorageDir(global);
|
|
519
|
-
}
|
|
533
|
+
export { getSkillsDir };
|
|
520
534
|
|
|
521
535
|
/**
|
|
522
536
|
* 获取远程仓库的 commit hash(不克隆)
|
|
@@ -540,7 +554,7 @@ function getRemoteCommitHash(gitUrl, branch) {
|
|
|
540
554
|
*/
|
|
541
555
|
export async function updateSkill(skillName, options = {}) {
|
|
542
556
|
const { force = false, global = false } = options;
|
|
543
|
-
const skillDir =
|
|
557
|
+
const skillDir = getSkillsDir(global);
|
|
544
558
|
const targetPath = join(skillDir, skillName);
|
|
545
559
|
|
|
546
560
|
// 检查技能是否存在
|
|
@@ -648,7 +662,7 @@ export async function updateAllSkills(options = {}) {
|
|
|
648
662
|
// 自动迁移旧位置的技能
|
|
649
663
|
migrateOldSkills(global);
|
|
650
664
|
|
|
651
|
-
const skillDir =
|
|
665
|
+
const skillDir = getSkillsDir(global);
|
|
652
666
|
|
|
653
667
|
if (!existsSync(skillDir)) {
|
|
654
668
|
console.log('未安装任何技能');
|