eskill 1.2.1 → 1.2.2

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.
Files changed (3) hide show
  1. package/cli.js +2 -2
  2. package/lib/installer.js +27 -11
  3. 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.2.1')
16
+ .version('1.2.2')
17
17
  .option('-g, --global', '使用全局技能目录(~/.eskill/skills/),否则使用当前目录(./.claude/skills/)', false);
18
18
 
19
19
  // 安装命令
@@ -126,7 +126,7 @@ program
126
126
  program
127
127
  .command('link')
128
128
  .description('将全局技能软链接到本地')
129
- .argument('<name>', '技能名称(不需要 @作者)')
129
+ .argument('<name>', '技能名称(支持 name@author 格式)')
130
130
  .action(async (name) => {
131
131
  try {
132
132
  const result = await linkSkill(name);
package/lib/installer.js CHANGED
@@ -742,20 +742,27 @@ export function removeSkill(skillName, agent = 'claude', global = false) {
742
742
  * 链接全局技能到本地
743
743
  */
744
744
  export async function linkSkill(skillName) {
745
+ // 解析 skill-name@author 格式,提取实际技能名
746
+ let actualSkillName = skillName;
747
+ const match = skillName.match(/^([^@]+)@([^@]+)$/);
748
+ if (match) {
749
+ actualSkillName = match[1];
750
+ }
751
+
745
752
  const globalSkillsDir = getSkillsDir(true);
746
753
  const localSkillsDir = getSkillsDir(false);
747
754
 
748
- const globalSkillPath = join(globalSkillsDir, skillName);
749
- const localSkillPath = join(localSkillsDir, skillName);
755
+ const globalSkillPath = join(globalSkillsDir, actualSkillName);
756
+ const localSkillPath = join(localSkillsDir, actualSkillName);
750
757
 
751
758
  // 检查全局是否存在该技能
752
759
  if (!existsSync(globalSkillPath)) {
753
- console.log(`\n❌ 全局仓库中不存在技能: ${skillName}`);
754
- console.log(` 位置: ~/.eskill/skills/${skillName}\n`);
760
+ console.log(`\n❌ 全局仓库中不存在技能: ${actualSkillName}`);
761
+ console.log(` 位置: ~/.eskill/skills/${actualSkillName}\n`);
755
762
  console.log(`💡 提示:`);
756
763
  console.log(` - 使用 "eskill install -g ${skillName}" 先安装到全局仓库`);
757
764
  console.log(` - 或使用 "eskill install" 直接安装到本地\n`);
758
- throw new Error(`全局仓库中不存在技能: ${skillName}`);
765
+ throw new Error(`全局仓库中不存在技能: ${actualSkillName}`);
759
766
  }
760
767
 
761
768
  // 检查本地技能目录是否存在
@@ -775,7 +782,7 @@ export async function linkSkill(skillName) {
775
782
 
776
783
  // 检查本地是否已存在同名技能
777
784
  if (existsSync(localSkillPath)) {
778
- console.log(`\n⚠️ 本地已存在同名技能: ${skillName}`);
785
+ console.log(`\n⚠️ 本地已存在同名技能: ${actualSkillName}`);
779
786
  console.log(` 位置: ${localSkillPath}\n`);
780
787
 
781
788
  const overwrite = await confirmAction('是否删除本地技能并创建软链接?');
@@ -797,15 +804,15 @@ export async function linkSkill(skillName) {
797
804
  symlinkSync(globalSkillPath, localSkillPath, 'dir');
798
805
 
799
806
  console.log(`✓ 软链接创建成功`);
800
- console.log(` 技能: ${skillName}`);
807
+ console.log(` 技能: ${actualSkillName}`);
801
808
  console.log(` 本地路径: ${localSkillPath}`);
802
809
  console.log(` 全局路径: ${globalSkillPath}`);
803
810
  console.log(` 说明: 本地技能指向全局仓库,全局更新会自动同步\n`);
804
811
 
805
812
  // 保存元数据,标记来源为软链接
806
- const globalMeta = getSkillMeta(skillName, true);
813
+ const globalMeta = getSkillMeta(actualSkillName, true);
807
814
  if (globalMeta) {
808
- saveSkillMeta(skillName, {
815
+ saveSkillMeta(actualSkillName, {
809
816
  ...globalMeta,
810
817
  source: 'symlink',
811
818
  installedAt: new Date().toISOString(),
@@ -813,8 +820,8 @@ export async function linkSkill(skillName) {
813
820
  }, false);
814
821
  } else {
815
822
  // 如果全局没有元数据,创建基础元数据
816
- saveSkillMeta(skillName, {
817
- name: skillName,
823
+ saveSkillMeta(actualSkillName, {
824
+ name: actualSkillName,
818
825
  source: 'symlink',
819
826
  installedAt: new Date().toISOString(),
820
827
  updatedAt: new Date().toISOString()
@@ -845,6 +852,15 @@ export function cleanupAllSkills(global = false) {
845
852
  console.error(`清理失败: ${error.message}`);
846
853
  throw error;
847
854
  }
855
+
856
+ // 清空元数据文件
857
+ try {
858
+ saveAllSkillsMeta([], global);
859
+ const metaLocation = global ? '~/.eskill/skills/.eskill-meta.json' : './.eskill-meta.json';
860
+ console.log(`✓ 已清空元数据: ${metaLocation}`);
861
+ } catch (error) {
862
+ console.error(`清空元数据失败: ${error.message}`);
863
+ }
848
864
  }
849
865
 
850
866
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eskill",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Unified AI Agent Skills Management - Install skills from Git URLs",
5
5
  "main": "index.js",
6
6
  "type": "module",