@gulibs/safe-coder 0.0.25 → 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.
Files changed (188) hide show
  1. package/README.md +682 -902
  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 +106 -0
  7. package/dist/executor/cli-executor.d.ts.map +1 -0
  8. package/dist/executor/cli-executor.js +133 -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 +164 -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 +57 -0
  33. package/dist/tools/crawl-documentation.d.ts.map +1 -0
  34. package/dist/tools/crawl-documentation.js +96 -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 -22
  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/cache.d.ts +0 -13
  50. package/dist/documentation/cache.d.ts.map +0 -1
  51. package/dist/documentation/cache.js +0 -48
  52. package/dist/documentation/cache.js.map +0 -1
  53. package/dist/documentation/checkpoint-manager.d.ts +0 -38
  54. package/dist/documentation/checkpoint-manager.d.ts.map +0 -1
  55. package/dist/documentation/checkpoint-manager.js +0 -101
  56. package/dist/documentation/checkpoint-manager.js.map +0 -1
  57. package/dist/documentation/doc-crawler.d.ts +0 -185
  58. package/dist/documentation/doc-crawler.d.ts.map +0 -1
  59. package/dist/documentation/doc-crawler.js +0 -1162
  60. package/dist/documentation/doc-crawler.js.map +0 -1
  61. package/dist/documentation/github-client.d.ts +0 -13
  62. package/dist/documentation/github-client.d.ts.map +0 -1
  63. package/dist/documentation/github-client.js +0 -90
  64. package/dist/documentation/github-client.js.map +0 -1
  65. package/dist/documentation/http-fetcher.d.ts +0 -8
  66. package/dist/documentation/http-fetcher.d.ts.map +0 -1
  67. package/dist/documentation/http-fetcher.js +0 -31
  68. package/dist/documentation/http-fetcher.js.map +0 -1
  69. package/dist/documentation/index.d.ts +0 -16
  70. package/dist/documentation/index.d.ts.map +0 -1
  71. package/dist/documentation/index.js +0 -159
  72. package/dist/documentation/index.js.map +0 -1
  73. package/dist/documentation/llms-txt/detector.d.ts +0 -31
  74. package/dist/documentation/llms-txt/detector.d.ts.map +0 -1
  75. package/dist/documentation/llms-txt/detector.js +0 -77
  76. package/dist/documentation/llms-txt/detector.js.map +0 -1
  77. package/dist/documentation/llms-txt/downloader.d.ts +0 -30
  78. package/dist/documentation/llms-txt/downloader.d.ts.map +0 -1
  79. package/dist/documentation/llms-txt/downloader.js +0 -84
  80. package/dist/documentation/llms-txt/downloader.js.map +0 -1
  81. package/dist/documentation/llms-txt/index.d.ts +0 -4
  82. package/dist/documentation/llms-txt/index.d.ts.map +0 -1
  83. package/dist/documentation/llms-txt/index.js +0 -4
  84. package/dist/documentation/llms-txt/index.js.map +0 -1
  85. package/dist/documentation/llms-txt/parser.d.ts +0 -43
  86. package/dist/documentation/llms-txt/parser.d.ts.map +0 -1
  87. package/dist/documentation/llms-txt/parser.js +0 -177
  88. package/dist/documentation/llms-txt/parser.js.map +0 -1
  89. package/dist/documentation/normalizer.d.ts +0 -6
  90. package/dist/documentation/normalizer.d.ts.map +0 -1
  91. package/dist/documentation/normalizer.js +0 -38
  92. package/dist/documentation/normalizer.js.map +0 -1
  93. package/dist/documentation/npm-client.d.ts +0 -19
  94. package/dist/documentation/npm-client.d.ts.map +0 -1
  95. package/dist/documentation/npm-client.js +0 -182
  96. package/dist/documentation/npm-client.js.map +0 -1
  97. package/dist/documentation/skill-generator.d.ts +0 -108
  98. package/dist/documentation/skill-generator.d.ts.map +0 -1
  99. package/dist/documentation/skill-generator.js +0 -642
  100. package/dist/documentation/skill-generator.js.map +0 -1
  101. package/dist/documentation/web-doc-browser.d.ts +0 -67
  102. package/dist/documentation/web-doc-browser.d.ts.map +0 -1
  103. package/dist/documentation/web-doc-browser.js +0 -555
  104. package/dist/documentation/web-doc-browser.js.map +0 -1
  105. package/dist/errors/api-validator.d.ts +0 -9
  106. package/dist/errors/api-validator.d.ts.map +0 -1
  107. package/dist/errors/api-validator.js +0 -57
  108. package/dist/errors/api-validator.js.map +0 -1
  109. package/dist/errors/contextual-analysis.d.ts +0 -14
  110. package/dist/errors/contextual-analysis.d.ts.map +0 -1
  111. package/dist/errors/contextual-analysis.js +0 -173
  112. package/dist/errors/contextual-analysis.js.map +0 -1
  113. package/dist/errors/cross-file-analyzer.d.ts +0 -16
  114. package/dist/errors/cross-file-analyzer.d.ts.map +0 -1
  115. package/dist/errors/cross-file-analyzer.js +0 -172
  116. package/dist/errors/cross-file-analyzer.js.map +0 -1
  117. package/dist/errors/eslint-integration.d.ts +0 -9
  118. package/dist/errors/eslint-integration.d.ts.map +0 -1
  119. package/dist/errors/eslint-integration.js +0 -131
  120. package/dist/errors/eslint-integration.js.map +0 -1
  121. package/dist/errors/framework-detector.d.ts +0 -10
  122. package/dist/errors/framework-detector.d.ts.map +0 -1
  123. package/dist/errors/framework-detector.js +0 -126
  124. package/dist/errors/framework-detector.js.map +0 -1
  125. package/dist/errors/index.d.ts +0 -18
  126. package/dist/errors/index.d.ts.map +0 -1
  127. package/dist/errors/index.js +0 -134
  128. package/dist/errors/index.js.map +0 -1
  129. package/dist/errors/pattern-matcher.d.ts +0 -25
  130. package/dist/errors/pattern-matcher.d.ts.map +0 -1
  131. package/dist/errors/pattern-matcher.js +0 -44
  132. package/dist/errors/pattern-matcher.js.map +0 -1
  133. package/dist/errors/patterns.d.ts +0 -11
  134. package/dist/errors/patterns.d.ts.map +0 -1
  135. package/dist/errors/patterns.js +0 -351
  136. package/dist/errors/patterns.js.map +0 -1
  137. package/dist/errors/performance-detector.d.ts +0 -11
  138. package/dist/errors/performance-detector.d.ts.map +0 -1
  139. package/dist/errors/performance-detector.js +0 -119
  140. package/dist/errors/performance-detector.js.map +0 -1
  141. package/dist/errors/runtime-detector.d.ts +0 -7
  142. package/dist/errors/runtime-detector.d.ts.map +0 -1
  143. package/dist/errors/runtime-detector.js +0 -86
  144. package/dist/errors/runtime-detector.js.map +0 -1
  145. package/dist/errors/security-detector.d.ts +0 -6
  146. package/dist/errors/security-detector.d.ts.map +0 -1
  147. package/dist/errors/security-detector.js +0 -75
  148. package/dist/errors/security-detector.js.map +0 -1
  149. package/dist/errors/typescript-integration.d.ts +0 -6
  150. package/dist/errors/typescript-integration.d.ts.map +0 -1
  151. package/dist/errors/typescript-integration.js +0 -46
  152. package/dist/errors/typescript-integration.js.map +0 -1
  153. package/dist/server/mcp-server.d.ts +0 -14
  154. package/dist/server/mcp-server.d.ts.map +0 -1
  155. package/dist/server/mcp-server.js +0 -776
  156. package/dist/server/mcp-server.js.map +0 -1
  157. package/dist/types/documentation.d.ts +0 -26
  158. package/dist/types/documentation.d.ts.map +0 -1
  159. package/dist/types/documentation.js +0 -2
  160. package/dist/types/documentation.js.map +0 -1
  161. package/dist/utils/config.d.ts +0 -21
  162. package/dist/utils/config.d.ts.map +0 -1
  163. package/dist/utils/config.js +0 -34
  164. package/dist/utils/config.js.map +0 -1
  165. package/dist/utils/http-client.d.ts +0 -17
  166. package/dist/utils/http-client.d.ts.map +0 -1
  167. package/dist/utils/http-client.js +0 -62
  168. package/dist/utils/http-client.js.map +0 -1
  169. package/dist/utils/logger.d.ts +0 -36
  170. package/dist/utils/logger.d.ts.map +0 -1
  171. package/dist/utils/logger.js +0 -128
  172. package/dist/utils/logger.js.map +0 -1
  173. package/dist/utils/rate-limiter.d.ts +0 -9
  174. package/dist/utils/rate-limiter.d.ts.map +0 -1
  175. package/dist/utils/rate-limiter.js +0 -26
  176. package/dist/utils/rate-limiter.js.map +0 -1
  177. package/dist/validation/auto-fix.d.ts +0 -15
  178. package/dist/validation/auto-fix.d.ts.map +0 -1
  179. package/dist/validation/auto-fix.js +0 -49
  180. package/dist/validation/auto-fix.js.map +0 -1
  181. package/dist/validation/index.d.ts +0 -21
  182. package/dist/validation/index.d.ts.map +0 -1
  183. package/dist/validation/index.js +0 -45
  184. package/dist/validation/index.js.map +0 -1
  185. package/dist/validation/resolution-db.d.ts +0 -15
  186. package/dist/validation/resolution-db.d.ts.map +0 -1
  187. package/dist/validation/resolution-db.js +0 -62
  188. package/dist/validation/resolution-db.js.map +0 -1
