@skillsmith/mcp-server 0.3.4 → 0.3.5

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 (174) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
  3. package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
  4. package/dist/src/__tests__/LocalIndexer.test.js +396 -0
  5. package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
  6. package/dist/src/__tests__/get-skill.test.js +195 -0
  7. package/dist/src/__tests__/get-skill.test.js.map +1 -1
  8. package/dist/src/__tests__/index-local.test.d.ts +5 -0
  9. package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
  10. package/dist/src/__tests__/index-local.test.js +203 -0
  11. package/dist/src/__tests__/index-local.test.js.map +1 -0
  12. package/dist/src/__tests__/recommend.test.d.ts +7 -0
  13. package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
  14. package/dist/src/__tests__/recommend.test.js +277 -0
  15. package/dist/src/__tests__/recommend.test.js.map +1 -0
  16. package/dist/src/__tests__/search.test.js +138 -0
  17. package/dist/src/__tests__/search.test.js.map +1 -1
  18. package/dist/src/context.d.ts +6 -0
  19. package/dist/src/context.d.ts.map +1 -1
  20. package/dist/src/context.js +7 -1
  21. package/dist/src/context.js.map +1 -1
  22. package/dist/src/index.js +14 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
  25. package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
  26. package/dist/src/indexer/FrontmatterParser.js +109 -0
  27. package/dist/src/indexer/FrontmatterParser.js.map +1 -0
  28. package/dist/src/indexer/LocalIndexer.d.ts +136 -0
  29. package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
  30. package/dist/src/indexer/LocalIndexer.js +271 -0
  31. package/dist/src/indexer/LocalIndexer.js.map +1 -0
  32. package/dist/src/indexer/index.d.ts +8 -0
  33. package/dist/src/indexer/index.d.ts.map +1 -0
  34. package/dist/src/indexer/index.js +8 -0
  35. package/dist/src/indexer/index.js.map +1 -0
  36. package/dist/src/llm/failover.d.ts +11 -1
  37. package/dist/src/llm/failover.d.ts.map +1 -1
  38. package/dist/src/llm/failover.js.map +1 -1
  39. package/dist/src/middleware/errorFormatter.d.ts +27 -0
  40. package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
  41. package/dist/src/middleware/errorFormatter.js +95 -0
  42. package/dist/src/middleware/errorFormatter.js.map +1 -1
  43. package/dist/src/middleware/index.d.ts +1 -1
  44. package/dist/src/middleware/index.d.ts.map +1 -1
  45. package/dist/src/middleware/index.js.map +1 -1
  46. package/dist/src/middleware/quota-helpers.d.ts +40 -0
  47. package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
  48. package/dist/src/middleware/quota-helpers.js +90 -0
  49. package/dist/src/middleware/quota-helpers.js.map +1 -0
  50. package/dist/src/middleware/quota-types.d.ts +105 -0
  51. package/dist/src/middleware/quota-types.d.ts.map +1 -0
  52. package/dist/src/middleware/quota-types.js +4 -0
  53. package/dist/src/middleware/quota-types.js.map +1 -0
  54. package/dist/src/middleware/quota.d.ts +3 -97
  55. package/dist/src/middleware/quota.d.ts.map +1 -1
  56. package/dist/src/middleware/quota.js +2 -87
  57. package/dist/src/middleware/quota.js.map +1 -1
  58. package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
  59. package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
  60. package/dist/src/tools/LocalSkillSearch.js +74 -0
  61. package/dist/src/tools/LocalSkillSearch.js.map +1 -0
  62. package/dist/src/tools/compare.helpers.js.map +1 -1
  63. package/dist/src/tools/compare.types.d.ts +1 -0
  64. package/dist/src/tools/compare.types.d.ts.map +1 -1
  65. package/dist/src/tools/compare.types.js +2 -0
  66. package/dist/src/tools/compare.types.js.map +1 -1
  67. package/dist/src/tools/get-skill.js +3 -0
  68. package/dist/src/tools/get-skill.js.map +1 -1
  69. package/dist/src/tools/index-local.d.ts +117 -0
  70. package/dist/src/tools/index-local.d.ts.map +1 -0
  71. package/dist/src/tools/index-local.js +126 -0
  72. package/dist/src/tools/index-local.js.map +1 -0
  73. package/dist/src/tools/index.d.ts +2 -0
  74. package/dist/src/tools/index.d.ts.map +1 -1
  75. package/dist/src/tools/index.js +2 -0
  76. package/dist/src/tools/index.js.map +1 -1
  77. package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
  78. package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
  79. package/dist/src/tools/install.conflict-helpers.js +165 -0
  80. package/dist/src/tools/install.conflict-helpers.js.map +1 -0
  81. package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
  82. package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
  83. package/dist/src/tools/install.conflict-helpers.test.js +243 -0
  84. package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
  85. package/dist/src/tools/install.conflict.d.ts +58 -0
  86. package/dist/src/tools/install.conflict.d.ts.map +1 -0
  87. package/dist/src/tools/install.conflict.js +160 -0
  88. package/dist/src/tools/install.conflict.js.map +1 -0
  89. package/dist/src/tools/install.conflict.test.d.ts +15 -0
  90. package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
  91. package/dist/src/tools/install.conflict.test.js +354 -0
  92. package/dist/src/tools/install.conflict.test.js.map +1 -0
  93. package/dist/src/tools/install.d.ts +5 -0
  94. package/dist/src/tools/install.d.ts.map +1 -1
  95. package/dist/src/tools/install.helpers.d.ts +5 -4
  96. package/dist/src/tools/install.helpers.d.ts.map +1 -1
  97. package/dist/src/tools/install.helpers.js +13 -4
  98. package/dist/src/tools/install.helpers.js.map +1 -1
  99. package/dist/src/tools/install.js +96 -17
  100. package/dist/src/tools/install.js.map +1 -1
  101. package/dist/src/tools/install.types.d.ts +75 -11
  102. package/dist/src/tools/install.types.d.ts.map +1 -1
  103. package/dist/src/tools/install.types.js +15 -1
  104. package/dist/src/tools/install.types.js.map +1 -1
  105. package/dist/src/tools/merge.d.ts +53 -0
  106. package/dist/src/tools/merge.d.ts.map +1 -0
  107. package/dist/src/tools/merge.js +276 -0
  108. package/dist/src/tools/merge.js.map +1 -0
  109. package/dist/src/tools/merge.test.d.ts +11 -0
  110. package/dist/src/tools/merge.test.d.ts.map +1 -0
  111. package/dist/src/tools/merge.test.js +224 -0
  112. package/dist/src/tools/merge.test.js.map +1 -0
  113. package/dist/src/tools/recommend.d.ts +1 -0
  114. package/dist/src/tools/recommend.d.ts.map +1 -1
  115. package/dist/src/tools/recommend.js +165 -38
  116. package/dist/src/tools/recommend.js.map +1 -1
  117. package/dist/src/tools/search.d.ts.map +1 -1
  118. package/dist/src/tools/search.js +31 -4
  119. package/dist/src/tools/search.js.map +1 -1
  120. package/dist/src/utils/validation.d.ts +6 -2
  121. package/dist/src/utils/validation.d.ts.map +1 -1
  122. package/dist/src/utils/validation.js +11 -2
  123. package/dist/src/utils/validation.js.map +1 -1
  124. package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
  125. package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
  126. package/dist/src/webhooks/webhook-endpoint.js +3 -125
  127. package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
  128. package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
  129. package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
  130. package/dist/src/webhooks/webhook-helpers.js +146 -0
  131. package/dist/src/webhooks/webhook-helpers.js.map +1 -0
  132. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
  133. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
  134. package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
  135. package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
  136. package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
  137. package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
  138. package/dist/tests/integration/fixtures/development-skills.js +165 -0
  139. package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
  140. package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
  141. package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
  142. package/dist/tests/integration/fixtures/devops-skills.js +70 -0
  143. package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
  144. package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
  145. package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
  146. package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
  147. package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
  148. package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
  149. package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
  150. package/dist/tests/integration/fixtures/skill-types.js +6 -0
  151. package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
  152. package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
  153. package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
  154. package/dist/tests/integration/fixtures/test-skills.js +23 -590
  155. package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
  156. package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
  157. package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
  158. package/dist/tests/integration/fixtures/testing-skills.js +70 -0
  159. package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
  160. package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
  161. package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
  162. package/dist/tests/integration/fixtures/verified-skills.js +91 -0
  163. package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
  164. package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
  165. package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
  166. package/dist/tests/integration/install-conflict.integration.test.js +384 -0
  167. package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
  168. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
  169. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
  170. package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
  171. package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
  172. package/dist/tests/integration/install.integration.test.js +3 -0
  173. package/dist/tests/integration/install.integration.test.js.map +1 -1
  174. package/package.json +7 -6
