skillpkg-core 0.5.5 → 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.
Files changed (150) hide show
  1. package/dist/adapters/adapter-manager.d.ts +51 -0
  2. package/dist/adapters/adapter-manager.d.ts.map +1 -0
  3. package/dist/adapters/adapter-manager.js +147 -0
  4. package/dist/adapters/adapter-manager.js.map +1 -0
  5. package/dist/adapters/base.d.ts.map +1 -1
  6. package/dist/adapters/base.js +14 -3
  7. package/dist/adapters/base.js.map +1 -1
  8. package/dist/adapters/index.d.ts +1 -1
  9. package/dist/adapters/index.d.ts.map +1 -1
  10. package/dist/adapters/index.js +1 -1
  11. package/dist/adapters/index.js.map +1 -1
  12. package/dist/config/types.d.ts +3 -3
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/config/types.js +0 -1
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/discovery/discovery-manager.d.ts +55 -0
  17. package/dist/discovery/discovery-manager.d.ts.map +1 -0
  18. package/dist/discovery/discovery-manager.js +217 -0
  19. package/dist/discovery/discovery-manager.js.map +1 -0
  20. package/dist/discovery/index.d.ts +20 -0
  21. package/dist/discovery/index.d.ts.map +1 -0
  22. package/dist/discovery/index.js +21 -0
  23. package/dist/discovery/index.js.map +1 -0
  24. package/dist/discovery/manager.d.ts +53 -0
  25. package/dist/discovery/manager.d.ts.map +1 -0
  26. package/dist/discovery/manager.js +203 -0
  27. package/dist/discovery/manager.js.map +1 -0
  28. package/dist/discovery/providers/awesome.d.ts +72 -0
  29. package/dist/discovery/providers/awesome.d.ts.map +1 -0
  30. package/dist/discovery/providers/awesome.js +214 -0
  31. package/dist/discovery/providers/awesome.js.map +1 -0
  32. package/dist/discovery/providers/github.d.ts +44 -0
  33. package/dist/discovery/providers/github.d.ts.map +1 -0
  34. package/dist/discovery/providers/github.js +82 -0
  35. package/dist/discovery/providers/github.js.map +1 -0
  36. package/dist/discovery/providers/index.d.ts +9 -0
  37. package/dist/discovery/providers/index.d.ts.map +1 -0
  38. package/dist/discovery/providers/index.js +9 -0
  39. package/dist/discovery/providers/index.js.map +1 -0
  40. package/dist/discovery/providers/local.d.ts +38 -0
  41. package/dist/discovery/providers/local.d.ts.map +1 -0
  42. package/dist/discovery/providers/local.js +75 -0
  43. package/dist/discovery/providers/local.js.map +1 -0
  44. package/dist/discovery/providers/priority.d.ts +89 -0
  45. package/dist/discovery/providers/priority.d.ts.map +1 -0
  46. package/dist/discovery/providers/priority.js +258 -0
  47. package/dist/discovery/providers/priority.js.map +1 -0
  48. package/dist/discovery/providers/skillsmp.d.ts +66 -0
  49. package/dist/discovery/providers/skillsmp.d.ts.map +1 -0
  50. package/dist/discovery/providers/skillsmp.js +134 -0
  51. package/dist/discovery/providers/skillsmp.js.map +1 -0
  52. package/dist/discovery/types.d.ts +108 -0
  53. package/dist/discovery/types.d.ts.map +1 -0
  54. package/dist/discovery/types.js +5 -0
  55. package/dist/discovery/types.js.map +1 -0
  56. package/dist/doctor/doctor.d.ts +62 -0
  57. package/dist/doctor/doctor.d.ts.map +1 -0
  58. package/dist/doctor/doctor.js +399 -0
  59. package/dist/doctor/doctor.js.map +1 -0
  60. package/dist/doctor/index.d.ts +6 -0
  61. package/dist/doctor/index.d.ts.map +1 -0
  62. package/dist/doctor/index.js +6 -0
  63. package/dist/doctor/index.js.map +1 -0
  64. package/dist/doctor/types.d.ts +68 -0
  65. package/dist/doctor/types.d.ts.map +1 -0
  66. package/dist/doctor/types.js +2 -0
  67. package/dist/doctor/types.js.map +1 -0
  68. package/dist/fetcher/fetcher.d.ts.map +1 -1
  69. package/dist/fetcher/fetcher.js +265 -25
  70. package/dist/fetcher/fetcher.js.map +1 -1
  71. package/dist/fetcher/source-parser.d.ts +8 -6
  72. package/dist/fetcher/source-parser.d.ts.map +1 -1
  73. package/dist/fetcher/source-parser.js +37 -16
  74. package/dist/fetcher/source-parser.js.map +1 -1
  75. package/dist/fetcher/types.d.ts +17 -4
  76. package/dist/fetcher/types.d.ts.map +1 -1
  77. package/dist/fetcher/types.js.map +1 -1
  78. package/dist/importer/importer.js +1 -1
  79. package/dist/importer/importer.js.map +1 -1
  80. package/dist/index.d.ts +3 -0
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +6 -0
  83. package/dist/index.js.map +1 -1
  84. package/dist/installer/installer.d.ts +1 -1
  85. package/dist/installer/installer.d.ts.map +1 -1
  86. package/dist/installer/installer.js +15 -7
  87. package/dist/installer/installer.js.map +1 -1
  88. package/dist/installer/types.d.ts +15 -13
  89. package/dist/installer/types.d.ts.map +1 -1
  90. package/dist/matching/engine.d.ts +57 -0
  91. package/dist/matching/engine.d.ts.map +1 -0
  92. package/dist/matching/engine.js +419 -0
  93. package/dist/matching/engine.js.map +1 -0
  94. package/dist/matching/index.d.ts +9 -0
  95. package/dist/matching/index.d.ts.map +1 -0
  96. package/dist/matching/index.js +8 -0
  97. package/dist/matching/index.js.map +1 -0
  98. package/dist/matching/types.d.ts +91 -0
  99. package/dist/matching/types.d.ts.map +1 -0
  100. package/dist/matching/types.js +13 -0
  101. package/dist/matching/types.js.map +1 -0
  102. package/dist/parser/schema.d.ts +61 -8
  103. package/dist/parser/schema.d.ts.map +1 -1
  104. package/dist/parser/schema.js +59 -9
  105. package/dist/parser/schema.js.map +1 -1
  106. package/dist/resolver/dependency-resolver.d.ts.map +1 -1
  107. package/dist/resolver/dependency-resolver.js +15 -3
  108. package/dist/resolver/dependency-resolver.js.map +1 -1
  109. package/dist/resolver/index.d.ts +1 -1
  110. package/dist/resolver/index.d.ts.map +1 -1
  111. package/dist/resolver/index.js.map +1 -1
  112. package/dist/resolver/types.d.ts +13 -0
  113. package/dist/resolver/types.d.ts.map +1 -1
  114. package/dist/skill/reader.d.ts.map +1 -1
  115. package/dist/skill/reader.js +12 -11
  116. package/dist/skill/reader.js.map +1 -1
  117. package/dist/skill/types.d.ts +28 -2
  118. package/dist/skill/types.d.ts.map +1 -1
  119. package/dist/state/state-manager.d.ts +19 -0
  120. package/dist/state/state-manager.d.ts.map +1 -1
  121. package/dist/state/state-manager.js +50 -0
  122. package/dist/state/state-manager.js.map +1 -1
  123. package/dist/store/config.d.ts.map +1 -1
  124. package/dist/store/config.js +7 -0
  125. package/dist/store/config.js.map +1 -1
  126. package/dist/store/index.d.ts +2 -2
  127. package/dist/store/index.d.ts.map +1 -1
  128. package/dist/store/index.js +1 -1
  129. package/dist/store/index.js.map +1 -1
  130. package/dist/store/manager.d.ts +2 -0
  131. package/dist/store/manager.d.ts.map +1 -1
  132. package/dist/store/manager.js +19 -1
  133. package/dist/store/manager.js.map +1 -1
  134. package/dist/store/store-manager.d.ts +123 -0
  135. package/dist/store/store-manager.d.ts.map +1 -0
  136. package/dist/store/store-manager.js +312 -0
  137. package/dist/store/store-manager.js.map +1 -0
  138. package/dist/syncer/syncer.d.ts +4 -0
  139. package/dist/syncer/syncer.d.ts.map +1 -1
  140. package/dist/syncer/syncer.js +91 -27
  141. package/dist/syncer/syncer.js.map +1 -1
  142. package/dist/syncer/types.d.ts +16 -8
  143. package/dist/syncer/types.d.ts.map +1 -1
  144. package/dist/syncer/types.js +29 -32
  145. package/dist/syncer/types.js.map +1 -1
  146. package/dist/types.d.ts +33 -0
  147. package/dist/types.d.ts.map +1 -1
  148. package/dist/types.js +9 -2
  149. package/dist/types.js.map +1 -1
  150. package/package.json +9 -9
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Discovery module - Multi-source skill discovery
3
+ *
4
+ * Provides unified interface for searching skills across multiple sources:
5
+ * - priority: Priority repos (miles990/claude-software-skills, claude-domain-skills) - SEARCHED FIRST
6
+ * - local: Installed skills (via StoreManager)
7
+ * - skillsmp: Primary registry (40K+ skills, requires API key)
8
+ * - awesome: Fallback curated repos (no key required)
9
+ * - github: Supplementary search (topic-based with SKILL.md detection)
10
+ *
11
+ * Features:
12
+ * - Auto source selection based on API key availability
13
+ * - Priority repos searched first by default
14
+ * - Deduplication with foundIn tracking
15
+ * - Caching per provider (skillsmp/github: 5min, priority/awesome: 30min)
16
+ */
17
+ // Manager
18
+ export { DiscoveryManager, createDiscoveryManager } from './discovery-manager.js';
19
+ // Providers
20
+ export { LocalProvider, createLocalProvider, SkillsmpProvider, createSkillsmpProvider, AwesomeProvider, createAwesomeProvider, GitHubProvider, createGitHubProvider, PriorityProvider, createPriorityProvider, SKILLSMP_CONFIG, AWESOME_REPOS, DEFAULT_PRIORITY_REPOS, } from './providers/index.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAElF,YAAY;AACZ,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { DiscoverySource, DiscoverySearchOptions, DiscoveryResult, DiscoveryManagerOptions } from './types.js';
2
+ /**
3
+ * Discovery manager for multi-source skill search
4
+ */
5
+ export declare class DiscoveryManager {
6
+ private providers;
7
+ private skillsmpApiKey;
8
+ private githubToken;
9
+ constructor(options?: DiscoveryManagerOptions);
10
+ /**
11
+ * Get default sources based on configuration
12
+ *
13
+ * With skillsmp key: local → skillsmp (40K+) → github
14
+ * Without key: local → awesome (~30) → github
15
+ */
16
+ getDefaultSources(): DiscoverySource[];
17
+ /**
18
+ * Check which sources are configured
19
+ */
20
+ getConfiguredSources(): DiscoverySource[];
21
+ /**
22
+ * Set skillsmp API key (can be called after construction)
23
+ */
24
+ setSkillsmpApiKey(apiKey: string): void;
25
+ /**
26
+ * Search for skills across multiple sources
27
+ */
28
+ search(options: DiscoverySearchOptions): Promise<DiscoveryResult>;
29
+ /**
30
+ * Deduplicate skills by normalized source URL
31
+ *
32
+ * Same skill from multiple sources → merge foundIn, keep first occurrence
33
+ */
34
+ private deduplicateSkills;
35
+ /**
36
+ * Normalize source URL for deduplication
37
+ *
38
+ * Examples:
39
+ * github:user/repo#path → github:user/repo#path
40
+ * skillsmp:skill-name → skill-name (extract name)
41
+ * local:skill-name → skill-name
42
+ */
43
+ private normalizeSourceForDedup;
44
+ /**
45
+ * Clear all provider caches
46
+ */
47
+ clearAllCaches(): void;
48
+ }
49
+ /**
50
+ * Create a discovery manager
51
+ */
52
+ export declare function createDiscoveryManager(options?: DiscoveryManagerOptions): DiscoveryManager;
53
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/discovery/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,eAAe,EACf,sBAAsB,EACtB,eAAe,EAEf,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAQpB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAgB;gBAEvB,OAAO,GAAE,uBAA4B;IAwCjD;;;;;OAKG;IACH,iBAAiB,IAAI,eAAe,EAAE;IAqBtC;;OAEG;IACH,oBAAoB,IAAI,eAAe,EAAE;IAMzC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAgDvE;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,cAAc,IAAI,IAAI;CAOvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB"}
@@ -0,0 +1,203 @@
1
+ import { LocalProvider, SkillsmpProvider, AwesomeProvider, GitHubProvider, } from './providers/index.js';
2
+ /**
3
+ * Discovery manager for multi-source skill search
4
+ */
5
+ export class DiscoveryManager {
6
+ providers = new Map();
7
+ skillsmpApiKey;
8
+ githubToken;
9
+ constructor(options = {}) {
10
+ this.skillsmpApiKey = options.skillsmpApiKey || null;
11
+ this.githubToken = options.githubToken || process.env.GITHUB_TOKEN || null;
12
+ // Initialize providers
13
+ if (options.storeManager) {
14
+ this.providers.set('local', new LocalProvider({
15
+ storeManager: options.storeManager,
16
+ }));
17
+ }
18
+ // Skillsmp provider (primary when API key available)
19
+ const skillsmpProvider = new SkillsmpProvider({
20
+ apiKey: this.skillsmpApiKey || undefined,
21
+ });
22
+ if (this.skillsmpApiKey) {
23
+ skillsmpProvider.setApiKey(this.skillsmpApiKey);
24
+ }
25
+ this.providers.set('skillsmp', skillsmpProvider);
26
+ // Awesome provider (fallback, no key required)
27
+ this.providers.set('awesome', new AwesomeProvider({
28
+ githubToken: this.githubToken || undefined,
29
+ }));
30
+ // GitHub provider (supplementary)
31
+ this.providers.set('github', new GitHubProvider({
32
+ githubToken: this.githubToken || undefined,
33
+ }));
34
+ }
35
+ /**
36
+ * Get default sources based on configuration
37
+ *
38
+ * With skillsmp key: local → skillsmp (40K+) → github
39
+ * Without key: local → awesome (~30) → github
40
+ */
41
+ getDefaultSources() {
42
+ const sources = [];
43
+ // Always include local if available
44
+ if (this.providers.has('local')) {
45
+ sources.push('local');
46
+ }
47
+ // Primary source based on API key availability
48
+ if (this.skillsmpApiKey) {
49
+ sources.push('skillsmp');
50
+ }
51
+ else {
52
+ sources.push('awesome');
53
+ }
54
+ // Always include github as supplementary
55
+ sources.push('github');
56
+ return sources;
57
+ }
58
+ /**
59
+ * Check which sources are configured
60
+ */
61
+ getConfiguredSources() {
62
+ return Array.from(this.providers.entries())
63
+ .filter(([, provider]) => provider.isConfigured())
64
+ .map(([source]) => source);
65
+ }
66
+ /**
67
+ * Set skillsmp API key (can be called after construction)
68
+ */
69
+ setSkillsmpApiKey(apiKey) {
70
+ this.skillsmpApiKey = apiKey;
71
+ const provider = this.providers.get('skillsmp');
72
+ if (provider) {
73
+ provider.setApiKey(apiKey);
74
+ }
75
+ }
76
+ /**
77
+ * Search for skills across multiple sources
78
+ */
79
+ async search(options) {
80
+ const { query, limit = 20, sources } = options;
81
+ const sourcesToQuery = sources || this.getDefaultSources();
82
+ const allSkills = [];
83
+ const errors = {};
84
+ const sourcesQueried = [];
85
+ // Query each source in parallel
86
+ const promises = sourcesToQuery.map(async (source) => {
87
+ const provider = this.providers.get(source);
88
+ if (!provider) {
89
+ errors[source] = `Provider not found: ${source}`;
90
+ return [];
91
+ }
92
+ if (!provider.isConfigured()) {
93
+ errors[source] = `Provider not configured: ${source}`;
94
+ return [];
95
+ }
96
+ try {
97
+ sourcesQueried.push(source);
98
+ const skills = await provider.search({ query, limit: limit * 2 }); // Fetch more for dedup
99
+ return skills;
100
+ }
101
+ catch (error) {
102
+ errors[source] = error.message;
103
+ return [];
104
+ }
105
+ });
106
+ const results = await Promise.all(promises);
107
+ for (const skills of results) {
108
+ allSkills.push(...skills);
109
+ }
110
+ // Deduplicate
111
+ const { skills: dedupedSkills, duplicatesRemoved } = this.deduplicateSkills(allSkills);
112
+ return {
113
+ skills: dedupedSkills.slice(0, limit),
114
+ sourcesQueried,
115
+ duplicatesRemoved,
116
+ errors: Object.keys(errors).length > 0 ? errors : undefined,
117
+ };
118
+ }
119
+ /**
120
+ * Deduplicate skills by normalized source URL
121
+ *
122
+ * Same skill from multiple sources → merge foundIn, keep first occurrence
123
+ */
124
+ deduplicateSkills(skills) {
125
+ const seen = new Map();
126
+ let duplicatesRemoved = 0;
127
+ for (const skill of skills) {
128
+ const key = this.normalizeSourceForDedup(skill.source);
129
+ if (seen.has(key)) {
130
+ // Duplicate found - merge foundIn
131
+ const existing = seen.get(key);
132
+ const newFoundIn = skill.foundIn || [skill.provider];
133
+ existing.foundIn = [
134
+ ...new Set([...(existing.foundIn || [existing.provider]), ...newFoundIn]),
135
+ ];
136
+ // Keep higher star count if available
137
+ if (skill.stars && (!existing.stars || skill.stars > existing.stars)) {
138
+ existing.stars = skill.stars;
139
+ }
140
+ duplicatesRemoved++;
141
+ }
142
+ else {
143
+ // First occurrence
144
+ seen.set(key, {
145
+ ...skill,
146
+ foundIn: skill.foundIn || [skill.provider],
147
+ });
148
+ }
149
+ }
150
+ // Sort by: name match relevance (assumed), then stars, then name
151
+ const result = Array.from(seen.values()).sort((a, b) => {
152
+ // Stars (higher first)
153
+ if (a.stars && b.stars) {
154
+ if (a.stars !== b.stars)
155
+ return b.stars - a.stars;
156
+ }
157
+ if (a.stars && !b.stars)
158
+ return -1;
159
+ if (!a.stars && b.stars)
160
+ return 1;
161
+ // Name (alphabetical)
162
+ return a.name.localeCompare(b.name);
163
+ });
164
+ return { skills: result, duplicatesRemoved };
165
+ }
166
+ /**
167
+ * Normalize source URL for deduplication
168
+ *
169
+ * Examples:
170
+ * github:user/repo#path → github:user/repo#path
171
+ * skillsmp:skill-name → skill-name (extract name)
172
+ * local:skill-name → skill-name
173
+ */
174
+ normalizeSourceForDedup(source) {
175
+ // GitHub source - use as-is (most specific)
176
+ if (source.startsWith('github:')) {
177
+ return source.toLowerCase();
178
+ }
179
+ // Extract name from other sources
180
+ const match = source.match(/^(?:local|skillsmp|awesome):(.+)$/);
181
+ if (match) {
182
+ return match[1].toLowerCase();
183
+ }
184
+ return source.toLowerCase();
185
+ }
186
+ /**
187
+ * Clear all provider caches
188
+ */
189
+ clearAllCaches() {
190
+ for (const provider of this.providers.values()) {
191
+ if ('clearCache' in provider && typeof provider.clearCache === 'function') {
192
+ provider.clearCache();
193
+ }
194
+ }
195
+ }
196
+ }
197
+ /**
198
+ * Create a discovery manager
199
+ */
200
+ export function createDiscoveryManager(options) {
201
+ return new DiscoveryManager(options);
202
+ }
203
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/discovery/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Awesome Provider - Fallback source (curated awesome repos)
3
+ * No API key required, fetches from known GitHub repos
4
+ */
5
+ import type { DiscoveryProvider, DiscoverySearchOptions, DiscoveredSkill } from '../types.js';
6
+ /**
7
+ * Known awesome repos containing curated skills
8
+ */
9
+ export declare const AWESOME_REPOS: readonly ["anthropics/skills", "ComposioHQ/awesome-claude-skills"];
10
+ /**
11
+ * Awesome provider options
12
+ */
13
+ export interface AwesomeProviderOptions {
14
+ /** GitHub token (optional, for higher rate limits) */
15
+ githubToken?: string;
16
+ /** Cache TTL in ms (default: 30 minutes) */
17
+ cacheTtl?: number;
18
+ /** Request timeout in ms (default: 30s) */
19
+ timeout?: number;
20
+ }
21
+ /**
22
+ * Provider for awesome repos (curated skill collections)
23
+ */
24
+ export declare class AwesomeProvider implements DiscoveryProvider {
25
+ readonly id: "awesome";
26
+ private githubToken;
27
+ private cacheTtl;
28
+ private timeout;
29
+ private cache;
30
+ constructor(options?: AwesomeProviderOptions);
31
+ /**
32
+ * Awesome provider is always configured (no API key required)
33
+ */
34
+ isConfigured(): boolean;
35
+ /**
36
+ * Search skills in awesome repos
37
+ */
38
+ search(options: DiscoverySearchOptions): Promise<DiscoveredSkill[]>;
39
+ /**
40
+ * Fetch skills from a single awesome repo
41
+ */
42
+ private fetchSkillsFromRepo;
43
+ /**
44
+ * Fetch repo contents from GitHub API
45
+ */
46
+ private fetchRepoContents;
47
+ /**
48
+ * Check if a path has SKILL.md
49
+ */
50
+ private checkHasSkillMd;
51
+ /**
52
+ * Fetch and parse SKILL.md metadata
53
+ */
54
+ private fetchSkillMetadata;
55
+ /**
56
+ * Parse SKILL.md frontmatter (simplified)
57
+ */
58
+ private parseSkillFrontmatter;
59
+ /**
60
+ * Fetch with timeout and auth headers
61
+ */
62
+ private fetchWithTimeout;
63
+ /**
64
+ * Clear cache
65
+ */
66
+ clearCache(): void;
67
+ }
68
+ /**
69
+ * Create an awesome provider
70
+ */
71
+ export declare function createAwesomeProvider(options?: AwesomeProviderOptions): AwesomeProvider;
72
+ //# sourceMappingURL=awesome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awesome.d.ts","sourceRoot":"","sources":["../../../src/discovery/providers/awesome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,eAAO,MAAM,aAAa,oEAGhB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoBD;;GAEG;AACH,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,EAAE,EAAG,SAAS,CAAU;IACjC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAsC;gBAEvC,OAAO,GAAE,sBAA2B;IAMhD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqCzE;;OAEG;YACW,mBAAmB;IAmDjC;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,CAEjB"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Known awesome repos containing curated skills
3
+ */
4
+ export const AWESOME_REPOS = [
5
+ 'anthropics/skills', // Official examples
6
+ 'ComposioHQ/awesome-claude-skills', // Community curated
7
+ ];
8
+ /**
9
+ * Provider for awesome repos (curated skill collections)
10
+ */
11
+ export class AwesomeProvider {
12
+ id = 'awesome';
13
+ githubToken;
14
+ cacheTtl;
15
+ timeout;
16
+ cache = new Map();
17
+ constructor(options = {}) {
18
+ this.githubToken = options.githubToken || process.env.GITHUB_TOKEN || null;
19
+ this.cacheTtl = options.cacheTtl || 30 * 60 * 1000; // 30 minutes
20
+ this.timeout = options.timeout || 30000;
21
+ }
22
+ /**
23
+ * Awesome provider is always configured (no API key required)
24
+ */
25
+ isConfigured() {
26
+ return true;
27
+ }
28
+ /**
29
+ * Search skills in awesome repos
30
+ */
31
+ async search(options) {
32
+ const { query, limit = 20 } = options;
33
+ const queryLower = query.toLowerCase();
34
+ // Collect skills from all repos
35
+ const allSkills = [];
36
+ for (const repo of AWESOME_REPOS) {
37
+ try {
38
+ const skills = await this.fetchSkillsFromRepo(repo);
39
+ allSkills.push(...skills);
40
+ }
41
+ catch (error) {
42
+ // Log but continue with other repos
43
+ console.warn(`Failed to fetch from ${repo}:`, error.message);
44
+ }
45
+ }
46
+ // Filter by query
47
+ const matched = allSkills.filter((skill) => skill.name.toLowerCase().includes(queryLower) ||
48
+ skill.description.toLowerCase().includes(queryLower) ||
49
+ skill.keywords?.some((k) => k.toLowerCase().includes(queryLower)));
50
+ // Sort by relevance (name match first)
51
+ matched.sort((a, b) => {
52
+ const aNameMatch = a.name.toLowerCase().includes(queryLower);
53
+ const bNameMatch = b.name.toLowerCase().includes(queryLower);
54
+ if (aNameMatch && !bNameMatch)
55
+ return -1;
56
+ if (!aNameMatch && bNameMatch)
57
+ return 1;
58
+ return (b.stars || 0) - (a.stars || 0);
59
+ });
60
+ return matched.slice(0, limit);
61
+ }
62
+ /**
63
+ * Fetch skills from a single awesome repo
64
+ */
65
+ async fetchSkillsFromRepo(repo) {
66
+ // Check cache
67
+ const cached = this.cache.get(repo);
68
+ if (cached && cached.expiry > Date.now()) {
69
+ return cached.skills;
70
+ }
71
+ const skills = [];
72
+ const contents = await this.fetchRepoContents(repo, '');
73
+ // Look for directories that might contain SKILL.md
74
+ for (const item of contents) {
75
+ if (item.type === 'dir') {
76
+ const hasSkill = await this.checkHasSkillMd(repo, item.path);
77
+ if (hasSkill) {
78
+ const metadata = await this.fetchSkillMetadata(repo, item.path);
79
+ skills.push({
80
+ name: metadata?.name || item.name,
81
+ description: metadata?.description || '',
82
+ source: `github:${repo}#${item.path}`,
83
+ provider: this.id,
84
+ author: metadata?.author,
85
+ foundIn: [repo],
86
+ });
87
+ }
88
+ }
89
+ }
90
+ // Also check root level SKILL.md
91
+ const rootHasSkill = await this.checkHasSkillMd(repo, '');
92
+ if (rootHasSkill) {
93
+ const metadata = await this.fetchSkillMetadata(repo, '');
94
+ skills.push({
95
+ name: metadata?.name || repo.split('/')[1],
96
+ description: metadata?.description || '',
97
+ source: `github:${repo}`,
98
+ provider: this.id,
99
+ author: metadata?.author,
100
+ foundIn: [repo],
101
+ });
102
+ }
103
+ // Cache results
104
+ this.cache.set(repo, {
105
+ skills,
106
+ expiry: Date.now() + this.cacheTtl,
107
+ });
108
+ return skills;
109
+ }
110
+ /**
111
+ * Fetch repo contents from GitHub API
112
+ */
113
+ async fetchRepoContents(repo, path) {
114
+ const url = `https://api.github.com/repos/${repo}/contents/${path}`;
115
+ const response = await this.fetchWithTimeout(url);
116
+ if (!response.ok) {
117
+ if (response.status === 404)
118
+ return [];
119
+ throw new Error(`GitHub API error: ${response.status}`);
120
+ }
121
+ const data = await response.json();
122
+ return Array.isArray(data) ? data : [];
123
+ }
124
+ /**
125
+ * Check if a path has SKILL.md
126
+ */
127
+ async checkHasSkillMd(repo, path) {
128
+ const skillPath = path ? `${path}/SKILL.md` : 'SKILL.md';
129
+ const url = `https://raw.githubusercontent.com/${repo}/HEAD/${skillPath}`;
130
+ try {
131
+ const response = await this.fetchWithTimeout(url);
132
+ return response.ok;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ /**
139
+ * Fetch and parse SKILL.md metadata
140
+ */
141
+ async fetchSkillMetadata(repo, path) {
142
+ const skillPath = path ? `${path}/SKILL.md` : 'SKILL.md';
143
+ const url = `https://raw.githubusercontent.com/${repo}/HEAD/${skillPath}`;
144
+ try {
145
+ const response = await this.fetchWithTimeout(url);
146
+ if (!response.ok)
147
+ return null;
148
+ const content = await response.text();
149
+ return this.parseSkillFrontmatter(content);
150
+ }
151
+ catch {
152
+ return null;
153
+ }
154
+ }
155
+ /**
156
+ * Parse SKILL.md frontmatter (simplified)
157
+ */
158
+ parseSkillFrontmatter(content) {
159
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
160
+ if (!match)
161
+ return null;
162
+ const yaml = match[1];
163
+ const result = {};
164
+ // Simple regex parsing (avoid yaml dependency here)
165
+ const nameMatch = yaml.match(/^name:\s*(.+)$/m);
166
+ if (nameMatch)
167
+ result.name = nameMatch[1].trim();
168
+ const descMatch = yaml.match(/^description:\s*(.+)$/m);
169
+ if (descMatch)
170
+ result.description = descMatch[1].trim();
171
+ const authorMatch = yaml.match(/^author:\s*(.+)$/m);
172
+ if (authorMatch)
173
+ result.author = authorMatch[1].trim();
174
+ return result;
175
+ }
176
+ /**
177
+ * Fetch with timeout and auth headers
178
+ */
179
+ async fetchWithTimeout(url) {
180
+ const controller = new AbortController();
181
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
182
+ const headers = {
183
+ 'User-Agent': 'skillpkg',
184
+ };
185
+ if (this.githubToken) {
186
+ headers['Authorization'] = `token ${this.githubToken}`;
187
+ }
188
+ try {
189
+ const response = await fetch(url, {
190
+ headers,
191
+ signal: controller.signal,
192
+ });
193
+ clearTimeout(timeoutId);
194
+ return response;
195
+ }
196
+ catch (error) {
197
+ clearTimeout(timeoutId);
198
+ throw error;
199
+ }
200
+ }
201
+ /**
202
+ * Clear cache
203
+ */
204
+ clearCache() {
205
+ this.cache.clear();
206
+ }
207
+ }
208
+ /**
209
+ * Create an awesome provider
210
+ */
211
+ export function createAwesomeProvider(options) {
212
+ return new AwesomeProvider(options);
213
+ }
214
+ //# sourceMappingURL=awesome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awesome.js","sourceRoot":"","sources":["../../../src/discovery/providers/awesome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { DiscoveryProvider, DiscoverySearchOptions, DiscoveredSkill } from '../types.js';
2
+ /**
3
+ * GitHub provider options
4
+ */
5
+ export interface GitHubProviderOptions {
6
+ /** GitHub token (optional, for higher rate limits) */
7
+ githubToken?: string;
8
+ /** Cache TTL in ms (default: 5 minutes) */
9
+ cacheTtl?: number;
10
+ }
11
+ /**
12
+ * Provider for GitHub repository search (supplementary source)
13
+ *
14
+ * Uses topic-based search + SKILL.md detection.
15
+ * Good for finding new/trending skills not yet in registries.
16
+ */
17
+ export declare class GitHubProvider implements DiscoveryProvider {
18
+ readonly id: "github";
19
+ private githubToken;
20
+ private cacheTtl;
21
+ private cache;
22
+ constructor(options?: GitHubProviderOptions);
23
+ /**
24
+ * GitHub provider is always configured (token optional, just affects rate limits)
25
+ */
26
+ isConfigured(): boolean;
27
+ /**
28
+ * Search skills on GitHub
29
+ */
30
+ search(options: DiscoverySearchOptions): Promise<DiscoveredSkill[]>;
31
+ /**
32
+ * Convert GitHubSkillResult to DiscoveredSkill
33
+ */
34
+ private toDiscoveredSkill;
35
+ /**
36
+ * Clear cache
37
+ */
38
+ clearCache(): void;
39
+ }
40
+ /**
41
+ * Create a GitHub provider
42
+ */
43
+ export declare function createGitHubProvider(options?: GitHubProviderOptions): GitHubProvider;
44
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/discovery/providers/github.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAsC;gBAEvC,OAAO,GAAE,qBAA0B;IAK/C;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA+BzE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,cAAc,CAEhB"}