@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,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":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gulibs/safe-coder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.27",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
7
7
|
},
|
|
8
|
-
"description": "MCP
|
|
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
|
|
22
|
+
"safe-coder": "dist/index.js"
|
|
13
23
|
},
|
|
14
24
|
"files": [
|
|
15
25
|
"dist",
|
|
@@ -25,39 +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
|
-
"
|
|
31
|
-
"axios": "^1.13.2",
|
|
32
|
-
"cheerio": "^1.0.0",
|
|
33
|
-
"chrome-launcher": "^1.1.2",
|
|
34
|
-
"eslint": "^8.57.1",
|
|
35
|
-
"eslint-plugin-react": "^7.37.5",
|
|
36
|
-
"eslint-plugin-security": "^3.0.1",
|
|
37
|
-
"http-proxy-agent": "^7.0.2",
|
|
38
|
-
"https-proxy-agent": "^7.0.6",
|
|
39
|
-
"puppeteer-core": "^21.11.0",
|
|
43
|
+
"which": "^4.0.0",
|
|
40
44
|
"zod": "^3.25.76"
|
|
41
45
|
},
|
|
42
|
-
"optionalDependencies": {
|
|
43
|
-
"puppeteer": "^21.11.0"
|
|
44
|
-
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@types/eslint": "^9.6.1",
|
|
47
47
|
"@types/node": "^20.0.0",
|
|
48
|
-
"@
|
|
49
|
-
"@typescript-eslint/parser": "^6.21.0",
|
|
48
|
+
"@types/which": "^3.0.0",
|
|
50
49
|
"tsx": "^4.0.0",
|
|
51
50
|
"typescript": "^5.9.3",
|
|
52
51
|
"vitest": "^1.0.0"
|
|
53
|
-
},
|
|
54
|
-
"scripts": {
|
|
55
|
-
"build": "tsc",
|
|
56
|
-
"dev": "tsx src/index.ts",
|
|
57
|
-
"start": "node dist/index.js",
|
|
58
|
-
"test": "vitest",
|
|
59
|
-
"test:watch": "vitest --watch",
|
|
60
|
-
"lint": "eslint src --ext .ts",
|
|
61
|
-
"type-check": "tsc --noEmit"
|
|
62
52
|
}
|
|
63
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"}
|