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.
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 +4 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +7 -1
  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 +21 -13
  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,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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"}