@@ -4,6 +4,7 @@
4
4
  * @see SMI-741: Add MCP Tool skill_recommend
5
5
  * @see SMI-602: Integrate semantic matching with EmbeddingService
6
6
  * @see SMI-604: Add trigger phrase overlap detection
7
+ * @see SMI-1837: Include local skills in recommendations (parallel search)
7
8
  */
8
9
  import { SkillMatcher, OverlapDetector, trackEvent } from '@skillsmith/core';
9
10
  import { getInstalledSkills } from '../utils/installed-skills.js';
@@ -12,8 +13,98 @@ import { mapTrustTierFromDb, getTrustBadge } from '../utils/validation.js';
12
13
  import { recommendInputSchema, } from './recommend.types.js';
13
14
  // Import helpers
14
15
  import { inferRolesFromTags, loadSkillsFromDatabase, isSkillCollection, } from './recommend.helpers.js';
16
+ // SMI-1837: Import local skill search for parallel querying
17
+ import { getLocalIndexer } from './LocalSkillSearch.js';
15
18
  // Re-export only public API types (SMI-1718: trimmed internal exports)
16
19
  export { recommendInputSchema, recommendToolSchema, } from './recommend.types.js';
20
+ /**
21
+ * SMI-1837: Convert a LocalSkill to SkillRecommendation format
22
+ * @param skill - The local skill to convert
23
+ * @param matchReason - Reason for the recommendation
24
+ * @returns SkillRecommendation object
25
+ */
26
+ function localSkillToRecommendation(skill, matchReason) {
27
+ const roles = inferRolesFromTags(skill.tags);
28
+ return {
29
+ skill_id: skill.id,
30
+ name: skill.name,
31
+ reason: matchReason,
32
+ similarity_score: 0.7, // Local skills get a default similarity score
33
+ trust_tier: 'local',
34
+ quality_score: skill.qualityScore,
35
+ roles,
36
+ };
37
+ }
38
+ /**
39
+ * SMI-1837: Search local skills for recommendations
40
+ * @param query - Search query based on context and installed skills
41
+ * @param limit - Maximum number of results
42
+ * @returns Array of matching local skills as SkillRecommendation
43
+ */
44
+ async function searchLocalSkillsForRecommend(query, limit) {
45
+ try {
46
+ const indexer = getLocalIndexer();
47
+ const localSkills = await indexer.index();
48
+ if (localSkills.length === 0) {
49
+ return [];
50
+ }
51
+ // Search local skills using the query
52
+ const matchingSkills = query ? indexer.search(query, localSkills) : localSkills;
53
+ // Convert to recommendations and limit
54
+ return matchingSkills
55
+ .slice(0, limit)
56
+ .map((skill) => localSkillToRecommendation(skill, `Local skill matching: ${query.split(' ').slice(0, 3).join(', ')}`));
57
+ }
58
+ catch (error) {
59
+ // Log and return empty on error - don't break the main flow
60
+ console.warn('[skillsmith] Local skill search for recommend failed:', error.message);
61
+ return [];
62
+ }
63
+ }
64
+ /**
65
+ * SMI-1837: Merge and deduplicate API and local skill recommendations
66
+ * API results take priority over local results with the same name
67
+ * @param apiResults - Results from API
68
+ * @param localResults - Results from local skill search
69
+ * @param limit - Maximum combined results
70
+ * @returns Merged and deduplicated recommendations
71
+ */
72
+ function mergeAndDeduplicateRecommendations(apiResults, localResults, limit) {
73
+ // Build a Set of names from API results for deduplication
74
+ const apiSkillNames = new Set(apiResults.map((r) => r.name.toLowerCase()));
75
+ // Also track skill IDs (without the author prefix)
76
+ const apiSkillIdNames = new Set(apiResults.map((r) => r.skill_id.split('/').pop()?.toLowerCase() || ''));
77
+ // Filter local results to exclude duplicates
78
+ const uniqueLocalResults = localResults.filter((local) => {
79
+ const localName = local.name.toLowerCase();
80
+ const localIdName = local.skill_id.split('/').pop()?.toLowerCase() || '';
81
+ // Exclude if name matches an API result
82
+ if (apiSkillNames.has(localName)) {
83
+ return false;
84
+ }
85
+ // Exclude if ID name matches an API result
86
+ if (apiSkillIdNames.has(localIdName)) {
87
+ return false;
88
+ }
89
+ // Exclude if local name is contained in or contains an API skill name
90
+ for (const apiName of apiSkillNames) {
91
+ if (localName.includes(apiName) || apiName.includes(localName)) {
92
+ return false;
93
+ }
94
+ }
95
+ return true;
96
+ });
97
+ // Combine API results first (higher priority), then unique local results
98
+ const combined = [...apiResults, ...uniqueLocalResults];
99
+ // Sort by quality score descending, then by similarity score
100
+ combined.sort((a, b) => {
101
+ if (b.quality_score !== a.quality_score) {
102
+ return b.quality_score - a.quality_score;
103
+ }
104
+ return b.similarity_score - a.similarity_score;
105
+ });
106
+ return combined.slice(0, limit);
107
+ }
17
108
  /**
18
109
  * Execute skill recommendation based on installed skills and context.
19
110
  *
@@ -32,40 +123,60 @@ export async function executeRecommend(input, context) {
32
123
  if (autoDetected) {
33
124
  installed_skills = await getInstalledSkills();
34
125
  }
35
- // SMI-1183: Try API first, fall back to local semantic matching
126
+ // Build search query from installed skill names and project context keywords
127
+ const stack = [...installed_skills.map((id) => id.split('/').pop() || id)];
128
+ if (project_context) {
129
+ // Extract key terms from project context (simple word split)
130
+ const contextWords = project_context
131
+ .toLowerCase()
132
+ .split(/\s+/)
133
+ .filter((w) => w.length > 3)
134
+ .slice(0, 5);
135
+ stack.push(...contextWords);
136
+ }
137
+ // Build query string for local skill search
138
+ const localSearchQuery = stack.join(' ') || 'development productivity tools';
139
+ // SMI-1183/SMI-1837: Try API and local skills in parallel
36
140
  if (!context.apiClient.isOffline()) {
37
141
  try {
38
- // Build stack from installed skill names and project context keywords
39
- const stack = [...installed_skills.map((id) => id.split('/').pop() || id)];
40
- if (project_context) {
41
- // Extract key terms from project context (simple word split)
42
- const contextWords = project_context
43
- .toLowerCase()
44
- .split(/\s+/)
45
- .filter((w) => w.length > 3)
46
- .slice(0, 5);
47
- stack.push(...contextWords);
142
+ // SMI-1837: Query API and local skills in parallel
143
+ const [apiResultSettled, localResultSettled] = await Promise.allSettled([
144
+ context.apiClient.getRecommendations({
145
+ stack: stack.slice(0, 10), // API limits to 10 stack items
146
+ limit,
147
+ }),
148
+ searchLocalSkillsForRecommend(localSearchQuery, limit),
149
+ ]);
150
+ // Extract API results (may have failed)
151
+ let apiRecommendations = [];
152
+ if (apiResultSettled.status === 'fulfilled') {
153
+ apiRecommendations = apiResultSettled.value.data.map((skill) => {
154
+ const skillRoles = inferRolesFromTags(skill.tags || []);
155
+ return {
156
+ skill_id: skill.id,
157
+ name: skill.name,
158
+ reason: `Matches your stack: ${stack.slice(0, 3).join(', ')}`,
159
+ similarity_score: 0.8, // API doesn't return similarity score, use default
160
+ trust_tier: mapTrustTierFromDb(skill.trust_tier),
161
+ quality_score: Math.round((skill.quality_score ?? 0.5) * 100),
162
+ roles: skillRoles,
163
+ };
164
+ });
48
165
  }
49
- const apiResponse = await context.apiClient.getRecommendations({
50
- stack: stack.slice(0, 10), // API limits to 10 stack items
51
- limit,
52
- });
166
+ else {
167
+ console.warn('[skillsmith] API recommend failed:', apiResultSettled.reason.message);
168
+ }
169
+ // Extract local results (may have failed)
170
+ let localRecommendations = [];
171
+ if (localResultSettled.status === 'fulfilled') {
172
+ localRecommendations = localResultSettled.value;
173
+ }
174
+ // SMI-1837: Merge and deduplicate results
175
+ let recommendations = mergeAndDeduplicateRecommendations(apiRecommendations, localRecommendations, limit);
53
176
  const endTime = performance.now();
54
- // Convert API results to response format
55
- // SMI-1631: Infer roles and apply role filtering for API results
56
- let recommendations = apiResponse.data.map((skill) => {
57
- const skillRoles = inferRolesFromTags(skill.tags || []);
58
- return {
59
- skill_id: skill.id,
60
- name: skill.name,
61
- reason: `Matches your stack: ${stack.slice(0, 3).join(', ')}`,
62
- similarity_score: 0.8, // API doesn't return similarity score, use default
63
- trust_tier: mapTrustTierFromDb(skill.trust_tier),
64
- quality_score: Math.round((skill.quality_score ?? 0.5) * 100),
65
- roles: skillRoles,
66
- };
67
- });
68
- // SMI-1631: Apply role filtering and score boosting for API results
177
+ // Filter out already installed skills
178
+ recommendations = recommendations.filter((rec) => !installed_skills.some((id) => id.toLowerCase() === rec.skill_id.toLowerCase()));
179
+ // SMI-1631: Apply role filtering and score boosting
69
180
  let roleFiltered = 0;
70
181
  if (role) {
71
182
  const originalCount = recommendations.length;
@@ -79,9 +190,12 @@ export async function executeRecommend(input, context) {
79
190
  }));
80
191
  recommendations.sort((a, b) => b.quality_score - a.quality_score);
81
192
  }
193
+ // Calculate total candidates considered
194
+ const apiCandidates = apiResultSettled.status === 'fulfilled' ? apiResultSettled.value.data.length : 0;
195
+ const localCandidates = localRecommendations.length;
82
196
  const response = {
83
- recommendations,
84
- candidates_considered: apiResponse.data.length,
197
+ recommendations: recommendations.slice(0, limit),
198
+ candidates_considered: apiCandidates + localCandidates,
85
199
  overlap_filtered: 0,
86
200
  role_filtered: roleFiltered,
87
201
  context: {
@@ -110,8 +224,13 @@ export async function executeRecommend(input, context) {
110
224
  console.warn('[skillsmith] API recommend failed, using local matching:', error.message);
111
225
  }
112
226
  }
113
- // Fallback: Load skills from database and use local semantic matching
114
- const skillDatabase = await loadSkillsFromDatabase(context, 500);
227
+ // SMI-1837: Fallback - Load skills from database AND local skills in parallel
228
+ const [skillDatabaseResult, localSkillsResult] = await Promise.allSettled([
229
+ loadSkillsFromDatabase(context, 500),
230
+ searchLocalSkillsForRecommend(localSearchQuery, limit),
231
+ ]);
232
+ const skillDatabase = skillDatabaseResult.status === 'fulfilled' ? skillDatabaseResult.value : [];
233
+ const localRecommendations = localSkillsResult.status === 'fulfilled' ? localSkillsResult.value : [];
115
234
  // Initialize matcher with fallback mode for now
116
235
  const matcher = new SkillMatcher({
117
236
  useFallback: true,
@@ -191,9 +310,9 @@ export async function executeRecommend(input, context) {
191
310
  }
192
311
  // Find similar skills using semantic matching
193
312
  const matchResults = await matcher.findSimilarSkills(query, filteredCandidates, limit);
194
- // Transform to response format
313
+ // Transform database results to response format
195
314
  // SMI-1631: Include roles and apply +30 score boost for role matches
196
- const recommendations = matchResults.map((result) => {
315
+ const dbRecommendations = matchResults.map((result) => {
197
316
  const skill = result.skill;
198
317
  const hasRoleMatch = role && skill.roles.includes(role);
199
318
  const boostedScore = hasRoleMatch
@@ -209,11 +328,19 @@ export async function executeRecommend(input, context) {
209
328
  roles: skill.roles,
210
329
  };
211
330
  });
331
+ // SMI-1837: Merge database and local results
332
+ let recommendations = mergeAndDeduplicateRecommendations(dbRecommendations, localRecommendations, limit);
333
+ // Apply role filtering to merged results if not already done
334
+ if (role && localRecommendations.length > 0) {
335
+ const beforeRoleFilter = recommendations.length;
336
+ recommendations = recommendations.filter((rec) => rec.roles?.includes(role));
337
+ roleFiltered = beforeRoleFilter - recommendations.length;
338
+ }
212
339
  const endTime = performance.now();
213
340
  matcher.close();
214
341
  const response = {
215
- recommendations,
216
- candidates_considered: candidates.length,
342
+ recommendations: recommendations.slice(0, limit),
343
+ candidates_considered: candidates.length + localRecommendations.length,
217
344
  overlap_filtered: overlapFiltered,
218
345
  role_filtered: roleFiltered,
219
346
  context: {
@@ -1 +1 @@
1
- {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../../src/tools/recommend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../../src/tools/recommend.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAGL,KAAK,iBAAiB,IAAI,cAAc,EAMzC,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAQhD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD5B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAkNzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAgCpE"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAGL,KAAK,iBAAiB,IAAI,cAAc,EAMzC,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAShD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD5B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA8OzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAgCpE"}
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import { SkillsmithError, ErrorCodes, trackSkillSearch, } from '@skillsmith/core';
27
27
  import { extractCategoryFromTags, mapTrustTierToDb, mapTrustTierFromDb, getTrustBadge, } from '../utils/validation.js';
28
+ import { searchLocalSkills } from './LocalSkillSearch.js';
28
29
  /**
29
30
  * Search tool schema for MCP
30
31
  */