@@ -0,0 +1,207 @@
1
+ import { z } from 'zod';
2
+ import { mkdir, writeFile } from 'fs/promises';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+ /**
6
+ * Input schema for save_skill tool
7
+ */
8
+ export const SaveSkillSchema = z.object({
9
+ skillName: z.string().describe('Name for the skill directory (e.g., "react-docs", "vue-guide")'),
10
+ skillContent: z.string().describe('Content for SKILL.md file'),
11
+ referenceFiles: z.record(z.string()).optional().describe('Map of reference files: category -> markdown content'),
12
+ baseDirectory: z.string().optional().default('~/.claude/skills').describe('Base directory for skills'),
13
+ overwrite: z.boolean().optional().default(false).describe('Overwrite existing skill directory'),
14
+ });
15
+ /**
16
+ * Helper to extract skill data from crawl result
17
+ */
18
+ export function extractSkillDataFromCrawlResult(crawlResult, skillName) {
19
+ // If CLI already generated skill content, use it
20
+ if (crawlResult.skill?.skillMd) {
21
+ return {
22
+ skillContent: crawlResult.skill.skillMd,
23
+ referenceFiles: {}, // CLI's referenceFiles are not in the current CrawlResult type
24
+ };
25
+ }
26
+ // Otherwise, generate basic skill content from pages
27
+ const { source, pages, metadata, statistics } = crawlResult;
28
+ // Generate SKILL.md content
29
+ const skillContent = generateBasicSkillMd(skillName, source, pages, metadata, statistics);
30
+ // Generate reference files by category
31
+ const referenceFiles = generateReferenceFiles(pages);
32
+ return { skillContent, referenceFiles };
33
+ }
34
+ /**
35
+ * Generate basic SKILL.md content
36
+ */
37
+ function generateBasicSkillMd(skillName, source, pages, metadata, statistics) {
38
+ const technology = metadata.technology || skillName;
39
+ const description = `Comprehensive ${technology} documentation. Crawled ${statistics.totalPages} pages from ${source.url}`;
40
+ const categories = Array.from(new Set(pages.map(p => p.category).filter(Boolean)));
41
+ let md = `---
42
+ name: ${skillName}
43
+ description: ${description}
44
+ source: ${source.url}
45
+ crawled_at: ${source.crawledAt}
46
+ pages: ${statistics.totalPages}
47
+ ---
48
+
49
+ # ${technology} Documentation
50
+
51
+ ${description}
52
+
53
+ ## When to Use This Skill
54
+
55
+ This skill should be triggered when:
56
+ - Working with ${technology}
57
+ - Asking about ${technology} features or APIs
58
+ - Implementing ${technology} solutions
59
+ - Debugging ${technology} code
60
+ - Learning ${technology} best practices
61
+
62
+ ## Overview
63
+
64
+ `;
65
+ // Add technology overview from first page
66
+ if (pages.length > 0 && pages[0].content) {
67
+ const firstPagePreview = pages[0].content.substring(0, 500);
68
+ md += `${firstPagePreview}${pages[0].content.length > 500 ? '...' : ''}\n\n`;
69
+ }
70
+ // Add reference files section
71
+ if (categories.length > 0) {
72
+ md += `## Reference Files\n\nThis skill includes documentation organized by category in \`references/\`:\n\n`;
73
+ for (const category of categories) {
74
+ const categoryPages = pages.filter(p => p.category === category);
75
+ md += `- **[${category}.md](references/${category}.md)** - ${category} documentation (${categoryPages.length} pages)\n`;
76
+ }
77
+ md += '\n';
78
+ }
79
+ // Add quick reference
80
+ md += `## Quick Reference\n\n`;
81
+ // Extract key topics from headings
82
+ const allHeadings = pages.flatMap(p => p.headings || []);
83
+ const uniqueHeadings = Array.from(new Set(allHeadings)).slice(0, 10);
84
+ if (uniqueHeadings.length > 0) {
85
+ md += `### Key Topics\n\n`;
86
+ for (const heading of uniqueHeadings) {
87
+ md += `- ${heading}\n`;
88
+ }
89
+ md += '\n';
90
+ }
91
+ md += `## Resources
92
+
93
+ - **Official Documentation**: ${source.url}
94
+ - **Pages Crawled**: ${statistics.totalPages}
95
+ - **Max Depth**: ${statistics.maxDepthReached}
96
+
97
+ ## Working with This Skill
98
+
99
+ ### For Beginners
100
+
101
+ Start with the getting_started or tutorials reference files for foundational concepts.
102
+
103
+ ### For Specific Features
104
+
105
+ Use the appropriate category reference file for detailed information.
106
+
107
+ ### For Code Examples
108
+
109
+ Check the references/ directory for code examples extracted from the official documentation.
110
+
111
+ ---
112
+
113
+ *Generated by Safe Coder MCP Server*
114
+ *Last updated: ${source.crawledAt}*
115
+ `;
116
+ return md;
117
+ }
118
+ /**
119
+ * Generate reference files grouped by category
120
+ */
121
+ function generateReferenceFiles(pages) {
122
+ const referenceFiles = {};
123
+ // Group pages by category
124
+ const pagesByCategory = new Map();
125
+ for (const page of pages) {
126
+ const category = page.category || 'other';
127
+ if (!pagesByCategory.has(category)) {
128
+ pagesByCategory.set(category, []);
129
+ }
130
+ pagesByCategory.get(category).push(page);
131
+ }
132
+ // Generate markdown for each category
133
+ const entries = Array.from(pagesByCategory.entries());
134
+ for (const [category, categoryPages] of entries) {
135
+ let md = `# ${category.charAt(0).toUpperCase() + category.slice(1)}\n\n`;
136
+ md += `*${categoryPages.length} pages*\n\n`;
137
+ md += `---\n\n`;
138
+ for (const page of categoryPages) {
139
+ md += `## ${page.title}\n\n`;
140
+ md += `**Source**: [${page.url}](${page.url})\n\n`;
141
+ // Add headings as navigation
142
+ if (page.headings && page.headings.length > 0) {
143
+ md += `**Contents**:\n`;
144
+ for (const heading of page.headings.slice(0, 10)) {
145
+ md += `- ${heading}\n`;
146
+ }
147
+ md += '\n';
148
+ }
149
+ // Add content
150
+ md += `${page.content}\n\n`;
151
+ md += `---\n\n`;
152
+ }
153
+ referenceFiles[category] = md;
154
+ }
155
+ return referenceFiles;
156
+ }
157
+ /**
158
+ * Save skill tool handler
159
+ */
160
+ export async function saveSkill(input) {
161
+ try {
162
+ // Resolve base directory
163
+ const baseDir = input.baseDirectory.startsWith('~')
164
+ ? join(homedir(), input.baseDirectory.slice(1))
165
+ : input.baseDirectory;
166
+ // Sanitize skill name
167
+ const sanitizedName = input.skillName
168
+ .toLowerCase()
169
+ .replace(/[^a-z0-9-_]/g, '-')
170
+ .replace(/-+/g, '-')
171
+ .replace(/^-|-$/g, '');
172
+ if (!sanitizedName) {
173
+ throw new Error('Invalid skill name. Use alphanumeric characters, hyphens, or underscores.');
174
+ }
175
+ // Create skill directory structure
176
+ const skillDir = join(baseDir, sanitizedName);
177
+ const referencesDir = join(skillDir, 'references');
178
+ // Create directories
179
+ await mkdir(skillDir, { recursive: true });
180
+ await mkdir(referencesDir, { recursive: true });
181
+ // Save SKILL.md
182
+ const skillMdPath = join(skillDir, 'SKILL.md');
183
+ await writeFile(skillMdPath, input.skillContent, 'utf-8');
184
+ const filesCreated = {
185
+ skillMd: skillMdPath,
186
+ references: [],
187
+ };
188
+ // Save reference files
189
+ if (input.referenceFiles) {
190
+ for (const [category, content] of Object.entries(input.referenceFiles)) {
191
+ const refPath = join(referencesDir, `${category}.md`);
192
+ await writeFile(refPath, content, 'utf-8');
193
+ filesCreated.references.push(refPath);
194
+ }
195
+ }
196
+ return {
197
+ success: true,
198
+ skillDirectory: skillDir,
199
+ filesCreated,
200
+ message: `Skill "${sanitizedName}" saved successfully with ${filesCreated.references.length} reference files`,
201
+ };
202
+ }
203
+ catch (error) {
204
+ throw new Error(`Failed to save skill: ${error instanceof Error ? error.message : String(error)}`);
205
+ }
206
+ }
207
+ //# sourceMappingURL=save-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-skill.js","sourceRoot":"","sources":["../../src/tools/save-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAG7B;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IAChG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAChH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtG,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAChG,CAAC,CAAC;AAiBH;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC7C,WAAwB,EACxB,SAAiB;IAKjB,iDAAiD;IACjD,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC/B,OAAO;YACL,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO;YACvC,cAAc,EAAE,EAAE,EAAE,+DAA+D;SACpF,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;IAE5D,4BAA4B;IAC5B,MAAM,YAAY,GAAG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE1F,uCAAuC;IACvC,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAErD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,MAAW,EACX,KAAY,EACZ,QAAa,EACb,UAAe;IAEf,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,SAAS,CAAC;IACpD,MAAM,WAAW,GAAG,iBAAiB,UAAU,2BAA2B,UAAU,CAAC,UAAU,eAAe,MAAM,CAAC,GAAG,EAAE,CAAC;IAE3H,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CACxC,CAAC;IAEd,IAAI,EAAE,GAAG;QACH,SAAS;eACF,WAAW;UAChB,MAAM,CAAC,GAAG;cACN,MAAM,CAAC,SAAS;SACrB,UAAU,CAAC,UAAU;;;IAG1B,UAAU;;EAEZ,WAAW;;;;;iBAKI,UAAU;iBACV,UAAU;iBACV,UAAU;cACb,UAAU;aACX,UAAU;;;;CAItB,CAAC;IAEA,0CAA0C;IAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5D,EAAE,IAAI,GAAG,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/E,CAAC;IAED,8BAA8B;IAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,EAAE,IAAI,uGAAuG,CAAC;QAE9G,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACjE,EAAE,IAAI,QAAQ,QAAQ,mBAAmB,QAAQ,YAAY,QAAQ,mBAAmB,aAAa,CAAC,MAAM,WAAW,CAAC;QAC1H,CAAC;QACD,EAAE,IAAI,IAAI,CAAC;IACb,CAAC;IAED,sBAAsB;IACtB,EAAE,IAAI,wBAAwB,CAAC;IAE/B,mCAAmC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,EAAE,IAAI,oBAAoB,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC;QACzB,CAAC;QACD,EAAE,IAAI,IAAI,CAAC;IACb,CAAC;IAED,EAAE,IAAI;;gCAEwB,MAAM,CAAC,GAAG;uBACnB,UAAU,CAAC,UAAU;mBACzB,UAAU,CAAC,eAAe;;;;;;;;;;;;;;;;;;;iBAmB5B,MAAM,CAAC,SAAS;CAChC,CAAC;IAEA,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAY;IAC1C,MAAM,cAAc,GAA2B,EAAE,CAAC;IAElD,0BAA0B;IAC1B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,OAAO,EAAE,CAAC;QAChD,IAAI,EAAE,GAAG,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,EAAE,IAAI,IAAI,aAAa,CAAC,MAAM,aAAa,CAAC;QAC5C,EAAE,IAAI,SAAS,CAAC;QAEhB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC;YAC7B,EAAE,IAAI,gBAAgB,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC;YAEnD,6BAA6B;YAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,EAAE,IAAI,iBAAiB,CAAC;gBACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACjD,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC;gBACzB,CAAC;gBACD,EAAE,IAAI,IAAI,CAAC;YACb,CAAC;YAED,cAAc;YACd,EAAE,IAAI,GAAG,IAAI,CAAC,OAAO,MAAM,CAAC;YAC5B,EAAE,IAAI,SAAS,CAAC;QAClB,CAAC;QAED,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QAExB,sBAAsB;QACtB,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS;aAClC,WAAW,EAAE;aACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;aAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEzB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,mCAAmC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEnD,qBAAqB;QACrB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,gBAAgB;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,EAAc;SAC3B,CAAC;QAEF,uBAAuB;QACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;gBACtD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC3C,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,QAAQ;YACxB,YAAY;YACZ,OAAO,EAAE,UAAU,aAAa,6BAA6B,YAAY,CAAC,UAAU,CAAC,MAAM,kBAAkB;SAC9G,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,15 +1,25 @@
1
1
  {
2
2
  "name": "@gulibs/safe-coder",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
7
7
  },
