@gulibs/safe-coder 0.0.26 → 0.0.27
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 +678 -994
- package/dist/cache/cache-manager.d.ts +71 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +244 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/executor/cli-executor.d.ts +106 -0
- package/dist/executor/cli-executor.d.ts.map +1 -0
- package/dist/executor/cli-executor.js +133 -0
- package/dist/executor/cli-executor.js.map +1 -0
- package/dist/executor/dependency-checker.d.ts +23 -0
- package/dist/executor/dependency-checker.d.ts.map +1 -0
- package/dist/executor/dependency-checker.js +62 -0
- package/dist/executor/dependency-checker.js.map +1 -0
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/processor/content-processor.d.ts +76 -0
- package/dist/processor/content-processor.d.ts.map +1 -0
- package/dist/processor/content-processor.js +182 -0
- package/dist/processor/content-processor.js.map +1 -0
- package/dist/processor/guide-generator.d.ts +68 -0
- package/dist/processor/guide-generator.d.ts.map +1 -0
- package/dist/processor/guide-generator.js +189 -0
- package/dist/processor/guide-generator.js.map +1 -0
- package/dist/server/safe-coder-mcp.d.ts +18 -0
- package/dist/server/safe-coder-mcp.d.ts.map +1 -0
- package/dist/server/safe-coder-mcp.js +164 -0
- package/dist/server/safe-coder-mcp.js.map +1 -0
- package/dist/tools/cache-tools.d.ts +42 -0
- package/dist/tools/cache-tools.d.ts.map +1 -0
- package/dist/tools/cache-tools.js +70 -0
- package/dist/tools/cache-tools.js.map +1 -0
- package/dist/tools/crawl-documentation.d.ts +57 -0
- package/dist/tools/crawl-documentation.d.ts.map +1 -0
- package/dist/tools/crawl-documentation.js +96 -0
- package/dist/tools/crawl-documentation.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/save-skill.d.ts +49 -0
- package/dist/tools/save-skill.d.ts.map +1 -0
- package/dist/tools/save-skill.js +207 -0
- package/dist/tools/save-skill.js.map +1 -0
- package/package.json +18 -28
- package/dist/documentation/browser-doc-browser.d.ts +0 -41
- package/dist/documentation/browser-doc-browser.d.ts.map +0 -1
- package/dist/documentation/browser-doc-browser.js +0 -357
- package/dist/documentation/browser-doc-browser.js.map +0 -1
- package/dist/documentation/browser-manager.d.ts +0 -51
- package/dist/documentation/browser-manager.d.ts.map +0 -1
- package/dist/documentation/browser-manager.js +0 -260
- package/dist/documentation/browser-manager.js.map +0 -1
- package/dist/documentation/cache.d.ts +0 -13
- package/dist/documentation/cache.d.ts.map +0 -1
- package/dist/documentation/cache.js +0 -48
- package/dist/documentation/cache.js.map +0 -1
- package/dist/documentation/checkpoint-manager.d.ts +0 -38
- package/dist/documentation/checkpoint-manager.d.ts.map +0 -1
- package/dist/documentation/checkpoint-manager.js +0 -101
- package/dist/documentation/checkpoint-manager.js.map +0 -1
- package/dist/documentation/doc-crawler.d.ts +0 -221
- package/dist/documentation/doc-crawler.d.ts.map +0 -1
- package/dist/documentation/doc-crawler.js +0 -1415
- package/dist/documentation/doc-crawler.js.map +0 -1
- package/dist/documentation/github-client.d.ts +0 -13
- package/dist/documentation/github-client.d.ts.map +0 -1
- package/dist/documentation/github-client.js +0 -90
- package/dist/documentation/github-client.js.map +0 -1
- package/dist/documentation/http-fetcher.d.ts +0 -8
- package/dist/documentation/http-fetcher.d.ts.map +0 -1
- package/dist/documentation/http-fetcher.js +0 -31
- package/dist/documentation/http-fetcher.js.map +0 -1
- package/dist/documentation/index.d.ts +0 -16
- package/dist/documentation/index.d.ts.map +0 -1
- package/dist/documentation/index.js +0 -159
- package/dist/documentation/index.js.map +0 -1
- package/dist/documentation/llms-txt/detector.d.ts +0 -31
- package/dist/documentation/llms-txt/detector.d.ts.map +0 -1
- package/dist/documentation/llms-txt/detector.js +0 -77
- package/dist/documentation/llms-txt/detector.js.map +0 -1
- package/dist/documentation/llms-txt/downloader.d.ts +0 -30
- package/dist/documentation/llms-txt/downloader.d.ts.map +0 -1
- package/dist/documentation/llms-txt/downloader.js +0 -84
- package/dist/documentation/llms-txt/downloader.js.map +0 -1
- package/dist/documentation/llms-txt/index.d.ts +0 -4
- package/dist/documentation/llms-txt/index.d.ts.map +0 -1
- package/dist/documentation/llms-txt/index.js +0 -4
- package/dist/documentation/llms-txt/index.js.map +0 -1
- package/dist/documentation/llms-txt/parser.d.ts +0 -43
- package/dist/documentation/llms-txt/parser.d.ts.map +0 -1
- package/dist/documentation/llms-txt/parser.js +0 -177
- package/dist/documentation/llms-txt/parser.js.map +0 -1
- package/dist/documentation/normalizer.d.ts +0 -6
- package/dist/documentation/normalizer.d.ts.map +0 -1
- package/dist/documentation/normalizer.js +0 -38
- package/dist/documentation/normalizer.js.map +0 -1
- package/dist/documentation/npm-client.d.ts +0 -19
- package/dist/documentation/npm-client.d.ts.map +0 -1
- package/dist/documentation/npm-client.js +0 -182
- package/dist/documentation/npm-client.js.map +0 -1
- package/dist/documentation/skill-generator.d.ts +0 -108
- package/dist/documentation/skill-generator.d.ts.map +0 -1
- package/dist/documentation/skill-generator.js +0 -642
- package/dist/documentation/skill-generator.js.map +0 -1
- package/dist/documentation/web-doc-browser.d.ts +0 -67
- package/dist/documentation/web-doc-browser.d.ts.map +0 -1
- package/dist/documentation/web-doc-browser.js +0 -555
- package/dist/documentation/web-doc-browser.js.map +0 -1
- package/dist/errors/api-validator.d.ts +0 -9
- package/dist/errors/api-validator.d.ts.map +0 -1
- package/dist/errors/api-validator.js +0 -57
- package/dist/errors/api-validator.js.map +0 -1
- package/dist/errors/contextual-analysis.d.ts +0 -14
- package/dist/errors/contextual-analysis.d.ts.map +0 -1
- package/dist/errors/contextual-analysis.js +0 -173
- package/dist/errors/contextual-analysis.js.map +0 -1
- package/dist/errors/cross-file-analyzer.d.ts +0 -16
- package/dist/errors/cross-file-analyzer.d.ts.map +0 -1
- package/dist/errors/cross-file-analyzer.js +0 -172
- package/dist/errors/cross-file-analyzer.js.map +0 -1
- package/dist/errors/eslint-integration.d.ts +0 -9
- package/dist/errors/eslint-integration.d.ts.map +0 -1
- package/dist/errors/eslint-integration.js +0 -131
- package/dist/errors/eslint-integration.js.map +0 -1
- package/dist/errors/framework-detector.d.ts +0 -10
- package/dist/errors/framework-detector.d.ts.map +0 -1
- package/dist/errors/framework-detector.js +0 -126
- package/dist/errors/framework-detector.js.map +0 -1
- package/dist/errors/index.d.ts +0 -18
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -134
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/pattern-matcher.d.ts +0 -25
- package/dist/errors/pattern-matcher.d.ts.map +0 -1
- package/dist/errors/pattern-matcher.js +0 -44
- package/dist/errors/pattern-matcher.js.map +0 -1
- package/dist/errors/patterns.d.ts +0 -11
- package/dist/errors/patterns.d.ts.map +0 -1
- package/dist/errors/patterns.js +0 -351
- package/dist/errors/patterns.js.map +0 -1
- package/dist/errors/performance-detector.d.ts +0 -11
- package/dist/errors/performance-detector.d.ts.map +0 -1
- package/dist/errors/performance-detector.js +0 -119
- package/dist/errors/performance-detector.js.map +0 -1
- package/dist/errors/runtime-detector.d.ts +0 -7
- package/dist/errors/runtime-detector.d.ts.map +0 -1
- package/dist/errors/runtime-detector.js +0 -86
- package/dist/errors/runtime-detector.js.map +0 -1
- package/dist/errors/security-detector.d.ts +0 -6
- package/dist/errors/security-detector.d.ts.map +0 -1
- package/dist/errors/security-detector.js +0 -75
- package/dist/errors/security-detector.js.map +0 -1
- package/dist/errors/typescript-integration.d.ts +0 -6
- package/dist/errors/typescript-integration.d.ts.map +0 -1
- package/dist/errors/typescript-integration.js +0 -46
- package/dist/errors/typescript-integration.js.map +0 -1
- package/dist/server/mcp-server.d.ts +0 -14
- package/dist/server/mcp-server.d.ts.map +0 -1
- package/dist/server/mcp-server.js +0 -793
- package/dist/server/mcp-server.js.map +0 -1
- package/dist/types/documentation.d.ts +0 -26
- package/dist/types/documentation.d.ts.map +0 -1
- package/dist/types/documentation.js +0 -2
- package/dist/types/documentation.js.map +0 -1
- package/dist/utils/config.d.ts +0 -21
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -34
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/http-client.d.ts +0 -17
- package/dist/utils/http-client.d.ts.map +0 -1
- package/dist/utils/http-client.js +0 -62
- package/dist/utils/http-client.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -128
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/rate-limiter.d.ts +0 -9
- package/dist/utils/rate-limiter.d.ts.map +0 -1
- package/dist/utils/rate-limiter.js +0 -26
- package/dist/utils/rate-limiter.js.map +0 -1
- package/dist/validation/auto-fix.d.ts +0 -15
- package/dist/validation/auto-fix.d.ts.map +0 -1
- package/dist/validation/auto-fix.js +0 -49
- package/dist/validation/auto-fix.js.map +0 -1
- package/dist/validation/index.d.ts +0 -21
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -45
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/resolution-db.d.ts +0 -15
- package/dist/validation/resolution-db.d.ts.map +0 -1
- package/dist/validation/resolution-db.js +0 -62
- package/dist/validation/resolution-db.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { crawlDocumentation, CrawlDocumentationSchema, listCachedDocumentation, clearCache, ClearCacheSchema, saveSkill, SaveSkillSchema, } from '../tools/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Safe Coder MCP Server
|
|
7
|
+
* Orchestrates safe-coder-cli for documentation crawling and SKILL generation
|
|
8
|
+
*/
|
|
9
|
+
export class SafeCoderMCPServer {
|
|
10
|
+
server;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.server = new McpServer({
|
|
13
|
+
name: 'safe-coder',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
});
|
|
16
|
+
this.setupTools();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Register MCP tools
|
|
20
|
+
*/
|
|
21
|
+
setupTools() {
|
|
22
|
+
// Register crawl_documentation tool
|
|
23
|
+
this.server.registerTool('crawl_documentation', {
|
|
24
|
+
title: 'Crawl Documentation',
|
|
25
|
+
description: 'Crawl documentation website and generate SKILL file guidance. This tool calls safe-coder-cli to perform the actual crawling, then processes the results and provides guidance for SKILL generation. Requires safe-coder-cli to be installed globally. Parameters: url (required), maxPages (optional, default 200), depth (optional, default 3), workers (optional), useBrowser (optional), browser (optional: puppeteer/playwright), spaStrategy (optional: smart/auto/manual), useCache (optional, default true), forceRefresh (optional, default false).',
|
|
26
|
+
inputSchema: CrawlDocumentationSchema,
|
|
27
|
+
}, async (args) => {
|
|
28
|
+
try {
|
|
29
|
+
const result = await crawlDocumentation(args);
|
|
30
|
+
return {
|
|
31
|
+
content: [
|
|
32
|
+
{
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: JSON.stringify(result, null, 2),
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: 'text',
|
|
45
|
+
text: JSON.stringify({
|
|
46
|
+
success: false,
|
|
47
|
+
error: errorMessage,
|
|
48
|
+
}, null, 2),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// Register list_cached_documentation tool
|
|
56
|
+
this.server.registerTool('list_cached_documentation', {
|
|
57
|
+
title: 'List Cached Documentation',
|
|
58
|
+
description: 'List all cached documentation crawl results with metadata. No parameters required.',
|
|
59
|
+
inputSchema: {},
|
|
60
|
+
}, async () => {
|
|
61
|
+
try {
|
|
62
|
+
const result = await listCachedDocumentation();
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: JSON.stringify(result, null, 2),
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: 'text',
|
|
78
|
+
text: JSON.stringify({
|
|
79
|
+
success: false,
|
|
80
|
+
error: errorMessage,
|
|
81
|
+
}, null, 2),
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
isError: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Register clear_cache tool
|
|
89
|
+
this.server.registerTool('clear_cache', {
|
|
90
|
+
title: 'Clear Cache',
|
|
91
|
+
description: 'Clear cached documentation results. Parameters: urlPattern (optional string) - URL pattern to match, clearAll (optional boolean) - clear all entries. If no parameters, clears only expired entries.',
|
|
92
|
+
inputSchema: ClearCacheSchema,
|
|
93
|
+
}, async (args) => {
|
|
94
|
+
try {
|
|
95
|
+
const result = await clearCache(args || {});
|
|
96
|
+
return {
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: 'text',
|
|
100
|
+
text: JSON.stringify(result, null, 2),
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: 'text',
|
|
111
|
+
text: JSON.stringify({
|
|
112
|
+
success: false,
|
|
113
|
+
error: errorMessage,
|
|
114
|
+
}, null, 2),
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
isError: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
// Register save_skill tool
|
|
122
|
+
this.server.registerTool('save_skill', {
|
|
123
|
+
title: 'Save SKILL Files',
|
|
124
|
+
description: 'Save complete SKILL directory structure (SKILL.md + references/) to filesystem. Creates a properly formatted Cursor Agent Skill with all reference documentation organized by category. Parameters: skillName (required string) - name for skill directory, skillContent (required string) - SKILL.md content, referenceFiles (optional object) - map of category -> markdown content, baseDirectory (optional string, default ~/.claude/skills) - base directory for skills, overwrite (optional boolean, default false) - overwrite existing skill.',
|
|
125
|
+
inputSchema: SaveSkillSchema,
|
|
126
|
+
}, async (args) => {
|
|
127
|
+
try {
|
|
128
|
+
const result = await saveSkill(args);
|
|
129
|
+
return {
|
|
130
|
+
content: [
|
|
131
|
+
{
|
|
132
|
+
type: 'text',
|
|
133
|
+
text: JSON.stringify(result, null, 2),
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
140
|
+
return {
|
|
141
|
+
content: [
|
|
142
|
+
{
|
|
143
|
+
type: 'text',
|
|
144
|
+
text: JSON.stringify({
|
|
145
|
+
success: false,
|
|
146
|
+
error: errorMessage,
|
|
147
|
+
}, null, 2),
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
isError: true,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Start the MCP server
|
|
157
|
+
*/
|
|
158
|
+
async run() {
|
|
159
|
+
const transport = new StdioServerTransport();
|
|
160
|
+
await this.server.connect(transport);
|
|
161
|
+
console.error('Safe Coder MCP Server running on stdio');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=safe-coder-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-coder-mcp.js","sourceRoot":"","sources":["../../src/server/safe-coder-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* List cached documentation schema
|
|
4
|
+
*/
|
|
5
|
+
export declare const ListCachedDocumentationSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
6
|
+
/**
|
|
7
|
+
* Clear cache schema
|
|
8
|
+
*/
|
|
9
|
+
export declare const ClearCacheSchema: z.ZodObject<{
|
|
10
|
+
urlPattern: z.ZodOptional<z.ZodString>;
|
|
11
|
+
clearAll: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
clearAll: boolean;
|
|
14
|
+
urlPattern?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
urlPattern?: string | undefined;
|
|
17
|
+
clearAll?: boolean | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export type ClearCacheInput = z.infer<typeof ClearCacheSchema>;
|
|
20
|
+
/**
|
|
21
|
+
* List cached documentation
|
|
22
|
+
*/
|
|
23
|
+
export declare function listCachedDocumentation(): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
entries: import("../cache/cache-manager.js").CacheEntry[];
|
|
26
|
+
statistics: {
|
|
27
|
+
totalEntries: number;
|
|
28
|
+
totalSize: string;
|
|
29
|
+
oldestEntry: string | undefined;
|
|
30
|
+
newestEntry: string | undefined;
|
|
31
|
+
};
|
|
32
|
+
message: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Clear cache
|
|
36
|
+
*/
|
|
37
|
+
export declare function clearCache(input: ClearCacheInput): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
deletedCount: number;
|
|
40
|
+
message: string;
|
|
41
|
+
}>;
|
|
42
|
+
//# sourceMappingURL=cache-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-tools.d.ts","sourceRoot":"","sources":["../../src/tools/cache-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,6BAA6B,gDAAe,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D;;GAEG;AACH,wBAAsB,uBAAuB;;;;;;;;;;GAiB5C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe;;;;GAuBtD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CacheManager } from '../cache/cache-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* List cached documentation schema
|
|
5
|
+
*/
|
|
6
|
+
export const ListCachedDocumentationSchema = z.object({});
|
|
7
|
+
/**
|
|
8
|
+
* Clear cache schema
|
|
9
|
+
*/
|
|
10
|
+
export const ClearCacheSchema = z.object({
|
|
11
|
+
urlPattern: z.string().optional().describe('URL pattern to match for deletion (optional)'),
|
|
12
|
+
clearAll: z.boolean().optional().default(false).describe('Clear all cached entries'),
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* List cached documentation
|
|
16
|
+
*/
|
|
17
|
+
export async function listCachedDocumentation() {
|
|
18
|
+
const cache = new CacheManager();
|
|
19
|
+
const entries = await cache.list();
|
|
20
|
+
const stats = await cache.getStats();
|
|
21
|
+
return {
|
|
22
|
+
success: true,
|
|
23
|
+
entries,
|
|
24
|
+
statistics: {
|
|
25
|
+
totalEntries: stats.totalEntries,
|
|
26
|
+
totalSize: formatBytes(stats.totalSize),
|
|
27
|
+
oldestEntry: stats.oldestEntry?.toISOString(),
|
|
28
|
+
newestEntry: stats.newestEntry?.toISOString(),
|
|
29
|
+
},
|
|
30
|
+
message: `Found ${entries.length} cached documentation${entries.length !== 1 ? 's' : ''}`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Clear cache
|
|
35
|
+
*/
|
|
36
|
+
export async function clearCache(input) {
|
|
37
|
+
const cache = new CacheManager();
|
|
38
|
+
let deletedCount;
|
|
39
|
+
let message;
|
|
40
|
+
if (input.clearAll) {
|
|
41
|
+
deletedCount = await cache.clear();
|
|
42
|
+
message = `Cleared all cache: deleted ${deletedCount} entry${deletedCount !== 1 ? 'ies' : 'y'}`;
|
|
43
|
+
}
|
|
44
|
+
else if (input.urlPattern) {
|
|
45
|
+
deletedCount = await cache.clear(input.urlPattern);
|
|
46
|
+
message = `Cleared cache matching "${input.urlPattern}": deleted ${deletedCount} entry${deletedCount !== 1 ? 'ies' : 'y'}`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Clear expired only
|
|
50
|
+
deletedCount = await cache.clearExpired();
|
|
51
|
+
message = `Cleared expired cache: deleted ${deletedCount} entry${deletedCount !== 1 ? 'ies' : 'y'}`;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
success: true,
|
|
55
|
+
deletedCount,
|
|
56
|
+
message,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Format bytes to human-readable format
|
|
61
|
+
*/
|
|
62
|
+
function formatBytes(bytes) {
|
|
63
|
+
if (bytes === 0)
|
|
64
|
+
return '0 Bytes';
|
|
65
|
+
const k = 1024;
|
|
66
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
67
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
68
|
+
return `${Math.round(bytes / Math.pow(k, i) * 100) / 100} ${sizes[i]}`;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cache-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-tools.js","sourceRoot":"","sources":["../../src/tools/cache-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for crawl_documentation tool
|
|
4
|
+
*/
|
|
5
|
+
export declare const CrawlDocumentationSchema: z.ZodObject<{
|
|
6
|
+
url: z.ZodString;
|
|
7
|
+
maxPages: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
depth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
workers: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
useBrowser: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
browser: z.ZodOptional<z.ZodEnum<["puppeteer", "playwright"]>>;
|
|
12
|
+
spaStrategy: z.ZodOptional<z.ZodEnum<["smart", "auto", "manual"]>>;
|
|
13
|
+
useCache: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
14
|
+
forceRefresh: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
url: string;
|
|
17
|
+
maxPages: number;
|
|
18
|
+
depth: number;
|
|
19
|
+
useCache: boolean;
|
|
20
|
+
forceRefresh: boolean;
|
|
21
|
+
workers?: number | undefined;
|
|
22
|
+
useBrowser?: boolean | undefined;
|
|
23
|
+
browser?: "puppeteer" | "playwright" | undefined;
|
|
24
|
+
spaStrategy?: "smart" | "auto" | "manual" | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
url: string;
|
|
27
|
+
maxPages?: number | undefined;
|
|
28
|
+
depth?: number | undefined;
|
|
29
|
+
workers?: number | undefined;
|
|
30
|
+
useBrowser?: boolean | undefined;
|
|
31
|
+
browser?: "puppeteer" | "playwright" | undefined;
|
|
32
|
+
spaStrategy?: "smart" | "auto" | "manual" | undefined;
|
|
33
|
+
useCache?: boolean | undefined;
|
|
34
|
+
forceRefresh?: boolean | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
export type CrawlDocumentationInput = z.infer<typeof CrawlDocumentationSchema>;
|
|
37
|
+
/**
|
|
38
|
+
* Crawl documentation tool handler
|
|
39
|
+
*/
|
|
40
|
+
export declare function crawlDocumentation(input: CrawlDocumentationInput): Promise<{
|
|
41
|
+
success: boolean;
|
|
42
|
+
data: import("../processor/content-processor.js").ProcessedContent;
|
|
43
|
+
skillGenerationGuide: import("../processor/guide-generator.js").SkillGenerationGuide;
|
|
44
|
+
fromCache: boolean;
|
|
45
|
+
cacheAge: string;
|
|
46
|
+
message: string;
|
|
47
|
+
rawCrawlResult?: undefined;
|
|
48
|
+
} | {
|
|
49
|
+
success: boolean;
|
|
50
|
+
data: import("../processor/content-processor.js").ProcessedContent;
|
|
51
|
+
rawCrawlResult: import("../executor/cli-executor.js").CrawlResult;
|
|
52
|
+
skillGenerationGuide: import("../processor/guide-generator.js").SkillGenerationGuide;
|
|
53
|
+
fromCache: boolean;
|
|
54
|
+
message: string;
|
|
55
|
+
cacheAge?: undefined;
|
|
56
|
+
}>;
|
|
57
|
+
//# sourceMappingURL=crawl-documentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crawl-documentation.d.ts","sourceRoot":"","sources":["../../src/tools/crawl-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;;;;;;;;;;GA+EtE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { DependencyChecker } from '../executor/dependency-checker.js';
|
|
3
|
+
import { CLIExecutor } from '../executor/cli-executor.js';
|
|
4
|
+
import { ContentProcessor } from '../processor/content-processor.js';
|
|
5
|
+
import { GuideGenerator } from '../processor/guide-generator.js';
|
|
6
|
+
import { CacheManager } from '../cache/cache-manager.js';
|
|
7
|
+
/**
|
|
8
|
+
* Input schema for crawl_documentation tool
|
|
9
|
+
*/
|
|
10
|
+
export const CrawlDocumentationSchema = z.object({
|
|
11
|
+
url: z.string().url().describe('Documentation URL to crawl'),
|
|
12
|
+
maxPages: z.number().optional().default(200).describe('Maximum number of pages to crawl'),
|
|
13
|
+
depth: z.number().optional().default(3).describe('Maximum crawl depth'),
|
|
14
|
+
workers: z.number().optional().describe('Number of parallel workers'),
|
|
15
|
+
useBrowser: z.boolean().optional().describe('Force browser automation'),
|
|
16
|
+
browser: z.enum(['puppeteer', 'playwright']).optional().describe('Browser type to use'),
|
|
17
|
+
spaStrategy: z.enum(['smart', 'auto', 'manual']).optional().describe('SPA crawling strategy'),
|
|
18
|
+
useCache: z.boolean().optional().default(true).describe('Use cached results if available'),
|
|
19
|
+
forceRefresh: z.boolean().optional().default(false).describe('Force refresh even if cached'),
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Crawl documentation tool handler
|
|
23
|
+
*/
|
|
24
|
+
export async function crawlDocumentation(input) {
|
|
25
|
+
const checker = new DependencyChecker();
|
|
26
|
+
const executor = new CLIExecutor(checker);
|
|
27
|
+
const processor = new ContentProcessor();
|
|
28
|
+
const guideGenerator = new GuideGenerator();
|
|
29
|
+
const cache = new CacheManager();
|
|
30
|
+
// 1. Check if CLI is installed
|
|
31
|
+
const cliCheck = await checker.checkCLIInstalled();
|
|
32
|
+
if (!cliCheck.installed) {
|
|
33
|
+
throw new Error(cliCheck.message);
|
|
34
|
+
}
|
|
35
|
+
// 2. Check cache (if enabled and not forcing refresh)
|
|
36
|
+
if (input.useCache && !input.forceRefresh) {
|
|
37
|
+
const cached = await cache.get(input.url);
|
|
38
|
+
if (cached) {
|
|
39
|
+
const ageMinutes = Math.floor((Date.now() - cached.timestamp) / 1000 / 60);
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
data: cached.data,
|
|
43
|
+
skillGenerationGuide: cached.guide,
|
|
44
|
+
fromCache: true,
|
|
45
|
+
cacheAge: `${ageMinutes} minutes`,
|
|
46
|
+
message: `Using cached data from ${ageMinutes} minutes ago. Use forceRefresh: true to re-crawl.`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 3. Prepare crawl parameters
|
|
51
|
+
const crawlParams = {
|
|
52
|
+
url: input.url,
|
|
53
|
+
maxPages: input.maxPages,
|
|
54
|
+
maxDepth: input.depth,
|
|
55
|
+
workers: input.workers,
|
|
56
|
+
useBrowser: input.useBrowser,
|
|
57
|
+
browser: input.browser,
|
|
58
|
+
spaStrategy: input.spaStrategy,
|
|
59
|
+
};
|
|
60
|
+
// 4. Execute crawl with progress reporting
|
|
61
|
+
let lastProgress = '';
|
|
62
|
+
const rawResult = await executor.executeCrawl(crawlParams, (progress) => {
|
|
63
|
+
// Log progress to stderr (visible in MCP client logs)
|
|
64
|
+
if (progress.message !== lastProgress) {
|
|
65
|
+
console.error(`[Progress] ${progress.message}`);
|
|
66
|
+
lastProgress = progress.message;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// 5. Process content
|
|
70
|
+
console.error('[Processing] Analyzing crawled content...');
|
|
71
|
+
const processed = await processor.process(rawResult);
|
|
72
|
+
// 6. Generate SKILL guidance
|
|
73
|
+
console.error('[Processing] Generating SKILL generation guide...');
|
|
74
|
+
const guide = guideGenerator.generate(processed);
|
|
75
|
+
// 7. Cache results
|
|
76
|
+
if (input.useCache) {
|
|
77
|
+
try {
|
|
78
|
+
await cache.set(input.url, processed, guide);
|
|
79
|
+
console.error('[Cache] Results cached successfully');
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error('[Cache] Warning: Failed to cache results:', error);
|
|
83
|
+
// Don't fail the entire operation if caching fails
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 8. Return results with raw crawl data for file saving
|
|
87
|
+
return {
|
|
88
|
+
success: true,
|
|
89
|
+
data: processed,
|
|
90
|
+
rawCrawlResult: rawResult, // Include raw result for skill file generation
|
|
91
|
+
skillGenerationGuide: guide,
|
|
92
|
+
fromCache: false,
|
|
93
|
+
message: `Successfully crawled ${processed.statistics.totalPages} pages. Quality score: ${guide.quality.overall}/100`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=crawl-documentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crawl-documentation.js","sourceRoot":"","sources":["../../src/tools/crawl-documentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { crawlDocumentation, CrawlDocumentationSchema, type CrawlDocumentationInput, } from './crawl-documentation.js';
|
|
2
|
+
export { listCachedDocumentation, clearCache, ListCachedDocumentationSchema, ClearCacheSchema, type ClearCacheInput, } from './cache-tools.js';
|
|
3
|
+
export { saveSkill, SaveSkillSchema, type SaveSkillInput, type SaveSkillResult, extractSkillDataFromCrawlResult, } from './save-skill.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,+BAA+B,GAChC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { crawlDocumentation, CrawlDocumentationSchema, } from './crawl-documentation.js';
|
|
2
|
+
export { listCachedDocumentation, clearCache, ListCachedDocumentationSchema, ClearCacheSchema, } from './cache-tools.js';
|
|
3
|
+
export { saveSkill, SaveSkillSchema, extractSkillDataFromCrawlResult, } from './save-skill.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,6BAA6B,EAC7B,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,eAAe,EAGf,+BAA+B,GAChC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { CrawlResult } from '../executor/cli-executor.js';
|
|
3
|
+
/**
|
|
4
|
+
* Input schema for save_skill tool
|
|
5
|
+
*/
|
|
6
|
+
export declare const SaveSkillSchema: z.ZodObject<{
|
|
7
|
+
skillName: z.ZodString;
|
|
8
|
+
skillContent: z.ZodString;
|
|
9
|
+
referenceFiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
10
|
+
baseDirectory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
11
|
+
overwrite: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
skillName: string;
|
|
14
|
+
skillContent: string;
|
|
15
|
+
baseDirectory: string;
|
|
16
|
+
overwrite: boolean;
|
|
17
|
+
referenceFiles?: Record<string, string> | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
skillName: string;
|
|
20
|
+
skillContent: string;
|
|
21
|
+
referenceFiles?: Record<string, string> | undefined;
|
|
22
|
+
baseDirectory?: string | undefined;
|
|
23
|
+
overwrite?: boolean | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
export type SaveSkillInput = z.infer<typeof SaveSkillSchema>;
|
|
26
|
+
/**
|
|
27
|
+
* Save skill result
|
|
28
|
+
*/
|
|
29
|
+
export interface SaveSkillResult {
|
|
30
|
+
success: boolean;
|
|
31
|
+
skillDirectory: string;
|
|
32
|
+
filesCreated: {
|
|
33
|
+
skillMd: string;
|
|
34
|
+
references: string[];
|
|
35
|
+
};
|
|
36
|
+
message: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Helper to extract skill data from crawl result
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractSkillDataFromCrawlResult(crawlResult: CrawlResult, skillName: string): {
|
|
42
|
+
skillContent: string;
|
|
43
|
+
referenceFiles: Record<string, string>;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Save skill tool handler
|
|
47
|
+
*/
|
|
48
|
+
export declare function saveSkill(input: SaveSkillInput): Promise<SaveSkillResult>;
|
|
49
|
+
//# sourceMappingURL=save-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-skill.d.ts","sourceRoot":"","sources":["../../src/tools/save-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAChB;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC,CAmBA;AAyJD;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAqD/E"}
|