@@ -169,10 +170,23 @@ export async function executeSearch(input, context) {
169
170
  score: Math.round((item.quality_score ?? 0) * 100),
170
171
  repository: item.repo_url || undefined,
171
172
  }));
173
+ // SMI-1809: Search local skills and merge with API results
174
+ // Skip local search if trust_tier filter excludes local skills
175
+ let localResults = [];
176
+ if (!filters.trustTier || filters.trustTier === 'local') {
177
+ try {
178
+ localResults = await searchLocalSkills(hasQuery ? input.query.trim() : '', filters);
179
+ }
180
+ catch (localError) {
181
+ console.warn('[skillsmith] Local skill search failed:', localError.message);
182
+ }
183
+ }
184
+ // Merge results: local skills first (since they're user's own), then registry
185
+ const mergedResults = [...localResults, ...results];
172
186
  const endTime = performance.now();
173
187
  const response = {
174
- results,
175
- total: apiResponse.meta?.total ?? results.length,
188
+ results: mergedResults.slice(0, 10), // Limit to 10 total
189
+ total: (apiResponse.meta?.total ?? results.length) + localResults.length,
176
190
  query: input.query || '', // May be empty for filter-only searches
177
191
  filters,
178
192
  timing: {
@@ -230,10 +244,23 @@ export async function executeSearch(input, context) {
230
244
  scannedAt: item.skill.securityScannedAt,
231
245
  },
232
246
  }));
