reskill 0.1.0 → 0.11.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.
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Agent Registry - 多 Agent 配置定义
3
+ *
4
+ * 支持 17 个 coding agents 的全局和项目级安装
5
+ * 参考: https://github.com/vercel-labs/add-skill
6
+ */
7
+ /**
8
+ * 支持的 Agent 类型
9
+ */
10
+ export type AgentType = 'amp' | 'antigravity' | 'claude-code' | 'clawdbot' | 'codex' | 'cursor' | 'droid' | 'gemini-cli' | 'github-copilot' | 'goose' | 'kilo' | 'kiro-cli' | 'opencode' | 'roo' | 'trae' | 'windsurf' | 'neovate';
11
+ /**
12
+ * Agent 配置接口
13
+ */
14
+ export interface AgentConfig {
15
+ /** Agent 标识符 */
16
+ name: AgentType;
17
+ /** 显示名称 */
18
+ displayName: string;
19
+ /** 项目级 skills 目录 (相对路径) */
20
+ skillsDir: string;
21
+ /** 全局 skills 目录 (绝对路径) */
22
+ globalSkillsDir: string;
23
+ /** 检测 agent 是否已安装 */
24
+ detectInstalled: () => Promise<boolean>;
25
+ }
26
+ /**
27
+ * 所有支持的 Agents 配置
28
+ */
29
+ export declare const agents: Record<AgentType, AgentConfig>;
30
+ /**
31
+ * 获取所有 Agent 类型列表
32
+ */
33
+ export declare function getAllAgentTypes(): AgentType[];
34
+ /**
35
+ * 检测已安装的 Agents
36
+ */
37
+ export declare function detectInstalledAgents(): Promise<AgentType[]>;
38
+ /**
39
+ * 获取 Agent 配置
40
+ */
41
+ export declare function getAgentConfig(type: AgentType): AgentConfig;
42
+ /**
43
+ * 验证 Agent 类型是否有效
44
+ */
45
+ export declare function isValidAgentType(type: string): type is AgentType;
46
+ /**
47
+ * 获取 Agent 的项目级 skills 目录
48
+ */
49
+ export declare function getAgentSkillsDir(type: AgentType, options?: {
50
+ global?: boolean;
51
+ cwd?: string;
52
+ }): string;
53
+ export default agents;
54
+ //# sourceMappingURL=agent-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/core/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,KAAK,GACL,aAAa,GACb,aAAa,GACb,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,OAAO,GACP,MAAM,GACN,UAAU,GACV,UAAU,GACV,KAAK,GACL,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAID;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAmKjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAUlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAE3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAOR;AAED,eAAe,MAAM,CAAC"}
@@ -38,6 +38,10 @@ export declare class CacheManager {
38
38
  * - https://gitlab.company.com/team/skill.git@v2.0.0 -> ~/.reskill-cache/gitlab.company.com/team/skill/v2.0.0
39
39
  */
40
40
  getSkillCachePath(parsed: ParsedSkillRef, version: string): string;
41
+ /**
42
+ * 获取缓存路径 (getSkillCachePath 的别名)
43
+ */
44
+ getCachePath(parsed: ParsedSkillRef, version: string): string;
41
45
  /**
42
46
  * 检查 skill 是否已缓存
43
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/core/cache-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYxD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAUlE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAK1D;;OAEG;IACG,GAAG,CACP,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAuBnD;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAyC5C;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE;CA4B1D;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/core/cache-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYxD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAUlE;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAI7D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAK1D;;OAEG;IACG,GAAG,CACP,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAuBnD;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAyC5C;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE;CA4B1D;AAED,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAmBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAS/B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;IAejD;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC;IAQvC;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAiB5C;;OAEG;IACH,aAAa,IAAI,MAAM;IAKvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYlC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI9C;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAmBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAS/B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;IAejD;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC;IAUvC;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAiB5C;;OAEG;IACH,aAAa,IAAI,MAAM;IAKvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYlC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI9C;AAED,eAAe,YAAY,CAAC"}
@@ -4,4 +4,10 @@ export { ConfigLoader, DEFAULT_REGISTRIES } from './config-loader.js';
4
4
  export { LockManager } from './lock-manager.js';
5
5
  export { SkillManager } from './skill-manager.js';
6
6
  export type { SkillManagerOptions } from './skill-manager.js';
7
+ export { agents, detectInstalledAgents, getAgentConfig, getAllAgentTypes, isValidAgentType, getAgentSkillsDir, } from './agent-registry.js';
8
+ export type { AgentType, AgentConfig } from './agent-registry.js';
9
+ export { Installer } from './installer.js';
10
+ export type { InstallMode, InstallResult, InstallerOptions } from './installer.js';
11
+ export { parseSkillMd, parseSkillMdFile, parseSkillFromDir, hasValidSkillMd, validateSkillName, validateSkillDescription, generateSkillMd, SkillValidationError, } from './skill-parser.js';
12
+ export type { SkillMdFrontmatter, ParsedSkill } from './skill-parser.js';
7
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Installer - 多 Agent 安装器
3
+ *
4
+ * 支持两种安装模式:
5
+ * - symlink: 规范位置 (.agents/skills/) + 符号链接到各 agent 目录
6
+ * - copy: 直接复制到各 agent 目录
7
+ *
8
+ * 参考: https://github.com/vercel-labs/add-skill/blob/main/src/installer.ts
9
+ */
10
+ import type { AgentType } from './agent-registry.js';
11
+ /**
12
+ * 安装模式
13
+ */
14
+ export type InstallMode = 'symlink' | 'copy';
15
+ /**
16
+ * 安装结果
17
+ */
18
+ export interface InstallResult {
19
+ /** 是否成功 */
20
+ success: boolean;
21
+ /** 安装路径 */
22
+ path: string;
23
+ /** 规范路径 (symlink 模式) */
24
+ canonicalPath?: string;
25
+ /** 安装模式 */
26
+ mode: InstallMode;
27
+ /** symlink 是否失败 (fallback to copy) */
28
+ symlinkFailed?: boolean;
29
+ /** 错误信息 */
30
+ error?: string;
31
+ }
32
+ /**
33
+ * 安装选项
34
+ */
35
+ export interface InstallerOptions {
36
+ /** 全局安装 */
37
+ global?: boolean;
38
+ /** 当前工作目录 */
39
+ cwd?: string;
40
+ /** 安装模式 */
41
+ mode?: InstallMode;
42
+ }
43
+ /**
44
+ * Installer 类 - 多 Agent 安装器
45
+ */
46
+ export declare class Installer {
47
+ private cwd;
48
+ private isGlobal;
49
+ constructor(options?: {
50
+ cwd?: string;
51
+ global?: boolean;
52
+ });
53
+ /**
54
+ * 获取规范安装路径
55
+ */
56
+ getCanonicalPath(skillName: string): string;
57
+ /**
58
+ * 获取 agent 的 skill 安装路径
59
+ */
60
+ getAgentSkillPath(skillName: string, agentType: AgentType): string;
61
+ /**
62
+ * 安装 skill 到指定 agent
63
+ *
64
+ * @param sourcePath - skill 源目录路径
65
+ * @param skillName - skill 名称
66
+ * @param agentType - 目标 agent 类型
67
+ * @param options - 安装选项
68
+ */
69
+ installForAgent(sourcePath: string, skillName: string, agentType: AgentType, options?: {
70
+ mode?: InstallMode;
71
+ }): Promise<InstallResult>;
72
+ /**
73
+ * 安装 skill 到多个 agents
74
+ */
75
+ installToAgents(sourcePath: string, skillName: string, targetAgents: AgentType[], options?: {
76
+ mode?: InstallMode;
77
+ }): Promise<Map<AgentType, InstallResult>>;
78
+ /**
79
+ * 检查 skill 是否已安装到指定 agent
80
+ */
81
+ isInstalled(skillName: string, agentType: AgentType): boolean;
82
+ /**
83
+ * 从指定 agent 卸载 skill
84
+ */
85
+ uninstallFromAgent(skillName: string, agentType: AgentType): boolean;
86
+ /**
87
+ * 从多个 agents 卸载 skill
88
+ */
89
+ uninstallFromAgents(skillName: string, targetAgents: AgentType[]): Map<AgentType, boolean>;
90
+ /**
91
+ * 获取所有已安装到指定 agent 的 skills
92
+ */
93
+ listInstalledSkills(agentType: AgentType): string[];
94
+ }
95
+ export default Installer;
96
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAsJD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO;IAK5D;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAM3C;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM;IASlE;;;;;;;OAOG;IACG,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,WAAW,CAAA;KAAO,GACnC,OAAO,CAAC,aAAa,CAAC;IA0FzB;;OAEG;IACG,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,EAAE,EACzB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,WAAW,CAAA;KAAO,GACnC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAgBzC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO;IAK7D;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO;IAWpE;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,EAAE,GACxB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAgB1B;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;CAepD;AAED,eAAe,SAAS,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type { InstalledSkill, InstallOptions } from '../types/index.js';
2
2
  import { LockManager } from './lock-manager.js';
3
+ import { type InstallResult, type InstallMode } from './installer.js';
4
+ import { type AgentType } from './agent-registry.js';
3
5
  /**
4
6
  * SkillManager 配置选项
5
7
  */
@@ -93,6 +95,45 @@ export declare class SkillManager {
93
95
  latest: string;
94
96
  updateAvailable: boolean;
95
97
  }>>;
98
+ /**
99
+ * 安装 skill 到多个 agents
100
+ *
101
+ * @param ref - Skill 引用 (如 github:user/repo@v1.0.0)
102
+ * @param targetAgents - 目标 agents 列表
103
+ * @param options - 安装选项
104
+ */
105
+ installToAgents(ref: string, targetAgents: AgentType[], options?: InstallOptions): Promise<{
106
+ skill: InstalledSkill;
107
+ results: Map<AgentType, InstallResult>;
108
+ }>;
109
+ /**
110
+ * 获取默认的目标 agents
111
+ *
112
+ * 优先级:
113
+ * 1. skills.json 中的 defaults.targetAgents
114
+ * 2. 自动检测已安装的 agents
115
+ * 3. 返回空数组
116
+ */
117
+ getDefaultTargetAgents(): Promise<AgentType[]>;
118
+ /**
119
+ * 获取默认安装模式
120
+ */
121
+ getDefaultInstallMode(): InstallMode;
122
+ /**
123
+ * 验证 agent 类型列表
124
+ */
125
+ validateAgentTypes(agentNames: string[]): {
126
+ valid: AgentType[];
127
+ invalid: string[];
128
+ };
129
+ /**
130
+ * 获取所有可用的 agent 类型
131
+ */
132
+ getAllAgentTypes(): AgentType[];
133
+ /**
134
+ * 从指定 agents 卸载 skill
135
+ */
136
+ uninstallFromAgents(name: string, targetAgents: AgentType[]): Map<AgentType, boolean>;
96
137
  }
