@gulibs/safe-coder 0.0.12 → 0.0.14
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 +107 -1
- package/dist/documentation/doc-crawler.d.ts +66 -0
- package/dist/documentation/doc-crawler.d.ts.map +1 -0
- package/dist/documentation/doc-crawler.js +206 -0
- package/dist/documentation/doc-crawler.js.map +1 -0
- package/dist/documentation/skill-generator.d.ts +70 -0
- package/dist/documentation/skill-generator.d.ts.map +1 -0
- package/dist/documentation/skill-generator.js +346 -0
- package/dist/documentation/skill-generator.js.map +1 -0
- package/dist/server/mcp-server.d.ts +2 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +117 -1
- package/dist/server/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
一个基于 Model Context Protocol (MCP) 的服务器,提供以下功能:
|
|
4
4
|
- **最新库文档** - 从 npm、GitHub 和 HTTP 源获取文档
|
|
5
|
+
- **文档爬取和技能生成** - 递归爬取文档网站并生成 Agent Skill
|
|
6
|
+
- **网页文档浏览** - 浏览和搜索网页文档内容
|
|
5
7
|
- **全面错误检测** - 使用 ESLint、TypeScript、模式匹配和上下文分析
|
|
6
8
|
- **代码验证** - 带自动修复功能
|
|
7
9
|
- **错误解决方案建议** - 针对常见编码问题
|
|
@@ -16,6 +18,21 @@
|
|
|
16
18
|
- 智能缓存,基于版本键和 TTL
|
|
17
19
|
- 热门包的背景刷新
|
|
18
20
|
|
|
21
|
+
### 文档爬取和技能生成
|
|
22
|
+
|
|
23
|
+
- 递归爬取文档网站,自动跟踪文档链接
|
|
24
|
+
- 智能边界检测,只在文档路径内爬取
|
|
25
|
+
- 生成结构化的 Agent Skill 输出(Markdown 格式)
|
|
26
|
+
- 支持深度限制、页面限制和速率控制
|
|
27
|
+
- 自动组织内容,生成目录和章节
|
|
28
|
+
|
|
29
|
+
### 网页文档浏览
|
|
30
|
+
|
|
31
|
+
- 浏览和搜索网页文档内容
|
|
32
|
+
- 自动检测文档页面(节省 token)
|
|
33
|
+
- 支持查询过滤和导航链接提取
|
|
34
|
+
- 智能内容提取和组织
|
|
35
|
+
|
|
19
36
|
### 错误检测
|
|
20
37
|
|
|
21
38
|
- 多层检测:
|
|
@@ -384,6 +401,63 @@ pwd
|
|
|
384
401
|
}
|
|
385
402
|
```
|
|
386
403
|
|
|
404
|
+
#### `browse_documentation` - 浏览网页文档
|
|
405
|
+
|
|
406
|
+
浏览和搜索网页文档页面。
|
|
407
|
+
|
|
408
|
+
**参数:**
|
|
409
|
+
- `url`(必需):文档 URL
|
|
410
|
+
- `query`(可选):搜索查询词,用于过滤内容
|
|
411
|
+
- `navigateTo`(可选):导航到文档内的其他页面
|
|
412
|
+
|
|
413
|
+
**使用示例:**
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
浏览 https://react.dev/docs/getting-started 的文档
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
在 https://expressjs.com/en/guide 中查找关于路由的内容
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
#### `crawl_documentation` - 爬取文档并生成技能
|
|
424
|
+
|
|
425
|
+
递归爬取文档网站,提取内容并生成结构化的 Agent Skill。
|
|
426
|
+
|
|
427
|
+
**参数:**
|
|
428
|
+
- `url`(必需):文档根 URL
|
|
429
|
+
- `maxDepth`(可选):最大爬取深度(默认:3)
|
|
430
|
+
- `maxPages`(可选):最大页面数(默认:50)
|
|
431
|
+
- `includePaths`(可选):额外包含的路径模式
|
|
432
|
+
- `excludePaths`(可选):排除的路径模式
|
|
433
|
+
- `rateLimit`(可选):请求间隔(毫秒,默认:500)
|
|
434
|
+
- `outputDir`(可选):保存技能文件的目录(如果不提供,只返回内容)
|
|
435
|
+
- `filename`(可选):自定义文件名(不含扩展名)
|
|
436
|
+
|
|
437
|
+
**使用示例:**
|
|
438
|
+
|
|
439
|
+
```
|
|
440
|
+
爬取 https://react.dev/docs 的文档并生成技能
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
从 https://nextjs.org/docs 生成 agent skill,深度限制为 2,最多 10 页,保存到 ./output
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**输出:**
|
|
448
|
+
- `skillContent`: Markdown 格式的技能内容
|
|
449
|
+
- `metadata`: 技能元数据(标题、描述、源 URL 等)
|
|
450
|
+
- `crawlStats`: 爬取统计(总页数、最大深度、错误列表)
|
|
451
|
+
- `files`(可选):保存的文件路径
|
|
452
|
+
- `skillFile`: 技能 Markdown 文件路径(如果提供了 outputDir)
|
|
453
|
+
- `manifestFile`: 元数据 JSON 文件路径(如果提供了 outputDir)
|
|
454
|
+
|
|
455
|
+
**文件保存:**
|
|
456
|
+
- 如果提供了 `outputDir`,会保存两个文件:
|
|
457
|
+
- `{filename}.md`: 技能内容文件
|
|
458
|
+
- `{filename}.metadata.json`: 元数据文件
|
|
459
|
+
- 文件名自动从 URL 生成,或使用自定义 `filename` 参数
|
|
460
|
+
|
|
387
461
|
#### `detect_errors` - 检测错误
|
|
388
462
|
|
|
389
463
|
检测代码中的错误和警告。
|
|
@@ -450,7 +524,11 @@ function test() {
|
|
|
450
524
|
```
|
|
451
525
|
safe-coder/
|
|
452
526
|
├── src/
|
|
453
|
-
│ ├── documentation/ #
|
|
527
|
+
│ ├── documentation/ # 文档获取、缓存、爬取和技能生成
|
|
528
|
+
│ │ ├── index.ts # 文档服务
|
|
529
|
+
│ │ ├── web-doc-browser.ts # 网页文档浏览
|
|
530
|
+
│ │ ├── doc-crawler.ts # 文档爬取
|
|
531
|
+
│ │ └── skill-generator.ts # 技能生成
|
|
454
532
|
│ ├── errors/ # 错误检测(ESLint、TypeScript、模式、上下文)
|
|
455
533
|
│ ├── validation/ # 代码验证和自动修复
|
|
456
534
|
│ ├── server/ # MCP 服务器实现
|
|
@@ -539,6 +617,34 @@ npm run lint
|
|
|
539
617
|
- 添加新的错误模式
|
|
540
618
|
- 重新构建项目
|
|
541
619
|
|
|
620
|
+
### Q: 文档爬取工具如何使用?
|
|
621
|
+
|
|
622
|
+
**A:**
|
|
623
|
+
- 使用 `crawl_documentation` 工具,提供文档根 URL
|
|
624
|
+
- 工具会自动检测文档页面,跟踪链接,生成技能
|
|
625
|
+
- 支持配置深度和页面限制
|
|
626
|
+
- 详见 `DOC_CRAWLER_USAGE.md`
|
|
627
|
+
|
|
628
|
+
**示例:**
|
|
629
|
+
```
|
|
630
|
+
爬取 https://react.dev/docs 的文档并生成技能
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### Q: 爬取大型文档站点时需要注意什么?
|
|
634
|
+
|
|
635
|
+
**A:**
|
|
636
|
+
- 使用 `maxPages` 参数限制页面数量(默认 50)
|
|
637
|
+
- 使用 `maxDepth` 参数限制爬取深度(默认 3)
|
|
638
|
+
- 调整 `rateLimit` 避免对服务器造成压力(默认 500ms)
|
|
639
|
+
- 大型站点建议分多次爬取不同部分
|
|
640
|
+
|
|
641
|
+
### Q: 网页文档浏览和文档爬取有什么区别?
|
|
642
|
+
|
|
643
|
+
**A:**
|
|
644
|
+
- **`browse_documentation`**: 浏览单个文档页面,支持查询和导航
|
|
645
|
+
- **`crawl_documentation`**: 递归爬取多个页面,生成完整的技能文件
|
|
646
|
+
- 浏览适合查看特定内容,爬取适合生成完整文档技能
|
|
647
|
+
|
|
542
648
|
## 发布到 npm(开发者)
|
|
543
649
|
|
|
544
650
|
如果你想将这个包发布到 npm:
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { HttpClient } from '../utils/http-client.js';
|
|
2
|
+
export interface CrawlOptions {
|
|
3
|
+
maxDepth?: number;
|
|
4
|
+
maxPages?: number;
|
|
5
|
+
includePaths?: string[];
|
|
6
|
+
excludePaths?: string[];
|
|
7
|
+
rateLimit?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface CrawledPage {
|
|
10
|
+
url: string;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
depth: number;
|
|
14
|
+
sections: Array<{
|
|
15
|
+
title: string;
|
|
16
|
+
content: string;
|
|
17
|
+
anchor?: string;
|
|
18
|
+
}>;
|
|
19
|
+
navigationLinks: Array<{
|
|
20
|
+
text: string;
|
|
21
|
+
url: string;
|
|
22
|
+
isInternal: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export interface CrawlResult {
|
|
26
|
+
pages: CrawledPage[];
|
|
27
|
+
totalPages: number;
|
|
28
|
+
maxDepthReached: number;
|
|
29
|
+
errors: Array<{
|
|
30
|
+
url: string;
|
|
31
|
+
error: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare class DocumentationCrawler {
|
|
35
|
+
private browser;
|
|
36
|
+
private visitedUrls;
|
|
37
|
+
private urlQueue;
|
|
38
|
+
private crawledPages;
|
|
39
|
+
private errors;
|
|
40
|
+
private options;
|
|
41
|
+
private baseUrl;
|
|
42
|
+
private readonly DOCUMENTATION_PATTERNS;
|
|
43
|
+
private readonly EXCLUDED_PATTERNS;
|
|
44
|
+
constructor(httpClient?: HttpClient);
|
|
45
|
+
/**
|
|
46
|
+
* Crawl documentation starting from a root URL
|
|
47
|
+
*/
|
|
48
|
+
crawl(rootUrl: string, options?: CrawlOptions): Promise<CrawlResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Discover documentation links from a crawled page
|
|
51
|
+
*/
|
|
52
|
+
private discoverDocumentationLinks;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a path is a documentation path
|
|
55
|
+
*/
|
|
56
|
+
private isDocumentationPath;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a path should be excluded
|
|
59
|
+
*/
|
|
60
|
+
private shouldExclude;
|
|
61
|
+
/**
|
|
62
|
+
* Delay helper for rate limiting
|
|
63
|
+
*/
|
|
64
|
+
private delay;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=doc-crawler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-crawler.d.ts","sourceRoot":"","sources":["../../src/documentation/doc-crawler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CASrC;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAShC;gBAEU,UAAU,CAAC,EAAE,UAAU;IAgBnC;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkG9E;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmElC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { WebDocumentationBrowser } from './web-doc-browser.js';
|
|
2
|
+
export class DocumentationCrawler {
|
|
3
|
+
browser;
|
|
4
|
+
visitedUrls;
|
|
5
|
+
urlQueue;
|
|
6
|
+
crawledPages;
|
|
7
|
+
errors;
|
|
8
|
+
options;
|
|
9
|
+
baseUrl;
|
|
10
|
+
DOCUMENTATION_PATTERNS = [
|
|
11
|
+
/\/docs?\//i,
|
|
12
|
+
/\/documentation/i,
|
|
13
|
+
/\/guide/i,
|
|
14
|
+
/\/tutorial/i,
|
|
15
|
+
/\/api/i,
|
|
16
|
+
/\/reference/i,
|
|
17
|
+
/\/manual/i,
|
|
18
|
+
/\/help/i,
|
|
19
|
+
];
|
|
20
|
+
EXCLUDED_PATTERNS = [
|
|
21
|
+
/\/login/i,
|
|
22
|
+
/\/signup/i,
|
|
23
|
+
/\/register/i,
|
|
24
|
+
/\/checkout/i,
|
|
25
|
+
/\/cart/i,
|
|
26
|
+
/\/payment/i,
|
|
27
|
+
/\/home$/i,
|
|
28
|
+
/^\/$/,
|
|
29
|
+
];
|
|
30
|
+
constructor(httpClient) {
|
|
31
|
+
this.browser = new WebDocumentationBrowser(httpClient);
|
|
32
|
+
this.visitedUrls = new Set();
|
|
33
|
+
this.urlQueue = [];
|
|
34
|
+
this.crawledPages = [];
|
|
35
|
+
this.errors = [];
|
|
36
|
+
this.options = {
|
|
37
|
+
maxDepth: 3,
|
|
38
|
+
maxPages: 50,
|
|
39
|
+
includePaths: [],
|
|
40
|
+
excludePaths: [],
|
|
41
|
+
rateLimit: 500, // 500ms default delay
|
|
42
|
+
};
|
|
43
|
+
this.baseUrl = new URL('https://example.com');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Crawl documentation starting from a root URL
|
|
47
|
+
*/
|
|
48
|
+
async crawl(rootUrl, options = {}) {
|
|
49
|
+
// Reset state
|
|
50
|
+
this.visitedUrls.clear();
|
|
51
|
+
this.urlQueue = [];
|
|
52
|
+
this.crawledPages = [];
|
|
53
|
+
this.errors = [];
|
|
54
|
+
// Merge options
|
|
55
|
+
this.options = {
|
|
56
|
+
...this.options,
|
|
57
|
+
...options,
|
|
58
|
+
};
|
|
59
|
+
// Parse and validate root URL
|
|
60
|
+
try {
|
|
61
|
+
this.baseUrl = new URL(rootUrl);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw new Error(`Invalid root URL: ${rootUrl}`);
|
|
65
|
+
}
|
|
66
|
+
// Check if root URL is documentation
|
|
67
|
+
const isDoc = await this.browser.isDocumentationPage(rootUrl);
|
|
68
|
+
if (!isDoc) {
|
|
69
|
+
throw new Error(`The provided URL does not appear to be a documentation page: ${rootUrl}`);
|
|
70
|
+
}
|
|
71
|
+
// Start crawling from root
|
|
72
|
+
this.urlQueue.push({ url: rootUrl, depth: 0 });
|
|
73
|
+
let maxDepthReached = 0;
|
|
74
|
+
// Process queue
|
|
75
|
+
while (this.urlQueue.length > 0 && this.crawledPages.length < this.options.maxPages) {
|
|
76
|
+
const queued = this.urlQueue.shift();
|
|
77
|
+
if (!queued)
|
|
78
|
+
break;
|
|
79
|
+
const { url, depth } = queued;
|
|
80
|
+
// Skip if already visited
|
|
81
|
+
if (this.visitedUrls.has(url)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Check depth limit
|
|
85
|
+
if (depth > this.options.maxDepth) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Mark as visited
|
|
89
|
+
this.visitedUrls.add(url);
|
|
90
|
+
maxDepthReached = Math.max(maxDepthReached, depth);
|
|
91
|
+
try {
|
|
92
|
+
// Crawl the page
|
|
93
|
+
const page = await this.browser.browsePage(url);
|
|
94
|
+
// Convert to CrawledPage format
|
|
95
|
+
const crawledPage = {
|
|
96
|
+
url: page.url,
|
|
97
|
+
title: page.title,
|
|
98
|
+
content: page.content,
|
|
99
|
+
depth,
|
|
100
|
+
sections: page.sections,
|
|
101
|
+
navigationLinks: page.navigationLinks,
|
|
102
|
+
};
|
|
103
|
+
this.crawledPages.push(crawledPage);
|
|
104
|
+
// Discover and queue new URLs
|
|
105
|
+
if (depth < this.options.maxDepth) {
|
|
106
|
+
const newUrls = this.discoverDocumentationLinks(page, depth + 1);
|
|
107
|
+
for (const newUrl of newUrls) {
|
|
108
|
+
if (!this.visitedUrls.has(newUrl.url)) {
|
|
109
|
+
this.urlQueue.push(newUrl);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Rate limiting
|
|
114
|
+
if (this.options.rateLimit > 0 && this.urlQueue.length > 0) {
|
|
115
|
+
await this.delay(this.options.rateLimit);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
this.errors.push({
|
|
120
|
+
url,
|
|
121
|
+
error: error instanceof Error ? error.message : String(error),
|
|
122
|
+
});
|
|
123
|
+
// Continue crawling other pages
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
pages: this.crawledPages,
|
|
128
|
+
totalPages: this.crawledPages.length,
|
|
129
|
+
maxDepthReached,
|
|
130
|
+
errors: this.errors,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Discover documentation links from a crawled page
|
|
135
|
+
*/
|
|
136
|
+
discoverDocumentationLinks(page, nextDepth) {
|
|
137
|
+
const discovered = [];
|
|
138
|
+
for (const link of page.navigationLinks) {
|
|
139
|
+
// Only follow internal links
|
|
140
|
+
if (!link.isInternal) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const linkUrl = new URL(link.url);
|
|
145
|
+
// Must be same origin
|
|
146
|
+
if (linkUrl.origin !== this.baseUrl.origin) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// Check if it's a documentation path
|
|
150
|
+
if (!this.isDocumentationPath(linkUrl.pathname)) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// Check exclude patterns
|
|
154
|
+
if (this.shouldExclude(linkUrl.pathname)) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// Check include patterns (if specified)
|
|
158
|
+
if (this.options.includePaths.length > 0) {
|
|
159
|
+
const matchesInclude = this.options.includePaths.some(pattern => linkUrl.pathname.includes(pattern));
|
|
160
|
+
if (!matchesInclude) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Check exclude patterns (if specified)
|
|
165
|
+
if (this.options.excludePaths.length > 0) {
|
|
166
|
+
const matchesExclude = this.options.excludePaths.some(pattern => linkUrl.pathname.includes(pattern));
|
|
167
|
+
if (matchesExclude) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Normalize URL (remove fragments)
|
|
172
|
+
const normalizedUrl = linkUrl.href.split('#')[0];
|
|
173
|
+
// Add to discovered links
|
|
174
|
+
discovered.push({
|
|
175
|
+
url: normalizedUrl,
|
|
176
|
+
depth: nextDepth,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// Invalid URL, skip
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return discovered;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if a path is a documentation path
|
|
188
|
+
*/
|
|
189
|
+
isDocumentationPath(pathname) {
|
|
190
|
+
// Check against documentation patterns
|
|
191
|
+
return this.DOCUMENTATION_PATTERNS.some(pattern => pattern.test(pathname));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check if a path should be excluded
|
|
195
|
+
*/
|
|
196
|
+
shouldExclude(pathname) {
|
|
197
|
+
return this.EXCLUDED_PATTERNS.some(pattern => pattern.test(pathname));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Delay helper for rate limiting
|
|
201
|
+
*/
|
|
202
|
+
delay(ms) {
|
|
203
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=doc-crawler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-crawler.js","sourceRoot":"","sources":["../../src/documentation/doc-crawler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { CrawlResult } from './doc-crawler.js';
|
|
2
|
+
export interface SkillMetadata {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
sourceUrl: string;
|
|
6
|
+
pagesCrawled: number;
|
|
7
|
+
maxDepthReached: number;
|
|
8
|
+
generatedAt: string;
|
|
9
|
+
sourceUrls: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface GeneratedSkill {
|
|
12
|
+
skillMd: string;
|
|
13
|
+
referenceFiles: Map<string, string>;
|
|
14
|
+
metadata: SkillMetadata;
|
|
15
|
+
skillName: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SavedSkillFiles {
|
|
18
|
+
skillDir: string;
|
|
19
|
+
skillMdPath: string;
|
|
20
|
+
referenceFiles: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare class SkillGenerator {
|
|
23
|
+
private readonly CONTENT_PREVIEW_LENGTH;
|
|
24
|
+
private readonly MIN_CATEGORIZATION_SCORE;
|
|
25
|
+
/**
|
|
26
|
+
* Generate agent skill from crawled documentation
|
|
27
|
+
*/
|
|
28
|
+
generateSkill(crawlResult: CrawlResult, rootUrl: string, skillName?: string): GeneratedSkill;
|
|
29
|
+
/**
|
|
30
|
+
* Generate skill name from URL or provided name (sanitized)
|
|
31
|
+
*/
|
|
32
|
+
private generateSkillName;
|
|
33
|
+
/**
|
|
34
|
+
* Extract title from URL or first page
|
|
35
|
+
*/
|
|
36
|
+
private extractTitle;
|
|
37
|
+
/**
|
|
38
|
+
* Generate description
|
|
39
|
+
*/
|
|
40
|
+
private generateDescription;
|
|
41
|
+
/**
|
|
42
|
+
* Categorize pages into categories based on URL patterns and content
|
|
43
|
+
*/
|
|
44
|
+
private categorizePages;
|
|
45
|
+
/**
|
|
46
|
+
* Infer categories from URL patterns
|
|
47
|
+
*/
|
|
48
|
+
private inferCategories;
|
|
49
|
+
/**
|
|
50
|
+
* Generate reference files for each category
|
|
51
|
+
*/
|
|
52
|
+
private generateReferenceFiles;
|
|
53
|
+
/**
|
|
54
|
+
* Generate SKILL.md with YAML frontmatter
|
|
55
|
+
*/
|
|
56
|
+
private generateSkillMd;
|
|
57
|
+
/**
|
|
58
|
+
* Save skill to file system in proper directory structure
|
|
59
|
+
*/
|
|
60
|
+
saveSkill(skill: GeneratedSkill, outputDir: string, filename?: string): Promise<SavedSkillFiles>;
|
|
61
|
+
/**
|
|
62
|
+
* Slugify text for anchor links
|
|
63
|
+
*/
|
|
64
|
+
private slugify;
|
|
65
|
+
/**
|
|
66
|
+
* Capitalize first letter
|
|
67
|
+
*/
|
|
68
|
+
private capitalize;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=skill-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/documentation/skill-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAK;IAE9C;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc;IA6C5F;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsDvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoEvB;;OAEG;IACG,SAAS,CACX,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC;IA+C3B;;OAEG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;IACH,OAAO,CAAC,UAAU;CAGrB"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
export class SkillGenerator {
|
|
4
|
+
CONTENT_PREVIEW_LENGTH = 500;
|
|
5
|
+
MIN_CATEGORIZATION_SCORE = 2;
|
|
6
|
+
/**
|
|
7
|
+
* Generate agent skill from crawled documentation
|
|
8
|
+
*/
|
|
9
|
+
generateSkill(crawlResult, rootUrl, skillName) {
|
|
10
|
+
const { pages, totalPages, maxDepthReached, errors } = crawlResult;
|
|
11
|
+
if (pages.length === 0) {
|
|
12
|
+
throw new Error('No pages were successfully crawled');
|
|
13
|
+
}
|
|
14
|
+
// Generate skill name
|
|
15
|
+
const name = skillName || this.generateSkillName(rootUrl, pages[0]);
|
|
16
|
+
// Generate title from root URL or first page
|
|
17
|
+
const title = this.extractTitle(rootUrl, pages[0]);
|
|
18
|
+
// Generate description (truncated to 1024 chars)
|
|
19
|
+
const description = this.generateDescription(rootUrl, totalPages, maxDepthReached);
|
|
20
|
+
const truncatedDescription = description.length > 1024 ? description.substring(0, 1021) + '...' : description;
|
|
21
|
+
// Categorize pages
|
|
22
|
+
const categories = this.categorizePages(pages);
|
|
23
|
+
// Generate reference files
|
|
24
|
+
const referenceFiles = this.generateReferenceFiles(categories, name);
|
|
25
|
+
// Generate SKILL.md with YAML frontmatter
|
|
26
|
+
const skillMd = this.generateSkillMd(name, truncatedDescription, categories, pages);
|
|
27
|
+
// Generate metadata
|
|
28
|
+
const metadata = {
|
|
29
|
+
title,
|
|
30
|
+
description: truncatedDescription,
|
|
31
|
+
sourceUrl: rootUrl,
|
|
32
|
+
pagesCrawled: totalPages,
|
|
33
|
+
maxDepthReached,
|
|
34
|
+
generatedAt: new Date().toISOString(),
|
|
35
|
+
sourceUrls: pages.map(p => p.url),
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
skillMd,
|
|
39
|
+
referenceFiles,
|
|
40
|
+
metadata,
|
|
41
|
+
skillName: name,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate skill name from URL or provided name (sanitized)
|
|
46
|
+
*/
|
|
47
|
+
generateSkillName(rootUrl, firstPage) {
|
|
48
|
+
try {
|
|
49
|
+
const url = new URL(rootUrl);
|
|
50
|
+
const hostname = url.hostname.replace('www.', '').replace(/\./g, '-');
|
|
51
|
+
const pathParts = url.pathname.split('/').filter(p => p && p !== 'docs' && p !== 'documentation');
|
|
52
|
+
const pathPart = pathParts.length > 0 ? pathParts[pathParts.length - 1] : 'docs';
|
|
53
|
+
// Sanitize: lowercase, hyphens only, max 64 chars
|
|
54
|
+
const sanitized = `${hostname}-${pathPart}`
|
|
55
|
+
.toLowerCase()
|
|
56
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
57
|
+
.replace(/-+/g, '-')
|
|
58
|
+
.replace(/^-|-$/g, '')
|
|
59
|
+
.substring(0, 64);
|
|
60
|
+
return sanitized || 'documentation-skill';
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Fallback to page title
|
|
64
|
+
const fromTitle = (firstPage.title || 'documentation')
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
67
|
+
.replace(/-+/g, '-')
|
|
68
|
+
.replace(/^-|-$/g, '')
|
|
69
|
+
.substring(0, 64);
|
|
70
|
+
return fromTitle || 'documentation-skill';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Extract title from URL or first page
|
|
75
|
+
*/
|
|
76
|
+
extractTitle(rootUrl, firstPage) {
|
|
77
|
+
try {
|
|
78
|
+
const url = new URL(rootUrl);
|
|
79
|
+
const hostname = url.hostname.replace('www.', '');
|
|
80
|
+
const pathParts = url.pathname.split('/').filter(p => p);
|
|
81
|
+
if (pathParts.length > 0) {
|
|
82
|
+
const lastPart = pathParts[pathParts.length - 1];
|
|
83
|
+
return `${hostname} - ${this.capitalize(lastPart)} Documentation`;
|
|
84
|
+
}
|
|
85
|
+
return `${hostname} Documentation`;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return firstPage.title || 'Documentation';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate description
|
|
93
|
+
*/
|
|
94
|
+
generateDescription(rootUrl, totalPages, maxDepth) {
|
|
95
|
+
return `Use when working with documentation at ${rootUrl}. Comprehensive documentation skill generated from ${rootUrl}. Crawled ${totalPages} pages up to depth ${maxDepth}.`;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Categorize pages into categories based on URL patterns and content
|
|
99
|
+
*/
|
|
100
|
+
categorizePages(pages) {
|
|
101
|
+
const categories = new Map();
|
|
102
|
+
const categoryDefs = this.inferCategories(pages);
|
|
103
|
+
// Initialize categories
|
|
104
|
+
for (const cat of categoryDefs.keys()) {
|
|
105
|
+
categories.set(cat, []);
|
|
106
|
+
}
|
|
107
|
+
categories.set('other', []);
|
|
108
|
+
// Categorize each page
|
|
109
|
+
for (const page of pages) {
|
|
110
|
+
const url = page.url.toLowerCase();
|
|
111
|
+
const title = page.title.toLowerCase();
|
|
112
|
+
const content = page.content.toLowerCase().substring(0, this.CONTENT_PREVIEW_LENGTH);
|
|
113
|
+
let categorized = false;
|
|
114
|
+
// Match against keywords
|
|
115
|
+
for (const [cat, keywords] of categoryDefs.entries()) {
|
|
116
|
+
let score = 0;
|
|
117
|
+
for (const keyword of keywords) {
|
|
118
|
+
const lowerKeyword = keyword.toLowerCase();
|
|
119
|
+
if (url.includes(lowerKeyword))
|
|
120
|
+
score += 3;
|
|
121
|
+
if (title.includes(lowerKeyword))
|
|
122
|
+
score += 2;
|
|
123
|
+
if (content.includes(lowerKeyword))
|
|
124
|
+
score += 1;
|
|
125
|
+
}
|
|
126
|
+
if (score >= this.MIN_CATEGORIZATION_SCORE) {
|
|
127
|
+
const catPages = categories.get(cat) || [];
|
|
128
|
+
catPages.push(page);
|
|
129
|
+
categories.set(cat, catPages);
|
|
130
|
+
categorized = true;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!categorized) {
|
|
135
|
+
const otherPages = categories.get('other') || [];
|
|
136
|
+
otherPages.push(page);
|
|
137
|
+
categories.set('other', otherPages);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Remove empty categories
|
|
141
|
+
for (const [cat, pages] of categories.entries()) {
|
|
142
|
+
if (pages.length === 0) {
|
|
143
|
+
categories.delete(cat);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return categories;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Infer categories from URL patterns
|
|
150
|
+
*/
|
|
151
|
+
inferCategories(pages) {
|
|
152
|
+
const urlSegments = new Map();
|
|
153
|
+
for (const page of pages) {
|
|
154
|
+
try {
|
|
155
|
+
const url = new URL(page.url);
|
|
156
|
+
const segments = url.pathname
|
|
157
|
+
.split('/')
|
|
158
|
+
.filter(s => s && !['en', 'stable', 'latest', 'docs', 'documentation'].includes(s));
|
|
159
|
+
for (const seg of segments) {
|
|
160
|
+
urlSegments.set(seg, (urlSegments.get(seg) || 0) + 1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Skip invalid URLs
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Top segments become categories
|
|
168
|
+
const sortedSegments = Array.from(urlSegments.entries())
|
|
169
|
+
.sort((a, b) => b[1] - a[1])
|
|
170
|
+
.slice(0, 8);
|
|
171
|
+
const categories = new Map();
|
|
172
|
+
for (const [seg, count] of sortedSegments) {
|
|
173
|
+
if (count >= 3) {
|
|
174
|
+
categories.set(seg, [seg]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Add common defaults
|
|
178
|
+
const allUrls = pages.map(p => p.url.toLowerCase());
|
|
179
|
+
if (!categories.has('tutorial') && allUrls.some(u => u.includes('tutorial'))) {
|
|
180
|
+
categories.set('tutorials', ['tutorial', 'guide', 'getting-started']);
|
|
181
|
+
}
|
|
182
|
+
if (!categories.has('api') && allUrls.some(u => u.includes('api') || u.includes('reference'))) {
|
|
183
|
+
categories.set('api', ['api', 'reference', 'class']);
|
|
184
|
+
}
|
|
185
|
+
return categories;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate reference files for each category
|
|
189
|
+
*/
|
|
190
|
+
generateReferenceFiles(categories, skillName) {
|
|
191
|
+
const referenceFiles = new Map();
|
|
192
|
+
for (const [category, pages] of categories.entries()) {
|
|
193
|
+
if (pages.length === 0)
|
|
194
|
+
continue;
|
|
195
|
+
const lines = [];
|
|
196
|
+
lines.push(`# ${this.capitalize(skillName)} - ${category.replace('_', ' ').split('-').map(this.capitalize).join(' ')}\n`);
|
|
197
|
+
lines.push(`**Pages:** ${pages.length}\n`);
|
|
198
|
+
lines.push('---\n');
|
|
199
|
+
for (const page of pages) {
|
|
200
|
+
lines.push(`## ${page.title}\n`);
|
|
201
|
+
lines.push(`**URL:** ${page.url}\n`);
|
|
202
|
+
// Content
|
|
203
|
+
if (page.content) {
|
|
204
|
+
lines.push(page.content);
|
|
205
|
+
lines.push('');
|
|
206
|
+
}
|
|
207
|
+
// Sections
|
|
208
|
+
if (page.sections.length > 0) {
|
|
209
|
+
for (const section of page.sections) {
|
|
210
|
+
if (section.title && section.content) {
|
|
211
|
+
lines.push(`### ${section.title}\n`);
|
|
212
|
+
lines.push(section.content);
|
|
213
|
+
lines.push('');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
lines.push('---\n');
|
|
218
|
+
}
|
|
219
|
+
referenceFiles.set(category, lines.join('\n'));
|
|
220
|
+
}
|
|
221
|
+
return referenceFiles;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Generate SKILL.md with YAML frontmatter
|
|
225
|
+
*/
|
|
226
|
+
generateSkillMd(skillName, description, categories, allPages) {
|
|
227
|
+
const lines = [];
|
|
228
|
+
// YAML frontmatter
|
|
229
|
+
lines.push('---');
|
|
230
|
+
lines.push(`name: ${skillName}`);
|
|
231
|
+
lines.push(`description: ${description}`);
|
|
232
|
+
lines.push('---');
|
|
233
|
+
lines.push('');
|
|
234
|
+
// Title
|
|
235
|
+
lines.push(`# ${this.capitalize(skillName)} Skill\n`);
|
|
236
|
+
lines.push(`${description}\n`);
|
|
237
|
+
// When to Use This Skill
|
|
238
|
+
lines.push('## When to Use This Skill\n');
|
|
239
|
+
lines.push(`This skill should be triggered when:`);
|
|
240
|
+
lines.push(`- Working with ${skillName}`);
|
|
241
|
+
lines.push(`- Asking about ${skillName} features or APIs`);
|
|
242
|
+
lines.push(`- Implementing ${skillName} solutions`);
|
|
243
|
+
lines.push(`- Debugging ${skillName} code`);
|
|
244
|
+
lines.push(`- Learning ${skillName} best practices\n`);
|
|
245
|
+
// Quick Reference
|
|
246
|
+
lines.push('## Quick Reference\n');
|
|
247
|
+
lines.push('*Quick reference patterns will be added as you use the skill.*\n');
|
|
248
|
+
// Reference Files
|
|
249
|
+
lines.push('## Reference Files\n');
|
|
250
|
+
lines.push('This skill includes comprehensive documentation in `references/`:\n');
|
|
251
|
+
for (const category of Array.from(categories.keys()).sort()) {
|
|
252
|
+
const pages = categories.get(category) || [];
|
|
253
|
+
lines.push(`- **${category}.md** - ${category.replace('_', ' ').split('-').map(this.capitalize).join(' ')} documentation (${pages.length} pages)`);
|
|
254
|
+
}
|
|
255
|
+
lines.push('');
|
|
256
|
+
// Working with This Skill
|
|
257
|
+
lines.push('## Working with This Skill\n');
|
|
258
|
+
lines.push('### For Beginners');
|
|
259
|
+
lines.push('Start with the getting_started or tutorials reference files for foundational concepts.\n');
|
|
260
|
+
lines.push('### For Specific Features');
|
|
261
|
+
lines.push('Use the appropriate category reference file (api, guides, etc.) for detailed information.\n');
|
|
262
|
+
lines.push('### For Code Examples');
|
|
263
|
+
lines.push('The quick reference section above contains common patterns extracted from the official docs.\n');
|
|
264
|
+
// Resources
|
|
265
|
+
lines.push('## Resources\n');
|
|
266
|
+
lines.push('### references/');
|
|
267
|
+
lines.push('Organized documentation extracted from official sources. These files contain:');
|
|
268
|
+
lines.push('- Detailed explanations');
|
|
269
|
+
lines.push('- Code examples with language annotations');
|
|
270
|
+
lines.push('- Links to original documentation');
|
|
271
|
+
lines.push('- Table of contents for quick navigation\n');
|
|
272
|
+
lines.push('### scripts/');
|
|
273
|
+
lines.push('Add helper scripts here for common automation tasks.\n');
|
|
274
|
+
lines.push('### assets/');
|
|
275
|
+
lines.push('Add templates, boilerplate, or example projects here.\n');
|
|
276
|
+
// Notes
|
|
277
|
+
lines.push('## Notes\n');
|
|
278
|
+
lines.push('- This skill was automatically generated from official documentation');
|
|
279
|
+
lines.push('- Reference files preserve the structure and examples from source docs');
|
|
280
|
+
lines.push('- Code examples include language detection for better syntax highlighting');
|
|
281
|
+
lines.push('- Quick reference patterns are extracted from common usage examples in the docs\n');
|
|
282
|
+
return lines.join('\n');
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Save skill to file system in proper directory structure
|
|
286
|
+
*/
|
|
287
|
+
async saveSkill(skill, outputDir, filename) {
|
|
288
|
+
// Sanitize filename (lowercase, hyphens only, max 64 chars)
|
|
289
|
+
let skillDirName;
|
|
290
|
+
if (filename) {
|
|
291
|
+
skillDirName = filename
|
|
292
|
+
.toLowerCase()
|
|
293
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
294
|
+
.replace(/-+/g, '-')
|
|
295
|
+
.replace(/^-|-$/g, '')
|
|
296
|
+
.substring(0, 64) || 'documentation-skill';
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
skillDirName = skill.skillName;
|
|
300
|
+
}
|
|
301
|
+
// Create skill directory
|
|
302
|
+
const skillDir = join(outputDir, skillDirName);
|
|
303
|
+
await mkdir(skillDir, { recursive: true });
|
|
304
|
+
// Create references subdirectory
|
|
305
|
+
const referencesDir = join(skillDir, 'references');
|
|
306
|
+
await mkdir(referencesDir, { recursive: true });
|
|
307
|
+
// Create optional directories
|
|
308
|
+
const scriptsDir = join(skillDir, 'scripts');
|
|
309
|
+
const assetsDir = join(skillDir, 'assets');
|
|
310
|
+
await mkdir(scriptsDir, { recursive: true });
|
|
311
|
+
await mkdir(assetsDir, { recursive: true });
|
|
312
|
+
// Save SKILL.md
|
|
313
|
+
const skillMdPath = join(skillDir, 'SKILL.md');
|
|
314
|
+
await writeFile(skillMdPath, skill.skillMd, 'utf-8');
|
|
315
|
+
// Save reference files
|
|
316
|
+
const referenceFilePaths = [];
|
|
317
|
+
for (const [category, content] of skill.referenceFiles.entries()) {
|
|
318
|
+
const refFilePath = join(referencesDir, `${category}.md`);
|
|
319
|
+
await writeFile(refFilePath, content, 'utf-8');
|
|
320
|
+
referenceFilePaths.push(refFilePath);
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
skillDir,
|
|
324
|
+
skillMdPath,
|
|
325
|
+
referenceFiles: referenceFilePaths,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Slugify text for anchor links
|
|
330
|
+
*/
|
|
331
|
+
slugify(text) {
|
|
332
|
+
return text
|
|
333
|
+
.toLowerCase()
|
|
334
|
+
.replace(/[^\w\s-]/g, '')
|
|
335
|
+
.replace(/\s+/g, '-')
|
|
336
|
+
.replace(/-+/g, '-')
|
|
337
|
+
.trim();
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Capitalize first letter
|
|
341
|
+
*/
|
|
342
|
+
capitalize(text) {
|
|
343
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=skill-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/documentation/skill-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAcA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,UAAU,CAAwB;;IAoC1C,OAAO,CAAC,UAAU;IA8clB,OAAO,CAAC,cAAc;IAqDhB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3B"}
|
|
@@ -3,6 +3,8 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { DocumentationService } from '../documentation/index.js';
|
|
5
5
|
import { WebDocumentationBrowser } from '../documentation/web-doc-browser.js';
|
|
6
|
+
import { DocumentationCrawler } from '../documentation/doc-crawler.js';
|
|
7
|
+
import { SkillGenerator } from '../documentation/skill-generator.js';
|
|
6
8
|
import { ErrorDetectionService } from '../errors/index.js';
|
|
7
9
|
import { CodeValidationService } from '../validation/index.js';
|
|
8
10
|
import { loadConfig } from '../utils/config.js';
|
|
@@ -12,6 +14,8 @@ export class SafeCoderMCPServer {
|
|
|
12
14
|
server;
|
|
13
15
|
documentationService;
|
|
14
16
|
webDocBrowser;
|
|
17
|
+
docCrawler;
|
|
18
|
+
skillGenerator;
|
|
15
19
|
errorDetection;
|
|
16
20
|
validation;
|
|
17
21
|
constructor() {
|
|
@@ -23,6 +27,8 @@ export class SafeCoderMCPServer {
|
|
|
23
27
|
const config = loadConfig();
|
|
24
28
|
this.documentationService = new DocumentationService(config.cacheTTLMinutes, config.githubToken, config.proxy);
|
|
25
29
|
this.webDocBrowser = new WebDocumentationBrowser(config.proxy ? new HttpClient(config.proxy) : undefined);
|
|
30
|
+
this.docCrawler = new DocumentationCrawler(config.proxy ? new HttpClient(config.proxy) : undefined);
|
|
31
|
+
this.skillGenerator = new SkillGenerator();
|
|
26
32
|
this.errorDetection = new ErrorDetectionService(config.errorDetection?.enableRuntime ?? true, config.errorDetection?.enablePerformance ?? true, config.errorDetection?.enableSecurity ?? true, config.errorDetection?.enableFramework ?? true, config.errorDetection?.enableApiValidation ?? true, config.errorDetection?.enableCrossFile ?? false);
|
|
27
33
|
this.validation = new CodeValidationService();
|
|
28
34
|
this.setupTools();
|
|
@@ -193,7 +199,7 @@ export class SafeCoderMCPServer {
|
|
|
193
199
|
status: 'running',
|
|
194
200
|
uptime: process.uptime(),
|
|
195
201
|
version: '1.0.0',
|
|
196
|
-
tools: ['get_documentation', 'browse_documentation', 'detect_errors', 'validate_code', 'resolve_error', 'get_status'],
|
|
202
|
+
tools: ['get_documentation', 'browse_documentation', 'crawl_documentation', 'detect_errors', 'validate_code', 'resolve_error', 'get_status'],
|
|
197
203
|
cacheSize: cache.size(),
|
|
198
204
|
pid: process.pid,
|
|
199
205
|
};
|
|
@@ -328,6 +334,116 @@ export class SafeCoderMCPServer {
|
|
|
328
334
|
throw error;
|
|
329
335
|
}
|
|
330
336
|
});
|
|
337
|
+
// Register crawl_documentation tool
|
|
338
|
+
this.server.registerTool('crawl_documentation', {
|
|
339
|
+
title: 'Crawl Documentation and Generate Agent Skill',
|
|
340
|
+
description: 'Recursively crawl documentation websites starting from a root URL, follow documentation links, extract content from multiple pages, and generate structured agent skill output. Use this when the user wants to automatically aggregate documentation from a website, create comprehensive documentation skills, or crawl multiple documentation pages. The tool automatically detects documentation boundaries, follows links within the same domain and documentation paths, and generates Markdown-formatted skill output. Trigger phrases (English): "crawl documentation", "generate skill from docs", "scrape documentation site", "create agent skill from", "crawl docs from". Trigger phrases (Chinese): "爬取文档", "生成技能", "抓取文档网站", "从文档生成技能", "递归抓取文档".',
|
|
341
|
+
inputSchema: {
|
|
342
|
+
url: z.string().describe('Root documentation URL to start crawling from'),
|
|
343
|
+
maxDepth: z.number().optional().describe('Maximum crawl depth (default: 3)'),
|
|
344
|
+
maxPages: z.number().optional().describe('Maximum number of pages to crawl (default: 50)'),
|
|
345
|
+
includePaths: z.array(z.string()).optional().describe('Additional path patterns to include in crawl'),
|
|
346
|
+
excludePaths: z.array(z.string()).optional().describe('Path patterns to exclude from crawl'),
|
|
347
|
+
rateLimit: z.number().optional().describe('Delay in milliseconds between requests (default: 500)'),
|
|
348
|
+
outputDir: z.string().optional().describe('Directory to save skill files (default: no file saved, only returns content)'),
|
|
349
|
+
filename: z.string().optional().describe('Custom filename for skill file (without extension)'),
|
|
350
|
+
},
|
|
351
|
+
outputSchema: {
|
|
352
|
+
skillMd: z.string(),
|
|
353
|
+
metadata: z.object({
|
|
354
|
+
title: z.string(),
|
|
355
|
+
description: z.string(),
|
|
356
|
+
sourceUrl: z.string(),
|
|
357
|
+
pagesCrawled: z.number(),
|
|
358
|
+
maxDepthReached: z.number(),
|
|
359
|
+
generatedAt: z.string(),
|
|
360
|
+
sourceUrls: z.array(z.string()),
|
|
361
|
+
}),
|
|
362
|
+
crawlStats: z.object({
|
|
363
|
+
totalPages: z.number(),
|
|
364
|
+
maxDepthReached: z.number(),
|
|
365
|
+
errors: z.array(z.object({
|
|
366
|
+
url: z.string(),
|
|
367
|
+
error: z.string(),
|
|
368
|
+
})),
|
|
369
|
+
}),
|
|
370
|
+
files: z.object({
|
|
371
|
+
skillDir: z.string().optional(),
|
|
372
|
+
skillMdPath: z.string().optional(),
|
|
373
|
+
referenceFiles: z.array(z.string()).optional(),
|
|
374
|
+
}).optional(),
|
|
375
|
+
},
|
|
376
|
+
}, async (args) => {
|
|
377
|
+
const requestId = logger.generateRequestId();
|
|
378
|
+
const startTime = Date.now();
|
|
379
|
+
const { url, maxDepth, maxPages, includePaths, excludePaths, rateLimit, outputDir, filename } = args;
|
|
380
|
+
logger.toolInvoked('crawl_documentation', requestId, { url, maxDepth, maxPages, outputDir });
|
|
381
|
+
try {
|
|
382
|
+
// Crawl documentation
|
|
383
|
+
const crawlResult = await this.docCrawler.crawl(url, {
|
|
384
|
+
maxDepth,
|
|
385
|
+
maxPages,
|
|
386
|
+
includePaths,
|
|
387
|
+
excludePaths,
|
|
388
|
+
rateLimit,
|
|
389
|
+
});
|
|
390
|
+
// Generate skill (pass filename for skill name generation)
|
|
391
|
+
const skill = this.skillGenerator.generateSkill(crawlResult, url, filename);
|
|
392
|
+
// Save to file if outputDir is provided
|
|
393
|
+
let files;
|
|
394
|
+
if (outputDir) {
|
|
395
|
+
try {
|
|
396
|
+
const savedFiles = await this.skillGenerator.saveSkill(skill, outputDir, filename);
|
|
397
|
+
files = {
|
|
398
|
+
skillDir: savedFiles.skillDir,
|
|
399
|
+
skillMdPath: savedFiles.skillMdPath,
|
|
400
|
+
referenceFiles: savedFiles.referenceFiles,
|
|
401
|
+
};
|
|
402
|
+
logger.info(`Skill saved to directory: ${savedFiles.skillDir}`);
|
|
403
|
+
logger.info(` SKILL.md: ${savedFiles.skillMdPath}`);
|
|
404
|
+
logger.info(` Reference files: ${savedFiles.referenceFiles.length}`);
|
|
405
|
+
}
|
|
406
|
+
catch (saveError) {
|
|
407
|
+
logger.warn(`Failed to save skill files: ${saveError instanceof Error ? saveError.message : String(saveError)}`);
|
|
408
|
+
// Continue even if file save fails
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
const duration = Date.now() - startTime;
|
|
412
|
+
logger.toolCompleted('crawl_documentation', requestId, duration, true);
|
|
413
|
+
return {
|
|
414
|
+
content: [
|
|
415
|
+
{
|
|
416
|
+
type: 'text',
|
|
417
|
+
text: JSON.stringify({
|
|
418
|
+
skillMd: skill.skillMd,
|
|
419
|
+
metadata: skill.metadata,
|
|
420
|
+
crawlStats: {
|
|
421
|
+
totalPages: crawlResult.totalPages,
|
|
422
|
+
maxDepthReached: crawlResult.maxDepthReached,
|
|
423
|
+
errors: crawlResult.errors,
|
|
424
|
+
},
|
|
425
|
+
files,
|
|
426
|
+
}, null, 2),
|
|
427
|
+
},
|
|
428
|
+
],
|
|
429
|
+
structuredContent: {
|
|
430
|
+
skillMd: skill.skillMd,
|
|
431
|
+
metadata: skill.metadata,
|
|
432
|
+
crawlStats: {
|
|
433
|
+
totalPages: crawlResult.totalPages,
|
|
434
|
+
maxDepthReached: crawlResult.maxDepthReached,
|
|
435
|
+
errors: crawlResult.errors,
|
|
436
|
+
},
|
|
437
|
+
files,
|
|
438
|
+
},
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
const duration = Date.now() - startTime;
|
|
443
|
+
logger.toolError('crawl_documentation', requestId, error instanceof Error ? error : new Error(String(error)), { url });
|
|
444
|
+
throw error;
|
|
445
|
+
}
|
|
446
|
+
});
|
|
331
447
|
}
|
|
332
448
|
setupResources() {
|
|
333
449
|
// Register documentation resource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|