@skillsmith/mcp-server 0.3.4 → 0.3.6
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/README.md +1 -1
- 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
|
@@ -35,10 +35,12 @@ export const compareToolSchema = {
|
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
37
|
* Trust tier ranking for comparison
|
|
38
|
+
* SMI-1809: Added 'local' tier for local skills
|
|
38
39
|
*/
|
|
39
40
|
export const TRUST_TIER_RANK = {
|
|
40
41
|
verified: 4,
|
|
41
42
|
community: 3,
|
|
43
|
+
local: 3, // SMI-1809: Local skills rank same as community (user trusts their own skills)
|
|
42
44
|
experimental: 2,
|
|
43
45
|
unknown: 1,
|
|
44
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.types.js","sourceRoot":"","sources":["../../../src/tools/compare.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,gCAAgC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,iCAAiC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;CAClD,CAAC,CAAA;AAsEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,gIAAgI;IAClI,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KACjC;CACF,CAAA;AAOD
|
|
1
|
+
{"version":3,"file":"compare.types.js","sourceRoot":"","sources":["../../../src/tools/compare.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,gCAAgC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,iCAAiC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;CAClD,CAAC,CAAA;AAsEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,gIAAgI;IAClI,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KACjC;CACF,CAAA;AAOD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAA8B;IACxD,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC,EAAE,+EAA+E;IACzF,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,CAAC;CACX,CAAA"}
|
|
@@ -268,6 +268,7 @@ export function formatSkillDetails(response) {
|
|
|
268
268
|
}
|
|
269
269
|
/**
|
|
270
270
|
* Format trust tier with visual indicator
|
|
271
|
+
* SMI-1809: Added 'local' tier
|
|
271
272
|
*/
|
|
272
273
|
function formatTrustTier(tier) {
|
|
273
274
|
switch (tier) {
|
|
@@ -275,6 +276,8 @@ function formatTrustTier(tier) {
|
|
|
275
276
|
return '[*] VERIFIED';
|
|
276
277
|
case 'community':
|
|
277
278
|
return '[+] COMMUNITY';
|
|
279
|
+
case 'local':
|
|
280
|
+
return '[@] LOCAL'; // SMI-1809: Local skills from ~/.claude/skills/
|
|
278
281
|
case 'experimental':
|
|
279
282
|
return '[~] EXPERIMENTAL';
|
|
280
283
|
case 'unknown':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/tools/get-skill.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/tools/get-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP Tool for indexing local skills from ~/.claude/skills/
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/index-local
|
|
4
|
+
* @see SMI-1809: Local skill indexing for MCP server
|
|
5
|
+
*
|
|
6
|
+
* Provides manual re-indexing of local skills with detailed results.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Trigger re-indexing
|
|
10
|
+
* const result = await executeIndexLocal({}, context);
|
|
11
|
+
* console.log(`Indexed ${result.count} skills`);
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Force re-index (bypass cache)
|
|
15
|
+
* const result = await executeIndexLocal({ force: true }, context);
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import type { ToolContext } from '../context.js';
|
|
19
|
+
/**
|
|
20
|
+
* Tool schema for MCP
|
|
21
|
+
*/
|
|
22
|
+
export declare const indexLocalToolSchema: {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: "object";
|
|
27
|
+
properties: {
|
|
28
|
+
force: {
|
|
29
|
+
type: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
skillsDir: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
required: never[];
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Zod schema for input validation
|
|
42
|
+
*/
|
|
43
|
+
export declare const indexLocalInputSchema: z.ZodObject<{
|
|
44
|
+
force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
45
|
+
skillsDir: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
|
+
force: boolean;
|
|
48
|
+
skillsDir?: string | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
force?: boolean | undefined;
|
|
51
|
+
skillsDir?: string | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Input parameters for the index_local operation
|
|
55
|
+
*/
|
|
56
|
+
export interface IndexLocalInput {
|
|
57
|
+
/** Force re-indexing even if cache is valid */
|
|
58
|
+
force?: boolean;
|
|
59
|
+
/** Custom skills directory path */
|
|
60
|
+
skillsDir?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Summary of an indexed skill for response
|
|
64
|
+
*/
|
|
65
|
+
export interface IndexedSkillSummary {
|
|
66
|
+
/** Skill ID (local/{name}) */
|
|
67
|
+
id: string;
|
|
68
|
+
/** Skill name */
|
|
69
|
+
name: string;
|
|
70
|
+
/** Quality score (0-100) */
|
|
71
|
+
qualityScore: number;
|
|
72
|
+
/** Whether SKILL.md was found */
|
|
73
|
+
hasSkillMd: boolean;
|
|
74
|
+
/** Number of tags */
|
|
75
|
+
tagCount: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Response from index_local operation
|
|
79
|
+
*/
|
|
80
|
+
export interface IndexLocalResponse {
|
|
81
|
+
/** Number of skills indexed */
|
|
82
|
+
count: number;
|
|
83
|
+
/** Path to skills directory */
|
|
84
|
+
skillsDir: string;
|
|
85
|
+
/** Summary of indexed skills */
|
|
86
|
+
skills: IndexedSkillSummary[];
|
|
87
|
+
/** Timing information */
|
|
88
|
+
timing: {
|
|
89
|
+
indexMs: number;
|
|
90
|
+
totalMs: number;
|
|
91
|
+
};
|
|
92
|
+
/** Whether result was from cache */
|
|
93
|
+
fromCache: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Execute local skill indexing.
|
|
97
|
+
*
|
|
98
|
+
* Scans ~/.claude/skills/ (or custom directory), parses SKILL.md files,
|
|
99
|
+
* and returns indexed skill information.
|
|
100
|
+
*
|
|
101
|
+
* @param input - Index parameters
|
|
102
|
+
* @param _context - Tool context (unused but required for consistency)
|
|
103
|
+
* @returns Promise resolving to index response
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* const response = await executeIndexLocal({}, context);
|
|
107
|
+
* console.log(`Found ${response.count} local skills`);
|
|
108
|
+
*/
|
|
109
|
+
export declare function executeIndexLocal(input: IndexLocalInput, _context: ToolContext): Promise<IndexLocalResponse>;
|
|
110
|
+
/**
|
|
111
|
+
* Format index results for terminal/CLI display.
|
|
112
|
+
*
|
|
113
|
+
* @param response - Index response from executeIndexLocal
|
|
114
|
+
* @returns Formatted string suitable for terminal output
|
|
115
|
+
*/
|
|
116
|
+
export declare function formatIndexLocalResults(response: IndexLocalResponse): string;
|
|
117
|
+
//# sourceMappingURL=index-local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-local.d.ts","sourceRoot":"","sources":["../../../src/tools/index-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;CAkBhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAA;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,iCAAiC;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,gCAAgC;IAChC,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,yBAAyB;IACzB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAkC5E"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP Tool for indexing local skills from ~/.claude/skills/
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/index-local
|
|
4
|
+
* @see SMI-1809: Local skill indexing for MCP server
|
|
5
|
+
*
|
|
6
|
+
* Provides manual re-indexing of local skills with detailed results.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Trigger re-indexing
|
|
10
|
+
* const result = await executeIndexLocal({}, context);
|
|
11
|
+
* console.log(`Indexed ${result.count} skills`);
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Force re-index (bypass cache)
|
|
15
|
+
* const result = await executeIndexLocal({ force: true }, context);
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { LocalIndexer } from '../indexer/LocalIndexer.js';
|
|
19
|
+
/**
|
|
20
|
+
* Tool schema for MCP
|
|
21
|
+
*/
|
|
22
|
+
export const indexLocalToolSchema = {
|
|
23
|
+
name: 'index_local',
|
|
24
|
+
description: 'Index local skills from ~/.claude/skills/ directory. Returns count and details of indexed skills.',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
force: {
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
description: 'Force re-indexing even if cache is valid (default: false)',
|
|
31
|
+
},
|
|
32
|
+
skillsDir: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Custom skills directory path (defaults to ~/.claude/skills/)',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
required: [],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Zod schema for input validation
|
|
42
|
+
*/
|
|
43
|
+
export const indexLocalInputSchema = z.object({
|
|
44
|
+
force: z.boolean().optional().default(false),
|
|
45
|
+
skillsDir: z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Execute local skill indexing.
|
|
49
|
+
*
|
|
50
|
+
* Scans ~/.claude/skills/ (or custom directory), parses SKILL.md files,
|
|
51
|
+
* and returns indexed skill information.
|
|
52
|
+
*
|
|
53
|
+
* @param input - Index parameters
|
|
54
|
+
* @param _context - Tool context (unused but required for consistency)
|
|
55
|
+
* @returns Promise resolving to index response
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* const response = await executeIndexLocal({}, context);
|
|
59
|
+
* console.log(`Found ${response.count} local skills`);
|
|
60
|
+
*/
|
|
61
|
+
export async function executeIndexLocal(input, _context) {
|
|
62
|
+
const startTime = performance.now();
|
|
63
|
+
const indexStart = performance.now();
|
|
64
|
+
// Create indexer with optional custom directory
|
|
65
|
+
const indexer = new LocalIndexer(input.skillsDir);
|
|
66
|
+
// Check if we'll get cached results
|
|
67
|
+
const wasCached = !input.force && indexer['cachedSkills'] !== null;
|
|
68
|
+
// Perform indexing
|
|
69
|
+
const skills = await indexer.index(input.force);
|
|
70
|
+
const indexEnd = performance.now();
|
|
71
|
+
// Create summaries
|
|
72
|
+
const summaries = skills.map((skill) => ({
|
|
73
|
+
id: skill.id,
|
|
74
|
+
name: skill.name,
|
|
75
|
+
qualityScore: skill.qualityScore,
|
|
76
|
+
hasSkillMd: skill.hasSkillMd,
|
|
77
|
+
tagCount: skill.tags.length,
|
|
78
|
+
}));
|
|
79
|
+
const endTime = performance.now();
|
|
80
|
+
return {
|
|
81
|
+
count: skills.length,
|
|
82
|
+
skillsDir: indexer.getSkillsDir(),
|
|
83
|
+
skills: summaries,
|
|
84
|
+
timing: {
|
|
85
|
+
indexMs: Math.round(indexEnd - indexStart),
|
|
86
|
+
totalMs: Math.round(endTime - startTime),
|
|
87
|
+
},
|
|
88
|
+
fromCache: wasCached && !input.force,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Format index results for terminal/CLI display.
|
|
93
|
+
*
|
|
94
|
+
* @param response - Index response from executeIndexLocal
|
|
95
|
+
* @returns Formatted string suitable for terminal output
|
|
96
|
+
*/
|
|
97
|
+
export function formatIndexLocalResults(response) {
|
|
98
|
+
const lines = [];
|
|
99
|
+
lines.push('\n=== Local Skills Index ===\n');
|
|
100
|
+
lines.push(`Directory: ${response.skillsDir}`);
|
|
101
|
+
lines.push(`Found: ${response.count} skill(s)`);
|
|
102
|
+
if (response.fromCache) {
|
|
103
|
+
lines.push('(from cache)');
|
|
104
|
+
}
|
|
105
|
+
lines.push('');
|
|
106
|
+
if (response.skills.length === 0) {
|
|
107
|
+
lines.push('No skills found in the local skills directory.');
|
|
108
|
+
lines.push('');
|
|
109
|
+
lines.push('To add skills:');
|
|
110
|
+
lines.push(' 1. Create a directory in ~/.claude/skills/');
|
|
111
|
+
lines.push(' 2. Add a SKILL.md file with frontmatter');
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
for (const skill of response.skills) {
|
|
116
|
+
const quality = skill.qualityScore >= 80 ? '[HIGH]' : skill.qualityScore >= 50 ? '[MED]' : '[LOW]';
|
|
117
|
+
const skillMd = skill.hasSkillMd ? '' : ' (no SKILL.md)';
|
|
118
|
+
lines.push(` ${skill.name} ${quality} - Score: ${skill.qualityScore}/100${skillMd}`);
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
}
|
|
122
|
+
lines.push('---');
|
|
123
|
+
lines.push(`Index: ${response.timing.indexMs}ms | Total: ${response.timing.totalMs}ms`);
|
|
124
|
+
return lines.join('\n');
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=index-local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-local.js","sourceRoot":"","sources":["../../../src/tools/index-local.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,4 +17,6 @@ export { compareToolSchema, compareInputSchema, executeCompare, formatComparison
|
|
|
17
17
|
export type { CompareInput, SkillSummary, SkillDifference, CompareResponse } from './compare.js';
|
|
18
18
|
export { analyzeToolSchema, analyzeInputSchema, executeAnalyze, formatAnalysisResults, } from './analyze.js';
|
|
19
19
|
export type { AnalyzeInput, AnalyzeFramework, AnalyzeDependency, AnalyzeResponse, } from './analyze.js';
|
|
20
|
+
export { indexLocalToolSchema, indexLocalInputSchema, executeIndexLocal, formatIndexLocalResults, } from './index-local.js';
|
|
21
|
+
export type { IndexLocalInput, IndexedSkillSummary, IndexLocalResponse } from './index-local.js';
|
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5E,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG/D,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAG5F,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGrF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGhG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5E,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG/D,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAG5F,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGrF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGhG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -17,4 +17,6 @@ export { validateToolSchema, validateInputSchema, executeValidate, formatValidat
|
|
|
17
17
|
export { compareToolSchema, compareInputSchema, executeCompare, formatComparisonResults, } from './compare.js';
|
|
18
18
|
// Analyze codebase tool (SMI-600)
|
|
19
19
|
export { analyzeToolSchema, analyzeInputSchema, executeAnalyze, formatAnalysisResults, } from './analyze.js';
|
|
20
|
+
// Index local skills tool (SMI-1809)
|
|
21
|
+
export { indexLocalToolSchema, indexLocalInputSchema, executeIndexLocal, formatIndexLocalResults, } from './index-local.js';
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAwB;AACxB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGlF,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAG5E,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGpE,2BAA2B;AAC3B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAGtB,yBAAyB;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAGrB,kCAAkC;AAClC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAwB;AACxB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGlF,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAG5E,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGpE,2BAA2B;AAC3B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAGtB,yBAAyB;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAGrB,kCAAkC;AAClC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA;AAQrB,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Conflict Resolution Helper Functions for Skill Updates
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/install.conflict-helpers
|
|
4
|
+
* @see SMI-1865
|
|
5
|
+
*
|
|
6
|
+
* Split from install.helpers.ts per governance code review (file size > 500 lines)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* SMI-1865: Get base directory for skill backups
|
|
10
|
+
* Uses a function instead of constant to support HOME overrides in tests
|
|
11
|
+
*/
|
|
12
|
+
export declare function getBackupsDir(): string;
|
|
13
|
+
/**
|
|
14
|
+
* SMI-1865: Compute SHA-256 hash of content for modification detection
|
|
15
|
+
*/
|
|
16
|
+
export declare function hashContent(content: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* SMI-1865: Result of modification detection
|
|
19
|
+
*/
|
|
20
|
+
export interface ModificationResult {
|
|
21
|
+
/** Whether the file has been modified since installation */
|
|
22
|
+
modified: boolean;
|
|
23
|
+
/** SHA-256 hash of the current content */
|
|
24
|
+
currentHash: string;
|
|
25
|
+
/** SHA-256 hash of the original content at install time */
|
|
26
|
+
originalHash: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* SMI-1865: Detect if a skill has been modified since installation
|
|
30
|
+
* @param installPath - Path to the installed skill directory
|
|
31
|
+
* @param originalHash - SHA-256 hash of the original SKILL.md at install time
|
|
32
|
+
* @returns ModificationResult indicating if the skill has been modified
|
|
33
|
+
*/
|
|
34
|
+
export declare function detectModifications(installPath: string, originalHash: string): Promise<ModificationResult>;
|
|
35
|
+
/**
|
|
36
|
+
* SMI-1865: Create a timestamped backup of a skill before update
|
|
37
|
+
* @param skillName - Name of the skill (used for directory naming)
|
|
38
|
+
* @param installPath - Current install path of the skill
|
|
39
|
+
* @param reason - Reason for creating the backup (e.g., 'pre-update', 'conflict')
|
|
40
|
+
* @returns Path to the created backup directory
|
|
41
|
+
*/
|
|
42
|
+
export declare function createSkillBackup(skillName: string, installPath: string, reason: string): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* SMI-1865: Store the original content of a skill at install time
|
|
45
|
+
* Used for three-way merge during conflict resolution
|
|
46
|
+
* @param skillName - Name of the skill
|
|
47
|
+
* @param content - Original SKILL.md content
|
|
48
|
+
* @param metadata - Additional metadata to store (version, source, etc.)
|
|
49
|
+
*/
|
|
50
|
+
export declare function storeOriginal(skillName: string, content: string, metadata: Record<string, unknown>): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* SMI-1865: Load the original SKILL.md content stored at install time
|
|
53
|
+
* @param skillName - Name of the skill
|
|
54
|
+
* @returns Original content, or null if not found
|
|
55
|
+
*/
|
|
56
|
+
export declare function loadOriginal(skillName: string): Promise<string | null>;
|
|
57
|
+
/**
|
|
58
|
+
* SMI-1865: Clean up old backups, keeping only the most recent ones
|
|
59
|
+
* Never deletes the .original directory
|
|
60
|
+
* @param skillName - Name of the skill
|
|
61
|
+
* @param keepCount - Number of most recent backups to keep (default: 3)
|
|
62
|
+
*/
|
|
63
|
+
export declare function cleanupOldBackups(skillName: string, keepCount?: number): Promise<void>;
|
|
64
|
+
//# sourceMappingURL=install.conflict-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.conflict-helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAqBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW5E;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/F"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Conflict Resolution Helper Functions for Skill Updates
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/install.conflict-helpers
|
|
4
|
+
* @see SMI-1865
|
|
5
|
+
*
|
|
6
|
+
* Split from install.helpers.ts per governance code review (file size > 500 lines)
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs/promises';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Conflict Resolution Helpers (SMI-1865)
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* SMI-1865: Get base directory for skill backups
|
|
17
|
+
* Uses a function instead of constant to support HOME overrides in tests
|
|
18
|
+
*/
|
|
19
|
+
export function getBackupsDir() {
|
|
20
|
+
return path.join(os.homedir(), '.claude', 'skills', '.backups');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* SMI-1865: Compute SHA-256 hash of content for modification detection
|
|
24
|
+
*/
|
|
25
|
+
export function hashContent(content) {
|
|
26
|
+
return createHash('sha256').update(content).digest('hex');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* SMI-1865: Detect if a skill has been modified since installation
|
|
30
|
+
* @param installPath - Path to the installed skill directory
|
|
31
|
+
* @param originalHash - SHA-256 hash of the original SKILL.md at install time
|
|
32
|
+
* @returns ModificationResult indicating if the skill has been modified
|
|
33
|
+
*/
|
|
34
|
+
export async function detectModifications(installPath, originalHash) {
|
|
35
|
+
const skillMdPath = path.join(installPath, 'SKILL.md');
|
|
36
|
+
try {
|
|
37
|
+
const currentContent = await fs.readFile(skillMdPath, 'utf-8');
|
|
38
|
+
const currentHash = hashContent(currentContent);
|
|
39
|
+
return {
|
|
40
|
+
modified: currentHash !== originalHash,
|
|
41
|
+
currentHash,
|
|
42
|
+
originalHash,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// If file doesn't exist, consider it modified (deleted)
|
|
47
|
+
if (error.code === 'ENOENT') {
|
|
48
|
+
return {
|
|
49
|
+
modified: true,
|
|
50
|
+
currentHash: '',
|
|
51
|
+
originalHash,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SMI-1865: Create a timestamped backup of a skill before update
|
|
59
|
+
* @param skillName - Name of the skill (used for directory naming)
|
|
60
|
+
* @param installPath - Current install path of the skill
|
|
61
|
+
* @param reason - Reason for creating the backup (e.g., 'pre-update', 'conflict')
|
|
62
|
+
* @returns Path to the created backup directory
|
|
63
|
+
*/
|
|
64
|
+
export async function createSkillBackup(skillName, installPath, reason) {
|
|
65
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
66
|
+
const backupDir = path.join(getBackupsDir(), skillName, `${timestamp}_${reason}`);
|
|
67
|
+
// Create backup directory
|
|
68
|
+
await fs.mkdir(backupDir, { recursive: true });
|
|
69
|
+
// Copy all files from install path to backup
|
|
70
|
+
const entries = await fs.readdir(installPath, { withFileTypes: true });
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
const srcPath = path.join(installPath, entry.name);
|
|
73
|
+
const destPath = path.join(backupDir, entry.name);
|
|
74
|
+
if (entry.isFile()) {
|
|
75
|
+
await fs.copyFile(srcPath, destPath);
|
|
76
|
+
}
|
|
77
|
+
else if (entry.isDirectory()) {
|
|
78
|
+
// Recursively copy directories
|
|
79
|
+
await copyDirectory(srcPath, destPath);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return backupDir;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* SMI-1865: Recursively copy a directory
|
|
86
|
+
*/
|
|
87
|
+
async function copyDirectory(src, dest) {
|
|
88
|
+
await fs.mkdir(dest, { recursive: true });
|
|
89
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
90
|
+
for (const entry of entries) {
|
|
91
|
+
const srcPath = path.join(src, entry.name);
|
|
92
|
+
const destPath = path.join(dest, entry.name);
|
|
93
|
+
if (entry.isFile()) {
|
|
94
|
+
await fs.copyFile(srcPath, destPath);
|
|
95
|
+
}
|
|
96
|
+
else if (entry.isDirectory()) {
|
|
97
|
+
await copyDirectory(srcPath, destPath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* SMI-1865: Store the original content of a skill at install time
|
|
103
|
+
* Used for three-way merge during conflict resolution
|
|
104
|
+
* @param skillName - Name of the skill
|
|
105
|
+
* @param content - Original SKILL.md content
|
|
106
|
+
* @param metadata - Additional metadata to store (version, source, etc.)
|
|
107
|
+
*/
|
|
108
|
+
export async function storeOriginal(skillName, content, metadata) {
|
|
109
|
+
const originalDir = path.join(getBackupsDir(), skillName, '.original');
|
|
110
|
+
// Create directory
|
|
111
|
+
await fs.mkdir(originalDir, { recursive: true });
|
|
112
|
+
// Store SKILL.md content
|
|
113
|
+
await fs.writeFile(path.join(originalDir, 'SKILL.md'), content, 'utf-8');
|
|
114
|
+
// Store metadata
|
|
115
|
+
await fs.writeFile(path.join(originalDir, 'metadata.json'), JSON.stringify(metadata, null, 2));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* SMI-1865: Load the original SKILL.md content stored at install time
|
|
119
|
+
* @param skillName - Name of the skill
|
|
120
|
+
* @returns Original content, or null if not found
|
|
121
|
+
*/
|
|
122
|
+
export async function loadOriginal(skillName) {
|
|
123
|
+
const originalPath = path.join(getBackupsDir(), skillName, '.original', 'SKILL.md');
|
|
124
|
+
try {
|
|
125
|
+
return await fs.readFile(originalPath, 'utf-8');
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error.code === 'ENOENT') {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* SMI-1865: Clean up old backups, keeping only the most recent ones
|
|
136
|
+
* Never deletes the .original directory
|
|
137
|
+
* @param skillName - Name of the skill
|
|
138
|
+
* @param keepCount - Number of most recent backups to keep (default: 3)
|
|
139
|
+
*/
|
|
140
|
+
export async function cleanupOldBackups(skillName, keepCount = 3) {
|
|
141
|
+
const skillBackupDir = path.join(getBackupsDir(), skillName);
|
|
142
|
+
try {
|
|
143
|
+
const entries = await fs.readdir(skillBackupDir, { withFileTypes: true });
|
|
144
|
+
// Filter to only timestamped directories (not .original)
|
|
145
|
+
const backupDirs = entries
|
|
146
|
+
.filter((entry) => entry.isDirectory() && entry.name !== '.original')
|
|
147
|
+
.map((entry) => entry.name)
|
|
148
|
+
.sort()
|
|
149
|
+
.reverse(); // Most recent first (ISO timestamps sort correctly)
|
|
150
|
+
// Remove old backups beyond keepCount
|
|
151
|
+
const toDelete = backupDirs.slice(keepCount);
|
|
152
|
+
for (const dirName of toDelete) {
|
|
153
|
+
const dirPath = path.join(skillBackupDir, dirName);
|
|
154
|
+
await fs.rm(dirPath, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// If directory doesn't exist, nothing to clean up
|
|
159
|
+
if (error.code === 'ENOENT') {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=install.conflict-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.conflict-helpers.js","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unit Tests for Install Conflict Helpers
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/install.conflict-helpers.test
|
|
4
|
+
* @see SMI-1868, SMI-1879
|
|
5
|
+
*
|
|
6
|
+
* Tests cover:
|
|
7
|
+
* - hashContent: SHA-256 content hashing
|
|
8
|
+
* - detectModifications: Detect if skill files were modified
|
|
9
|
+
* - createSkillBackup: Create timestamped backups
|
|
10
|
+
* - storeOriginal: Store original content for merge
|
|
11
|
+
* - loadOriginal: Load stored original content
|
|
12
|
+
* - cleanupOldBackups: Manage backup retention
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=install.conflict-helpers.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.conflict-helpers.test.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|