@gulibs/safe-coder 0.0.26 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +678 -994
  2. package/dist/cache/cache-manager.d.ts +71 -0
  3. package/dist/cache/cache-manager.d.ts.map +1 -0
  4. package/dist/cache/cache-manager.js +244 -0
  5. package/dist/cache/cache-manager.js.map +1 -0
  6. package/dist/executor/cli-executor.d.ts +116 -0
  7. package/dist/executor/cli-executor.d.ts.map +1 -0
  8. package/dist/executor/cli-executor.js +140 -0
  9. package/dist/executor/cli-executor.js.map +1 -0
  10. package/dist/executor/dependency-checker.d.ts +23 -0
  11. package/dist/executor/dependency-checker.d.ts.map +1 -0
  12. package/dist/executor/dependency-checker.js +62 -0
  13. package/dist/executor/dependency-checker.js.map +1 -0
  14. package/dist/index.js +3 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/processor/content-processor.d.ts +76 -0
  17. package/dist/processor/content-processor.d.ts.map +1 -0
  18. package/dist/processor/content-processor.js +182 -0
  19. package/dist/processor/content-processor.js.map +1 -0
  20. package/dist/processor/guide-generator.d.ts +68 -0
  21. package/dist/processor/guide-generator.d.ts.map +1 -0
  22. package/dist/processor/guide-generator.js +189 -0
  23. package/dist/processor/guide-generator.js.map +1 -0
  24. package/dist/server/safe-coder-mcp.d.ts +18 -0
  25. package/dist/server/safe-coder-mcp.d.ts.map +1 -0
  26. package/dist/server/safe-coder-mcp.js +171 -0
  27. package/dist/server/safe-coder-mcp.js.map +1 -0
  28. package/dist/tools/cache-tools.d.ts +42 -0
  29. package/dist/tools/cache-tools.d.ts.map +1 -0
  30. package/dist/tools/cache-tools.js +70 -0
  31. package/dist/tools/cache-tools.js.map +1 -0
  32. package/dist/tools/crawl-documentation.d.ts +78 -0
  33. package/dist/tools/crawl-documentation.d.ts.map +1 -0
  34. package/dist/tools/crawl-documentation.js +103 -0
  35. package/dist/tools/crawl-documentation.js.map +1 -0
  36. package/dist/tools/index.d.ts +4 -0
  37. package/dist/tools/index.d.ts.map +1 -0
  38. package/dist/tools/index.js +4 -0
  39. package/dist/tools/index.js.map +1 -0
  40. package/dist/tools/save-skill.d.ts +49 -0
  41. package/dist/tools/save-skill.d.ts.map +1 -0
  42. package/dist/tools/save-skill.js +207 -0
  43. package/dist/tools/save-skill.js.map +1 -0
  44. package/package.json +18 -28
  45. package/dist/documentation/browser-doc-browser.d.ts +0 -41
  46. package/dist/documentation/browser-doc-browser.d.ts.map +0 -1
  47. package/dist/documentation/browser-doc-browser.js +0 -357
  48. package/dist/documentation/browser-doc-browser.js.map +0 -1
  49. package/dist/documentation/browser-manager.d.ts +0 -51
  50. package/dist/documentation/browser-manager.d.ts.map +0 -1
  51. package/dist/documentation/browser-manager.js +0 -260
  52. package/dist/documentation/browser-manager.js.map +0 -1
  53. package/dist/documentation/cache.d.ts +0 -13
  54. package/dist/documentation/cache.d.ts.map +0 -1
  55. package/dist/documentation/cache.js +0 -48
  56. package/dist/documentation/cache.js.map +0 -1
  57. package/dist/documentation/checkpoint-manager.d.ts +0 -38
  58. package/dist/documentation/checkpoint-manager.d.ts.map +0 -1
  59. package/dist/documentation/checkpoint-manager.js +0 -101
  60. package/dist/documentation/checkpoint-manager.js.map +0 -1
  61. package/dist/documentation/doc-crawler.d.ts +0 -221
  62. package/dist/documentation/doc-crawler.d.ts.map +0 -1
  63. package/dist/documentation/doc-crawler.js +0 -1415
  64. package/dist/documentation/doc-crawler.js.map +0 -1
  65. package/dist/documentation/github-client.d.ts +0 -13
  66. package/dist/documentation/github-client.d.ts.map +0 -1
  67. package/dist/documentation/github-client.js +0 -90
  68. package/dist/documentation/github-client.js.map +0 -1
  69. package/dist/documentation/http-fetcher.d.ts +0 -8
  70. package/dist/documentation/http-fetcher.d.ts.map +0 -1
  71. package/dist/documentation/http-fetcher.js +0 -31
  72. package/dist/documentation/http-fetcher.js.map +0 -1
  73. package/dist/documentation/index.d.ts +0 -16
  74. package/dist/documentation/index.d.ts.map +0 -1
  75. package/dist/documentation/index.js +0 -159
  76. package/dist/documentation/index.js.map +0 -1
  77. package/dist/documentation/llms-txt/detector.d.ts +0 -31
  78. package/dist/documentation/llms-txt/detector.d.ts.map +0 -1
  79. package/dist/documentation/llms-txt/detector.js +0 -77
  80. package/dist/documentation/llms-txt/detector.js.map +0 -1
  81. package/dist/documentation/llms-txt/downloader.d.ts +0 -30
  82. package/dist/documentation/llms-txt/downloader.d.ts.map +0 -1
  83. package/dist/documentation/llms-txt/downloader.js +0 -84
  84. package/dist/documentation/llms-txt/downloader.js.map +0 -1
  85. package/dist/documentation/llms-txt/index.d.ts +0 -4
  86. package/dist/documentation/llms-txt/index.d.ts.map +0 -1
  87. package/dist/documentation/llms-txt/index.js +0 -4
  88. package/dist/documentation/llms-txt/index.js.map +0 -1
  89. package/dist/documentation/llms-txt/parser.d.ts +0 -43
  90. package/dist/documentation/llms-txt/parser.d.ts.map +0 -1
  91. package/dist/documentation/llms-txt/parser.js +0 -177
  92. package/dist/documentation/llms-txt/parser.js.map +0 -1
  93. package/dist/documentation/normalizer.d.ts +0 -6
  94. package/dist/documentation/normalizer.d.ts.map +0 -1
  95. package/dist/documentation/normalizer.js +0 -38
  96. package/dist/documentation/normalizer.js.map +0 -1
  97. package/dist/documentation/npm-client.d.ts +0 -19
  98. package/dist/documentation/npm-client.d.ts.map +0 -1
  99. package/dist/documentation/npm-client.js +0 -182
  100. package/dist/documentation/npm-client.js.map +0 -1
  101. package/dist/documentation/skill-generator.d.ts +0 -108
  102. package/dist/documentation/skill-generator.d.ts.map +0 -1
  103. package/dist/documentation/skill-generator.js +0 -642
  104. package/dist/documentation/skill-generator.js.map +0 -1
  105. package/dist/documentation/web-doc-browser.d.ts +0 -67
  106. package/dist/documentation/web-doc-browser.d.ts.map +0 -1
  107. package/dist/documentation/web-doc-browser.js +0 -555
  108. package/dist/documentation/web-doc-browser.js.map +0 -1
  109. package/dist/errors/api-validator.d.ts +0 -9
  110. package/dist/errors/api-validator.d.ts.map +0 -1
  111. package/dist/errors/api-validator.js +0 -57
  112. package/dist/errors/api-validator.js.map +0 -1
  113. package/dist/errors/contextual-analysis.d.ts +0 -14
  114. package/dist/errors/contextual-analysis.d.ts.map +0 -1
  115. package/dist/errors/contextual-analysis.js +0 -173
  116. package/dist/errors/contextual-analysis.js.map +0 -1
  117. package/dist/errors/cross-file-analyzer.d.ts +0 -16
  118. package/dist/errors/cross-file-analyzer.d.ts.map +0 -1
  119. package/dist/errors/cross-file-analyzer.js +0 -172
  120. package/dist/errors/cross-file-analyzer.js.map +0 -1
  121. package/dist/errors/eslint-integration.d.ts +0 -9
  122. package/dist/errors/eslint-integration.d.ts.map +0 -1
  123. package/dist/errors/eslint-integration.js +0 -131
  124. package/dist/errors/eslint-integration.js.map +0 -1
  125. package/dist/errors/framework-detector.d.ts +0 -10
  126. package/dist/errors/framework-detector.d.ts.map +0 -1
  127. package/dist/errors/framework-detector.js +0 -126
  128. package/dist/errors/framework-detector.js.map +0 -1
  129. package/dist/errors/index.d.ts +0 -18
  130. package/dist/errors/index.d.ts.map +0 -1
  131. package/dist/errors/index.js +0 -134
  132. package/dist/errors/index.js.map +0 -1
  133. package/dist/errors/pattern-matcher.d.ts +0 -25
  134. package/dist/errors/pattern-matcher.d.ts.map +0 -1
  135. package/dist/errors/pattern-matcher.js +0 -44
  136. package/dist/errors/pattern-matcher.js.map +0 -1
  137. package/dist/errors/patterns.d.ts +0 -11
  138. package/dist/errors/patterns.d.ts.map +0 -1
  139. package/dist/errors/patterns.js +0 -351
  140. package/dist/errors/patterns.js.map +0 -1
  141. package/dist/errors/performance-detector.d.ts +0 -11
  142. package/dist/errors/performance-detector.d.ts.map +0 -1
  143. package/dist/errors/performance-detector.js +0 -119
  144. package/dist/errors/performance-detector.js.map +0 -1
  145. package/dist/errors/runtime-detector.d.ts +0 -7
  146. package/dist/errors/runtime-detector.d.ts.map +0 -1
  147. package/dist/errors/runtime-detector.js +0 -86
  148. package/dist/errors/runtime-detector.js.map +0 -1
  149. package/dist/errors/security-detector.d.ts +0 -6
  150. package/dist/errors/security-detector.d.ts.map +0 -1
  151. package/dist/errors/security-detector.js +0 -75
  152. package/dist/errors/security-detector.js.map +0 -1
  153. package/dist/errors/typescript-integration.d.ts +0 -6
  154. package/dist/errors/typescript-integration.d.ts.map +0 -1
  155. package/dist/errors/typescript-integration.js +0 -46
  156. package/dist/errors/typescript-integration.js.map +0 -1
  157. package/dist/server/mcp-server.d.ts +0 -14
  158. package/dist/server/mcp-server.d.ts.map +0 -1
  159. package/dist/server/mcp-server.js +0 -793
  160. package/dist/server/mcp-server.js.map +0 -1
  161. package/dist/types/documentation.d.ts +0 -26
  162. package/dist/types/documentation.d.ts.map +0 -1
  163. package/dist/types/documentation.js +0 -2
  164. package/dist/types/documentation.js.map +0 -1
  165. package/dist/utils/config.d.ts +0 -21
  166. package/dist/utils/config.d.ts.map +0 -1
  167. package/dist/utils/config.js +0 -34
  168. package/dist/utils/config.js.map +0 -1
  169. package/dist/utils/http-client.d.ts +0 -17
  170. package/dist/utils/http-client.d.ts.map +0 -1
  171. package/dist/utils/http-client.js +0 -62
  172. package/dist/utils/http-client.js.map +0 -1
  173. package/dist/utils/logger.d.ts +0 -36
  174. package/dist/utils/logger.d.ts.map +0 -1
  175. package/dist/utils/logger.js +0 -128
  176. package/dist/utils/logger.js.map +0 -1
  177. package/dist/utils/rate-limiter.d.ts +0 -9
  178. package/dist/utils/rate-limiter.d.ts.map +0 -1
  179. package/dist/utils/rate-limiter.js +0 -26
  180. package/dist/utils/rate-limiter.js.map +0 -1
  181. package/dist/validation/auto-fix.d.ts +0 -15
  182. package/dist/validation/auto-fix.d.ts.map +0 -1
  183. package/dist/validation/auto-fix.js +0 -49
  184. package/dist/validation/auto-fix.js.map +0 -1
  185. package/dist/validation/index.d.ts +0 -21
  186. package/dist/validation/index.d.ts.map +0 -1
  187. package/dist/validation/index.js +0 -45
  188. package/dist/validation/index.js.map +0 -1
  189. package/dist/validation/resolution-db.d.ts +0 -15
  190. package/dist/validation/resolution-db.d.ts.map +0 -1
  191. package/dist/validation/resolution-db.js +0 -62
  192. package/dist/validation/resolution-db.js.map +0 -1