97
138
  export default SkillManager;
98
139
  //# sourceMappingURL=skill-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAa,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAU;gBAEd,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB;IAY/D;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;OAKG;IACH,aAAa,IAAI,MAAM;IAOvB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIlC;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqEjF;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBzE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IA2BhC;;OAEG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6BtD;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc;IAoCtD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAkB7B;;OAEG;IACH,IAAI,IAAI,cAAc,EAAE;IA0BxB;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IA+BtD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QACrB,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;QACjC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B;IAQD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC,CAAC;CAgDJ;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Skill Parser - SKILL.md 解析器
3
+ *
4
+ * 遵循 agentskills.io 规范: https://agentskills.io/specification
5
+ *
6
+ * SKILL.md 格式要求:
7
+ * - YAML frontmatter 包含 name 和 description (必填)
8
+ * - name: 最多 64 字符,小写字母、数字、连字符
9
+ * - description: 最多 1024 字符
10
+ * - 可选字段: license, compatibility, metadata, allowed-tools
11
+ */
12
+ /**
13
+ * SKILL.md frontmatter 原始数据
14
+ */
15
+ export interface SkillMdFrontmatter {
16
+ /** Skill 名称 (必填) - 小写字母、数字、连字符 */
17
+ name: string;
18
+ /** Skill 描述 (必填) */
19
+ description: string;
20
+ /** 许可证 */
21
+ license?: string;
22
+ /** 兼容性要求 */
23
+ compatibility?: string;
24
+ /** 额外元数据 */
25
+ metadata?: Record<string, unknown>;
26
+ /** 允许使用的工具列表 (空格分隔) */
27
+ 'allowed-tools'?: string;
28
+ }
29
+ /**
30
+ * 解析后的 Skill 信息
31
+ */
32
+ export interface ParsedSkill {
33
+ /** Skill 名称 */
34
+ name: string;
35
+ /** Skill 描述 */
36
+ description: string;
37
+ /** 许可证 */
38
+ license?: string;
39
+ /** 兼容性要求 */
40
+ compatibility?: string;
41
+ /** 额外元数据 */
42
+ metadata?: Record<string, unknown>;
43
+ /** 允许使用的工具列表 */
44
+ allowedTools?: string[];
45
+ /** Markdown 内容 (不含 frontmatter) */
46
+ content: string;
47
+ /** 原始完整内容 */
48
+ rawContent: string;
49
+ }
50
+ /**
51
+ * Skill 验证错误
52
+ */
53
+ export declare class SkillValidationError extends Error {
54
+ field?: string | undefined;
55
+ constructor(message: string, field?: string | undefined);
56
+ }
57
+ /**
58
+ * 验证 skill name 格式
59
+ *
60
+ * 规范要求:
61
+ * - 最多 64 字符
62
+ * - 只能包含小写字母、数字、连字符
63
+ * - 不能以连字符开头或结尾
64
+ * - 不能包含连续连字符
65
+ */
66
+ export declare function validateSkillName(name: string): void;
67
+ /**
68
+ * 验证 skill description
69
+ *
70
+ * 规范要求:
71
+ * - 最多 1024 字符
72
+ * - 不能包含尖括号
73
+ */
74
+ export declare function validateSkillDescription(description: string): void;
75
+ /**
76
+ * 解析 SKILL.md 内容
77
+ *
78
+ * @param content - SKILL.md 文件内容
79
+ * @param options - 解析选项
80
+ * @returns 解析后的 skill 信息,如果格式无效则返回 null
81
+ * @throws SkillValidationError 如果 strict 模式下验证失败
82
+ */
83
+ export declare function parseSkillMd(content: string, options?: {
84
+ strict?: boolean;
85
+ }): ParsedSkill | null;
86
+ /**
87
+ * 从文件路径解析 SKILL.md
88
+ */
89
+ export declare function parseSkillMdFile(filePath: string, options?: {
90
+ strict?: boolean;
91
+ }): ParsedSkill | null;
92
+ /**
93
+ * 从 skill 目录解析 SKILL.md
94
+ */
95
+ export declare function parseSkillFromDir(dirPath: string, options?: {
96
+ strict?: boolean;
97
+ }): ParsedSkill | null;
98
+ /**
99
+ * 检查目录是否包含有效的 SKILL.md
100
+ */
101
+ export declare function hasValidSkillMd(dirPath: string): boolean;
102
+ /**
103
+ * 生成 SKILL.md 内容
104
+ */
105
+ export declare function generateSkillMd(skill: Omit<ParsedSkill, 'rawContent'>): string;
106
+ declare const _default: {
107
+ parseSkillMd: typeof parseSkillMd;
108
+ parseSkillMdFile: typeof parseSkillMdFile;
109
+ parseSkillFromDir: typeof parseSkillFromDir;
110
+ hasValidSkillMd: typeof hasValidSkillMd;
111
+ validateSkillName: typeof validateSkillName;
112
+ validateSkillDescription: typeof validateSkillDescription;
113
+ generateSkillMd: typeof generateSkillMd;
114
+ };
115
+ export default _default;
116
+ //# sourceMappingURL=skill-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-parser.d.ts","sourceRoot":"","sources":["../../src/core/skill-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,KAAK,CAAC,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAqGD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA+CpD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAqBlE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,WAAW,GAAG,IAAI,CAmDpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,WAAW,GAAG,IAAI,CAUpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,WAAW,GAAG,IAAI,CAGpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAYxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,GACrC,MAAM,CAsBR;;;;;;;;;;AAED,wBAQE"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,10 @@
2
2
  * reskill - AI Skills Package Manager
