skillpkg-core 0.5.4 → 0.5.7
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/dist/adapters/adapter-manager.d.ts +51 -0
- package/dist/adapters/adapter-manager.d.ts.map +1 -0
- package/dist/adapters/adapter-manager.js +147 -0
- package/dist/adapters/adapter-manager.js.map +1 -0
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +14 -3
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/config/types.d.ts +3 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/discovery/discovery-manager.d.ts +55 -0
- package/dist/discovery/discovery-manager.d.ts.map +1 -0
- package/dist/discovery/discovery-manager.js +217 -0
- package/dist/discovery/discovery-manager.js.map +1 -0
- package/dist/discovery/index.d.ts +20 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +21 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/manager.d.ts +53 -0
- package/dist/discovery/manager.d.ts.map +1 -0
- package/dist/discovery/manager.js +203 -0
- package/dist/discovery/manager.js.map +1 -0
- package/dist/discovery/providers/awesome.d.ts +72 -0
- package/dist/discovery/providers/awesome.d.ts.map +1 -0
- package/dist/discovery/providers/awesome.js +214 -0
- package/dist/discovery/providers/awesome.js.map +1 -0
- package/dist/discovery/providers/github.d.ts +44 -0
- package/dist/discovery/providers/github.d.ts.map +1 -0
- package/dist/discovery/providers/github.js +82 -0
- package/dist/discovery/providers/github.js.map +1 -0
- package/dist/discovery/providers/index.d.ts +9 -0
- package/dist/discovery/providers/index.d.ts.map +1 -0
- package/dist/discovery/providers/index.js +9 -0
- package/dist/discovery/providers/index.js.map +1 -0
- package/dist/discovery/providers/local.d.ts +38 -0
- package/dist/discovery/providers/local.d.ts.map +1 -0
- package/dist/discovery/providers/local.js +75 -0
- package/dist/discovery/providers/local.js.map +1 -0
- package/dist/discovery/providers/priority.d.ts +89 -0
- package/dist/discovery/providers/priority.d.ts.map +1 -0
- package/dist/discovery/providers/priority.js +258 -0
- package/dist/discovery/providers/priority.js.map +1 -0
- package/dist/discovery/providers/skillsmp.d.ts +66 -0
- package/dist/discovery/providers/skillsmp.d.ts.map +1 -0
- package/dist/discovery/providers/skillsmp.js +134 -0
- package/dist/discovery/providers/skillsmp.js.map +1 -0
- package/dist/discovery/types.d.ts +108 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +5 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/doctor/doctor.d.ts +62 -0
- package/dist/doctor/doctor.d.ts.map +1 -0
- package/dist/doctor/doctor.js +399 -0
- package/dist/doctor/doctor.js.map +1 -0
- package/dist/doctor/index.d.ts +6 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +6 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/types.d.ts +68 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +2 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/fetcher/fetcher.d.ts.map +1 -1
- package/dist/fetcher/fetcher.js +265 -25
- package/dist/fetcher/fetcher.js.map +1 -1
- package/dist/fetcher/source-parser.d.ts +8 -6
- package/dist/fetcher/source-parser.d.ts.map +1 -1
- package/dist/fetcher/source-parser.js +37 -16
- package/dist/fetcher/source-parser.js.map +1 -1
- package/dist/fetcher/types.d.ts +17 -4
- package/dist/fetcher/types.d.ts.map +1 -1
- package/dist/fetcher/types.js.map +1 -1
- package/dist/importer/importer.js +1 -1
- package/dist/importer/importer.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/installer.d.ts +1 -1
- package/dist/installer/installer.d.ts.map +1 -1
- package/dist/installer/installer.js +21 -13
- package/dist/installer/installer.js.map +1 -1
- package/dist/installer/types.d.ts +15 -13
- package/dist/installer/types.d.ts.map +1 -1
- package/dist/matching/engine.d.ts +57 -0
- package/dist/matching/engine.d.ts.map +1 -0
- package/dist/matching/engine.js +419 -0
- package/dist/matching/engine.js.map +1 -0
- package/dist/matching/index.d.ts +9 -0
- package/dist/matching/index.d.ts.map +1 -0
- package/dist/matching/index.js +8 -0
- package/dist/matching/index.js.map +1 -0
- package/dist/matching/types.d.ts +91 -0
- package/dist/matching/types.d.ts.map +1 -0
- package/dist/matching/types.js +13 -0
- package/dist/matching/types.js.map +1 -0
- package/dist/parser/schema.d.ts +61 -8
- package/dist/parser/schema.d.ts.map +1 -1
- package/dist/parser/schema.js +59 -9
- package/dist/parser/schema.js.map +1 -1
- package/dist/resolver/dependency-resolver.d.ts.map +1 -1
- package/dist/resolver/dependency-resolver.js +15 -3
- package/dist/resolver/dependency-resolver.js.map +1 -1
- package/dist/resolver/index.d.ts +1 -1
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/types.d.ts +13 -0
- package/dist/resolver/types.d.ts.map +1 -1
- package/dist/skill/reader.d.ts.map +1 -1
- package/dist/skill/reader.js +12 -11
- package/dist/skill/reader.js.map +1 -1
- package/dist/skill/types.d.ts +28 -2
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/state/state-manager.d.ts +19 -0
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +50 -0
- package/dist/state/state-manager.js.map +1 -1
- package/dist/store/config.d.ts.map +1 -1
- package/dist/store/config.js +7 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/index.d.ts +2 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/manager.d.ts +2 -0
- package/dist/store/manager.d.ts.map +1 -1
- package/dist/store/manager.js +19 -1
- package/dist/store/manager.js.map +1 -1
- package/dist/store/store-manager.d.ts +123 -0
- package/dist/store/store-manager.d.ts.map +1 -0
- package/dist/store/store-manager.js +312 -0
- package/dist/store/store-manager.js.map +1 -0
- package/dist/syncer/syncer.d.ts +4 -0
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +91 -27
- package/dist/syncer/syncer.js.map +1 -1
- package/dist/syncer/types.d.ts +16 -8
- package/dist/syncer/types.d.ts.map +1 -1
- package/dist/syncer/types.js +29 -32
- package/dist/syncer/types.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -2
- package/dist/types.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Provider - Supplementary search (repo-level SKILL.md detection)
|
|
3
|
+
* Wraps existing github/search.ts functionality
|
|
4
|
+
*/
|
|
5
|
+
import { searchGitHubSkills, } from '../../github/search.js';
|
|
6
|
+
/**
|
|
7
|
+
* Provider for GitHub repository search (supplementary source)
|
|
8
|
+
*
|
|
9
|
+
* Uses topic-based search + SKILL.md detection.
|
|
10
|
+
* Good for finding new/trending skills not yet in registries.
|
|
11
|
+
*/
|
|
12
|
+
export class GitHubProvider {
|
|
13
|
+
id = 'github';
|
|
14
|
+
githubToken;
|
|
15
|
+
cacheTtl;
|
|
16
|
+
cache = new Map();
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.githubToken = options.githubToken || process.env.GITHUB_TOKEN || null;
|
|
19
|
+
this.cacheTtl = options.cacheTtl || 5 * 60 * 1000; // 5 minutes
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* GitHub provider is always configured (token optional, just affects rate limits)
|
|
23
|
+
*/
|
|
24
|
+
isConfigured() {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Search skills on GitHub
|
|
29
|
+
*/
|
|
30
|
+
async search(options) {
|
|
31
|
+
const { query, limit = 20 } = options;
|
|
32
|
+
const cacheKey = `${query}:${limit}`;
|
|
33
|
+
// Check cache
|
|
34
|
+
const cached = this.cache.get(cacheKey);
|
|
35
|
+
if (cached && cached.expiry > Date.now()) {
|
|
36
|
+
return cached.data;
|
|
37
|
+
}
|
|
38
|
+
// Use existing searchGitHubSkills function
|
|
39
|
+
const results = await searchGitHubSkills(query, {
|
|
40
|
+
limit: limit * 2, // Fetch more since we filter to hasSkill only
|
|
41
|
+
token: this.githubToken || undefined,
|
|
42
|
+
});
|
|
43
|
+
// Convert to DiscoveredSkill format, only include repos with SKILL.md
|
|
44
|
+
const skills = results
|
|
45
|
+
.filter((r) => r.hasSkill && r.installSource)
|
|
46
|
+
.slice(0, limit)
|
|
47
|
+
.map((r) => this.toDiscoveredSkill(r));
|
|
48
|
+
// Cache results
|
|
49
|
+
this.cache.set(cacheKey, {
|
|
50
|
+
data: skills,
|
|
51
|
+
expiry: Date.now() + this.cacheTtl,
|
|
52
|
+
});
|
|
53
|
+
return skills;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Convert GitHubSkillResult to DiscoveredSkill
|
|
57
|
+
*/
|
|
58
|
+
toDiscoveredSkill(result) {
|
|
59
|
+
return {
|
|
60
|
+
name: result.name,
|
|
61
|
+
description: result.description,
|
|
62
|
+
source: result.installSource, // We filter for hasSkill, so this exists
|
|
63
|
+
provider: this.id,
|
|
64
|
+
stars: result.stars,
|
|
65
|
+
lastUpdated: result.updatedAt,
|
|
66
|
+
keywords: result.topics,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clear cache
|
|
71
|
+
*/
|
|
72
|
+
clearCache() {
|
|
73
|
+
this.cache.clear();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create a GitHub provider
|
|
78
|
+
*/
|
|
79
|
+
export function createGitHubProvider(options) {
|
|
80
|
+
return new GitHubProvider(options);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/discovery/providers/github.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,kBAAkB,GAEnB,MAAM,wBAAwB,CAAC;AAyBhC;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAChB,EAAE,GAAG,QAAiB,CAAC;IACxB,WAAW,CAAgB;IAC3B,QAAQ,CAAS;IACjB,KAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;IAEnD,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;QAC3E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;IACjE,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAA+B;QAC1C,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;QAErC,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE;YAC9C,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,8CAA8C;YAChE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;SACrC,CAAC,CAAC;QAEH,sEAAsE;QACtE,MAAM,MAAM,GAAG,OAAO;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,aAAa,CAAC;aAC5C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,gBAAgB;QAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ;SACnC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,MAAyB;QACjD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,aAAc,EAAE,yCAAyC;YACxE,QAAQ,EAAE,IAAI,CAAC,EAAE;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,SAAS;YAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA+B;IAE/B,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery providers - Multi-source skill discovery
|
|
3
|
+
*/
|
|
4
|
+
export { LocalProvider, createLocalProvider, type LocalProviderOptions, } from './local.js';
|
|
5
|
+
export { SkillsmpProvider, createSkillsmpProvider, SKILLSMP_CONFIG, type SkillsmpProviderOptions, } from './skillsmp.js';
|
|
6
|
+
export { AwesomeProvider, createAwesomeProvider, AWESOME_REPOS, type AwesomeProviderOptions, } from './awesome.js';
|
|
7
|
+
export { GitHubProvider, createGitHubProvider, type GitHubProviderOptions, } from './github.js';
|
|
8
|
+
export { PriorityProvider, createPriorityProvider, DEFAULT_PRIORITY_REPOS, type PriorityProviderOptions, } from './priority.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/discovery/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,KAAK,uBAAuB,GAC7B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery providers - Multi-source skill discovery
|
|
3
|
+
*/
|
|
4
|
+
export { LocalProvider, createLocalProvider, } from './local.js';
|
|
5
|
+
export { SkillsmpProvider, createSkillsmpProvider, SKILLSMP_CONFIG, } from './skillsmp.js';
|
|
6
|
+
export { AwesomeProvider, createAwesomeProvider, AWESOME_REPOS, } from './awesome.js';
|
|
7
|
+
export { GitHubProvider, createGitHubProvider, } from './github.js';
|
|
8
|
+
export { PriorityProvider, createPriorityProvider, DEFAULT_PRIORITY_REPOS, } from './priority.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discovery/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,GAEpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAEhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,GAEd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Provider - searches installed skills
|
|
3
|
+
* Reuses existing StoreManager
|
|
4
|
+
*/
|
|
5
|
+
import type { StoreManager } from '../../store/store-manager.js';
|
|
6
|
+
import type { DiscoveryProvider, DiscoverySearchOptions, DiscoveredSkill } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Local provider options
|
|
9
|
+
*/
|
|
10
|
+
export interface LocalProviderOptions {
|
|
11
|
+
/** Store manager instance (local or global) */
|
|
12
|
+
storeManager: StoreManager;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Provider for searching locally installed skills
|
|
16
|
+
*/
|
|
17
|
+
export declare class LocalProvider implements DiscoveryProvider {
|
|
18
|
+
readonly id: "local";
|
|
19
|
+
private store;
|
|
20
|
+
constructor(options: LocalProviderOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Local provider is always configured
|
|
23
|
+
*/
|
|
24
|
+
isConfigured(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Search installed skills by name/description/triggers/keywords
|
|
27
|
+
*/
|
|
28
|
+
search(options: DiscoverySearchOptions): Promise<DiscoveredSkill[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Convert SkillMeta to DiscoveredSkill
|
|
31
|
+
*/
|
|
32
|
+
private toDiscoveredSkill;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a local provider
|
|
36
|
+
*/
|
|
37
|
+
export declare function createLocalProvider(options: LocalProviderOptions): LocalProvider;
|
|
38
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/discovery/providers/local.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,iBAAiB;IACrD,QAAQ,CAAC,EAAE,EAAG,OAAO,CAAU;IAC/B,OAAO,CAAC,KAAK,CAAe;gBAEhB,OAAO,EAAE,oBAAoB;IAIzC;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA8CzE;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAU1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAEf"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider for searching locally installed skills
|
|
3
|
+
*/
|
|
4
|
+
export class LocalProvider {
|
|
5
|
+
id = 'local';
|
|
6
|
+
store;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.store = options.storeManager;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Local provider is always configured
|
|
12
|
+
*/
|
|
13
|
+
isConfigured() {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Search installed skills by name/description/triggers/keywords
|
|
18
|
+
*/
|
|
19
|
+
async search(options) {
|
|
20
|
+
const { query, limit = 20 } = options;
|
|
21
|
+
const queryLower = query.toLowerCase();
|
|
22
|
+
const queryTerms = queryLower.split(/\s+/).filter(Boolean);
|
|
23
|
+
// Get all installed skills
|
|
24
|
+
const installed = await this.store.listSkills();
|
|
25
|
+
// Filter by query - match against name, description, triggers, and keywords
|
|
26
|
+
const matched = installed.filter((skill) => {
|
|
27
|
+
// Check name
|
|
28
|
+
if (skill.name.toLowerCase().includes(queryLower))
|
|
29
|
+
return true;
|
|
30
|
+
// Check description
|
|
31
|
+
if (skill.description?.toLowerCase().includes(queryLower))
|
|
32
|
+
return true;
|
|
33
|
+
// Check triggers - match any query term against any trigger
|
|
34
|
+
if (skill.triggers?.some((trigger) => queryTerms.some((term) => trigger.toLowerCase().includes(term))))
|
|
35
|
+
return true;
|
|
36
|
+
// Check keywords - match any query term against any keyword
|
|
37
|
+
if (skill.keywords?.some((keyword) => queryTerms.some((term) => keyword.toLowerCase().includes(term))))
|
|
38
|
+
return true;
|
|
39
|
+
return false;
|
|
40
|
+
});
|
|
41
|
+
// Convert to DiscoveredSkill format
|
|
42
|
+
const results = matched.map((skill) => this.toDiscoveredSkill(skill));
|
|
43
|
+
// Sort by relevance (name match > trigger match > description match)
|
|
44
|
+
results.sort((a, b) => {
|
|
45
|
+
const aNameMatch = a.name.toLowerCase().includes(queryLower);
|
|
46
|
+
const bNameMatch = b.name.toLowerCase().includes(queryLower);
|
|
47
|
+
if (aNameMatch && !bNameMatch)
|
|
48
|
+
return -1;
|
|
49
|
+
if (!aNameMatch && bNameMatch)
|
|
50
|
+
return 1;
|
|
51
|
+
return a.name.localeCompare(b.name);
|
|
52
|
+
});
|
|
53
|
+
return results.slice(0, limit);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Convert SkillMeta to DiscoveredSkill
|
|
57
|
+
*/
|
|
58
|
+
toDiscoveredSkill(meta) {
|
|
59
|
+
return {
|
|
60
|
+
name: meta.name,
|
|
61
|
+
description: meta.description,
|
|
62
|
+
source: `local:${meta.name}`,
|
|
63
|
+
provider: this.id,
|
|
64
|
+
author: meta.author,
|
|
65
|
+
lastUpdated: meta.installedAt,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a local provider
|
|
71
|
+
*/
|
|
72
|
+
export function createLocalProvider(options) {
|
|
73
|
+
return new LocalProvider(options);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/discovery/providers/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Priority Provider - Search specific GitHub repos first
|
|
3
|
+
*
|
|
4
|
+
* This provider searches in user-defined priority repos before other sources.
|
|
5
|
+
* Default priority repos: miles990/claude-software-skills, miles990/claude-domain-skills
|
|
6
|
+
*/
|
|
7
|
+
import type { DiscoveryProvider, DiscoverySearchOptions, DiscoveredSkill } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Default priority repos
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_PRIORITY_REPOS: readonly ["miles990/claude-software-skills", "miles990/claude-domain-skills"];
|
|
12
|
+
/**
|
|
13
|
+
* Priority provider options
|
|
14
|
+
*/
|
|
15
|
+
export interface PriorityProviderOptions {
|
|
16
|
+
/** GitHub token (optional, for higher rate limits) */
|
|
17
|
+
githubToken?: string;
|
|
18
|
+
/** Custom priority repos (overrides defaults) */
|
|
19
|
+
priorityRepos?: string[];
|
|
20
|
+
/** Cache TTL in ms (default: 30 minutes) */
|
|
21
|
+
cacheTtl?: number;
|
|
22
|
+
/** Request timeout in ms (default: 30s) */
|
|
23
|
+
timeout?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Provider for priority repos (user-defined first-search repos)
|
|
27
|
+
*/
|
|
28
|
+
export declare class PriorityProvider implements DiscoveryProvider {
|
|
29
|
+
readonly id: "priority";
|
|
30
|
+
private githubToken;
|
|
31
|
+
private priorityRepos;
|
|
32
|
+
private cacheTtl;
|
|
33
|
+
private timeout;
|
|
34
|
+
private cache;
|
|
35
|
+
constructor(options?: PriorityProviderOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Priority provider is always configured (no API key required)
|
|
38
|
+
*/
|
|
39
|
+
isConfigured(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get current priority repos
|
|
42
|
+
*/
|
|
43
|
+
getPriorityRepos(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Set priority repos
|
|
46
|
+
*/
|
|
47
|
+
setPriorityRepos(repos: string[]): void;
|
|
48
|
+
/**
|
|
49
|
+
* Search skills in priority repos
|
|
50
|
+
*/
|
|
51
|
+
search(options: DiscoverySearchOptions): Promise<DiscoveredSkill[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Fetch skills from a single repo (recursive directory search)
|
|
54
|
+
*/
|
|
55
|
+
private fetchSkillsFromRepo;
|
|
56
|
+
/**
|
|
57
|
+
* Recursively search directory for SKILL.md files
|
|
58
|
+
*/
|
|
59
|
+
private searchDirectory;
|
|
60
|
+
/**
|
|
61
|
+
* Fetch repo contents from GitHub API
|
|
62
|
+
*/
|
|
63
|
+
private fetchRepoContents;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a path has SKILL.md
|
|
66
|
+
*/
|
|
67
|
+
private checkHasSkillMd;
|
|
68
|
+
/**
|
|
69
|
+
* Fetch and parse SKILL.md metadata
|
|
70
|
+
*/
|
|
71
|
+
private fetchSkillMetadata;
|
|
72
|
+
/**
|
|
73
|
+
* Parse SKILL.md frontmatter
|
|
74
|
+
*/
|
|
75
|
+
private parseSkillFrontmatter;
|
|
76
|
+
/**
|
|
77
|
+
* Fetch with timeout and auth headers
|
|
78
|
+
*/
|
|
79
|
+
private fetchWithTimeout;
|
|
80
|
+
/**
|
|
81
|
+
* Clear cache
|
|
82
|
+
*/
|
|
83
|
+
clearCache(): void;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a priority provider
|
|
87
|
+
*/
|
|
88
|
+
export declare function createPriorityProvider(options?: PriorityProviderOptions): PriorityProvider;
|
|
89
|
+
//# sourceMappingURL=priority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../../../src/discovery/providers/priority.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,eAAO,MAAM,sBAAsB,+EAGzB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoBD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,QAAQ,CAAC,EAAE,EAAG,UAAU,CAAU;IAClC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAsC;gBAEvC,OAAO,GAAE,uBAA4B;IAOjD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqCzE;;OAEG;YACW,mBAAmB;IAoCjC;;OAEG;YACW,eAAe;IAsC7B;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default priority repos
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_PRIORITY_REPOS = [
|
|
5
|
+
'miles990/claude-software-skills',
|
|
6
|
+
'miles990/claude-domain-skills',
|
|
7
|
+
];
|
|
8
|
+
/**
|
|
9
|
+
* Provider for priority repos (user-defined first-search repos)
|
|
10
|
+
*/
|
|
11
|
+
export class PriorityProvider {
|
|
12
|
+
id = 'priority';
|
|
13
|
+
githubToken;
|
|
14
|
+
priorityRepos;
|
|
15
|
+
cacheTtl;
|
|
16
|
+
timeout;
|
|
17
|
+
cache = new Map();
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.githubToken = options.githubToken || process.env.GITHUB_TOKEN || null;
|
|
20
|
+
this.priorityRepos = options.priorityRepos || [...DEFAULT_PRIORITY_REPOS];
|
|
21
|
+
this.cacheTtl = options.cacheTtl || 30 * 60 * 1000; // 30 minutes
|
|
22
|
+
this.timeout = options.timeout || 30000;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Priority provider is always configured (no API key required)
|
|
26
|
+
*/
|
|
27
|
+
isConfigured() {
|
|
28
|
+
return this.priorityRepos.length > 0;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get current priority repos
|
|
32
|
+
*/
|
|
33
|
+
getPriorityRepos() {
|
|
34
|
+
return [...this.priorityRepos];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set priority repos
|
|
38
|
+
*/
|
|
39
|
+
setPriorityRepos(repos) {
|
|
40
|
+
this.priorityRepos = repos;
|
|
41
|
+
this.clearCache();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Search skills in priority repos
|
|
45
|
+
*/
|
|
46
|
+
async search(options) {
|
|
47
|
+
const { query, limit = 20 } = options;
|
|
48
|
+
const queryLower = query.toLowerCase();
|
|
49
|
+
// Collect skills from all priority repos
|
|
50
|
+
const allSkills = [];
|
|
51
|
+
for (const repo of this.priorityRepos) {
|
|
52
|
+
try {
|
|
53
|
+
const skills = await this.fetchSkillsFromRepo(repo);
|
|
54
|
+
allSkills.push(...skills);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
// Log but continue with other repos
|
|
58
|
+
console.warn(`[PriorityProvider] Failed to fetch from ${repo}:`, error.message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Filter by query
|
|
62
|
+
const matched = allSkills.filter((skill) => skill.name.toLowerCase().includes(queryLower) ||
|
|
63
|
+
skill.description.toLowerCase().includes(queryLower) ||
|
|
64
|
+
skill.keywords?.some((k) => k.toLowerCase().includes(queryLower)));
|
|
65
|
+
// Sort by relevance (name match first)
|
|
66
|
+
matched.sort((a, b) => {
|
|
67
|
+
const aNameMatch = a.name.toLowerCase().includes(queryLower);
|
|
68
|
+
const bNameMatch = b.name.toLowerCase().includes(queryLower);
|
|
69
|
+
if (aNameMatch && !bNameMatch)
|
|
70
|
+
return -1;
|
|
71
|
+
if (!aNameMatch && bNameMatch)
|
|
72
|
+
return 1;
|
|
73
|
+
return (b.stars || 0) - (a.stars || 0);
|
|
74
|
+
});
|
|
75
|
+
return matched.slice(0, limit);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Fetch skills from a single repo (recursive directory search)
|
|
79
|
+
*/
|
|
80
|
+
async fetchSkillsFromRepo(repo) {
|
|
81
|
+
// Check cache
|
|
82
|
+
const cached = this.cache.get(repo);
|
|
83
|
+
if (cached && cached.expiry > Date.now()) {
|
|
84
|
+
return cached.skills;
|
|
85
|
+
}
|
|
86
|
+
const skills = [];
|
|
87
|
+
// Check root level SKILL.md first
|
|
88
|
+
const rootHasSkill = await this.checkHasSkillMd(repo, '');
|
|
89
|
+
if (rootHasSkill) {
|
|
90
|
+
const metadata = await this.fetchSkillMetadata(repo, '');
|
|
91
|
+
skills.push({
|
|
92
|
+
name: metadata?.name || repo.split('/')[1],
|
|
93
|
+
description: metadata?.description || '',
|
|
94
|
+
source: `github:${repo}`,
|
|
95
|
+
provider: this.id,
|
|
96
|
+
author: metadata?.author,
|
|
97
|
+
keywords: metadata?.keywords,
|
|
98
|
+
foundIn: [repo],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// Recursively search directories
|
|
102
|
+
await this.searchDirectory(repo, '', skills);
|
|
103
|
+
// Cache results
|
|
104
|
+
this.cache.set(repo, {
|
|
105
|
+
skills,
|
|
106
|
+
expiry: Date.now() + this.cacheTtl,
|
|
107
|
+
});
|
|
108
|
+
return skills;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Recursively search directory for SKILL.md files
|
|
112
|
+
*/
|
|
113
|
+
async searchDirectory(repo, path, skills, depth = 0) {
|
|
114
|
+
// Limit recursion depth to prevent excessive API calls
|
|
115
|
+
if (depth > 3)
|
|
116
|
+
return;
|
|
117
|
+
try {
|
|
118
|
+
const contents = await this.fetchRepoContents(repo, path);
|
|
119
|
+
for (const item of contents) {
|
|
120
|
+
if (item.type === 'dir') {
|
|
121
|
+
// Check if this directory has SKILL.md
|
|
122
|
+
const hasSkill = await this.checkHasSkillMd(repo, item.path);
|
|
123
|
+
if (hasSkill) {
|
|
124
|
+
const metadata = await this.fetchSkillMetadata(repo, item.path);
|
|
125
|
+
skills.push({
|
|
126
|
+
name: metadata?.name || item.name,
|
|
127
|
+
description: metadata?.description || '',
|
|
128
|
+
source: `github:${repo}#${item.path}`,
|
|
129
|
+
provider: this.id,
|
|
130
|
+
author: metadata?.author,
|
|
131
|
+
keywords: metadata?.keywords,
|
|
132
|
+
foundIn: [repo],
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Recurse into subdirectory
|
|
137
|
+
await this.searchDirectory(repo, item.path, skills, depth + 1);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
// Silently continue if directory fetch fails
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Fetch repo contents from GitHub API
|
|
148
|
+
*/
|
|
149
|
+
async fetchRepoContents(repo, path) {
|
|
150
|
+
const url = `https://api.github.com/repos/${repo}/contents/${path}`;
|
|
151
|
+
const response = await this.fetchWithTimeout(url);
|
|
152
|
+
if (!response.ok) {
|
|
153
|
+
if (response.status === 404)
|
|
154
|
+
return [];
|
|
155
|
+
throw new Error(`GitHub API error: ${response.status}`);
|
|
156
|
+
}
|
|
157
|
+
const data = await response.json();
|
|
158
|
+
return Array.isArray(data) ? data : [];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if a path has SKILL.md
|
|
162
|
+
*/
|
|
163
|
+
async checkHasSkillMd(repo, path) {
|
|
164
|
+
const skillPath = path ? `${path}/SKILL.md` : 'SKILL.md';
|
|
165
|
+
const url = `https://raw.githubusercontent.com/${repo}/HEAD/${skillPath}`;
|
|
166
|
+
try {
|
|
167
|
+
const response = await this.fetchWithTimeout(url);
|
|
168
|
+
return response.ok;
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Fetch and parse SKILL.md metadata
|
|
176
|
+
*/
|
|
177
|
+
async fetchSkillMetadata(repo, path) {
|
|
178
|
+
const skillPath = path ? `${path}/SKILL.md` : 'SKILL.md';
|
|
179
|
+
const url = `https://raw.githubusercontent.com/${repo}/HEAD/${skillPath}`;
|
|
180
|
+
try {
|
|
181
|
+
const response = await this.fetchWithTimeout(url);
|
|
182
|
+
if (!response.ok)
|
|
183
|
+
return null;
|
|
184
|
+
const content = await response.text();
|
|
185
|
+
return this.parseSkillFrontmatter(content);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Parse SKILL.md frontmatter
|
|
193
|
+
*/
|
|
194
|
+
parseSkillFrontmatter(content) {
|
|
195
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
196
|
+
if (!match)
|
|
197
|
+
return null;
|
|
198
|
+
const yaml = match[1];
|
|
199
|
+
const result = {};
|
|
200
|
+
// Simple regex parsing
|
|
201
|
+
const nameMatch = yaml.match(/^name:\s*["']?([^"'\n]+)["']?$/m);
|
|
202
|
+
if (nameMatch)
|
|
203
|
+
result.name = nameMatch[1].trim();
|
|
204
|
+
const descMatch = yaml.match(/^description:\s*["']?([^"'\n]+)["']?$/m);
|
|
205
|
+
if (descMatch)
|
|
206
|
+
result.description = descMatch[1].trim();
|
|
207
|
+
const authorMatch = yaml.match(/^author:\s*["']?([^"'\n]+)["']?$/m);
|
|
208
|
+
if (authorMatch)
|
|
209
|
+
result.author = authorMatch[1].trim();
|
|
210
|
+
// Parse keywords/triggers array
|
|
211
|
+
const keywordsMatch = yaml.match(/^(?:keywords|triggers):\s*\[(.*?)\]/m);
|
|
212
|
+
if (keywordsMatch) {
|
|
213
|
+
result.keywords = keywordsMatch[1]
|
|
214
|
+
.split(',')
|
|
215
|
+
.map((k) => k.trim().replace(/["']/g, ''))
|
|
216
|
+
.filter((k) => k.length > 0);
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Fetch with timeout and auth headers
|
|
222
|
+
*/
|
|
223
|
+
async fetchWithTimeout(url) {
|
|
224
|
+
const controller = new AbortController();
|
|
225
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
226
|
+
const headers = {
|
|
227
|
+
'User-Agent': 'skillpkg',
|
|
228
|
+
};
|
|
229
|
+
if (this.githubToken) {
|
|
230
|
+
headers['Authorization'] = `token ${this.githubToken}`;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const response = await fetch(url, {
|
|
234
|
+
headers,
|
|
235
|
+
signal: controller.signal,
|
|
236
|
+
});
|
|
237
|
+
clearTimeout(timeoutId);
|
|
238
|
+
return response;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
clearTimeout(timeoutId);
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Clear cache
|
|
247
|
+
*/
|
|
248
|
+
clearCache() {
|
|
249
|
+
this.cache.clear();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Create a priority provider
|
|
254
|
+
*/
|
|
255
|
+
export function createPriorityProvider(options) {
|
|
256
|
+
return new PriorityProvider(options);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=priority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.js","sourceRoot":"","sources":["../../../src/discovery/providers/priority.ts"],"names":[],"mappings":"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"}
|