8
- "description": "MCP service for documentation fetching, error detection, and code validation",
8
+ "description": "MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling",
9
9
  "main": "dist/index.js",
10
10
  "type": "module",
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx src/index.ts",
14
+ "start": "node dist/index.js",
15
+ "test": "vitest",
16
+ "test:watch": "vitest --watch",
17
+ "lint": "eslint src --ext .ts",
18
+ "type-check": "tsc --noEmit",
19
+ "prepublishOnly": "npm run build"
20
+ },
11
21
  "bin": {
12
- "safe-coder-mcp": "dist/index.js"
22
+ "safe-coder": "dist/index.js"
13
23
  },
14
24
  "files": [
15
25
  "dist",
@@ -25,33 +35,19 @@
25
35
  ],
26
36
  "author": "",
27
37
  "license": "MIT",
38
+ "peerDependencies": {
39
+ "@gulibs/safe-coder-cli": "^0.0.1"
40
+ },
28
41
  "dependencies": {
29
42
  "@modelcontextprotocol/sdk": "^1.22.0",
30
- "@typescript-eslint/typescript-estree": "^8.48.0",
31
- "axios": "^1.13.2",
32
- "eslint": "^8.57.1",
33
- "eslint-plugin-react": "^7.37.5",
34
- "eslint-plugin-security": "^3.0.1",
35
- "http-proxy-agent": "^7.0.2",
36
- "https-proxy-agent": "^7.0.6",
43
+ "which": "^4.0.0",
37
44
  "zod": "^3.25.76"
38
45
  },
