@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
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
import { logger } from '../utils/logger.js';
|
|
2
|
-
/**
|
|
3
|
-
* Browser-based documentation browser using Playwright
|
|
4
|
-
* Handles SPA (Single Page Applications) that require JavaScript rendering
|
|
5
|
-
*/
|
|
6
|
-
export class BrowserDocumentationBrowser {
|
|
7
|
-
browser = null;
|
|
8
|
-
page = null;
|
|
9
|
-
DOCUMENTATION_INDICATORS = [
|
|
10
|
-
/\/docs?\//i,
|
|
11
|
-
/\/documentation/i,
|
|
12
|
-
/\/guide/i,
|
|
13
|
-
/\/tutorial/i,
|
|
14
|
-
/\/api/i,
|
|
15
|
-
/\/reference/i,
|
|
16
|
-
/\/manual/i,
|
|
17
|
-
/\/help/i,
|
|
18
|
-
/\/about/i,
|
|
19
|
-
/\/getting-started/i,
|
|
20
|
-
];
|
|
21
|
-
/**
|
|
22
|
-
* Initialize browser (lazy loading)
|
|
23
|
-
*/
|
|
24
|
-
async ensureBrowser() {
|
|
25
|
-
if (this.browser) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
// Dynamic import to make Playwright optional
|
|
30
|
-
const { chromium } = await import('playwright');
|
|
31
|
-
this.browser = await chromium.launch({
|
|
32
|
-
headless: true,
|
|
33
|
-
args: ['--no-sandbox', '--disable-setuid-sandbox'],
|
|
34
|
-
});
|
|
35
|
-
this.page = await this.browser.newPage();
|
|
36
|
-
// Set viewport
|
|
37
|
-
await this.page.setViewportSize({ width: 1920, height: 1080 });
|
|
38
|
-
// Set user agent
|
|
39
|
-
await this.page.setUserAgent('Safe-Coder-MCP/1.0.0 (Documentation Crawler)');
|
|
40
|
-
logger.info('Playwright browser initialized for SPA documentation crawling');
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
throw new Error(`Failed to initialize Playwright browser. Please install Playwright: npm install playwright && npx playwright install chromium. Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Check if a URL is likely a documentation page
|
|
48
|
-
*/
|
|
49
|
-
async isDocumentationPage(url) {
|
|
50
|
-
// For browser mode, be more lenient - accept URLs that look like documentation
|
|
51
|
-
const hasDocPattern = this.DOCUMENTATION_INDICATORS.some(pattern => pattern.test(url));
|
|
52
|
-
if (hasDocPattern) {
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
// Also accept if URL contains common documentation keywords
|
|
56
|
-
const urlLower = url.toLowerCase();
|
|
57
|
-
const hasDocKeywords = /(?:doc|guide|tutorial|api|reference|manual|help|about|getting-started)/.test(urlLower);
|
|
58
|
-
// For browser mode, be more permissive - accept most URLs that don't look like non-docs
|
|
59
|
-
const isNonDoc = /(?:login|signup|register|checkout|cart|payment|\.(jpg|jpeg|png|gif|svg|pdf|zip))/.test(urlLower);
|
|
60
|
-
return !isNonDoc && (hasDocKeywords || urlLower.includes('/docs') || urlLower.includes('/documentation'));
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Browse a documentation page using browser automation
|
|
64
|
-
* Extracts content from rendered SPA pages
|
|
65
|
-
*/
|
|
66
|
-
async browsePage(url, query) {
|
|
67
|
-
await this.ensureBrowser();
|
|
68
|
-
try {
|
|
69
|
-
const fullUrl = url.startsWith('http') ? url : `https://${url}`;
|
|
70
|
-
const baseUrl = new URL(fullUrl).origin;
|
|
71
|
-
logger.debug('Navigating to page with browser', {
|
|
72
|
-
url: fullUrl,
|
|
73
|
-
method: 'Playwright browser automation',
|
|
74
|
-
});
|
|
75
|
-
// Navigate to page
|
|
76
|
-
await this.page.goto(fullUrl, {
|
|
77
|
-
waitUntil: 'networkidle',
|
|
78
|
-
timeout: 30000,
|
|
79
|
-
});
|
|
80
|
-
// Wait a bit more for SPA to fully render
|
|
81
|
-
await this.page.waitForTimeout(2000);
|
|
82
|
-
// Get rendered HTML
|
|
83
|
-
const html = await this.page.content();
|
|
84
|
-
const title = await this.page.title();
|
|
85
|
-
logger.debug('Page loaded and rendered', {
|
|
86
|
-
url: fullUrl,
|
|
87
|
-
title: title.substring(0, 50),
|
|
88
|
-
htmlLength: html.length,
|
|
89
|
-
});
|
|
90
|
-
// Parse HTML and extract content
|
|
91
|
-
const parsed = this.parseHTML(html, baseUrl, fullUrl);
|
|
92
|
-
// Filter content by query if provided
|
|
93
|
-
let filteredContent = parsed.content;
|
|
94
|
-
let filteredSections = parsed.sections;
|
|
95
|
-
if (query) {
|
|
96
|
-
const queryLower = query.toLowerCase();
|
|
97
|
-
filteredSections = parsed.sections.filter(section => section.title.toLowerCase().includes(queryLower) ||
|
|
98
|
-
section.content.toLowerCase().includes(queryLower));
|
|
99
|
-
if (filteredSections.length > 0) {
|
|
100
|
-
filteredContent = filteredSections.map(s => `## ${s.title}\n\n${s.content}`).join('\n\n');
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
if (parsed.searchableContent.toLowerCase().includes(queryLower)) {
|
|
104
|
-
const paragraphs = parsed.content.split('\n\n');
|
|
105
|
-
const relevant = paragraphs.filter(p => p.toLowerCase().includes(queryLower));
|
|
106
|
-
filteredContent = relevant.join('\n\n');
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
filteredContent = `No content found matching "${query}". Showing full page content:\n\n${parsed.content}`;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
url: fullUrl,
|
|
115
|
-
title: title || parsed.title,
|
|
116
|
-
content: filteredContent,
|
|
117
|
-
isDocumentation: true,
|
|
118
|
-
navigationLinks: parsed.navigationLinks,
|
|
119
|
-
sections: filteredSections.length > 0 ? filteredSections : parsed.sections,
|
|
120
|
-
searchableContent: parsed.searchableContent,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
throw new Error(`Failed to browse documentation page with browser: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Navigate to a specific page
|
|
129
|
-
*/
|
|
130
|
-
async navigateTo(url, baseUrl) {
|
|
131
|
-
const fullUrl = url.startsWith('http')
|
|
132
|
-
? url
|
|
133
|
-
: baseUrl
|
|
134
|
-
? new URL(url, baseUrl).href
|
|
135
|
-
: `https://${url}`;
|
|
136
|
-
return this.browsePage(fullUrl);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Parse HTML and extract documentation content
|
|
140
|
-
* Enhanced to extract code blocks with language detection
|
|
141
|
-
*/
|
|
142
|
-
parseHTML(html, baseUrl, currentUrl) {
|
|
143
|
-
// Extract title
|
|
144
|
-
const titleMatch = html.match(/<title[^>]*>([^<]+)<\/title>/i);
|
|
145
|
-
const title = titleMatch ? titleMatch[1].trim() : 'Documentation';
|
|
146
|
-
// Remove scripts and styles
|
|
147
|
-
let cleanHtml = html
|
|
148
|
-
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
|
|
149
|
-
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
|
|
150
|
-
.replace(/<!--[\s\S]*?-->/g, '');
|
|
151
|
-
// Extract navigation links
|
|
152
|
-
const navigationLinks = [];
|
|
153
|
-
const navigationLinksSet = new Set();
|
|
154
|
-
// Find nav, aside, or sidebar elements
|
|
155
|
-
const navMatches = cleanHtml.match(/<(?:nav|aside)[^>]*>([\s\S]*?)<\/(?:nav|aside)>/gi);
|
|
156
|
-
if (navMatches) {
|
|
157
|
-
navMatches.forEach(navHtml => {
|
|
158
|
-
const linkMatches = navHtml.matchAll(/<a[^>]+href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi);
|
|
159
|
-
for (const match of linkMatches) {
|
|
160
|
-
const href = match[1];
|
|
161
|
-
let text = match[2].replace(/<[^>]+>/g, '').trim();
|
|
162
|
-
if (text && href && !href.startsWith('#')) {
|
|
163
|
-
try {
|
|
164
|
-
const fullUrl = href.startsWith('http')
|
|
165
|
-
? href
|
|
166
|
-
: new URL(href, baseUrl).href;
|
|
167
|
-
const normalizedUrl = fullUrl.split('#')[0];
|
|
168
|
-
const isInternal = new URL(fullUrl).origin === new URL(currentUrl).origin;
|
|
169
|
-
if (!navigationLinksSet.has(normalizedUrl)) {
|
|
170
|
-
navigationLinks.push({ text, url: normalizedUrl, isInternal });
|
|
171
|
-
navigationLinksSet.add(normalizedUrl);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
// Invalid URL, skip
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
// Extract main content area
|
|
182
|
-
let mainContent = '';
|
|
183
|
-
const mainMatches = cleanHtml.match(/<main[^>]*>([\s\S]*?)<\/main>/i) ||
|
|
184
|
-
cleanHtml.match(/<article[^>]*>([\s\S]*?)<\/article>/i) ||
|
|
185
|
-
cleanHtml.match(/<div[^>]*class="[^"]*(?:content|main|documentation|doc)[^"]*"[^>]*>([\s\S]*?)<\/div>/i);
|
|
186
|
-
if (mainMatches) {
|
|
187
|
-
mainContent = mainMatches[1];
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
const bodyMatch = cleanHtml.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
|
|
191
|
-
mainContent = bodyMatch ? bodyMatch[1] : cleanHtml;
|
|
192
|
-
}
|
|
193
|
-
// Extract code blocks with language detection
|
|
194
|
-
const codeBlocks = [];
|
|
195
|
-
// Extract <pre><code> blocks
|
|
196
|
-
const preCodeMatches = mainContent.matchAll(/<pre[^>]*><code[^>]*(?:class=["']language-([^"']+)["']|data-language=["']([^"']+)["'])?[^>]*>([\s\S]*?)<\/code><\/pre>/gi);
|
|
197
|
-
for (const match of preCodeMatches) {
|
|
198
|
-
const language = (match[1] || match[2] || this.detectLanguage(match[3])).toLowerCase();
|
|
199
|
-
const code = match[3].trim();
|
|
200
|
-
if (code.length > 10) {
|
|
201
|
-
codeBlocks.push({ code, language });
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Extract inline <code> blocks (for short snippets)
|
|
205
|
-
const inlineCodeMatches = mainContent.matchAll(/<code[^>]*>([^<]+)<\/code>/gi);
|
|
206
|
-
for (const match of inlineCodeMatches) {
|
|
207
|
-
const code = match[1].trim();
|
|
208
|
-
if (code.length > 5 && code.length < 100) {
|
|
209
|
-
// Only include short inline code, not full blocks
|
|
210
|
-
codeBlocks.push({ code, language: 'text' });
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
// Convert HTML to markdown with code blocks preserved
|
|
214
|
-
let textContent = mainContent
|
|
215
|
-
// Preserve code blocks first
|
|
216
|
-
.replace(/<pre[^>]*><code[^>]*(?:class=["']language-([^"']+)["']|data-language=["']([^"']+)["'])?[^>]*>([\s\S]*?)<\/code><\/pre>/gi, (_, lang1, lang2, code) => {
|
|
217
|
-
const lang = (lang1 || lang2 || this.detectLanguage(code)).toLowerCase();
|
|
218
|
-
return `\n\`\`\`${lang}\n${code.trim()}\n\`\`\`\n`;
|
|
219
|
-
})
|
|
220
|
-
// Headers
|
|
221
|
-
.replace(/<h([1-6])[^>]*>([^<]+)<\/h[1-6]>/gi, (_, level, text) => {
|
|
222
|
-
const prefix = '#'.repeat(parseInt(level));
|
|
223
|
-
return `\n${prefix} ${text.trim()}\n`;
|
|
224
|
-
})
|
|
225
|
-
// Links
|
|
226
|
-
.replace(/<a[^>]+href=["']([^"']+)["'][^>]*>([^<]+)<\/a>/gi, '[$2]($1)')
|
|
227
|
-
// Inline code
|
|
228
|
-
.replace(/<code[^>]*>([^<]+)<\/code>/gi, '`$1`')
|
|
229
|
-
// Lists
|
|
230
|
-
.replace(/<li[^>]*>([^<]+)<\/li>/gi, '- $1')
|
|
231
|
-
// Paragraphs
|
|
232
|
-
.replace(/<p[^>]*>([^<]+)<\/p>/gi, '$1\n')
|
|
233
|
-
// Bold/Italic
|
|
234
|
-
.replace(/<(?:strong|b)[^>]*>([^<]+)<\/(?:strong|b)>/gi, '**$1**')
|
|
235
|
-
.replace(/<(?:em|i)[^>]*>([^<]+)<\/(?:em|i)>/gi, '*$1*')
|
|
236
|
-
// Remove remaining HTML tags
|
|
237
|
-
.replace(/<[^>]+>/g, ' ')
|
|
238
|
-
// Clean up whitespace
|
|
239
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
240
|
-
.replace(/[ \t]+/g, ' ')
|
|
241
|
-
.trim();
|
|
242
|
-
// Extract sections
|
|
243
|
-
const sections = [];
|
|
244
|
-
const sectionMatches = textContent.matchAll(/(?:^|\n)(#{1,6})\s+(.+?)(?=\n#{1,6}|\n*$)/gs);
|
|
245
|
-
let lastIndex = 0;
|
|
246
|
-
for (const match of sectionMatches) {
|
|
247
|
-
const headerLevel = match[1].length;
|
|
248
|
-
const headerText = match[2].trim();
|
|
249
|
-
const startIndex = match.index || 0;
|
|
250
|
-
const nextHeaderPattern = new RegExp(`\n#{1,${headerLevel}}\\s+`, 'g');
|
|
251
|
-
nextHeaderPattern.lastIndex = startIndex + match[0].length;
|
|
252
|
-
const nextMatch = nextHeaderPattern.exec(textContent);
|
|
253
|
-
const endIndex = nextMatch ? nextMatch.index : textContent.length;
|
|
254
|
-
const sectionContent = textContent.substring(startIndex + match[0].length, endIndex).trim();
|
|
255
|
-
if (sectionContent) {
|
|
256
|
-
sections.push({
|
|
257
|
-
title: headerText,
|
|
258
|
-
content: sectionContent,
|
|
259
|
-
anchor: `#${headerText.toLowerCase().replace(/\s+/g, '-')}`,
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
lastIndex = endIndex;
|
|
263
|
-
}
|
|
264
|
-
// If no sections found, create one from all content
|
|
265
|
-
if (sections.length === 0 && textContent) {
|
|
266
|
-
sections.push({
|
|
267
|
-
title: title,
|
|
268
|
-
content: textContent,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
// Extract links from content area (for discovery)
|
|
272
|
-
const contentLinkMatches = mainContent.matchAll(/<a[^>]+href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi);
|
|
273
|
-
for (const match of contentLinkMatches) {
|
|
274
|
-
const href = match[1];
|
|
275
|
-
let text = match[2].replace(/<[^>]+>/g, '').trim();
|
|
276
|
-
if (text && href && !href.startsWith('#')) {
|
|
277
|
-
try {
|
|
278
|
-
const fullUrl = href.startsWith('http')
|
|
279
|
-
? href
|
|
280
|
-
: new URL(href, baseUrl).href;
|
|
281
|
-
const normalizedUrl = fullUrl.split('#')[0];
|
|
282
|
-
const isInternal = new URL(fullUrl).origin === new URL(currentUrl).origin;
|
|
283
|
-
if (!navigationLinksSet.has(normalizedUrl)) {
|
|
284
|
-
navigationLinks.push({ text, url: normalizedUrl, isInternal });
|
|
285
|
-
navigationLinksSet.add(normalizedUrl);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
// Invalid URL, skip
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
const finalLinks = [...navigationLinks].slice(0, 200); // Limit to 200 links
|
|
294
|
-
logger.debug('Content extraction completed', {
|
|
295
|
-
url: currentUrl,
|
|
296
|
-
title,
|
|
297
|
-
sectionsCount: sections.length,
|
|
298
|
-
codeBlocksCount: codeBlocks.length,
|
|
299
|
-
linksCount: finalLinks.length,
|
|
300
|
-
contentLength: textContent.length,
|
|
301
|
-
});
|
|
302
|
-
return {
|
|
303
|
-
title,
|
|
304
|
-
content: textContent || 'No content extracted',
|
|
305
|
-
navigationLinks: finalLinks,
|
|
306
|
-
sections,
|
|
307
|
-
searchableContent: textContent.toLowerCase(),
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Detect programming language from code
|
|
312
|
-
*/
|
|
313
|
-
detectLanguage(code) {
|
|
314
|
-
const codeLower = code.trim().toLowerCase();
|
|
315
|
-
// Common patterns
|
|
316
|
-
if (/^(import|export|const|let|var|function|class|interface|type)\s/.test(codeLower)) {
|
|
317
|
-
if (/from\s+['"]react['"]/.test(codeLower) || /<[A-Z]\w+/.test(codeLower)) {
|
|
318
|
-
return 'jsx';
|
|
319
|
-
}
|
|
320
|
-
if (/from\s+['"]/.test(codeLower) || /:\s*(string|number|boolean|object)/.test(codeLower)) {
|
|
321
|
-
return 'typescript';
|
|
322
|
-
}
|
|
323
|
-
return 'javascript';
|
|
324
|
-
}
|
|
325
|
-
if (/^(def|class|import|from)\s/.test(codeLower)) {
|
|
326
|
-
return 'python';
|
|
327
|
-
}
|
|
328
|
-
if (/^(package|import|public|private|class)\s/.test(codeLower)) {
|
|
329
|
-
return 'java';
|
|
330
|
-
}
|
|
331
|
-
if (/^(#include|#define|int\s+main|void\s+main)/.test(codeLower)) {
|
|
332
|
-
return 'c';
|
|
333
|
-
}
|
|
334
|
-
if (/^(<!DOCTYPE|<html|<head)/.test(codeLower)) {
|
|
335
|
-
return 'html';
|
|
336
|
-
}
|
|
337
|
-
if (/^(\.|#|\w+\s*\{)/.test(codeLower)) {
|
|
338
|
-
return 'css';
|
|
339
|
-
}
|
|
340
|
-
return 'text';
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Close browser
|
|
344
|
-
*/
|
|
345
|
-
async close() {
|
|
346
|
-
if (this.page) {
|
|
347
|
-
await this.page.close();
|
|
348
|
-
this.page = null;
|
|
349
|
-
}
|
|
350
|
-
if (this.browser) {
|
|
351
|
-
await this.browser.close();
|
|
352
|
-
this.browser = null;
|
|
353
|
-
}
|
|
354
|
-
logger.debug('Browser closed');
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
//# sourceMappingURL=browser-doc-browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser-doc-browser.js","sourceRoot":"","sources":["../../src/documentation/browser-doc-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { type Browser } from 'puppeteer-core';
|
|
2
|
-
export interface BrowserConfig {
|
|
3
|
-
executablePath?: string;
|
|
4
|
-
headless?: boolean;
|
|
5
|
-
timeout?: number;
|
|
6
|
-
waitForTimeout?: number;
|
|
7
|
-
networkIdleTimeout?: number;
|
|
8
|
-
}
|
|
9
|
-
export interface BrowserRenderResult {
|
|
10
|
-
html: string;
|
|
11
|
-
title: string;
|
|
12
|
-
url: string;
|
|
13
|
-
links: Array<{
|
|
14
|
-
text: string;
|
|
15
|
-
url: string;
|
|
16
|
-
}>;
|
|
17
|
-
screenshots?: string[];
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Browser manager for SPA rendering using puppeteer-core
|
|
21
|
-
* Detects and uses system Chrome/Chromium/Edge
|
|
22
|
-
*/
|
|
23
|
-
export declare class BrowserManager {
|
|
24
|
-
private browser?;
|
|
25
|
-
private config;
|
|
26
|
-
private readonly BROWSER_PATHS;
|
|
27
|
-
constructor();
|
|
28
|
-
/**
|
|
29
|
-
* Detect system browser
|
|
30
|
-
* Returns path to Chrome/Chromium/Edge or null
|
|
31
|
-
*/
|
|
32
|
-
detectBrowser(): Promise<string | null>;
|
|
33
|
-
/**
|
|
34
|
-
* Launch browser instance
|
|
35
|
-
*/
|
|
36
|
-
launch(config?: Partial<BrowserConfig>): Promise<Browser>;
|
|
37
|
-
/**
|
|
38
|
-
* Render a page and extract content
|
|
39
|
-
* Uses balanced performance mode
|
|
40
|
-
*/
|
|
41
|
-
renderPage(url: string): Promise<BrowserRenderResult>;
|
|
42
|
-
/**
|
|
43
|
-
* Close browser instance and cleanup resources
|
|
44
|
-
*/
|
|
45
|
-
close(): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Check if browser is currently launched
|
|
48
|
-
*/
|
|
49
|
-
isLaunched(): boolean;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=browser-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser-manager.d.ts","sourceRoot":"","sources":["../../src/documentation/browser-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAa,MAAM,gBAAgB,CAAC;AAOjE,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAwB;IAGtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAoB5B;;IAYF;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6D7C;;OAEG;IACG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAyD/D;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgF3D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB"}
|