@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.
Files changed (65) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +145 -100
  3. package/README.zh.md +81 -36
  4. package/dist/constants.d.ts +1 -1
  5. package/dist/constants.js +3 -1
  6. package/dist/index.js +0 -0
  7. package/dist/modules/analyzer/QualityAnalyzer.js +1 -1
  8. package/dist/modules/browser/BrowserDiscovery.js +2 -2
  9. package/dist/modules/browser/BrowserModeManager.js +3 -3
  10. package/dist/modules/captcha/AICaptchaDetector.d.ts +12 -16
  11. package/dist/modules/captcha/AICaptchaDetector.js +229 -209
  12. package/dist/modules/captcha/CaptchaDetector.constants.d.ts +2 -0
  13. package/dist/modules/captcha/CaptchaDetector.constants.js +116 -25
  14. package/dist/modules/captcha/CaptchaDetector.d.ts +2 -11
  15. package/dist/modules/captcha/CaptchaDetector.js +102 -51
  16. package/dist/modules/captcha/types.d.ts +46 -0
  17. package/dist/modules/captcha/types.js +52 -0
  18. package/dist/modules/deobfuscator/AdvancedDeobfuscator.d.ts +15 -20
  19. package/dist/modules/deobfuscator/AdvancedDeobfuscator.js +66 -234
  20. package/dist/modules/deobfuscator/Deobfuscator.d.ts +3 -10
  21. package/dist/modules/deobfuscator/Deobfuscator.js +125 -404
  22. package/dist/modules/deobfuscator/webcrack.d.ts +13 -0
  23. package/dist/modules/deobfuscator/webcrack.js +164 -0
  24. package/dist/modules/detector/ObfuscationDetector.d.ts +6 -0
  25. package/dist/modules/detector/ObfuscationDetector.js +53 -2
  26. package/dist/modules/hook/AIHookGenerator.js +1 -1
  27. package/dist/modules/process/MacProcessManager.js +25 -25
  28. package/dist/modules/process/memory/availability.js +49 -49
  29. package/dist/modules/process/memory/injector.js +185 -185
  30. package/dist/modules/process/memory/reader.js +50 -50
  31. package/dist/modules/process/memory/scanner.js +165 -165
  32. package/dist/modules/process/memory/writer.js +55 -55
  33. package/dist/native/scripts/linux/enum-windows.sh +12 -12
  34. package/dist/native/scripts/macos/enum-windows.applescript +22 -22
  35. package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  36. package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
  37. package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
  38. package/dist/server/domains/analysis/definitions.js +223 -2
  39. package/dist/server/domains/analysis/handlers.impl.d.ts +2 -3
  40. package/dist/server/domains/analysis/handlers.impl.js +60 -15
  41. package/dist/server/domains/analysis/manifest.js +2 -5
  42. package/dist/server/domains/browser/definitions.tools.behavior.js +36 -24
  43. package/dist/server/domains/browser/definitions.tools.page-core.js +53 -53
  44. package/dist/server/domains/browser/definitions.tools.runtime.js +40 -40
  45. package/dist/server/domains/browser/definitions.tools.security.js +80 -77
  46. package/dist/server/domains/browser/handlers/camoufox-flow.js +0 -1
  47. package/dist/server/domains/browser/handlers/captcha-solver.d.ts +1 -1
  48. package/dist/server/domains/browser/handlers/captcha-solver.js +121 -54
  49. package/dist/server/domains/browser/handlers/page-navigation.js +0 -2
  50. package/dist/server/domains/browser/handlers.impl.d.ts +1 -1
  51. package/dist/server/domains/browser/handlers.impl.js +3 -3
  52. package/dist/server/domains/browser/manifest.js +1 -1
  53. package/dist/server/domains/shared/modules.d.ts +1 -0
  54. package/dist/server/domains/transform/handlers.impl.transform-base.js +102 -102
  55. package/dist/server/domains/workflow/handlers.impl.workflow-base.js +51 -51
  56. package/dist/types/deobfuscator.d.ts +43 -1
  57. package/dist/types/index.d.ts +1 -1
  58. package/dist/utils/config.js +19 -10
  59. package/package.json +30 -44
  60. package/scripts/postinstall.cjs +37 -0
  61. package/src/native/scripts/linux/enum-windows.sh +12 -12
  62. package/src/native/scripts/macos/enum-windows.applescript +22 -22
  63. package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  64. package/src/native/scripts/windows/enum-windows.ps1 +44 -44
  65. 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 个域下 237 个域工具**,外加 **8 个内置元工具**——并支持从 `plugins/` 与 `workflows/` 目录运行时动态扩展。集成浏览器自动化、Chrome DevTools Protocol 调试、网络监控、智能 JavaScript Hook、LLM 驱动代码分析、进程/内存操作、WASM 工具链、二进制编码、反反调试、GraphQL 发现、Source Map 重建、AST 变换、加密重构、平台包分析、Burp Suite / Native 分析工具桥接及高层复合工作流编排。
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
- - 文档首页:`docs/index.md:1`
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.0` |
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(237 个域工具 + 8 个元工具) | ~42,140 | 100% |
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
- ## 工具域(237 个域工具)
322
+ ## 工具域
279
323
 
280
- ### 核心 / 分析(13 个工具)
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` | LLM 辅助 JavaScript 反混淆 |
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` | 高级反混淆(含 VM 导向策略) |
296
- | 10 | `clear_collected_data` | 清理收集数据、缓存和内存索引 |
297
- | 11 | `get_collection_stats` | 获取收集/缓存/压缩统计 |
298
- | 12 | `webpack_enumerate` | 枚举当前页面 webpack 模块;可选关键字搜索 |
299
- | 13 | `source_map_extract` | 提取并解析 JavaScript Source Map 还原源码 |
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
- ### 浏览器(55 个工具)
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
- ### 调试器(37 个工具)
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
- ### 网络(26 个工具)
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(8 个工具)
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
- ### 维护(6 个工具)
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(26 个工具)
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
- ### 工作流 / 复合(6 个工具)
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(8 个工具)
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
- ### 流式监控(6 个工具)
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
- ### 编码(5 个工具)
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
- ### 反调试(6 个工具)
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 / 调用图(5 个工具)
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
- ### 平台(7 个工具)
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 桥接(5 个工具)
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 分析工具桥接(4 个工具)
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 / 扩展(5 个工具)
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
- ### 变换 / 加密(6 个工具)
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
- ### 元工具(8 个工具)
754
+ ### 元工具
710
755
 
711
756
  <details>
712
757
  <summary>展开元工具清单</summary>
@@ -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 CAPTCHA_2CAPTCHA_BASE_URL: string;
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 CAPTCHA_2CAPTCHA_BASE_URL = str('CAPTCHA_2CAPTCHA_BASE_URL', 'https://2captcha.com');
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
- let maintainabilityScore = complexityMetrics?.maintainabilityIndex || 70;
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 (error) {
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 (error) {
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.vendor) {
137
- logger.warn(`CAPTCHA vendor detected: ${captchaResult.vendor}`);
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.vendor ? [`Vendor: ${captchaInfo.vendor}`] : []),
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
- export interface AICaptchaDetectionResult {
4
- detected: boolean;
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
  }