@gulibs/safe-coder 0.0.24 → 0.0.26
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 +447 -15
- package/dist/documentation/browser-manager.d.ts +51 -0
- package/dist/documentation/browser-manager.d.ts.map +1 -0
- package/dist/documentation/browser-manager.js +260 -0
- package/dist/documentation/browser-manager.js.map +1 -0
- package/dist/documentation/checkpoint-manager.d.ts +38 -0
- package/dist/documentation/checkpoint-manager.d.ts.map +1 -0
- package/dist/documentation/checkpoint-manager.js +101 -0
- package/dist/documentation/checkpoint-manager.js.map +1 -0
- package/dist/documentation/doc-crawler.d.ts +103 -1
- package/dist/documentation/doc-crawler.d.ts.map +1 -1
- package/dist/documentation/doc-crawler.js +931 -151
- package/dist/documentation/doc-crawler.js.map +1 -1
- package/dist/documentation/llms-txt/detector.d.ts +31 -0
- package/dist/documentation/llms-txt/detector.d.ts.map +1 -0
- package/dist/documentation/llms-txt/detector.js +77 -0
- package/dist/documentation/llms-txt/detector.js.map +1 -0
- package/dist/documentation/llms-txt/downloader.d.ts +30 -0
- package/dist/documentation/llms-txt/downloader.d.ts.map +1 -0
- package/dist/documentation/llms-txt/downloader.js +84 -0
- package/dist/documentation/llms-txt/downloader.js.map +1 -0
- package/dist/documentation/llms-txt/index.d.ts +4 -0
- package/dist/documentation/llms-txt/index.d.ts.map +1 -0
- package/dist/documentation/llms-txt/index.js +4 -0
- package/dist/documentation/llms-txt/index.js.map +1 -0
- package/dist/documentation/llms-txt/parser.d.ts +43 -0
- package/dist/documentation/llms-txt/parser.d.ts.map +1 -0
- package/dist/documentation/llms-txt/parser.js +177 -0
- package/dist/documentation/llms-txt/parser.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +48 -3
- package/dist/server/mcp-server.js.map +1 -1
- package/package.json +16 -11
package/README.md
CHANGED
|
@@ -18,18 +18,29 @@
|
|
|
18
18
|
- 智能缓存,基于版本键和 TTL
|
|
19
19
|
- 热门包的背景刷新
|
|
20
20
|
|
|
21
|
-
### 文档爬取和技能生成
|
|
21
|
+
### 文档爬取和技能生成 🚀
|
|
22
22
|
|
|
23
|
+
#### 核心功能
|
|
23
24
|
- 递归爬取文档网站,自动跟踪文档链接
|
|
24
25
|
- 智能边界检测,只在文档路径内爬取
|
|
25
26
|
- 生成结构化的 Agent Skill 输出(Markdown 格式)
|
|
26
27
|
- 支持深度限制、页面限制和速率控制
|
|
27
28
|
- 自动组织内容,生成目录和章节
|
|
29
|
+
|
|
30
|
+
#### 基础特性
|
|
28
31
|
- **SPA 检测**:自动检测单页应用并提供建议
|
|
29
32
|
- **智能重试**:对临时错误自动重试,提高成功率
|
|
30
33
|
- **错误分类**:详细的错误类型统计和分析
|
|
31
34
|
- **进度监控**:实时显示爬取进度和性能指标
|
|
32
35
|
|
|
36
|
+
#### 🌟 增强特性(新增)
|
|
37
|
+
- **双重爬取策略**:支持 BFS(广度优先)和 DFS(深度优先)两种策略
|
|
38
|
+
- **并行爬取**:1-10个worker并发,速度提升 **4-6倍** ⚡
|
|
39
|
+
- **断点续传**:中断后可恢复,支持大规模文档爬取
|
|
40
|
+
- **llms.txt支持**:自动检测和使用llms.txt文件,效率提升 **2-3倍** ⚡
|
|
41
|
+
- **Markdown支持**:完整支持.md文件爬取和结构化提取
|
|
42
|
+
- **智能质量检测**:6项指标多维度评估内容质量
|
|
43
|
+
|
|
33
44
|
### 网页文档浏览
|
|
34
45
|
|
|
35
46
|
- 浏览和搜索网页文档内容
|
|
@@ -435,11 +446,11 @@ pwd
|
|
|
435
446
|
在 https://expressjs.com/en/guide 中查找关于路由的内容
|
|
436
447
|
```
|
|
437
448
|
|
|
438
|
-
#### `crawl_documentation` -
|
|
449
|
+
#### `crawl_documentation` - 爬取文档并生成Agent Skill 🚀
|
|
439
450
|
|
|
440
451
|
递归爬取文档网站,提取内容并生成结构化的 Agent Skill。
|
|
441
452
|
|
|
442
|
-
|
|
453
|
+
**基础参数:**
|
|
443
454
|
- `url`(必需):文档根 URL
|
|
444
455
|
- `maxDepth`(可选):最大爬取深度(默认:3)
|
|
445
456
|
- `maxPages`(可选):最大页面数(默认:50)
|
|
@@ -451,35 +462,181 @@ pwd
|
|
|
451
462
|
- `outputDir`(可选):保存技能文件的目录(如果不提供,只返回内容)
|
|
452
463
|
- `filename`(可选):自定义文件名(不含扩展名)
|
|
453
464
|
|
|
454
|
-
|
|
465
|
+
**🌟 增强参数(新增):**
|
|
466
|
+
- `crawlStrategy`(可选):爬取策略 `'bfs'` | `'dfs'`(默认:bfs)
|
|
467
|
+
- **BFS**(广度优先):逐层爬取,适合全面覆盖
|
|
468
|
+
- **DFS**(深度优先):深入一条路径,适合深度理解
|
|
469
|
+
- `workers`(可选):并发worker数量 1-10(默认:1)
|
|
470
|
+
- 建议:小型站点2-3个,大型站点5-8个
|
|
471
|
+
- 性能提升:3 workers ≈ 3倍,5 workers ≈ 4-5倍
|
|
472
|
+
- `skipLlmsTxt`(可选):是否跳过llms.txt检测(默认:false)
|
|
473
|
+
- 启用时自动检测和使用llms.txt,效率提升2-3倍
|
|
474
|
+
- `checkpoint`(可选):断点续传配置
|
|
475
|
+
- `enabled`:是否启用断点功能
|
|
476
|
+
- `interval`:每N页保存一次(默认:10)
|
|
477
|
+
- `file`:checkpoint文件路径(可选)
|
|
478
|
+
- `resume`(可选):是否从上次断点恢复(默认:false)
|
|
479
|
+
|
|
480
|
+
**基础功能:**
|
|
455
481
|
- ✅ **SPA 检测**:自动检测单页应用(SPA)并提供建议
|
|
456
482
|
- ✅ **智能重试**:对临时错误(超时、网络错误等)自动重试
|
|
457
483
|
- ✅ **错误分类**:详细的错误类型分类和统计
|
|
458
484
|
- ✅ **进度日志**:实时显示爬取进度和统计信息
|
|
459
485
|
|
|
460
|
-
|
|
486
|
+
**🎯 使用示例:**
|
|
461
487
|
|
|
488
|
+
##### 1. 快速基础爬取
|
|
462
489
|
```
|
|
463
490
|
爬取 https://react.dev/docs 的文档并生成技能
|
|
464
491
|
```
|
|
465
492
|
|
|
493
|
+
##### 2. 并行加速爬取(推荐)
|
|
494
|
+
```
|
|
495
|
+
从 https://react.dev 生成 agent skill,使用 5 个并发worker,最多爬取 200 页
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
对应参数:
|
|
499
|
+
```json
|
|
500
|
+
{
|
|
501
|
+
"url": "https://react.dev",
|
|
502
|
+
"workers": 5,
|
|
503
|
+
"maxPages": 200,
|
|
504
|
+
"rateLimit": 200
|
|
505
|
+
}
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
##### 3. 深度优先策略
|
|
466
509
|
```
|
|
467
|
-
|
|
510
|
+
使用 DFS 策略爬取 https://docs.example.com,深度限制为 6
|
|
468
511
|
```
|
|
469
512
|
|
|
470
|
-
|
|
513
|
+
对应参数:
|
|
514
|
+
```json
|
|
515
|
+
{
|
|
516
|
+
"url": "https://docs.example.com",
|
|
517
|
+
"crawlStrategy": "dfs",
|
|
518
|
+
"maxDepth": 6,
|
|
519
|
+
"workers": 3
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
##### 4. 大规模爬取(带断点)
|
|
524
|
+
```
|
|
525
|
+
爬取 https://large-docs.com,最多 1000 页,启用断点每 50 页保存一次
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
对应参数:
|
|
529
|
+
```json
|
|
530
|
+
{
|
|
531
|
+
"url": "https://large-docs.com",
|
|
532
|
+
"maxPages": 1000,
|
|
533
|
+
"workers": 8,
|
|
534
|
+
"checkpoint": {
|
|
535
|
+
"enabled": true,
|
|
536
|
+
"interval": 50
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
##### 5. 恢复中断的爬取
|
|
542
|
+
```
|
|
543
|
+
从断点恢复 https://large-docs.com 的爬取
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
对应参数:
|
|
547
|
+
```json
|
|
548
|
+
{
|
|
549
|
+
"url": "https://large-docs.com",
|
|
550
|
+
"resume": true,
|
|
551
|
+
"checkpoint": { "enabled": true }
|
|
552
|
+
}
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
**📊 性能对比:**
|
|
556
|
+
|
|
557
|
+
| 爬取规模 | 串行模式 | 并行模式(workers=5) | 提升 |
|
|
558
|
+
|---------|---------|-------------------|------|
|
|
559
|
+
| 50页 | ~90秒 | ~22秒 | **4倍** ⚡ |
|
|
560
|
+
| 100页 | ~180秒 | ~45秒 | **4倍** ⚡ |
|
|
561
|
+
| 200页 | ~360秒 | ~80秒 | **4.5倍** ⚡ |
|
|
562
|
+
|
|
563
|
+
**输出内容:**
|
|
471
564
|
- `skillContent`: Markdown 格式的技能内容
|
|
472
565
|
- `metadata`: 技能元数据(标题、描述、源 URL 等)
|
|
473
|
-
- `crawlStats`:
|
|
566
|
+
- `crawlStats`: 爬取统计(总页数、最大深度、错误列表、质量指标)
|
|
474
567
|
- `files`(可选):保存的文件路径
|
|
475
|
-
- `skillFile`:
|
|
476
|
-
- `manifestFile`:
|
|
568
|
+
- `skillFile`: SKILL.md 文件路径
|
|
569
|
+
- `manifestFile`: metadata.json 文件路径
|
|
570
|
+
|
|
571
|
+
**💡 最佳实践:**
|
|
572
|
+
1. **先小规模测试**:maxPages设为10-20验证效果
|
|
573
|
+
2. **逐步增加并发**:从workers=2开始,观察效果
|
|
574
|
+
3. **大规模使用断点**:超过200页建议启用checkpoint
|
|
575
|
+
4. **关注质量指标**:diversity和coverage应 > 0.5
|
|
576
|
+
|
|
577
|
+
**🌐 SPA网站支持(新增):**
|
|
578
|
+
|
|
579
|
+
系统智能检测并处理单页应用(React、Vue、Angular等),自动切换HTTP和浏览器渲染模式。
|
|
580
|
+
|
|
581
|
+
##### 自动处理SPA(推荐)
|
|
582
|
+
```
|
|
583
|
+
爬取 https://react.dev 的文档 # 自动检测并处理SPA
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
##### SPA策略配置
|
|
587
|
+
```typescript
|
|
588
|
+
{
|
|
589
|
+
"spaStrategy": "smart", // smart(智能)| auto(自动)| manual(手动)
|
|
590
|
+
"spaFallback": "warn", // warn(警告)| skip(跳过)| error(错误)
|
|
591
|
+
"browserPath": "/path/to/chrome", // 可选:自定义浏览器路径
|
|
592
|
+
"waitForTimeout": 3000, // 可选:等待内容加载时间
|
|
593
|
+
"networkIdleTimeout": 500 // 可选:网络空闲等待时间
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
**三种SPA策略**:
|
|
598
|
+
- **smart(默认)**: HTTP优先,内容不足时自动切换浏览器(推荐)
|
|
599
|
+
- **auto**: 检测到SPA立即使用浏览器
|
|
600
|
+
- **manual**: 仅在useBrowserAutomation=true时使用浏览器
|
|
477
601
|
|
|
478
|
-
|
|
479
|
-
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
-
|
|
602
|
+
**浏览器要求**:
|
|
603
|
+
- ✅ 系统已安装Chrome/Chromium/Edge(推荐,自动检测)
|
|
604
|
+
- ✅ 或安装完整版puppeteer(自动下载Chromium)
|
|
605
|
+
- ✅ 或设置CHROME_PATH环境变量
|
|
606
|
+
- 📖 详见:[SPA浏览器设置指南](docs/SPA_BROWSER_SETUP.md)
|
|
607
|
+
|
|
608
|
+
**性能对比**:
|
|
609
|
+
- HTTP模式:0.5-1秒/页
|
|
610
|
+
- 浏览器模式:2-3秒/页
|
|
611
|
+
- smart策略:平均<1.5秒/页(自动优化)
|
|
612
|
+
|
|
613
|
+
**使用示例**:
|
|
614
|
+
|
|
615
|
+
快速SPA爬取:
|
|
616
|
+
```
|
|
617
|
+
爬取 https://vuejs.org,自动处理SPA,最多100页
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
已知SPA站点:
|
|
621
|
+
```
|
|
622
|
+
从 https://angular.io 生成技能,使用浏览器渲染,5个并发worker
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
对应参数:
|
|
626
|
+
```json
|
|
627
|
+
{
|
|
628
|
+
"url": "https://angular.io",
|
|
629
|
+
"spaStrategy": "auto",
|
|
630
|
+
"workers": 5,
|
|
631
|
+
"maxPages": 200
|
|
632
|
+
}
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**📚 详细文档:**
|
|
636
|
+
- SPA浏览器设置:`docs/SPA_BROWSER_SETUP.md`
|
|
637
|
+
- 完整使用指南:`docs/ENHANCED_CRAWLING.md`
|
|
638
|
+
- 快速上手:查看项目中的 `QUICKSTART_*.md` 文档
|
|
639
|
+
- 实施细节:`IMPLEMENTATION_SUMMARY.md`
|
|
483
640
|
|
|
484
641
|
#### `detect_errors` - 检测错误
|
|
485
642
|
|
|
@@ -678,8 +835,45 @@ npm run lint
|
|
|
678
835
|
- 使用 `maxPages` 参数限制页面数量(默认 50)
|
|
679
836
|
- 使用 `maxDepth` 参数限制爬取深度(默认 3)
|
|
680
837
|
- 调整 `rateLimit` 避免对服务器造成压力(默认 500ms)
|
|
838
|
+
- 使用 `workers` 参数启用并行爬取(推荐5-8个)
|
|
839
|
+
- 启用 `checkpoint` 断点续传(超过200页建议启用)
|
|
681
840
|
- 大型站点建议分多次爬取不同部分
|
|
682
841
|
|
|
842
|
+
### Q: 如何爬取SPA网站(React、Vue等)?
|
|
843
|
+
|
|
844
|
+
**A:**
|
|
845
|
+
- 系统自动检测SPA并智能切换到浏览器渲染
|
|
846
|
+
- 确保系统已安装Chrome/Chromium/Edge浏览器
|
|
847
|
+
- 使用 `spaStrategy: "smart"` 获得最佳性能(默认)
|
|
848
|
+
- 或使用 `spaStrategy: "auto"` 强制使用浏览器
|
|
849
|
+
- 详见:`docs/SPA_BROWSER_SETUP.md`
|
|
850
|
+
|
|
851
|
+
**示例**:
|
|
852
|
+
```
|
|
853
|
+
爬取 https://react.dev,自动处理SPA
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
### Q: 系统没有Chrome怎么办?
|
|
857
|
+
|
|
858
|
+
**A:**
|
|
859
|
+
有三种解决方案:
|
|
860
|
+
1. **安装Chrome**(推荐):
|
|
861
|
+
- macOS: `brew install --cask google-chrome`
|
|
862
|
+
- Windows: `winget install Google.Chrome`
|
|
863
|
+
- Linux: `sudo apt install google-chrome-stable`
|
|
864
|
+
|
|
865
|
+
2. **安装完整版puppeteer**(自动下载Chromium):
|
|
866
|
+
```bash
|
|
867
|
+
npm install puppeteer
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
3. **设置浏览器路径**:
|
|
871
|
+
```bash
|
|
872
|
+
export CHROME_PATH=/path/to/chrome
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
详细指南:`docs/SPA_BROWSER_SETUP.md`
|
|
876
|
+
|
|
683
877
|
### Q: 网页文档浏览和文档爬取有什么区别?
|
|
684
878
|
|
|
685
879
|
**A:**
|
|
@@ -800,6 +994,244 @@ chmod +x dist/index.js
|
|
|
800
994
|
|
|
801
995
|
MIT
|
|
802
996
|
|
|
997
|
+
## 🎓 在大模型中使用MCP Server生成Agent Skill
|
|
998
|
+
|
|
999
|
+
### 快速上手
|
|
1000
|
+
|
|
1001
|
+
#### 步骤1:在Claude/Cursor中触发爬取
|
|
1002
|
+
|
|
1003
|
+
**中文触发词:**
|
|
1004
|
+
```
|
|
1005
|
+
帮我爬取 https://react.dev 的文档并生成Agent Skill
|
|
1006
|
+
```
|
|
1007
|
+
|
|
1008
|
+
```
|
|
1009
|
+
使用并行爬取从 https://docs.example.com 生成技能,要快一点
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
```
|
|
1013
|
+
递归抓取 https://nextjs.org/docs 的文档,深度优先策略
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
**英文触发词:**
|
|
1017
|
+
```
|
|
1018
|
+
Crawl https://react.dev and generate an agent skill
|
|
1019
|
+
```
|
|
1020
|
+
|
|
1021
|
+
```
|
|
1022
|
+
Use parallel crawling to create a skill from https://docs.example.com
|
|
1023
|
+
```
|
|
1024
|
+
|
|
1025
|
+
```
|
|
1026
|
+
Recursive crawl https://nextjs.org/docs with DFS strategy
|
|
1027
|
+
```
|
|
1028
|
+
|
|
1029
|
+
#### 步骤2:配置爬取参数
|
|
1030
|
+
|
|
1031
|
+
Claude/Cursor会自动调用`crawl_documentation`工具,你可以在对话中指定参数:
|
|
1032
|
+
|
|
1033
|
+
**基础爬取:**
|
|
1034
|
+
```
|
|
1035
|
+
爬取 https://react.dev/docs,最多50页
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
**快速爬取(推荐):**
|
|
1039
|
+
```
|
|
1040
|
+
爬取 https://react.dev,使用5个并发worker,最多200页
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
**深度研究:**
|
|
1044
|
+
```
|
|
1045
|
+
使用DFS策略深入爬取 https://docs.example.com,深度限制为6层
|
|
1046
|
+
```
|
|
1047
|
+
|
|
1048
|
+
**大规模爬取:**
|
|
1049
|
+
```
|
|
1050
|
+
爬取 https://large-docs.com,最多1000页,启用断点续传每50页保存
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
### 使用场景
|
|
1054
|
+
|
|
1055
|
+
#### 场景1:快速探索新技术栈
|
|
1056
|
+
```
|
|
1057
|
+
帮我爬取 Svelte 的官方文档,快速生成一个技能
|
|
1058
|
+
```
|
|
1059
|
+
|
|
1060
|
+
**自动参数:**
|
|
1061
|
+
- workers: 3(快速)
|
|
1062
|
+
- maxPages: 50(快速探索)
|
|
1063
|
+
- crawlStrategy: bfs(全面覆盖)
|
|
1064
|
+
|
|
1065
|
+
#### 场景2:深入学习框架
|
|
1066
|
+
```
|
|
1067
|
+
深入爬取 Vue 3 的文档,我要完整理解它的 API
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
**自动参数:**
|
|
1071
|
+
- crawlStrategy: dfs(深入学习)
|
|
1072
|
+
- maxDepth: 5(深入层级)
|
|
1073
|
+
- workers: 5(加速)
|
|
1074
|
+
- maxPages: 200(完整覆盖)
|
|
1075
|
+
|
|
1076
|
+
#### 场景3:大型文档站点
|
|
1077
|
+
```
|
|
1078
|
+
爬取 MDN Web Docs 的 JavaScript 部分,分多次进行,支持断点恢复
|
|
1079
|
+
```
|
|
1080
|
+
|
|
1081
|
+
**自动参数:**
|
|
1082
|
+
- workers: 8(大规模)
|
|
1083
|
+
- maxPages: 1000
|
|
1084
|
+
- checkpoint: { enabled: true, interval: 50 }
|
|
1085
|
+
|
|
1086
|
+
#### 场景4:恢复中断的爬取
|
|
1087
|
+
```
|
|
1088
|
+
上次爬取中断了,从断点继续爬取 https://large-docs.com
|
|
1089
|
+
```
|
|
1090
|
+
|
|
1091
|
+
**自动参数:**
|
|
1092
|
+
- resume: true
|
|
1093
|
+
- checkpoint: { enabled: true }
|
|
1094
|
+
|
|
1095
|
+
### 生成的Agent Skill格式
|
|
1096
|
+
|
|
1097
|
+
爬取完成后,会生成标准的Claude Agent Skill格式:
|
|
1098
|
+
|
|
1099
|
+
```
|
|
1100
|
+
SKILL.md # 主技能文件
|
|
1101
|
+
├── 技能元数据(YAML frontmatter)
|
|
1102
|
+
├── When to Use This Skill # 使用场景
|
|
1103
|
+
├── Core Concepts # 核心概念
|
|
1104
|
+
├── API Reference # API参考
|
|
1105
|
+
├── Examples # 示例代码
|
|
1106
|
+
└── Reference Files # 引用文件列表
|
|
1107
|
+
|
|
1108
|
+
references/ # 引用文件目录
|
|
1109
|
+
├── page-1.md
|
|
1110
|
+
├── page-2.md
|
|
1111
|
+
└── ...
|
|
1112
|
+
```
|
|
1113
|
+
|
|
1114
|
+
### 技能质量指标
|
|
1115
|
+
|
|
1116
|
+
系统会自动评估生成的Skill质量:
|
|
1117
|
+
|
|
1118
|
+
| 指标 | 说明 | 优秀标准 |
|
|
1119
|
+
|-----|-----|---------|
|
|
1120
|
+
| **内容充足性** | 每页内容长度 | > 100字符/页 |
|
|
1121
|
+
| **结构完整性** | 标题、章节组织 | 至少1个标题/页 |
|
|
1122
|
+
| **内容多样性** | URL路径和主题分布 | diversity > 0.7 |
|
|
1123
|
+
| **API覆盖度** | 代码示例比例 | coverage > 0.5 |
|
|
1124
|
+
|
|
1125
|
+
### 使用生成的Skill
|
|
1126
|
+
|
|
1127
|
+
#### 方法1:直接在对话中使用
|
|
1128
|
+
|
|
1129
|
+
生成的Skill会自动出现在Claude的技能列表中,你可以直接引用:
|
|
1130
|
+
|
|
1131
|
+
```
|
|
1132
|
+
根据我刚生成的React技能,帮我写一个自定义Hook
|
|
1133
|
+
```
|
|
1134
|
+
|
|
1135
|
+
#### 方法2:保存为文件
|
|
1136
|
+
|
|
1137
|
+
如果指定了`outputDir`,Skill会保存为文件:
|
|
1138
|
+
|
|
1139
|
+
```
|
|
1140
|
+
爬取并保存到 ./skills 目录,文件名为 react-docs
|
|
1141
|
+
```
|
|
1142
|
+
|
|
1143
|
+
生成文件:
|
|
1144
|
+
- `./skills/react-docs.md` - Skill内容
|
|
1145
|
+
- `./skills/react-docs.metadata.json` - 元数据
|
|
1146
|
+
|
|
1147
|
+
#### 方法3:分享给团队
|
|
1148
|
+
|
|
1149
|
+
将生成的SKILL.md文件放入项目的`.claude/skills/`目录,团队成员都可使用:
|
|
1150
|
+
|
|
1151
|
+
```bash
|
|
1152
|
+
# 复制到项目技能目录
|
|
1153
|
+
cp output/react-docs.md .claude/skills/
|
|
1154
|
+
|
|
1155
|
+
# 提交到版本控制
|
|
1156
|
+
git add .claude/skills/react-docs.md
|
|
1157
|
+
git commit -m "Add React documentation skill"
|
|
1158
|
+
```
|
|
1159
|
+
|
|
1160
|
+
### 常见问题
|
|
1161
|
+
|
|
1162
|
+
#### Q: 如何选择爬取策略?
|
|
1163
|
+
**A:**
|
|
1164
|
+
- **BFS(广度优先)**:适合扁平结构、需要全面覆盖的文档
|
|
1165
|
+
- **DFS(深度优先)**:适合层级结构、需要深入理解的文档
|
|
1166
|
+
|
|
1167
|
+
#### Q: workers设置多少合适?
|
|
1168
|
+
**A:**
|
|
1169
|
+
- 小型站点(<50页):workers: 2-3
|
|
1170
|
+
- 中型站点(50-200页):workers: 3-5
|
|
1171
|
+
- 大型站点(>200页):workers: 5-8
|
|
1172
|
+
|
|
1173
|
+
#### Q: 什么时候需要启用断点?
|
|
1174
|
+
**A:**
|
|
1175
|
+
- 爬取页面超过200页
|
|
1176
|
+
- 网络不稳定
|
|
1177
|
+
- 需要分批次爬取
|
|
1178
|
+
|
|
1179
|
+
#### Q: 如何提高爬取速度?
|
|
1180
|
+
**A:**
|
|
1181
|
+
1. 增加workers数量(推荐5-8个)
|
|
1182
|
+
2. 降低rateLimit(200-300ms)
|
|
1183
|
+
3. 确保站点有llms.txt(自动检测)
|
|
1184
|
+
|
|
1185
|
+
#### Q: 生成的Skill质量不够怎么办?
|
|
1186
|
+
**A:**
|
|
1187
|
+
1. 增加maxPages(建议200+)
|
|
1188
|
+
2. 调整maxDepth(建议3-5)
|
|
1189
|
+
3. 使用includePaths精确指定路径
|
|
1190
|
+
4. 查看日志中的质量指标建议
|
|
1191
|
+
|
|
1192
|
+
### 性能提示
|
|
1193
|
+
|
|
1194
|
+
**🚀 极速模式(适合快速探索):**
|
|
1195
|
+
```json
|
|
1196
|
+
{
|
|
1197
|
+
"workers": 5,
|
|
1198
|
+
"maxPages": 50,
|
|
1199
|
+
"rateLimit": 200,
|
|
1200
|
+
"crawlStrategy": "bfs"
|
|
1201
|
+
}
|
|
1202
|
+
```
|
|
1203
|
+
|
|
1204
|
+
**🎯 深度模式(适合完整学习):**
|
|
1205
|
+
```json
|
|
1206
|
+
{
|
|
1207
|
+
"workers": 5,
|
|
1208
|
+
"maxPages": 300,
|
|
1209
|
+
"maxDepth": 5,
|
|
1210
|
+
"crawlStrategy": "dfs",
|
|
1211
|
+
"checkpoint": { "enabled": true }
|
|
1212
|
+
}
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
**⚡ 超快模式(适合有llms.txt的站点):**
|
|
1216
|
+
```json
|
|
1217
|
+
{
|
|
1218
|
+
"workers": 8,
|
|
1219
|
+
"skipLlmsTxt": false,
|
|
1220
|
+
"rateLimit": 200
|
|
1221
|
+
}
|
|
1222
|
+
```
|
|
1223
|
+
|
|
1224
|
+
### 完整文档
|
|
1225
|
+
|
|
1226
|
+
- **快速上手指南**:项目中的快速开始文档
|
|
1227
|
+
- **详细使用说明**:`docs/ENHANCED_CRAWLING.md`
|
|
1228
|
+
- **实施技术细节**:`IMPLEMENTATION_SUMMARY.md`
|
|
1229
|
+
- **原始文档爬取指南**:`docs/DOC_CRAWLER_USAGE.md`
|
|
1230
|
+
|
|
1231
|
+
---
|
|
1232
|
+
|
|
803
1233
|
## 贡献
|
|
804
1234
|
|
|
805
1235
|
欢迎提交 Issue 和 Pull Request!
|
|
1236
|
+
|
|
1237
|
+
基于 [Skill_Seekers](examples/Skill_Seekers/) 项目的优秀实践,我们实现了完整对标并超越的TypeScript版本。
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|