@jshookmcp/jshook 0.1.6 → 0.1.8
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/LICENSE +661 -661
- package/README.md +145 -100
- package/README.zh.md +81 -36
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +3 -1
- package/dist/index.js +0 -0
- package/dist/modules/analyzer/QualityAnalyzer.js +1 -1
- package/dist/modules/browser/BrowserDiscovery.js +2 -2
- package/dist/modules/browser/BrowserModeManager.js +3 -3
- package/dist/modules/captcha/AICaptchaDetector.d.ts +12 -16
- package/dist/modules/captcha/AICaptchaDetector.js +229 -209
- package/dist/modules/captcha/CaptchaDetector.constants.d.ts +2 -0
- package/dist/modules/captcha/CaptchaDetector.constants.js +116 -25
- package/dist/modules/captcha/CaptchaDetector.d.ts +2 -11
- package/dist/modules/captcha/CaptchaDetector.js +102 -51
- package/dist/modules/captcha/types.d.ts +46 -0
- package/dist/modules/captcha/types.js +52 -0
- package/dist/modules/deobfuscator/AdvancedDeobfuscator.d.ts +15 -20
- package/dist/modules/deobfuscator/AdvancedDeobfuscator.js +66 -234
- package/dist/modules/deobfuscator/Deobfuscator.d.ts +3 -10
- package/dist/modules/deobfuscator/Deobfuscator.js +125 -404
- package/dist/modules/deobfuscator/webcrack.d.ts +13 -0
- package/dist/modules/deobfuscator/webcrack.js +164 -0
- package/dist/modules/detector/ObfuscationDetector.d.ts +6 -0
- package/dist/modules/detector/ObfuscationDetector.js +53 -2
- package/dist/modules/hook/AIHookGenerator.js +1 -1
- package/dist/modules/process/MacProcessManager.js +25 -25
- package/dist/modules/process/memory/availability.js +49 -49
- package/dist/modules/process/memory/injector.js +185 -185
- package/dist/modules/process/memory/reader.js +50 -50
- package/dist/modules/process/memory/scanner.js +165 -165
- package/dist/modules/process/memory/writer.js +55 -55
- package/dist/native/scripts/linux/enum-windows.sh +12 -12
- package/dist/native/scripts/macos/enum-windows.applescript +22 -22
- package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
- package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
- package/dist/server/domains/analysis/definitions.js +223 -2
- package/dist/server/domains/analysis/handlers.impl.d.ts +2 -3
- package/dist/server/domains/analysis/handlers.impl.js +60 -15
- package/dist/server/domains/analysis/manifest.js +2 -5
- package/dist/server/domains/browser/definitions.tools.behavior.js +36 -24
- package/dist/server/domains/browser/definitions.tools.page-core.js +53 -53
- package/dist/server/domains/browser/definitions.tools.runtime.js +40 -40
- package/dist/server/domains/browser/definitions.tools.security.js +80 -77
- package/dist/server/domains/browser/handlers/camoufox-flow.js +0 -1
- package/dist/server/domains/browser/handlers/captcha-solver.d.ts +1 -1
- package/dist/server/domains/browser/handlers/captcha-solver.js +121 -54
- package/dist/server/domains/browser/handlers/page-navigation.js +0 -2
- package/dist/server/domains/browser/handlers.impl.d.ts +1 -1
- package/dist/server/domains/browser/handlers.impl.js +3 -3
- package/dist/server/domains/browser/manifest.js +1 -1
- package/dist/server/domains/shared/modules.d.ts +1 -0
- package/dist/server/domains/transform/handlers.impl.transform-base.js +102 -102
- package/dist/server/domains/workflow/handlers.impl.workflow-base.js +51 -51
- package/dist/types/deobfuscator.d.ts +43 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/config.js +19 -10
- package/package.json +30 -44
- package/scripts/postinstall.cjs +37 -0
- package/src/native/scripts/linux/enum-windows.sh +12 -12
- package/src/native/scripts/macos/enum-windows.applescript +22 -22
- package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/src/native/scripts/windows/enum-windows.ps1 +44 -44
- package/src/native/scripts/windows/inject-dll.ps1 +21 -21
package/README.zh.md
CHANGED
|
@@ -8,16 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
[English](./README.md) | 中文
|
|
10
10
|
|
|
11
|
-
面向 AI 辅助 JavaScript 分析与安全分析的 MCP(模型上下文协议)服务器,提供 **245 个内置工具**——其中 **16 个域下
|
|
11
|
+
面向 AI 辅助 JavaScript 分析与安全分析的 MCP(模型上下文协议)服务器,提供 **245 个内置工具**——其中 **16 个域下 238 个域工具**,外加 **8 个内置元工具**——并支持从 `plugins/` 与 `workflows/` 目录运行时动态扩展。集成浏览器自动化、Chrome DevTools Protocol 调试、网络监控、智能 JavaScript Hook、LLM 驱动代码分析、进程/内存操作、WASM 工具链、二进制编码、反反调试、GraphQL 发现、Source Map 重建、AST 变换、加密重构、平台包分析、Burp Suite / Native 分析工具桥接及高层复合工作流编排。
|
|
12
12
|
|
|
13
13
|
## 从这里开始
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
- 快速开始:`docs/guide/getting-started.md:1`
|
|
17
|
-
- 工具选择:`docs/guide/tool-selection.md:1`
|
|
18
|
-
- 扩展模板:`docs/extensions/templates.md:1`
|
|
19
|
-
- 运维说明:`docs/operations/doctor-and-artifacts.md:1`
|
|
20
|
-
- 贡献指南:`CONTRIBUTING.md:1`
|
|
15
|
+
- **文档首页**:<https://vmoranv.github.io/jshookmcp/>
|
|
21
16
|
|
|
22
17
|
## 功能特性
|
|
23
18
|
|
|
@@ -92,11 +87,42 @@
|
|
|
92
87
|
### 推荐:使用 npx 直接运行
|
|
93
88
|
|
|
94
89
|
```bash
|
|
95
|
-
npx @jshookmcp/jshook
|
|
90
|
+
npx -y @jshookmcp/jshook
|
|
96
91
|
```
|
|
97
92
|
|
|
98
93
|
如果你只是想直接运行 MCP 服务,而不想管理全局安装,这是推荐方式。
|
|
99
94
|
|
|
95
|
+
注意:
|
|
96
|
+
|
|
97
|
+
- 这是一个 **stdio MCP 服务器**,不是图形界面程序。直接在终端运行时,看不到 UI 是正常的。
|
|
98
|
+
- 它会占用当前终端并等待 MCP 客户端通过 stdin/stdout 握手;如果你只是手动运行看看,表面上会像“没有输出”。
|
|
99
|
+
- 如果你的 MCP 客户端通过 `npx` 启动它,务必显式加 `-y`,否则首次安装确认会把客户端卡住,看起来就像 MCP 握手失败。
|
|
100
|
+
|
|
101
|
+
版本说明:
|
|
102
|
+
|
|
103
|
+
- `0.1.7` 在部分 `npx` / MCP 客户端启动链路里有已知打包问题。
|
|
104
|
+
- 这个问题已经在 `0.1.8` 修复。
|
|
105
|
+
- 如果你本地还出现反复提示安装、`initialize response` 握手失败之类的旧症状,可以先强制拉一次修复版:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npx -y @jshookmcp/jshook@0.1.8
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
MCP 客户端示例:
|
|
112
|
+
|
|
113
|
+
Codex / Claude Code 的 `stdio` 配置可以写成:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"jshook": {
|
|
119
|
+
"command": "npx",
|
|
120
|
+
"args": ["-y", "@jshookmcp/jshook"]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
100
126
|
### 可选:全局安装
|
|
101
127
|
|
|
102
128
|
```bash
|
|
@@ -163,7 +189,7 @@ cp .env.example .env
|
|
|
163
189
|
| `PUPPETEER_TIMEOUT` | Puppeteer 默认超时(毫秒) | `30000` |
|
|
164
190
|
| `PUPPETEER_EXECUTABLE_PATH` | 可选浏览器可执行文件路径 | 注释示例 |
|
|
165
191
|
| `MCP_SERVER_NAME` | 进程对外公布的服务名 | `jshookmcp` |
|
|
166
|
-
| `MCP_SERVER_VERSION` | 进程对外公布的服务版本 | `.env.example` 中为 `0.1.
|
|
192
|
+
| `MCP_SERVER_VERSION` | 进程对外公布的服务版本 | `.env.example` 中为 `0.1.8` |
|
|
167
193
|
| `MCP_TOOL_PROFILE` | 工具档位:`search`、`minimal`、`workflow`、`full` | 注释示例:`minimal` |
|
|
168
194
|
| `MCP_TOOL_DOMAINS` | 逗号分隔域覆盖;优先级高于 `MCP_TOOL_PROFILE` | 注释示例 |
|
|
169
195
|
| `LOG_LEVEL` | 日志级别(`debug`/`info`/`warn`/`error`) | `info` |
|
|
@@ -194,7 +220,7 @@ cp .env.example .env
|
|
|
194
220
|
| `search` | maintenance | 20(12 个域工具 + 8 个元工具) | ~3,440 | 8% |
|
|
195
221
|
| `minimal` | browser, maintenance | 80(72 个域工具 + 8 个元工具) | ~13,760 | 33% |
|
|
196
222
|
| `workflow` | browser, network, workflow, maintenance, core, debugger, streaming, encoding, graphql | 181(173 个域工具 + 8 个元工具) | ~31,132 | 74% |
|
|
197
|
-
| `full` | 全部 16 个域 | 245(
|
|
223
|
+
| `full` | 全部 16 个域 | 245(238 个域工具 + 8 个元工具) | ~42,140 | 100% |
|
|
198
224
|
|
|
199
225
|
> Token 数据为近似值,按此前 `claude /doctor` 的平均 172 tokens/工具估算。所有档位均包含 8 个元工具:`search_tools`、`activate_tools`、`deactivate_tools`、`activate_domain`、`boost_profile`、`unboost_profile`、`extensions_list`、`extensions_reload`。
|
|
200
226
|
|
|
@@ -261,6 +287,24 @@ MCP_TRANSPORT=http MCP_AUTH_TOKEN=mysecret jshook
|
|
|
261
287
|
|
|
262
288
|
只有在你需要覆盖默认模型或自定义兼容接口时,才需要额外设置 `OPENAI_MODEL` / `OPENAI_BASE_URL`。如果你准备使用图像相关工具(例如 CAPTCHA 视觉识别工作流),再显式指定支持视觉能力的模型即可,不要把它当成所有安装场景的默认配置。
|
|
263
289
|
|
|
290
|
+
如果你不做全局安装,而是让客户端通过 `npx` 拉起服务,推荐配置成:
|
|
291
|
+
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"mcpServers": {
|
|
295
|
+
"jshook": {
|
|
296
|
+
"command": "npx",
|
|
297
|
+
"args": ["-y", "@jshookmcp/jshook"],
|
|
298
|
+
"env": {
|
|
299
|
+
"OPENAI_API_KEY": "your-key"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
其中 `-y` 很重要:否则首次安装时 `npx` 会等待交互确认,很多 MCP 客户端无法回答这个提示,表现出来就是握手失败或启动超时。
|
|
307
|
+
|
|
264
308
|
### Streamable HTTP(远程 / MCP 当前修订版)
|
|
265
309
|
|
|
266
310
|
```bash
|
|
@@ -275,9 +319,9 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
275
319
|
|
|
276
320
|
会话 ID 通过 `Mcp-Session-Id` 响应头下发。
|
|
277
321
|
|
|
278
|
-
##
|
|
322
|
+
## 工具域
|
|
279
323
|
|
|
280
|
-
### 核心 /
|
|
324
|
+
### 核心 / 分析
|
|
281
325
|
|
|
282
326
|
<details>
|
|
283
327
|
<summary>LLM 驱动的代码收集、反混淆、加密检测、webpack/source-map 分析</summary>
|
|
@@ -287,20 +331,21 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
287
331
|
| 1 | `collect_code` | 从目标网站收集 JavaScript(摘要/优先级/增量/全量模式) |
|
|
288
332
|
| 2 | `search_in_scripts` | 按关键字或正则搜索已收集脚本 |
|
|
289
333
|
| 3 | `extract_function_tree` | 提取函数及其完整依赖树 |
|
|
290
|
-
| 4 | `deobfuscate` |
|
|
334
|
+
| 4 | `deobfuscate` | 基于 webcrack 的 JavaScript 反混淆(支持 bundle 解包) |
|
|
291
335
|
| 5 | `understand_code` | 语义代码分析(结构、行为、风险) |
|
|
292
336
|
| 6 | `detect_crypto` | 识别加密算法与使用模式 |
|
|
293
337
|
| 7 | `manage_hooks` | 创建、查看、清除运行时 Hook |
|
|
294
338
|
| 8 | `detect_obfuscation` | 识别 JavaScript 混淆技术 |
|
|
295
|
-
| 9 | `advanced_deobfuscate` |
|
|
296
|
-
| 10 | `
|
|
297
|
-
| 11 | `
|
|
298
|
-
| 12 | `
|
|
299
|
-
| 13 | `
|
|
339
|
+
| 9 | `advanced_deobfuscate` | 高级反混淆(webcrack 后端,已废弃的旧标志忽略) |
|
|
340
|
+
| 10 | `webcrack_unpack` | 直接调用 webcrack 解包,返回模块图详情 |
|
|
341
|
+
| 11 | `clear_collected_data` | 清理收集数据、缓存和内存索引 |
|
|
342
|
+
| 12 | `get_collection_stats` | 获取收集/缓存/压缩统计 |
|
|
343
|
+
| 13 | `webpack_enumerate` | 枚举当前页面 webpack 模块;可选关键字搜索 |
|
|
344
|
+
| 14 | `source_map_extract` | 提取并解析 JavaScript Source Map 还原源码 |
|
|
300
345
|
|
|
301
346
|
</details>
|
|
302
347
|
|
|
303
|
-
###
|
|
348
|
+
### 浏览器
|
|
304
349
|
|
|
305
350
|
<details>
|
|
306
351
|
<summary>浏览器控制、DOM 交互、隐身注入、CAPTCHA、存储、框架工具、JS 堆搜索、多标签工作流</summary>
|
|
@@ -365,7 +410,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
365
410
|
|
|
366
411
|
</details>
|
|
367
412
|
|
|
368
|
-
###
|
|
413
|
+
### 调试器
|
|
369
414
|
|
|
370
415
|
<details>
|
|
371
416
|
<summary>CDP 调试器控制、断点、监视、XHR/事件断点、会话持久化、脚本黑盒</summary>
|
|
@@ -412,7 +457,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
412
457
|
|
|
413
458
|
</details>
|
|
414
459
|
|
|
415
|
-
###
|
|
460
|
+
### 网络
|
|
416
461
|
|
|
417
462
|
<details>
|
|
418
463
|
<summary>CDP 网络监控、性能追踪、CPU/堆 Profile、Auth 提取、HAR 导出、请求重放、控制台注入</summary>
|
|
@@ -448,7 +493,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
448
493
|
|
|
449
494
|
</details>
|
|
450
495
|
|
|
451
|
-
### Hook
|
|
496
|
+
### Hook
|
|
452
497
|
|
|
453
498
|
<details>
|
|
454
499
|
<summary>AI 生成的 JavaScript Hook 和 20+ 内置预设</summary>
|
|
@@ -468,7 +513,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
468
513
|
|
|
469
514
|
</details>
|
|
470
515
|
|
|
471
|
-
###
|
|
516
|
+
### 维护
|
|
472
517
|
|
|
473
518
|
<details>
|
|
474
519
|
<summary>Token 预算追踪与缓存管理</summary>
|
|
@@ -484,7 +529,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
484
529
|
|
|
485
530
|
</details>
|
|
486
531
|
|
|
487
|
-
### 进程 / 内存 / Electron
|
|
532
|
+
### 进程 / 内存 / Electron
|
|
488
533
|
|
|
489
534
|
<details>
|
|
490
535
|
<summary>进程枚举、内存诊断与审计导出、受控 DLL/Shellcode 注入、Electron 附加</summary>
|
|
@@ -522,7 +567,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
522
567
|
|
|
523
568
|
</details>
|
|
524
569
|
|
|
525
|
-
### 工作流
|
|
570
|
+
### 工作流
|
|
526
571
|
|
|
527
572
|
<details>
|
|
528
573
|
<summary>面向全链路 JavaScript 分析与安全分析任务的高层编排</summary>
|
|
@@ -541,7 +586,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
541
586
|
|
|
542
587
|
</details>
|
|
543
588
|
|
|
544
|
-
### WASM
|
|
589
|
+
### WASM
|
|
545
590
|
|
|
546
591
|
<details>
|
|
547
592
|
<summary>WebAssembly Dump、反汇编、反编译、检查、优化、离线执行、VMP 追踪</summary>
|
|
@@ -561,7 +606,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
561
606
|
|
|
562
607
|
</details>
|
|
563
608
|
|
|
564
|
-
###
|
|
609
|
+
### 流式监控
|
|
565
610
|
|
|
566
611
|
<details>
|
|
567
612
|
<summary>WebSocket 帧捕获与 SSE 事件拦截</summary>
|
|
@@ -577,7 +622,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
577
622
|
|
|
578
623
|
</details>
|
|
579
624
|
|
|
580
|
-
###
|
|
625
|
+
### 编码
|
|
581
626
|
|
|
582
627
|
<details>
|
|
583
628
|
<summary>二进制格式检测、熵分析、Protobuf/MessagePack 解码、编解码</summary>
|
|
@@ -592,7 +637,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
592
637
|
|
|
593
638
|
</details>
|
|
594
639
|
|
|
595
|
-
###
|
|
640
|
+
### 反调试
|
|
596
641
|
|
|
597
642
|
<details>
|
|
598
643
|
<summary>绕过反调试保护与检测保护技术</summary>
|
|
@@ -608,7 +653,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
608
653
|
|
|
609
654
|
</details>
|
|
610
655
|
|
|
611
|
-
### GraphQL /
|
|
656
|
+
### GraphQL / 调用图
|
|
612
657
|
|
|
613
658
|
<details>
|
|
614
659
|
<summary>GraphQL 内省、Query 提取、操作重放、运行时调用图分析、脚本替换</summary>
|
|
@@ -623,7 +668,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
623
668
|
|
|
624
669
|
</details>
|
|
625
670
|
|
|
626
|
-
###
|
|
671
|
+
### 桥接器
|
|
627
672
|
|
|
628
673
|
<details>
|
|
629
674
|
<summary>小程序包工具、Electron ASAR 提取/检查、Frida/Jadx 桥接</summary>
|
|
@@ -642,7 +687,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
642
687
|
|
|
643
688
|
</details>
|
|
644
689
|
|
|
645
|
-
### Burp Suite
|
|
690
|
+
### Burp Suite 桥接
|
|
646
691
|
|
|
647
692
|
<details>
|
|
648
693
|
<summary>Burp Suite REST API 集成:代理状态、请求重放、HAR 导入/对比、Repeater 发送</summary>
|
|
@@ -659,7 +704,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
659
704
|
|
|
660
705
|
</details>
|
|
661
706
|
|
|
662
|
-
### Native
|
|
707
|
+
### Native 分析工具桥接
|
|
663
708
|
|
|
664
709
|
<details>
|
|
665
710
|
<summary>Ghidra 与 IDA Pro 桥接:反编译、符号检索、脚本执行、交叉引用分析</summary>
|
|
@@ -675,7 +720,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
675
720
|
|
|
676
721
|
</details>
|
|
677
722
|
|
|
678
|
-
### Source Map /
|
|
723
|
+
### Source Map / 扩展
|
|
679
724
|
|
|
680
725
|
<details>
|
|
681
726
|
<summary>Source Map 发现、VLQ 解码、项目树重建、Chrome 扩展交互</summary>
|
|
@@ -690,7 +735,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
690
735
|
|
|
691
736
|
</details>
|
|
692
737
|
|
|
693
|
-
### 变换 /
|
|
738
|
+
### 变换 / 加密
|
|
694
739
|
|
|
695
740
|
<details>
|
|
696
741
|
<summary>AST 风格变换(纯正则)、加密函数提取、沙箱测试、实现对比</summary>
|
|
@@ -706,7 +751,7 @@ MCP_TRANSPORT=http MCP_PORT=3000 jshook
|
|
|
706
751
|
|
|
707
752
|
</details>
|
|
708
753
|
|
|
709
|
-
###
|
|
754
|
+
### 元工具
|
|
710
755
|
|
|
711
756
|
<details>
|
|
712
757
|
<summary>展开元工具清单</summary>
|
package/dist/constants.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare const DEBUG_PORT_CANDIDATES: number[];
|
|
|
2
2
|
export declare const DEFAULT_DEBUG_PORT: number;
|
|
3
3
|
export declare const GHIDRA_BRIDGE_ENDPOINT: string;
|
|
4
4
|
export declare const IDA_BRIDGE_ENDPOINT: string;
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const CAPTCHA_SOLVER_BASE_URL: string;
|
|
6
6
|
export declare const EXTENSION_REGISTRY_BASE_URL: string;
|
|
7
7
|
export declare const MCP_HTTP_REQUEST_TIMEOUT_MS: number;
|
|
8
8
|
export declare const MCP_HTTP_HEADERS_TIMEOUT_MS: number;
|
package/dist/constants.js
CHANGED
|
@@ -55,7 +55,9 @@ export const DEBUG_PORT_CANDIDATES = list('DEBUG_PORT_CANDIDATES', [9222, 9229,
|
|
|
55
55
|
export const DEFAULT_DEBUG_PORT = int('DEFAULT_DEBUG_PORT', 9222);
|
|
56
56
|
export const GHIDRA_BRIDGE_ENDPOINT = str('GHIDRA_BRIDGE_URL', 'http://127.0.0.1:18080');
|
|
57
57
|
export const IDA_BRIDGE_ENDPOINT = str('IDA_BRIDGE_URL', 'http://127.0.0.1:18081');
|
|
58
|
-
export const
|
|
58
|
+
export const CAPTCHA_SOLVER_BASE_URL = process.env.CAPTCHA_SOLVER_BASE_URL?.trim() ||
|
|
59
|
+
process.env.CAPTCHA_2CAPTCHA_BASE_URL?.trim() ||
|
|
60
|
+
'';
|
|
59
61
|
export const EXTENSION_REGISTRY_BASE_URL = process.env.EXTENSION_REGISTRY_BASE_URL?.trim() || '';
|
|
60
62
|
export const MCP_HTTP_REQUEST_TIMEOUT_MS = int('MCP_HTTP_REQUEST_TIMEOUT_MS', 30_000);
|
|
61
63
|
export const MCP_HTTP_HEADERS_TIMEOUT_MS = int('MCP_HTTP_HEADERS_TIMEOUT_MS', 10_000);
|
package/dist/index.js
CHANGED
|
File without changes
|
|
@@ -38,7 +38,7 @@ export function calculateQualityScore(structure, securityRisks, aiAnalysis, comp
|
|
|
38
38
|
complexityScore -= 10;
|
|
39
39
|
}
|
|
40
40
|
complexityScore = Math.max(0, complexityScore);
|
|
41
|
-
|
|
41
|
+
const maintainabilityScore = complexityMetrics?.maintainabilityIndex || 70;
|
|
42
42
|
let codeSmellScore = 100;
|
|
43
43
|
if (antiPatterns) {
|
|
44
44
|
antiPatterns.forEach((pattern) => {
|
|
@@ -216,7 +216,7 @@ export class BrowserDiscovery {
|
|
|
216
216
|
}
|
|
217
217
|
return null;
|
|
218
218
|
}
|
|
219
|
-
catch (
|
|
219
|
+
catch (_error) {
|
|
220
220
|
return null;
|
|
221
221
|
}
|
|
222
222
|
}
|
|
@@ -242,7 +242,7 @@ export class BrowserDiscovery {
|
|
|
242
242
|
}
|
|
243
243
|
return false;
|
|
244
244
|
}
|
|
245
|
-
catch (
|
|
245
|
+
catch (_error) {
|
|
246
246
|
return false;
|
|
247
247
|
}
|
|
248
248
|
}
|
|
@@ -133,8 +133,8 @@ export class BrowserModeManager {
|
|
|
133
133
|
const captchaResult = await this.captchaDetector.detect(page);
|
|
134
134
|
if (captchaResult.detected) {
|
|
135
135
|
logger.warn(`CAPTCHA detected (type: ${captchaResult.type}, confidence: ${captchaResult.confidence}%)`);
|
|
136
|
-
if (captchaResult.
|
|
137
|
-
logger.warn(`CAPTCHA
|
|
136
|
+
if (captchaResult.providerHint) {
|
|
137
|
+
logger.warn(`CAPTCHA provider hint: ${captchaResult.providerHint}`);
|
|
138
138
|
}
|
|
139
139
|
if (this.config.autoSwitchHeadless && this.isHeadless) {
|
|
140
140
|
await this.switchToHeaded(page, originalUrl, captchaResult);
|
|
@@ -177,7 +177,7 @@ export class BrowserModeManager {
|
|
|
177
177
|
'CAPTCHA detected. Please solve it manually.',
|
|
178
178
|
'='.repeat(60),
|
|
179
179
|
`Type: ${captchaInfo.type}`,
|
|
180
|
-
...(captchaInfo.
|
|
180
|
+
...(captchaInfo.providerHint ? [`Provider hint: ${captchaInfo.providerHint}`] : []),
|
|
181
181
|
`Confidence: ${captchaInfo.confidence}%`,
|
|
182
182
|
'',
|
|
183
183
|
'Please:',
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
import { Page } from 'rebrowser-puppeteer-core';
|
|
2
2
|
import { LLMService } from '../../services/LLMService.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
type?: 'slider' | 'image' | 'recaptcha' | 'hcaptcha' | 'cloudflare' | 'text_input' | 'none';
|
|
6
|
-
confidence: number;
|
|
7
|
-
reasoning: string;
|
|
8
|
-
location?: {
|
|
9
|
-
x: number;
|
|
10
|
-
y: number;
|
|
11
|
-
width: number;
|
|
12
|
-
height: number;
|
|
13
|
-
};
|
|
14
|
-
screenshot?: string;
|
|
15
|
-
screenshotPath?: string;
|
|
16
|
-
vendor?: string;
|
|
17
|
-
suggestions?: string[];
|
|
18
|
-
}
|
|
3
|
+
import type { AICaptchaDetectionResult } from '../captcha/types.js';
|
|
4
|
+
export type { AICaptchaDetectionResult } from '../captcha/types.js';
|
|
19
5
|
export declare class AICaptchaDetector {
|
|
20
6
|
private llm;
|
|
21
7
|
private screenshotDir;
|
|
@@ -28,5 +14,15 @@ export declare class AICaptchaDetector {
|
|
|
28
14
|
private buildAnalysisPrompt;
|
|
29
15
|
private parseAIResponse;
|
|
30
16
|
private fallbackTextAnalysis;
|
|
17
|
+
private sanitizePageInfoForPrompt;
|
|
18
|
+
private sanitizeUntrustedText;
|
|
19
|
+
private normalizeCaptchaType;
|
|
20
|
+
private normalizeProviderHint;
|
|
21
|
+
private normalizeDetected;
|
|
22
|
+
private normalizeConfidence;
|
|
23
|
+
private applyLocalGuardrails;
|
|
24
|
+
private hasStrongCaptchaElementSignals;
|
|
25
|
+
private hasStrongOverrideSignals;
|
|
26
|
+
private evaluateFallbackTextAnalysis;
|
|
31
27
|
waitForCompletion(page: Page, timeout?: number): Promise<boolean>;
|
|
32
28
|
}
|