3
3
  *
4
4
  * Git-based skills management for AI agents
5
+ * Supports 17+ coding agents: Cursor, Claude Code, GitHub Copilot, etc.
5
6
  */
6
- export { GitResolver, CacheManager, ConfigLoader, LockManager, SkillManager, DEFAULT_REGISTRIES, } from './core/index.js';
7
- export type { SkillsJson, SkillsLock, SkillJson, LockedSkill, ParsedSkillRef, ParsedVersion, VersionType, InstalledSkill, InstallOptions, UpdateOptions, ListOptions, } from './types/index.js';
7
+ export { GitResolver, CacheManager, ConfigLoader, LockManager, SkillManager, DEFAULT_REGISTRIES, agents, detectInstalledAgents, getAgentConfig, getAllAgentTypes, isValidAgentType, getAgentSkillsDir, Installer, parseSkillMd, parseSkillMdFile, parseSkillFromDir, hasValidSkillMd, validateSkillName, validateSkillDescription, generateSkillMd, SkillValidationError, } from './core/index.js';
8
+ export type { SkillsJson, SkillsLock, SkillJson, LockedSkill, ParsedSkillRef, ParsedVersion, VersionType, InstalledSkill, InstallOptions, UpdateOptions, ListOptions, AgentType, AgentConfig, InstallMode, InstallResult, SkillMdFrontmatter, ParsedSkill, } from './types/index.js';
8
9
  export { logger } from './utils/index.js';
10
+ export { getCanonicalSkillsDir, getCanonicalSkillPath, shortenPath, isPathSafe, sanitizeName, } from './utils/fs.js';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAElB,MAAM,EACN,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EAET,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EAEX,SAAS,EACT,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,eAAe,CAAC"}