@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
- package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
- package/dist/src/__tests__/LocalIndexer.test.js +396 -0
- package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
- package/dist/src/__tests__/get-skill.test.js +195 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -1
- package/dist/src/__tests__/index-local.test.d.ts +5 -0
- package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
- package/dist/src/__tests__/index-local.test.js +203 -0
- package/dist/src/__tests__/index-local.test.js.map +1 -0
- package/dist/src/__tests__/recommend.test.d.ts +7 -0
- package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
- package/dist/src/__tests__/recommend.test.js +277 -0
- package/dist/src/__tests__/recommend.test.js.map +1 -0
- package/dist/src/__tests__/search.test.js +138 -0
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/context.d.ts +6 -0
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +7 -1
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
- package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
- package/dist/src/indexer/FrontmatterParser.js +109 -0
- package/dist/src/indexer/FrontmatterParser.js.map +1 -0
- package/dist/src/indexer/LocalIndexer.d.ts +136 -0
- package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
- package/dist/src/indexer/LocalIndexer.js +271 -0
- package/dist/src/indexer/LocalIndexer.js.map +1 -0
- package/dist/src/indexer/index.d.ts +8 -0
- package/dist/src/indexer/index.d.ts.map +1 -0
- package/dist/src/indexer/index.js +8 -0
- package/dist/src/indexer/index.js.map +1 -0
- package/dist/src/llm/failover.d.ts +11 -1
- package/dist/src/llm/failover.d.ts.map +1 -1
- package/dist/src/llm/failover.js.map +1 -1
- package/dist/src/middleware/errorFormatter.d.ts +27 -0
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
- package/dist/src/middleware/errorFormatter.js +95 -0
- package/dist/src/middleware/errorFormatter.js.map +1 -1
- package/dist/src/middleware/index.d.ts +1 -1
- package/dist/src/middleware/index.d.ts.map +1 -1
- package/dist/src/middleware/index.js.map +1 -1
- package/dist/src/middleware/quota-helpers.d.ts +40 -0
- package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
- package/dist/src/middleware/quota-helpers.js +90 -0
- package/dist/src/middleware/quota-helpers.js.map +1 -0
- package/dist/src/middleware/quota-types.d.ts +105 -0
- package/dist/src/middleware/quota-types.d.ts.map +1 -0
- package/dist/src/middleware/quota-types.js +4 -0
- package/dist/src/middleware/quota-types.js.map +1 -0
- package/dist/src/middleware/quota.d.ts +3 -97
- package/dist/src/middleware/quota.d.ts.map +1 -1
- package/dist/src/middleware/quota.js +2 -87
- package/dist/src/middleware/quota.js.map +1 -1
- package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
- package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
- package/dist/src/tools/LocalSkillSearch.js +74 -0
- package/dist/src/tools/LocalSkillSearch.js.map +1 -0
- package/dist/src/tools/compare.helpers.js.map +1 -1
- package/dist/src/tools/compare.types.d.ts +1 -0
- package/dist/src/tools/compare.types.d.ts.map +1 -1
- package/dist/src/tools/compare.types.js +2 -0
- package/dist/src/tools/compare.types.js.map +1 -1
- package/dist/src/tools/get-skill.js +3 -0
- package/dist/src/tools/get-skill.js.map +1 -1
- package/dist/src/tools/index-local.d.ts +117 -0
- package/dist/src/tools/index-local.d.ts.map +1 -0
- package/dist/src/tools/index-local.js +126 -0
- package/dist/src/tools/index-local.js.map +1 -0
- package/dist/src/tools/index.d.ts +2 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +2 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
- package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.js +165 -0
- package/dist/src/tools/install.conflict-helpers.js.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.js +243 -0
- package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
- package/dist/src/tools/install.conflict.d.ts +58 -0
- package/dist/src/tools/install.conflict.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.js +160 -0
- package/dist/src/tools/install.conflict.js.map +1 -0
- package/dist/src/tools/install.conflict.test.d.ts +15 -0
- package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.test.js +354 -0
- package/dist/src/tools/install.conflict.test.js.map +1 -0
- package/dist/src/tools/install.d.ts +5 -0
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.d.ts +5 -4
- package/dist/src/tools/install.helpers.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.js +13 -4
- package/dist/src/tools/install.helpers.js.map +1 -1
- package/dist/src/tools/install.js +96 -17
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +75 -11
- package/dist/src/tools/install.types.d.ts.map +1 -1
- package/dist/src/tools/install.types.js +15 -1
- package/dist/src/tools/install.types.js.map +1 -1
- package/dist/src/tools/merge.d.ts +53 -0
- package/dist/src/tools/merge.d.ts.map +1 -0
- package/dist/src/tools/merge.js +276 -0
- package/dist/src/tools/merge.js.map +1 -0
- package/dist/src/tools/merge.test.d.ts +11 -0
- package/dist/src/tools/merge.test.d.ts.map +1 -0
- package/dist/src/tools/merge.test.js +224 -0
- package/dist/src/tools/merge.test.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +1 -0
- package/dist/src/tools/recommend.d.ts.map +1 -1
- package/dist/src/tools/recommend.js +165 -38
- package/dist/src/tools/recommend.js.map +1 -1
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.js +31 -4
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/utils/validation.d.ts +6 -2
- package/dist/src/utils/validation.d.ts.map +1 -1
- package/dist/src/utils/validation.js +11 -2
- package/dist/src/utils/validation.js.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.js +3 -125
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
- package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
- package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
- package/dist/src/webhooks/webhook-helpers.js +146 -0
- package/dist/src/webhooks/webhook-helpers.js.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.js +165 -0
- package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.js +70 -0
- package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
- package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.js +6 -0
- package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
- package/dist/tests/integration/fixtures/test-skills.js +23 -590
- package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
- package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/testing-skills.js +70 -0
- package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.js +91 -0
- package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.js +384 -0
- package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
- package/dist/tests/integration/install.integration.test.js +3 -0
- package/dist/tests/integration/install.integration.test.js.map +1 -1
- 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
|
-
//
|
|
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
|
-
//
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
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:
|
|
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
|
-
//
|
|
114
|
-
const
|
|
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
|
|
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;
|
|
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"}
|
package/dist/src/tools/search.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAML,eAAe,EACf,UAAU,EACV,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,GACd,MAAM,wBAAwB,CAAA;
|
|
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
|
|
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":"AAAA;;;;;;;;;GASG;AAIH;;GAEG;AACH,MAAM,gBAAgB,GAA6B;IACjD,aAAa;IACb,SAAS;IACT,eAAe;IACf,QAAQ;IACR,UAAU;IACV,UAAU;IACV,cAAc;IACd,aAAa;IACb,OAAO;IACP,OAAO;CACC,CAAA;AAEV;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,sCAAsC;IACtC,MAAM,eAAe,GAAG,6BAA6B,CAAA;IACrD,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,2CAA2C,CAAA;IACpE,cAAc;IACd,MAAM,IAAI,GAAG,iEAAiE,CAAA;IAE9E,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED
|
|
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 {
|
|
20
|
+
import { Server } from 'http';
|
|
21
21
|
import { WebhookHandler, WebhookQueue, type WebhookQueueItem } from '@skillsmith/core';
|
|
22
|
-
|
|
23
|
-
|
|
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,
|
|
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"}
|