@@ -0,0 +1,171 @@
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 and Generate SKILL',
25
+ description: 'Crawl documentation website and automatically generate a complete Agent SKILL. ' +
26
+ 'This tool saves files directly to disk and returns only a lightweight summary. ' +
27
+ 'The CLI generates a high-quality SKILL.md (< 500 lines) based on complete content analysis, ' +
28
+ 'along with organized reference files. Agent receives only the summary to minimize token cost. ' +
29
+ '\n\nRequired: url, skillName. ' +
30
+ 'Optional: maxPages (default 50), depth (default 3), outputDir (default ~/.claude/skills), ' +
31
+ 'workers, browser, spaStrategy, useCache, forceRefresh. ' +
32
+ '\n\nExample: crawl_documentation({ url: "https://react.dev", skillName: "react-docs", maxPages: 50 })',
33
+ inputSchema: CrawlDocumentationSchema,
34
+ }, async (args) => {
35
+ try {
36
+ const result = await crawlDocumentation(args);
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: JSON.stringify(result, null, 2),
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ catch (error) {
47
+ const errorMessage = error instanceof Error ? error.message : String(error);
48
+ return {
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: JSON.stringify({
53
+ success: false,
54
+ error: errorMessage,
55
+ }, null, 2),
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ });
62
+ // Register list_cached_documentation tool
63
+ this.server.registerTool('list_cached_documentation', {
64
+ title: 'List Cached Documentation',
65
+ description: 'List all cached documentation crawl results with metadata. No parameters required.',
66
+ inputSchema: {},
67
+ }, async () => {
68
+ try {
69
+ const result = await listCachedDocumentation();
70
+ return {
71
+ content: [
72
+ {
73
+ type: 'text',
74
+ text: JSON.stringify(result, null, 2),
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ catch (error) {
80
+ const errorMessage = error instanceof Error ? error.message : String(error);
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: JSON.stringify({
86
+ success: false,
87
+ error: errorMessage,
88
+ }, null, 2),
89
+ },
90
+ ],
91
+ isError: true,
92
+ };
93
+ }
94
+ });
95
+ // Register clear_cache tool
96
+ this.server.registerTool('clear_cache', {
97
+ title: 'Clear Cache',
98
+ 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.',
99
+ inputSchema: ClearCacheSchema,
100
+ }, async (args) => {
101
+ try {
102
+ const result = await clearCache(args || {});
103
+ return {
104
+ content: [
105
+ {
106
+ type: 'text',
107
+ text: JSON.stringify(result, null, 2),
108
+ },
109
+ ],
110
+ };
111
+ }
112
+ catch (error) {
113
+ const errorMessage = error instanceof Error ? error.message : String(error);
114
+ return {
115
+ content: [
116
+ {
117
+ type: 'text',
118
+ text: JSON.stringify({
119
+ success: false,
120
+ error: errorMessage,
121
+ }, null, 2),
122
+ },
123
+ ],
124
+ isError: true,
125
+ };
126
+ }
127
+ });
128
+ // Register save_skill tool
129
+ this.server.registerTool('save_skill', {
130
+ title: 'Save SKILL Files',
131
+ 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.',
132
+ inputSchema: SaveSkillSchema,
133
+ }, async (args) => {
134
+ try {
135
+ const result = await saveSkill(args);
136
+ return {
137
+ content: [
138
+ {
139
+ type: 'text',
140
+ text: JSON.stringify(result, null, 2),
141
+ },
142
+ ],
143
+ };
144
+ }
145
+ catch (error) {
146
+ const errorMessage = error instanceof Error ? error.message : String(error);
147
+ return {
148
+ content: [
149
+ {
150
+ type: 'text',
151
+ text: JSON.stringify({
152
+ success: false,
153
+ error: errorMessage,
154
+ }, null, 2),
155
+ },
156
+ ],
157
+ isError: true,
158
+ };
159
+ }
160
+ });
161
+ }
162
+ /**
163
+ * Start the MCP server
164
+ */
165
+ async run() {
166
+ const transport = new StdioServerTransport();
167
+ await this.server.connect(transport);
168
+ console.error('Safe Coder MCP Server running on stdio');
169
+ }
170
+ }
171
+ //# 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,78 @@
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
+ skillName: z.ZodString;
8
+ maxPages: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ depth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ workers: z.ZodOptional<z.ZodNumber>;
11
+ outputDir: z.ZodOptional<z.ZodString>;
12
+ useBrowser: z.ZodOptional<z.ZodBoolean>;
13
+ browser: z.ZodOptional<z.ZodEnum<["puppeteer", "playwright"]>>;
14
+ spaStrategy: z.ZodOptional<z.ZodEnum<["smart", "auto", "manual"]>>;
15
+ useCache: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
+ forceRefresh: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ url: string;
19
+ skillName: string;
20
+ maxPages: number;
21
+ depth: number;
22
+ useCache: boolean;
23
+ forceRefresh: boolean;
24
+ workers?: number | undefined;
25
+ outputDir?: string | undefined;
26
+ useBrowser?: boolean | undefined;
27
+ browser?: "puppeteer" | "playwright" | undefined;
28
+ spaStrategy?: "smart" | "auto" | "manual" | undefined;
29
+ }, {
30
+ url: string;
31
+ skillName: string;
32
+ maxPages?: number | undefined;
33
+ depth?: number | undefined;
34
+ workers?: number | undefined;
35
+ outputDir?: string | undefined;
36
+ useBrowser?: boolean | undefined;
37
+ browser?: "puppeteer" | "playwright" | undefined;
38
+ spaStrategy?: "smart" | "auto" | "manual" | undefined;
39
+ useCache?: boolean | undefined;
40
+ forceRefresh?: boolean | undefined;
41
+ }>;
42
+ export type CrawlDocumentationInput = z.infer<typeof CrawlDocumentationSchema>;
43
+ /**
44
+ * Crawl documentation tool handler
45
+ */
46
+ export declare function crawlDocumentation(input: CrawlDocumentationInput): Promise<{
47
+ success: boolean;
48
+ data: import("../processor/content-processor.js").ProcessedContent;
49
+ skillGenerationGuide: import("../processor/guide-generator.js").SkillGenerationGuide;
50
+ fromCache: boolean;
51
+ cacheAge: string;
52
+ message: string;
53
+ summary?: undefined;
54
+ } | {
55
+ success: boolean;
56
+ fromCache: boolean;
57
+ summary: {
58
+ url: string;
59
+ skillName: string;
60
+ totalPages: number;
61
+ maxDepth: number;
62
+ errors: number;
63
+ quality: number;
64
+ savedFiles: {
65
+ skillDir: string;
66
+ skillMdPath: string;
67
+ referenceFiles: Array<{
68
+ name: string;
69
+ path: string;
70
+ }>;
71
+ };
72
+ };
73
+ message: string;
74
+ data?: undefined;
75
+ skillGenerationGuide?: undefined;
76
+ cacheAge?: undefined;
77
+ }>;
78
+ //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFtE"}
@@ -0,0 +1,103 @@
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
+ skillName: z.string().describe('Skill name (e.g., "react-docs")'), // ✅ 必需
13
+ maxPages: z.number().optional().default(50).describe('Maximum number of pages to crawl'), // ✅ 降低默认值
14
+ depth: z.number().optional().default(3).describe('Maximum crawl depth'),
15
+ workers: z.number().optional().describe('Number of parallel workers'),
16
+ outputDir: z.string().optional().describe('Output directory for skill files (default: ~/.claude/skills)'), // ✅ 新增
17
+ useBrowser: z.boolean().optional().describe('Force browser automation'),
18
+ browser: z.enum(['puppeteer', 'playwright']).optional().describe('Browser type to use'),
19
+ spaStrategy: z.enum(['smart', 'auto', 'manual']).optional().describe('SPA crawling strategy'),
20
+ useCache: z.boolean().optional().default(true).describe('Use cached results if available'),
21
+ forceRefresh: z.boolean().optional().default(false).describe('Force refresh even if cached'),
22
+ });
23
+ /**
24
+ * Crawl documentation tool handler
25
+ */
26
+ export async function crawlDocumentation(input) {
27
+ const checker = new DependencyChecker();
28
+ const executor = new CLIExecutor(checker);
29
+ const processor = new ContentProcessor();
30
+ const guideGenerator = new GuideGenerator();
31
+ const cache = new CacheManager();
32
+ // 1. Check if CLI is installed
33
+ const cliCheck = await checker.checkCLIInstalled();
34
+ if (!cliCheck.installed) {
35
+ throw new Error(cliCheck.message);
36
+ }
37
+ // 2. Check cache (if enabled and not forcing refresh)
38
+ if (input.useCache && !input.forceRefresh) {
39
+ const cached = await cache.get(input.url);
40
+ if (cached) {
41
+ const ageMinutes = Math.floor((Date.now() - cached.timestamp) / 1000 / 60);
42
+ return {
43
+ success: true,
44
+ data: cached.data,
45
+ skillGenerationGuide: cached.guide,
46
+ fromCache: true,
47
+ cacheAge: `${ageMinutes} minutes`,
48
+ message: `Using cached data from ${ageMinutes} minutes ago. Use forceRefresh: true to re-crawl.`,
49
+ };
50
+ }
51
+ }
52
+ // 3. ✅ Prepare crawl parameters - 包含 outputDir 和 filename
53
+ const crawlParams = {
54
+ url: input.url,
55
+ maxPages: input.maxPages,
56
+ maxDepth: input.depth,
57
+ workers: input.workers,
58
+ useBrowser: input.useBrowser,
59
+ browser: input.browser,
60
+ spaStrategy: input.spaStrategy,
61
+ // ✅ 新增:让 CLI 直接保存文件
62
+ outputDir: input.outputDir,
63
+ filename: input.skillName,
64
+ };
65
+ // 4. ✅ Execute crawl - CLI 会生成并保存 SKILL
66
+ let lastProgress = '';
67
+ console.error('[Crawl] Starting crawl with SKILL generation...');
68
+ const rawResult = await executor.executeCrawl(crawlParams, (progress) => {
69
+ // Log progress to stderr (visible in MCP client logs)
70
+ if (progress.message !== lastProgress) {
71
+ console.error(`[Progress] ${progress.message}`);
72
+ lastProgress = progress.message;
73
+ }
74
+ });
75
+ // 5. ✅ 只返回轻量级摘要(不返回完整数据)
76
+ const summary = {
77
+ url: input.url,
78
+ skillName: input.skillName,
79
+ totalPages: rawResult.statistics.totalPages,
80
+ maxDepth: rawResult.statistics.maxDepthReached,
81
+ errors: rawResult.statistics.errors,
82
+ quality: rawResult.skill?.quality || 0,
83
+ // ✅ 文件路径信息
84
+ savedFiles: rawResult.savedFiles || {
85
+ skillDir: `${input.outputDir || '~/.claude/skills'}/${input.skillName}`,
86
+ skillMdPath: `${input.outputDir || '~/.claude/skills'}/${input.skillName}/SKILL.md`,
87
+ referenceFiles: [],
88
+ },
89
+ };
90
+ // 6. ✅ 不使用旧的缓存系统(缓存完整数据太大)
91
+ // 用户可以直接使用磁盘上的文件
92
+ // 7. ✅ 返回轻量级响应
93
+ return {
94
+ success: true,
95
+ fromCache: false,
96
+ summary,
97
+ message: `✓ Crawled ${summary.totalPages} pages and generated SKILL.\n` +
98
+ `Quality: ${summary.quality}/100\n` +
99
+ `Location: ${summary.savedFiles.skillMdPath}\n` +
100
+ `References: ${summary.savedFiles.referenceFiles.length} files`,
101
+ };
102
+ }
103
+ //# 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"}