39
46
  "devDependencies": {
40
- "@types/eslint": "^9.6.1",
41
47
  "@types/node": "^20.0.0",
42
- "@typescript-eslint/eslint-plugin": "^6.21.0",
43
- "@typescript-eslint/parser": "^6.21.0",
48
+ "@types/which": "^3.0.0",
44
49
  "tsx": "^4.0.0",
45
50
  "typescript": "^5.9.3",
46
51
  "vitest": "^1.0.0"
47
- },
48
- "scripts": {
49
- "build": "tsc",
50
- "dev": "tsx src/index.ts",
51
- "start": "node dist/index.js",
52
- "test": "vitest",
53
- "test:watch": "vitest --watch",
54
- "lint": "eslint src --ext .ts",
55
- "type-check": "tsc --noEmit"
56
52
  }
57
53
  }
@@ -1,41 +0,0 @@
1
- import type { WebDocumentationPage } from './web-doc-browser.js';
2
- /**
3
- * Browser-based documentation browser using Playwright
4
- * Handles SPA (Single Page Applications) that require JavaScript rendering
5
- */
6
- export declare class BrowserDocumentationBrowser {
7
- private browser;
8
- private page;
9
- private readonly DOCUMENTATION_INDICATORS;
10
- /**
11
- * Initialize browser (lazy loading)
12
- */
13
- private ensureBrowser;
14
- /**
15
- * Check if a URL is likely a documentation page
16
- */
17
- isDocumentationPage(url: string): Promise<boolean>;
18
- /**
19
- * Browse a documentation page using browser automation
20
- * Extracts content from rendered SPA pages
21
- */
22
- browsePage(url: string, query?: string): Promise<WebDocumentationPage>;
23
- /**
24
- * Navigate to a specific page
25
- */
26
- navigateTo(url: string, baseUrl?: string): Promise<WebDocumentationPage>;
27
- /**
28
- * Parse HTML and extract documentation content
29
- * Enhanced to extract code blocks with language detection
30
- */
31
- private parseHTML;
32
- /**
33
- * Detect programming language from code
34
- */
35
- private detectLanguage;
36
- /**
37
- * Close browser
38
- */
39
- close(): Promise<void>;
40
- }
41
- //# sourceMappingURL=browser-doc-browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-doc-browser.d.ts","sourceRoot":"","sources":["../../src/documentation/browser-doc-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE;;;GAGG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAWvC;IAEF;;OAEG;YACW,aAAa;IA4B3B;;OAEG;IACG,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxD;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8E5E;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAU9E;;;OAGG;IACH,OAAO,CAAC,SAAS;IAmMjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}