reskill 1.2.0 → 1.3.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/README.md +90 -31
- package/README.zh-CN.md +97 -25
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/login.d.ts +10 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/logout.d.ts +9 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/publish.d.ts +32 -0
- package/dist/cli/commands/publish.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/commands/whoami.d.ts +9 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/index.js +2492 -32
- package/dist/core/auth-manager.d.ts +71 -0
- package/dist/core/auth-manager.d.ts.map +1 -0
- package/dist/core/config-loader.d.ts +12 -1
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/extractor.d.ts +62 -0
- package/dist/core/extractor.d.ts.map +1 -0
- package/dist/core/git-resolver.d.ts +2 -0
- package/dist/core/git-resolver.d.ts.map +1 -1
- package/dist/core/http-resolver.d.ts +6 -2
- package/dist/core/http-resolver.d.ts.map +1 -1
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/install-directory.d.ts +81 -0
- package/dist/core/install-directory.d.ts.map +1 -0
- package/dist/core/installer.d.ts +4 -0
- package/dist/core/installer.d.ts.map +1 -1
- package/dist/core/publisher.d.ts +85 -0
- package/dist/core/publisher.d.ts.map +1 -0
- package/dist/core/registry-client.d.ts +141 -0
- package/dist/core/registry-client.d.ts.map +1 -0
- package/dist/core/registry-resolver.d.ts +62 -0
- package/dist/core/registry-resolver.d.ts.map +1 -0
- package/dist/core/skill-manager.d.ts +29 -0
- package/dist/core/skill-manager.d.ts.map +1 -1
- package/dist/core/skill-parser.d.ts +5 -1
- package/dist/core/skill-parser.d.ts.map +1 -1
- package/dist/core/skill-validator.d.ts +110 -0
- package/dist/core/skill-validator.d.ts.map +1 -0
- package/dist/index.js +971 -18
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/git.d.ts +4 -3
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/registry-scope.d.ts +150 -0
- package/dist/utils/registry-scope.d.ts.map +1 -0
- package/dist/utils/registry.d.ts +22 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry Resolver (Step 5.1)
|
|
3
|
+
*
|
|
4
|
+
* Resolves skill references from npm-style registries:
|
|
5
|
+
* - Private registry: @scope/name[@version] (e.g., @kanyun/planning-with-files@2.4.5)
|
|
6
|
+
* - Public registry: name[@version] (e.g., my-skill@1.0.0)
|
|
7
|
+
*
|
|
8
|
+
* Uses RegistryClient to download and verify skills.
|
|
9
|
+
*/
|
|
10
|
+
import { type ParsedSkillIdentifier } from '../utils/registry-scope.js';
|
|
11
|
+
export interface RegistryResolveResult {
|
|
12
|
+
/** Parsed skill identifier */
|
|
13
|
+
parsed: ParsedSkillIdentifier;
|
|
14
|
+
/** Short skill name (without scope) */
|
|
15
|
+
shortName: string;
|
|
16
|
+
/** Resolved version */
|
|
17
|
+
version: string;
|
|
18
|
+
/** Registry URL */
|
|
19
|
+
registryUrl: string;
|
|
20
|
+
/** Downloaded tarball buffer */
|
|
21
|
+
tarball: Buffer;
|
|
22
|
+
/** Integrity hash from server */
|
|
23
|
+
integrity: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class RegistryResolver {
|
|
26
|
+
/**
|
|
27
|
+
* Check if a reference is a registry source (not Git or HTTP)
|
|
28
|
+
*
|
|
29
|
+
* Registry formats:
|
|
30
|
+
* - @scope/name[@version] - private registry
|
|
31
|
+
* - name[@version] - public registry (if not matching other formats)
|
|
32
|
+
*
|
|
33
|
+
* Explicitly excluded:
|
|
34
|
+
* - Git SSH: git@github.com:user/repo.git
|
|
35
|
+
* - Git HTTPS: https://github.com/user/repo.git
|
|
36
|
+
* - GitHub web: https://github.com/user/repo/tree/...
|
|
37
|
+
* - HTTP/OSS: https://example.com/skill.tar.gz
|
|
38
|
+
* - Registry shorthand: github:user/repo, gitlab:org/repo
|
|
39
|
+
*/
|
|
40
|
+
static isRegistryRef(ref: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a registry skill reference
|
|
43
|
+
*
|
|
44
|
+
* @param ref - Skill reference (e.g., "@kanyun/planning-with-files@2.4.5" or "my-skill@latest")
|
|
45
|
+
* @returns Resolved skill information including downloaded tarball
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* const result = await resolver.resolve('@kanyun/planning-with-files@2.4.5');
|
|
49
|
+
* console.log(result.shortName); // 'planning-with-files'
|
|
50
|
+
* console.log(result.version); // '2.4.5'
|
|
51
|
+
*/
|
|
52
|
+
resolve(ref: string): Promise<RegistryResolveResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Extract tarball to a target directory
|
|
55
|
+
*
|
|
56
|
+
* @param tarball - Tarball buffer
|
|
57
|
+
* @param destDir - Destination directory
|
|
58
|
+
* @returns Path to the extracted skill directory
|
|
59
|
+
*/
|
|
60
|
+
extract(tarball: Buffer, destDir: string): Promise<string>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=registry-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-resolver.d.ts","sourceRoot":"","sources":["../../src/core/registry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAMpC,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoC1C;;;;;;;;;;OAUG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+B1D;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAWjE"}
|
|
@@ -23,6 +23,7 @@ export declare class SkillManager {
|
|
|
23
23
|
private projectRoot;
|
|
24
24
|
private resolver;
|
|
25
25
|
private httpResolver;
|
|
26
|
+
private registryResolver;
|
|
26
27
|
private cache;
|
|
27
28
|
private config;
|
|
28
29
|
private lockManager;
|
|
@@ -61,6 +62,10 @@ export declare class SkillManager {
|
|
|
61
62
|
* Detect if a reference is an HTTP/OSS URL
|
|
62
63
|
*/
|
|
63
64
|
private isHttpSource;
|
|
65
|
+
/**
|
|
66
|
+
* Detect if a reference is a registry source (@scope/name or name@version)
|
|
67
|
+
*/
|
|
68
|
+
private isRegistrySource;
|
|
64
69
|
/**
|
|
65
70
|
* Install skill
|
|
66
71
|
*/
|
|
@@ -145,6 +150,30 @@ export declare class SkillManager {
|
|
|
145
150
|
* Install skill from HTTP/OSS to multiple agents
|
|
146
151
|
*/
|
|
147
152
|
private installToAgentsFromHttp;
|
|
153
|
+
/**
|
|
154
|
+
* Install skill from npm-style Registry to multiple agents
|
|
155
|
+
*
|
|
156
|
+
* Supports:
|
|
157
|
+
* - Private registry: @scope/name[@version] (e.g., @kanyun/planning-with-files@2.4.5)
|
|
158
|
+
* - Public registry: name[@version] (e.g., my-skill@1.0.0)
|
|
159
|
+
* - Web-published skills (github/gitlab/oss_url/custom_url/local)
|
|
160
|
+
*/
|
|
161
|
+
private installToAgentsFromRegistry;
|
|
162
|
+
/**
|
|
163
|
+
* 安装页面发布的 skill
|
|
164
|
+
*
|
|
165
|
+
* 页面发布的 skill 不支持版本管理,根据 source_type 分支到不同的安装逻辑:
|
|
166
|
+
* - github/gitlab: 复用 installToAgentsFromGit
|
|
167
|
+
* - oss_url/custom_url: 复用 installToAgentsFromHttp
|
|
168
|
+
* - local: 通过 Registry API 下载 tarball
|
|
169
|
+
*/
|
|
170
|
+
private installFromWebPublished;
|
|
171
|
+
/**
|
|
172
|
+
* 安装 Local Folder 模式发布的 skill
|
|
173
|
+
*
|
|
174
|
+
* 通过 Registry 的 /api/skills/:name/download API 下载 tarball
|
|
175
|
+
*/
|
|
176
|
+
private installFromRegistryLocal;
|
|
148
177
|
/**
|
|
149
178
|
* Get default target agents
|
|
150
179
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ export interface SkillMdFrontmatter {
|
|
|
17
17
|
name: string;
|
|
18
18
|
/** Skill description (required) */
|
|
19
19
|
description: string;
|
|
20
|
+
/** Version (optional, semver format) */
|
|
21
|
+
version?: string;
|
|
20
22
|
/** License */
|
|
21
23
|
license?: string;
|
|
22
24
|
/** Compatibility requirements */
|
|
@@ -34,6 +36,8 @@ export interface ParsedSkill {
|
|
|
34
36
|
name: string;
|
|
35
37
|
/** Skill description */
|
|
36
38
|
description: string;
|
|
39
|
+
/** Version (optional, semver format) */
|
|
40
|
+
version?: string;
|
|
37
41
|
/** License */
|
|
38
42
|
license?: string;
|
|
39
43
|
/** Compatibility requirements */
|
|
@@ -69,7 +73,7 @@ export declare function validateSkillName(name: string): void;
|
|
|
69
73
|
*
|
|
70
74
|
* Specification requirements:
|
|
71
75
|
* - Max 1024 characters
|
|
72
|
-
* -
|
|
76
|
+
* - Angle brackets are allowed per agentskills.io spec
|
|
73
77
|
*/
|
|
74
78
|
export declare function validateSkillDescription(description: string): void;
|
|
75
79
|
/**
|
|
@@ -1 +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,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,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;
|
|
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,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,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;AAiID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAsCpD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAalE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,WAAW,GAAG,IAAI,CAkDpB;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,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,CAsB9E;;;;;;;;;;AAED,wBAQE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillValidator - Validate skills for publishing
|
|
3
|
+
*
|
|
4
|
+
* Following agentskills.io specification: https://agentskills.io/specification
|
|
5
|
+
*
|
|
6
|
+
* Key points:
|
|
7
|
+
* - SKILL.md is REQUIRED (with name and description in frontmatter)
|
|
8
|
+
* - skill.json is OPTIONAL (for additional metadata like version, keywords)
|
|
9
|
+
* - Version can come from skill.json, SKILL.md metadata.version, or default to "0.0.0"
|
|
10
|
+
*/
|
|
11
|
+
import type { SkillJson } from '../types/index.js';
|
|
12
|
+
import { type ParsedSkill } from './skill-parser.js';
|
|
13
|
+
export interface ValidationError {
|
|
14
|
+
field: string;
|
|
15
|
+
message: string;
|
|
16
|
+
suggestion?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ValidationWarning {
|
|
19
|
+
field: string;
|
|
20
|
+
message: string;
|
|
21
|
+
suggestion?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ValidationResult {
|
|
24
|
+
valid: boolean;
|
|
25
|
+
errors: ValidationError[];
|
|
26
|
+
warnings: ValidationWarning[];
|
|
27
|
+
}
|
|
28
|
+
export interface LoadedSkill {
|
|
29
|
+
path: string;
|
|
30
|
+
/** skill.json content (may be synthesized from SKILL.md if skill.json doesn't exist) */
|
|
31
|
+
skillJson: SkillJson | null;
|
|
32
|
+
/** SKILL.md parsed content */
|
|
33
|
+
skillMd: ParsedSkill | null;
|
|
34
|
+
readme: string | null;
|
|
35
|
+
files: string[];
|
|
36
|
+
/** Whether skillJson was synthesized from SKILL.md (no actual skill.json file) */
|
|
37
|
+
synthesized?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare class SkillValidator {
|
|
40
|
+
/**
|
|
41
|
+
* Validate skill name format
|
|
42
|
+
*
|
|
43
|
+
* Requirements:
|
|
44
|
+
* - Lowercase letters, numbers, and hyphens only
|
|
45
|
+
* - 1-64 characters
|
|
46
|
+
* - Cannot start or end with hyphen
|
|
47
|
+
* - Cannot have consecutive hyphens
|
|
48
|
+
*/
|
|
49
|
+
validateName(name: string): ValidationResult;
|
|
50
|
+
/**
|
|
51
|
+
* Validate version format (semver)
|
|
52
|
+
*/
|
|
53
|
+
validateVersion(version: string): ValidationResult;
|
|
54
|
+
/**
|
|
55
|
+
* Validate description
|
|
56
|
+
*
|
|
57
|
+
* Following agentskills.io specification:
|
|
58
|
+
* - Max 1024 characters
|
|
59
|
+
* - Non-empty
|
|
60
|
+
*/
|
|
61
|
+
validateDescription(description: string): ValidationResult;
|
|
62
|
+
/**
|
|
63
|
+
* Load skill information from directory
|
|
64
|
+
*
|
|
65
|
+
* Following agentskills.io specification:
|
|
66
|
+
* - SKILL.md is the primary source of metadata
|
|
67
|
+
* - skill.json is optional and provides additional metadata
|
|
68
|
+
* - If skill.json doesn't exist, synthesize it from SKILL.md
|
|
69
|
+
*/
|
|
70
|
+
loadSkill(skillPath: string): LoadedSkill;
|
|
71
|
+
/**
|
|
72
|
+
* Synthesize a SkillJson object from SKILL.md frontmatter
|
|
73
|
+
*
|
|
74
|
+
* This allows publishing skills that only have SKILL.md (per agentskills.io spec)
|
|
75
|
+
*/
|
|
76
|
+
private synthesizeSkillJson;
|
|
77
|
+
/**
|
|
78
|
+
* Scan files to include in publish
|
|
79
|
+
*
|
|
80
|
+
* If includePatterns is specified, only include those files/directories.
|
|
81
|
+
* Otherwise, scan all files in the directory (excluding ignored patterns).
|
|
82
|
+
*/
|
|
83
|
+
private scanFiles;
|
|
84
|
+
/**
|
|
85
|
+
* Patterns to ignore when scanning directories
|
|
86
|
+
*/
|
|
87
|
+
private static readonly IGNORE_PATTERNS;
|
|
88
|
+
/**
|
|
89
|
+
* Check if a file/directory should be ignored
|
|
90
|
+
*/
|
|
91
|
+
private shouldIgnore;
|
|
92
|
+
/**
|
|
93
|
+
* Recursively add files from directory
|
|
94
|
+
*/
|
|
95
|
+
private addFilesFromDir;
|
|
96
|
+
/**
|
|
97
|
+
* Validate a skill directory for publishing
|
|
98
|
+
*
|
|
99
|
+
* Following agentskills.io specification:
|
|
100
|
+
* - SKILL.md is REQUIRED with name and description in frontmatter
|
|
101
|
+
* - skill.json is OPTIONAL (for version, keywords, etc.)
|
|
102
|
+
*/
|
|
103
|
+
validate(skillPath: string): ValidationResult;
|
|
104
|
+
/**
|
|
105
|
+
* Generate integrity hash for files
|
|
106
|
+
*/
|
|
107
|
+
generateIntegrity(skillPath: string, files: string[]): string;
|
|
108
|
+
}
|
|
109
|
+
export default SkillValidator;
|
|
110
|
+
//# sourceMappingURL=skill-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-validator.d.ts","sourceRoot":"","sources":["../../src/core/skill-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMvE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,8BAA8B;IAC9B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmBD,qBAAa,cAAc;IACzB;;;;;;;;OAQG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAwE5C;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAiClD;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IAwB1D;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAiDzC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAsCjB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAarC;IAEF;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAqI7C;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CAiB9D;AAED,eAAe,cAAc,CAAC"}
|