247
+ // SMI-1809: Search local skills and merge with local DB results
248
+ // Skip local search if trust_tier filter excludes local skills
249
+ let localResults = [];
250
+ if (!filters.trustTier || filters.trustTier === 'local') {
251
+ try {
252
+ localResults = await searchLocalSkills(searchQuery, filters);
253
+ }
254
+ catch (localError) {
255
+ console.warn('[skillsmith] Local skill search failed:', localError.message);
256
+ }
257
+ }
258
+ // Merge results: local skills first (since they're user's own), then registry
259
+ const mergedResults = [...localResults, ...results];
233
260
  const endTime = performance.now();
234
261
  const response = {
235
- results,
236
- total: searchResults.total,
262
+ results: mergedResults.slice(0, 10), // Limit to 10 total
263
+ total: searchResults.total + localResults.length,
237
264
  query: input.query || '', // May be empty for filter-only searches
238
265
  filters,
239
266
  timing: {
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -47,7 +47,8 @@ export declare function parseSkillId(id: string): {
47
47
  /**
48
48
  * Map MCP trust tier to database trust tier.
49
49
  *
50
- * Types are now unified: verified, community, experimental, unknown
50
+ * Types are now unified: verified, community, experimental, unknown, local
51
+ * SMI-1809: Added 'local' for local skills from ~/.claude/skills/
51
52
  *
52
53
  * @param mcpTier - MCP trust tier
53
54
  * @returns Database trust tier
@@ -57,7 +58,8 @@ export declare function mapTrustTierToDb(mcpTier: MCPTrustTier): DBTrustTier;
57
58
  * Map database trust tier to MCP trust tier.
58
59
  *
59
60
  * Accepts string input and validates, returning 'unknown' for invalid values.
60
- * Types are unified: verified, community, experimental, unknown
61
+ * Types are unified: verified, community, experimental, unknown, local
62
+ * SMI-1809: Added 'local' for local skills from ~/.claude/skills/
61
63
  *
62
64
  * @param dbTier - Database trust tier (string or typed)
63
65
  * @returns MCP trust tier
@@ -83,6 +85,7 @@ export declare function extractCategoryFromTags(tags: string[] | undefined | nul
83
85
  *
84
86
  * Returns a formatted badge string for terminal/CLI display
85
87
  * based on the skill's trust tier.
88
+ * SMI-1809: Added 'local' badge for local skills.
86
89
  *
87
90
  * @param tier - Trust tier value
88
91
  * @returns Formatted badge string (e.g., '[VERIFIED]')
@@ -90,6 +93,7 @@ export declare function extractCategoryFromTags(tags: string[] | undefined | nul
90
93
  * @example
91
94
  * getTrustBadge('verified') // '[VERIFIED]'
92
95
  * getTrustBadge('community') // '[COMMUNITY]'
96
+ * getTrustBadge('local') // '[LOCAL]'
93
97
  */
94
98
  export declare function getTrustBadge(tier: MCPTrustTier): string;
95
99
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAkB7F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CASlD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASjG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAWnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,YAAY,CAY7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,CAsCxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAQxD"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAkB7F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CASlD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASjG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAanE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,YAAY,CAc7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,CAsCxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CASxD"}
@@ -74,7 +74,8 @@ export function parseSkillId(id) {
74
74
  /**
75
75
  * Map MCP trust tier to database trust tier.
76
76
  *
77
- * Types are now unified: verified, community, experimental, unknown
77
+ * Types are now unified: verified, community, experimental, unknown, local
78
+ * SMI-1809: Added 'local' for local skills from ~/.claude/skills/
78
79
  *
79
80
  * @param mcpTier - MCP trust tier
80
81
  * @returns Database trust tier
@@ -87,6 +88,8 @@ export function mapTrustTierToDb(mcpTier) {
87
88
  return 'community';
88
89
  case 'experimental':
89
90
  return 'experimental';
91
+ case 'local':
92
+ return 'local';
90
93
  case 'unknown':
91
94
  return 'unknown';
92
95
  }
@@ -95,7 +98,8 @@ export function mapTrustTierToDb(mcpTier) {
95
98
  * Map database trust tier to MCP trust tier.
96
99
  *
97
100
  * Accepts string input and validates, returning 'unknown' for invalid values.
98
- * Types are unified: verified, community, experimental, unknown
101
+ * Types are unified: verified, community, experimental, unknown, local
102
+ * SMI-1809: Added 'local' for local skills from ~/.claude/skills/
99
103
  *
100
104
  * @param dbTier - Database trust tier (string or typed)
101
105
  * @returns MCP trust tier
@@ -108,6 +112,8 @@ export function mapTrustTierFromDb(dbTier) {
108
112
  return 'community';
109
113
  case 'experimental':
110
114
  return 'experimental';
115
+ case 'local':
116
+ return 'local';
111
117
  case 'unknown':
112
118
  default:
113
119
  return 'unknown';
@@ -166,6 +172,7 @@ export function extractCategoryFromTags(tags) {
166
172
  *
167
173
  * Returns a formatted badge string for terminal/CLI display
168
174
  * based on the skill's trust tier.
175
+ * SMI-1809: Added 'local' badge for local skills.
169
176
  *
170
177
  * @param tier - Trust tier value
171
178
  * @returns Formatted badge string (e.g., '[VERIFIED]')
@@ -173,6 +180,7 @@ export function extractCategoryFromTags(tags) {
173
180
  * @example
174
181
  * getTrustBadge('verified') // '[VERIFIED]'
175
182
  * getTrustBadge('community') // '[COMMUNITY]'
183
+ * getTrustBadge('local') // '[LOCAL]'
176
184
  */
177
185
  export function getTrustBadge(tier) {
178
186
  const badges = {
@@ -180,6 +188,7 @@ export function getTrustBadge(tier) {
180
188
  community: '[COMMUNITY]',
181
189
  experimental: '[EXPERIMENTAL]',
182
190
  unknown: '[UNKNOWN]',
191
+ local: '[LOCAL]',
183
192
  };
184
193
  return badges[tier] ?? '[UNKNOWN]';
185
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
@@ -17,27 +17,11 @@
17
17
  *
18
18
  * startWebhookServer(server, { port: 3000 });
19
19
  */
20
- import { IncomingMessage, Server } from 'http';
20
+ import { Server } from 'http';
21
21
  import { WebhookHandler, WebhookQueue, type WebhookQueueItem } from '@skillsmith/core';
22
- /**
23
- * Webhook server configuration (SMI-682: Added trust proxy options)
24
- */
25
- export interface WebhookServerConfig {
26
- /**
27
- * GitHub webhook secret for signature verification
28
- */
29
- secret: string;
30
- /**
31
- * Whether to trust X-Forwarded-For headers (default: false)
32
- * SMI-682: Must be explicitly enabled for security
33
- */
34
- trustProxy?: boolean;
35
- /**
36
- * List of trusted proxy IPs (optional, for enhanced security)
37
- * SMI-682: When set, X-Forwarded-For is only trusted from these IPs
38
- */
39
- trustedProxies?: string[];
40
- }
22
+ import { type WebhookServerConfig } from './webhook-helpers.js';
23
+ export type { WebhookServerConfig, RateLimiterState } from './webhook-helpers.js';
24
+ export { createRateLimiter, destroyRateLimiter, isRateLimited, getClientIp, } from './webhook-helpers.js';
41
25
  /**
42
26
  * Webhook server options
43
27
  */
@@ -84,35 +68,6 @@ export interface ServerStartOptions {
84
68
  */
85
69
  host?: string;
86
70
  }
87
- /**
88
- * Rate limiter state (SMI-681: Added cleanup timer for memory leak prevention)
89
- */
90
- export interface RateLimiterState {
91
- requests: Map<string, number[]>;
92
- limit: number;
93
- window: number;
94
- cleanupTimer?: ReturnType<typeof setInterval>;
95
- }
96
- /**
97
- * Create rate limiter with automatic cleanup (SMI-681)
98
- * @param limit - Maximum requests per window
99
- * @param windowMs - Window duration in milliseconds
100
- */
101
- export declare function createRateLimiter(limit: number, windowMs: number): RateLimiterState;
102
- /**
103
- * Destroy rate limiter and clean up resources (SMI-681)
104
- */
105
- export declare function destroyRateLimiter(state: RateLimiterState): void;
106
- /**
107
- * Check if request is rate limited
108
- */
109
- export declare function isRateLimited(limiter: RateLimiterState, ip: string): boolean;
110
- /**
111
- * Get client IP from request (SMI-682: Added trusted proxy validation)
112
- * @param req - Incoming HTTP request
113
- * @param config - Server configuration with trust proxy settings
114
- */
115
- export declare function getClientIp(req: IncomingMessage, config: WebhookServerConfig): string;
116
71
  /**
117
72
  * Webhook server instance
118
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-endpoint.d.ts","sourceRoot":"","sources":["../../../src/webhooks/webhook-endpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAgB,eAAe,EAAkB,MAAM,EAAE,MAAM,MAAM,CAAA;AAC5E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,KAAK,gBAAgB,EAEtB,MAAM,kBAAkB,CAAA;AAEzB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzD;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAEnF;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA4BnF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAoB5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAmCrF;AAoCD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB;;OAEG;IACH,KAAK,EAAE,YAAY,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0IhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC1C"}
1
+ {"version":3,"file":"webhook-endpoint.d.ts","sourceRoot":"","sources":["../../../src/webhooks/webhook-endpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAgB,MAAM,EAAE,MAAM,MAAM,CAAA;AAC3C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,KAAK,gBAAgB,EAEtB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzD;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAEnF;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB;;OAEG;IACH,KAAK,EAAE,YAAY,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0IhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC1C"}