@jshookmcp/jshook 0.2.3 → 0.2.5

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 (385) hide show
  1. package/README.md +14 -5
  2. package/README.zh.md +18 -3
  3. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  4. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  5. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  6. package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +236 -0
  8. package/dist/src/config/search-defaults.js +161 -0
  9. package/dist/src/constants.d.ts +3 -0
  10. package/dist/src/constants.js +4 -1
  11. package/dist/src/index.d.ts +1 -1
  12. package/dist/src/index.js +13 -17
  13. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  14. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  15. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  16. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  17. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  18. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  19. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  20. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  21. package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
  22. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  23. package/dist/src/modules/browser/TabRegistry.js +2 -2
  24. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  25. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  26. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  27. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  28. package/dist/src/modules/collector/CodeCollector.js +4 -5
  29. package/dist/src/modules/collector/DOMInspector.js +48 -58
  30. package/dist/src/modules/collector/PageController.d.ts +17 -4
  31. package/dist/src/modules/collector/PageController.js +2 -5
  32. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  33. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  34. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  35. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  36. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  37. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  38. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  39. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  40. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  41. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  42. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  43. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  44. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  45. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  46. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  47. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  48. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  49. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  50. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  51. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  52. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  53. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  54. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  55. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  56. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  57. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  58. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  59. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  60. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  61. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  62. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  63. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  64. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  65. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  66. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  67. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  68. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  69. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  70. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  71. package/dist/src/modules/process/MacProcessManager.js +25 -25
  72. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  73. package/dist/src/modules/process/MemoryManager.js +2 -2
  74. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  75. package/dist/src/modules/process/memory/availability.js +49 -49
  76. package/dist/src/modules/process/memory/injector.js +185 -185
  77. package/dist/src/modules/process/memory/reader.js +85 -53
  78. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  79. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  80. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  81. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  82. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  83. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  84. package/dist/src/modules/process/memory/scanner.js +88 -4
  85. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  86. package/dist/src/modules/process/memory/writer.js +98 -58
  87. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  88. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  89. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  90. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  91. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  92. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  93. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  94. package/dist/src/modules/trace/TraceDB.js +75 -69
  95. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  96. package/dist/src/native/AntiCheatDetector.js +67 -16
  97. package/dist/src/native/CodeInjector.js +3 -3
  98. package/dist/src/native/HardwareBreakpoint.js +24 -15
  99. package/dist/src/native/HeapAnalyzer.js +2 -2
  100. package/dist/src/native/MemoryController.js +1 -1
  101. package/dist/src/native/MemoryScanSession.js +2 -2
  102. package/dist/src/native/MemoryScanner.js +4 -8
  103. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  104. package/dist/src/native/PEAnalyzer.js +14 -15
  105. package/dist/src/native/PointerChainEngine.js +2 -4
  106. package/dist/src/native/ScriptLoader.js +4 -9
  107. package/dist/src/native/Speedhack.js +1 -1
  108. package/dist/src/native/StructureAnalyzer.js +52 -33
  109. package/dist/src/native/Win32API.d.ts +1 -0
  110. package/dist/src/native/Win32API.js +13 -0
  111. package/dist/src/native/Win32Debug.js +19 -19
  112. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  113. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  114. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  115. package/dist/src/server/MCPServer.context.d.ts +2 -1
  116. package/dist/src/server/MCPServer.d.ts +2 -1
  117. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  118. package/dist/src/server/MCPServer.domain.js +81 -16
  119. package/dist/src/server/MCPServer.js +41 -14
  120. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  121. package/dist/src/server/MCPServer.resources.js +91 -0
  122. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  123. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  124. package/dist/src/server/MCPServer.transport.js +12 -0
  125. package/dist/src/server/ToolCallContextGuard.js +8 -0
  126. package/dist/src/server/ToolRouter.d.ts +25 -9
  127. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  128. package/dist/src/server/ToolRouter.intent.js +77 -0
  129. package/dist/src/server/ToolRouter.js +103 -284
  130. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  131. package/dist/src/server/ToolRouter.policy.js +163 -0
  132. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  133. package/dist/src/server/ToolRouter.probe.js +103 -0
  134. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  135. package/dist/src/server/ToolRouter.renderer.js +52 -0
  136. package/dist/src/server/activation/ActivationController.js +15 -12
  137. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  138. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  139. package/dist/src/server/domains/analysis/definitions.js +155 -655
  140. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  141. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  142. package/dist/src/server/domains/analysis/manifest.js +6 -4
  143. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  144. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  145. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  146. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  147. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  148. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  149. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  150. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  151. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  152. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  153. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  154. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  155. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  156. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  157. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  158. package/dist/src/server/domains/browser/manifest.js +37 -13
  159. package/dist/src/server/domains/coordination/definitions.js +50 -216
  160. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  161. package/dist/src/server/domains/coordination/index.js +1 -0
  162. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  163. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  164. package/dist/src/server/domains/debugger/manifest.js +9 -2
  165. package/dist/src/server/domains/encoding/definitions.js +43 -153
  166. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  167. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  168. package/dist/src/server/domains/evidence/definitions.js +42 -0
  169. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  170. package/dist/src/server/domains/evidence/handlers.js +60 -0
  171. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  172. package/dist/src/server/domains/evidence/index.js +2 -0
  173. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  174. package/dist/src/server/domains/evidence/manifest.js +78 -0
  175. package/dist/src/server/domains/graphql/definitions.js +53 -141
  176. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  177. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  178. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  179. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  180. package/dist/src/server/domains/hooks/definitions.js +69 -335
  181. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  182. package/dist/src/server/domains/hooks/manifest.js +1 -2
  183. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  184. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  185. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  186. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  187. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  188. package/dist/src/server/domains/instrumentation/index.js +2 -0
  189. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  190. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  191. package/dist/src/server/domains/macro/definitions.js +16 -43
  192. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  193. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  194. package/dist/src/server/domains/memory/definitions.js +387 -559
  195. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  196. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  197. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  198. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  199. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  200. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  201. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  202. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  203. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  204. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  205. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  206. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  207. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  208. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  209. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  210. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  211. package/dist/src/server/domains/memory/manifest.js +236 -64
  212. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  213. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  214. package/dist/src/server/domains/native-bridge/index.js +2 -1
  215. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  216. package/dist/src/server/domains/network/definitions.js +175 -578
  217. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  218. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  219. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  220. package/dist/src/server/domains/network/handlers.base.js +3 -878
  221. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  222. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  223. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  224. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  225. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  226. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  227. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  228. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  229. package/dist/src/server/domains/network/manifest.js +15 -0
  230. package/dist/src/server/domains/network/replay.js +1 -4
  231. package/dist/src/server/domains/platform/definitions.js +121 -112
  232. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  233. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  234. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  235. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  236. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  237. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  238. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  239. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  240. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  241. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  242. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  243. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  244. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  245. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  246. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  247. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  248. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  249. package/dist/src/server/domains/platform/handlers.js +29 -0
  250. package/dist/src/server/domains/platform/manifest.js +38 -0
  251. package/dist/src/server/domains/process/definitions.js +163 -647
  252. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  253. package/dist/src/server/domains/process/handlers.base.js +7 -462
  254. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  255. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  256. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  257. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  258. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  259. package/dist/src/server/domains/process/manifest.js +6 -1
  260. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  261. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  262. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  263. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  264. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  265. package/dist/src/server/domains/shared/modules.js +0 -1
  266. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  267. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  268. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  269. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  270. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  271. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  272. package/dist/src/server/domains/streaming/definitions.js +36 -148
  273. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  274. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  275. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  276. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  277. package/dist/src/server/domains/trace/handlers.js +10 -12
  278. package/dist/src/server/domains/trace/index.d.ts +2 -1
  279. package/dist/src/server/domains/trace/index.js +2 -1
  280. package/dist/src/server/domains/trace/manifest.js +15 -3
  281. package/dist/src/server/domains/transform/definitions.js +50 -210
  282. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  283. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  284. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/transform/manifest.js +1 -1
  286. package/dist/src/server/domains/wasm/definitions.js +55 -232
  287. package/dist/src/server/domains/wasm/handlers.js +1 -1
  288. package/dist/src/server/domains/workflow/definitions.js +144 -414
  289. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  290. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  291. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  292. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  293. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  294. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  295. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  296. package/dist/src/server/evidence/index.d.ts +2 -0
  297. package/dist/src/server/evidence/index.js +1 -0
  298. package/dist/src/server/evidence/types.d.ts +22 -0
  299. package/dist/src/server/evidence/types.js +1 -0
  300. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  301. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  302. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  303. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  304. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  305. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  306. package/dist/src/server/extensions/plugin-config.js +1 -1
  307. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  308. package/dist/src/server/extensions/plugin-env.js +10 -4
  309. package/dist/src/server/extensions/types.d.ts +17 -0
  310. package/dist/src/server/extensions/types.js +1 -1
  311. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  312. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  313. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  314. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  315. package/dist/src/server/instrumentation/index.d.ts +2 -0
  316. package/dist/src/server/instrumentation/index.js +2 -0
  317. package/dist/src/server/instrumentation/types.d.ts +62 -0
  318. package/dist/src/server/instrumentation/types.js +7 -0
  319. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  320. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  321. package/dist/src/server/macros/MacroRunner.js +6 -2
  322. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  323. package/dist/src/server/macros/builtins/index.js +51 -7
  324. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  325. package/dist/src/server/registry/contracts.d.ts +1 -1
  326. package/dist/src/server/registry/discovery.js +5 -4
  327. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  328. package/dist/src/server/registry/index.js +4 -4
  329. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  330. package/dist/src/server/registry/tool-builder.js +105 -0
  331. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  332. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  333. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  334. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  335. package/dist/src/server/search/FeedbackTracker.js +26 -0
  336. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  337. package/dist/src/server/search/QueryNormalizer.js +94 -0
  338. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  339. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  340. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  341. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  342. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  343. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  344. package/dist/src/types/config.d.ts +0 -14
  345. package/dist/src/types/deobfuscator.d.ts +0 -1
  346. package/dist/src/types/index.d.ts +1 -1
  347. package/dist/src/utils/DetailedDataManager.js +2 -0
  348. package/dist/src/utils/RingBuffer.js +5 -5
  349. package/dist/src/utils/TokenBudgetManager.js +1 -1
  350. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  351. package/dist/src/utils/artifactRetention.js +2 -2
  352. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  353. package/dist/src/utils/betterSqlite3.js +88 -0
  354. package/dist/src/utils/browserExecutable.js +2 -2
  355. package/dist/src/utils/cliFastPath.js +5 -8
  356. package/dist/src/utils/config.js +4 -26
  357. package/dist/src/utils/environmentDoctor.js +138 -11
  358. package/dist/src/utils/outputPaths.js +16 -9
  359. package/dist/src/utils/parallel.js +1 -3
  360. package/package.json +74 -72
  361. package/workflows/.gitkeep +0 -0
  362. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  363. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  364. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  365. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  366. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  367. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  368. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  369. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  370. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  371. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  372. package/dist/src/services/LLMService.d.ts +0 -37
  373. package/dist/src/services/LLMService.js +0 -233
  374. package/dist/src/services/prompts/analysis.d.ts +0 -9
  375. package/dist/src/services/prompts/analysis.js +0 -158
  376. package/dist/src/services/prompts/crypto.d.ts +0 -2
  377. package/dist/src/services/prompts/crypto.js +0 -108
  378. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  379. package/dist/src/services/prompts/deobfuscation.js +0 -300
  380. package/dist/src/services/prompts/environment.d.ts +0 -16
  381. package/dist/src/services/prompts/environment.js +0 -372
  382. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  383. package/dist/src/services/prompts/intelligence.js +0 -250
  384. package/dist/src/services/prompts/taint.d.ts +0 -2
  385. package/dist/src/services/prompts/taint.js +0 -54
@@ -0,0 +1,64 @@
1
+ import type { CodeCollector } from '../../domains/shared/modules.js';
2
+ import type { ConsoleMonitor } from '../../domains/shared/modules.js';
3
+ import { PerformanceMonitor } from '../../domains/shared/modules.js';
4
+ export declare class NetworkHandlersCore {
5
+ protected collector: CodeCollector;
6
+ protected consoleMonitor: ConsoleMonitor;
7
+ protected performanceMonitor: PerformanceMonitor | null;
8
+ protected detailedDataManager: import("../../../utils/DetailedDataManager.js").DetailedDataManager;
9
+ constructor(collector: CodeCollector, consoleMonitor: ConsoleMonitor);
10
+ protected getPerformanceMonitor(): PerformanceMonitor;
11
+ protected parseBooleanArg(value: unknown, defaultValue: boolean): boolean;
12
+ protected parseNumberArg(value: unknown, options: {
13
+ defaultValue: number;
14
+ min?: number;
15
+ max?: number;
16
+ integer?: boolean;
17
+ }): number;
18
+ protected sleep(ms: number): Promise<void>;
19
+ protected ensureNetworkEnabled(options: {
20
+ autoEnable: boolean;
21
+ enableExceptions: boolean;
22
+ }): Promise<{
23
+ enabled: boolean;
24
+ autoEnabled: boolean;
25
+ error?: string;
26
+ }>;
27
+ handleNetworkEnable(args: Record<string, unknown>): Promise<{
28
+ content: {
29
+ type: string;
30
+ text: string;
31
+ }[];
32
+ }>;
33
+ handleNetworkDisable(_args: Record<string, unknown>): Promise<{
34
+ content: {
35
+ type: string;
36
+ text: string;
37
+ }[];
38
+ }>;
39
+ handleNetworkGetStatus(_args: Record<string, unknown>): Promise<{
40
+ content: {
41
+ type: string;
42
+ text: string;
43
+ }[];
44
+ }>;
45
+ handleNetworkGetRequests(args: Record<string, unknown>): Promise<{
46
+ content: {
47
+ type: string;
48
+ text: string;
49
+ }[];
50
+ }>;
51
+ handleNetworkGetResponseBody(args: Record<string, unknown>): Promise<{
52
+ content: {
53
+ type: string;
54
+ text: string;
55
+ }[];
56
+ }>;
57
+ handleNetworkGetStats(_args: Record<string, unknown>): Promise<{
58
+ content: {
59
+ type: string;
60
+ text: string;
61
+ }[];
62
+ }>;
63
+ cleanup(): Promise<void>;
64
+ }
@@ -0,0 +1,623 @@
1
+ import { logger } from '../../../utils/logger.js';
2
+ import { PerformanceMonitor } from '../../domains/shared/modules.js';
3
+ import { EXCLUDED_RESOURCE_TYPES, TYPE_SORT_PRIORITY, DEFAULT_SORT_PRIORITY, getDetailedDataManager, isNetworkRequestPayload, isNetworkResponsePayload, isFiniteNumber, asOptionalString, } from './handlers.base.types.js';
4
+ export class NetworkHandlersCore {
5
+ collector;
6
+ consoleMonitor;
7
+ performanceMonitor = null;
8
+ detailedDataManager = getDetailedDataManager();
9
+ constructor(collector, consoleMonitor) {
10
+ this.collector = collector;
11
+ this.consoleMonitor = consoleMonitor;
12
+ }
13
+ getPerformanceMonitor() {
14
+ if (!this.performanceMonitor) {
15
+ this.performanceMonitor = new PerformanceMonitor(this.collector);
16
+ }
17
+ return this.performanceMonitor;
18
+ }
19
+ parseBooleanArg(value, defaultValue) {
20
+ if (typeof value === 'boolean') {
21
+ return value;
22
+ }
23
+ if (typeof value === 'number') {
24
+ if (value === 1)
25
+ return true;
26
+ if (value === 0)
27
+ return false;
28
+ return defaultValue;
29
+ }
30
+ if (typeof value === 'string') {
31
+ const normalized = value.trim().toLowerCase();
32
+ if (['true', '1', 'yes', 'on'].includes(normalized))
33
+ return true;
34
+ if (['false', '0', 'no', 'off'].includes(normalized))
35
+ return false;
36
+ }
37
+ return defaultValue;
38
+ }
39
+ parseNumberArg(value, options) {
40
+ let parsed;
41
+ if (typeof value === 'number' && Number.isFinite(value)) {
42
+ parsed = value;
43
+ }
44
+ else if (typeof value === 'string') {
45
+ const trimmed = value.trim();
46
+ if (trimmed.length > 0) {
47
+ const n = Number(trimmed);
48
+ if (Number.isFinite(n)) {
49
+ parsed = n;
50
+ }
51
+ }
52
+ }
53
+ if (parsed === undefined) {
54
+ parsed = options.defaultValue;
55
+ }
56
+ if (options.integer) {
57
+ parsed = Math.trunc(parsed);
58
+ }
59
+ if (typeof options.min === 'number') {
60
+ parsed = Math.max(options.min, parsed);
61
+ }
62
+ if (typeof options.max === 'number') {
63
+ parsed = Math.min(options.max, parsed);
64
+ }
65
+ return parsed;
66
+ }
67
+ sleep(ms) {
68
+ return new Promise((resolve) => setTimeout(resolve, ms));
69
+ }
70
+ async ensureNetworkEnabled(options) {
71
+ if (this.consoleMonitor.isNetworkEnabled()) {
72
+ return { enabled: true, autoEnabled: false };
73
+ }
74
+ if (!options.autoEnable) {
75
+ return { enabled: false, autoEnabled: false };
76
+ }
77
+ try {
78
+ await this.consoleMonitor.enable({
79
+ enableNetwork: true,
80
+ enableExceptions: options.enableExceptions,
81
+ });
82
+ return {
83
+ enabled: this.consoleMonitor.isNetworkEnabled(),
84
+ autoEnabled: true,
85
+ };
86
+ }
87
+ catch (error) {
88
+ return {
89
+ enabled: false,
90
+ autoEnabled: false,
91
+ error: error instanceof Error ? error.message : String(error),
92
+ };
93
+ }
94
+ }
95
+ async handleNetworkEnable(args) {
96
+ const enableExceptions = this.parseBooleanArg(args.enableExceptions, true);
97
+ await this.consoleMonitor.enable({
98
+ enableNetwork: true,
99
+ enableExceptions,
100
+ });
101
+ const status = this.consoleMonitor.getNetworkStatus();
102
+ const result = {
103
+ success: true,
104
+ message: ' Network monitoring enabled successfully',
105
+ enabled: status.enabled,
106
+ cdpSessionActive: status.cdpSessionActive,
107
+ listenerCount: status.listenerCount,
108
+ usage: {
109
+ step1: 'Network monitoring is now active',
110
+ step2: 'Navigate to a page using page_navigate tool',
111
+ step3: 'Use network_get_requests to retrieve captured requests',
112
+ step4: 'Use network_get_response_body to get response content',
113
+ },
114
+ important: 'Network monitoring must be enabled BEFORE navigating to capture requests',
115
+ };
116
+ return {
117
+ content: [
118
+ {
119
+ type: 'text',
120
+ text: JSON.stringify(result, null, 2),
121
+ },
122
+ ],
123
+ };
124
+ }
125
+ async handleNetworkDisable(_args) {
126
+ await this.consoleMonitor.disable();
127
+ return {
128
+ content: [
129
+ {
130
+ type: 'text',
131
+ text: JSON.stringify({
132
+ success: true,
133
+ message: 'Network monitoring disabled',
134
+ }, null, 2),
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ async handleNetworkGetStatus(_args) {
140
+ const status = this.consoleMonitor.getNetworkStatus();
141
+ let result;
142
+ if (!status.enabled) {
143
+ result = {
144
+ success: false,
145
+ enabled: false,
146
+ message: ' Network monitoring is NOT enabled',
147
+ requestCount: 0,
148
+ responseCount: 0,
149
+ nextSteps: {
150
+ step1: 'Call network_enable tool to start monitoring',
151
+ step2: 'Then navigate to a page using page_navigate',
152
+ step3: 'Finally use network_get_requests to see captured requests',
153
+ },
154
+ example: 'network_enable -> page_navigate -> network_get_requests',
155
+ };
156
+ }
157
+ else {
158
+ result = {
159
+ success: true,
160
+ enabled: true,
161
+ message: ` Network monitoring is active. Captured ${status.requestCount} requests and ${status.responseCount} responses.`,
162
+ requestCount: status.requestCount,
163
+ responseCount: status.responseCount,
164
+ listenerCount: status.listenerCount,
165
+ cdpSessionActive: status.cdpSessionActive,
166
+ nextSteps: status.requestCount === 0
167
+ ? {
168
+ hint: 'No requests captured yet',
169
+ action: 'Navigate to a page using page_navigate to capture network traffic',
170
+ }
171
+ : {
172
+ hint: `${status.requestCount} requests captured`,
173
+ action: 'Use network_get_requests to retrieve them',
174
+ },
175
+ };
176
+ }
177
+ return {
178
+ content: [
179
+ {
180
+ type: 'text',
181
+ text: JSON.stringify(result, null, 2),
182
+ },
183
+ ],
184
+ };
185
+ }
186
+ async handleNetworkGetRequests(args) {
187
+ let result;
188
+ const autoEnable = this.parseBooleanArg(args.autoEnable, true);
189
+ const enableExceptions = this.parseBooleanArg(args.enableExceptions, true);
190
+ const networkState = await this.ensureNetworkEnabled({
191
+ autoEnable,
192
+ enableExceptions,
193
+ });
194
+ if (!networkState.enabled) {
195
+ if (autoEnable && networkState.error) {
196
+ result = {
197
+ success: false,
198
+ message: 'Failed to auto-enable network monitoring',
199
+ detail: networkState.error,
200
+ solution: {
201
+ step1: 'Ensure browser page is active and reachable',
202
+ step2: 'Call network_enable manually',
203
+ step3: 'Navigate to target page: page_navigate(url)',
204
+ step4: 'Get requests: network_get_requests',
205
+ },
206
+ };
207
+ }
208
+ else {
209
+ result = {
210
+ success: false,
211
+ message: ' Network monitoring is not enabled',
212
+ requests: [],
213
+ total: 0,
214
+ solution: {
215
+ step1: 'Enable network monitoring: network_enable',
216
+ step2: 'Navigate to target page: page_navigate(url)',
217
+ step3: 'Get requests: network_get_requests',
218
+ },
219
+ tip: 'Set autoEnable=true to auto-enable monitoring in this call',
220
+ };
221
+ }
222
+ return {
223
+ content: [
224
+ {
225
+ type: 'text',
226
+ text: JSON.stringify(result, null, 2),
227
+ },
228
+ ],
229
+ };
230
+ }
231
+ const url = asOptionalString(args.url);
232
+ const urlRegex = asOptionalString(args.urlRegex);
233
+ const method = asOptionalString(args.method);
234
+ const sinceTimestamp = isFiniteNumber(args.sinceTimestamp) ? args.sinceTimestamp : undefined;
235
+ const sinceRequestId = asOptionalString(args.sinceRequestId);
236
+ const tail = isFiniteNumber(args.tail) && args.tail > 0 ? Math.floor(args.tail) : undefined;
237
+ const limit = this.parseNumberArg(args.limit, {
238
+ defaultValue: 100,
239
+ min: 1,
240
+ max: 1000,
241
+ integer: true,
242
+ });
243
+ const offset = this.parseNumberArg(args.offset, {
244
+ defaultValue: 0,
245
+ min: 0,
246
+ integer: true,
247
+ });
248
+ let requests = this.consoleMonitor
249
+ .getNetworkRequests()
250
+ .filter((req) => isNetworkRequestPayload(req));
251
+ if (requests.length === 0) {
252
+ result = {
253
+ success: true,
254
+ message: 'No network requests captured yet',
255
+ requests: [],
256
+ total: 0,
257
+ hint: 'Network monitoring is enabled, but no requests have been captured',
258
+ possibleReasons: [
259
+ "1. You haven't navigated to any page yet (use page_navigate)",
260
+ '2. The page has already loaded before network monitoring was enabled',
261
+ "3. The page doesn't make any network requests",
262
+ '4. The page uses frontend-wrapped fetch/XHR not captured by CDP',
263
+ ],
264
+ recommended_actions: [
265
+ 'console_inject_fetch_interceptor() — capture frontend-wrapped fetch calls (SPAs, React, Vue)',
266
+ 'console_inject_xhr_interceptor() — capture XMLHttpRequest calls',
267
+ 'page_navigate(url, enableNetworkMonitoring=true) — re-navigate with monitoring enabled',
268
+ ],
269
+ nextAction: 'Call console_inject_fetch_interceptor(), then re-navigate or trigger the target action',
270
+ monitoring: {
271
+ autoEnabled: networkState.autoEnabled,
272
+ },
273
+ };
274
+ return {
275
+ content: [
276
+ {
277
+ type: 'text',
278
+ text: JSON.stringify(result, null, 2),
279
+ },
280
+ ],
281
+ };
282
+ }
283
+ const originalCount = requests.length;
284
+ const allUrls = requests.map((r) => r.url);
285
+ const hasAnyFilter = !!(url ||
286
+ urlRegex ||
287
+ (method && method.toUpperCase() !== 'ALL') ||
288
+ sinceTimestamp ||
289
+ sinceRequestId ||
290
+ tail);
291
+ let excludedStaticCount = 0;
292
+ if (!hasAnyFilter) {
293
+ const beforeTypeFilter = requests.length;
294
+ requests = requests.filter((r) => !r.type || !EXCLUDED_RESOURCE_TYPES.has(r.type));
295
+ excludedStaticCount = beforeTypeFilter - requests.length;
296
+ }
297
+ if (sinceRequestId) {
298
+ const idx = requests.findIndex((r) => r.requestId === sinceRequestId);
299
+ if (idx >= 0) {
300
+ requests = requests.slice(idx + 1);
301
+ }
302
+ }
303
+ if (sinceTimestamp !== undefined) {
304
+ requests = requests.filter((r) => (r.timestamp ?? 0) > sinceTimestamp);
305
+ }
306
+ if (urlRegex) {
307
+ if (urlRegex.length > 500) {
308
+ return {
309
+ content: [
310
+ {
311
+ type: 'text',
312
+ text: JSON.stringify({
313
+ success: false,
314
+ error: 'urlRegex too long (max 500 characters)',
315
+ }, null, 2),
316
+ },
317
+ ],
318
+ };
319
+ }
320
+ try {
321
+ const re = new RegExp(urlRegex, 'i');
322
+ requests = requests.filter((req) => re.test(req.url));
323
+ }
324
+ catch {
325
+ return {
326
+ content: [
327
+ {
328
+ type: 'text',
329
+ text: JSON.stringify({
330
+ success: false,
331
+ error: `Invalid urlRegex pattern: ${urlRegex}`,
332
+ }, null, 2),
333
+ },
334
+ ],
335
+ };
336
+ }
337
+ }
338
+ else if (url) {
339
+ const urlLower = url.toLowerCase();
340
+ requests = requests.filter((req) => req.url.toLowerCase().includes(urlLower));
341
+ }
342
+ if (method && method.toUpperCase() !== 'ALL') {
343
+ requests = requests.filter((req) => req.method.toUpperCase() === method.toUpperCase());
344
+ }
345
+ if (tail !== undefined && requests.length > tail) {
346
+ requests = requests.slice(-tail);
347
+ }
348
+ requests.sort((a, b) => (TYPE_SORT_PRIORITY[a.type ?? ''] ?? DEFAULT_SORT_PRIORITY) -
349
+ (TYPE_SORT_PRIORITY[b.type ?? ''] ?? DEFAULT_SORT_PRIORITY));
350
+ const beforeLimit = requests.length;
351
+ requests = requests.slice(offset, offset + limit);
352
+ const hasMore = offset + requests.length < beforeLimit;
353
+ const filterMiss = beforeLimit === 0 &&
354
+ originalCount > 0 &&
355
+ !!(url || (method && method.toUpperCase() !== 'ALL'));
356
+ const urlSamples = filterMiss
357
+ ? allUrls.slice(0, 10).map((u) => u.substring(0, 120))
358
+ : undefined;
359
+ result = {
360
+ success: true,
361
+ message: ` Retrieved ${requests.length} network request(s)`,
362
+ requests,
363
+ total: requests.length,
364
+ page: {
365
+ offset,
366
+ limit,
367
+ returned: requests.length,
368
+ totalAfterFilter: beforeLimit,
369
+ hasMore,
370
+ nextOffset: hasMore ? offset + requests.length : null,
371
+ },
372
+ stats: {
373
+ totalCaptured: originalCount,
374
+ afterFilter: beforeLimit,
375
+ returned: requests.length,
376
+ truncated: beforeLimit > offset + limit,
377
+ },
378
+ filtered: !!(url ||
379
+ urlRegex ||
380
+ (method && method.toUpperCase() !== 'ALL') ||
381
+ sinceTimestamp ||
382
+ sinceRequestId ||
383
+ tail),
384
+ filters: { url, urlRegex, method, sinceTimestamp, sinceRequestId, tail, limit, offset },
385
+ monitoring: {
386
+ autoEnabled: networkState.autoEnabled,
387
+ },
388
+ ...(filterMiss && {
389
+ filterMiss: true,
390
+ hint: `URL filter "${url}" matched 0 of ${originalCount} captured requests. Check urlSamples to verify the correct filter substring.`,
391
+ urlSamples,
392
+ }),
393
+ tip: requests.length > 0
394
+ ? 'Use network_get_response_body(requestId) to get response content'
395
+ : undefined,
396
+ ...(excludedStaticCount > 0 && {
397
+ staticResourcesExcluded: excludedStaticCount,
398
+ staticFilterNote: `${excludedStaticCount} static resources (Image/Font/Stylesheet/Media) excluded by default. Set any filter to include all types.`,
399
+ }),
400
+ ...(originalCount > 100 &&
401
+ !hasAnyFilter && {
402
+ optimizationHint: `${originalCount} requests captured. Use url/method filters to reduce payload size.`,
403
+ }),
404
+ };
405
+ const processedResult = this.detailedDataManager.smartHandle(result, 25600);
406
+ return {
407
+ content: [
408
+ {
409
+ type: 'text',
410
+ text: JSON.stringify(processedResult, null, 2),
411
+ },
412
+ ],
413
+ };
414
+ }
415
+ async handleNetworkGetResponseBody(args) {
416
+ const requestId = asOptionalString(args.requestId) || '';
417
+ const maxSize = this.parseNumberArg(args.maxSize, {
418
+ defaultValue: 100000,
419
+ min: 1024,
420
+ max: 20 * 1024 * 1024,
421
+ integer: true,
422
+ });
423
+ const returnSummary = this.parseBooleanArg(args.returnSummary, false);
424
+ const retries = this.parseNumberArg(args.retries, {
425
+ defaultValue: 3,
426
+ min: 0,
427
+ max: 10,
428
+ integer: true,
429
+ });
430
+ const retryIntervalMs = this.parseNumberArg(args.retryIntervalMs, {
431
+ defaultValue: 500,
432
+ min: 50,
433
+ max: 5000,
434
+ integer: true,
435
+ });
436
+ const autoEnable = this.parseBooleanArg(args.autoEnable, false);
437
+ const enableExceptions = this.parseBooleanArg(args.enableExceptions, true);
438
+ let result;
439
+ if (!requestId) {
440
+ result = {
441
+ success: false,
442
+ message: 'requestId parameter is required',
443
+ hint: 'Get requestId from network_get_requests tool',
444
+ };
445
+ return {
446
+ content: [
447
+ {
448
+ type: 'text',
449
+ text: JSON.stringify(result, null, 2),
450
+ },
451
+ ],
452
+ };
453
+ }
454
+ const networkState = await this.ensureNetworkEnabled({
455
+ autoEnable,
456
+ enableExceptions,
457
+ });
458
+ if (!networkState.enabled) {
459
+ result = {
460
+ success: false,
461
+ message: 'Network monitoring is not enabled',
462
+ hint: autoEnable
463
+ ? 'Auto-enable failed. Check active page and call network_enable manually.'
464
+ : 'Use network_enable tool first, or set autoEnable=true',
465
+ detail: networkState.error,
466
+ };
467
+ return {
468
+ content: [
469
+ {
470
+ type: 'text',
471
+ text: JSON.stringify(result, null, 2),
472
+ },
473
+ ],
474
+ };
475
+ }
476
+ let body = null;
477
+ let attemptsMade = 0;
478
+ for (let attempt = 0; attempt <= retries; attempt += 1) {
479
+ attemptsMade = attempt + 1;
480
+ body = await this.consoleMonitor.getResponseBody(requestId);
481
+ if (body) {
482
+ break;
483
+ }
484
+ if (attempt < retries) {
485
+ await this.sleep(retryIntervalMs);
486
+ }
487
+ }
488
+ if (!body) {
489
+ result = {
490
+ success: false,
491
+ message: `No response body found for requestId: ${requestId}`,
492
+ hint: 'The request may not have completed yet, or the requestId is invalid',
493
+ attempts: attemptsMade,
494
+ waitedMs: retries * retryIntervalMs,
495
+ retryConfig: {
496
+ retries,
497
+ retryIntervalMs,
498
+ },
499
+ };
500
+ return {
501
+ content: [
502
+ {
503
+ type: 'text',
504
+ text: JSON.stringify(result, null, 2),
505
+ },
506
+ ],
507
+ };
508
+ }
509
+ const originalSize = body.body.length;
510
+ const isTooLarge = originalSize > maxSize;
511
+ if (returnSummary || isTooLarge) {
512
+ const preview = body.body.substring(0, 500);
513
+ result = {
514
+ success: true,
515
+ requestId,
516
+ attempts: attemptsMade,
517
+ summary: {
518
+ size: originalSize,
519
+ sizeKB: (originalSize / 1024).toFixed(2),
520
+ base64Encoded: body.base64Encoded,
521
+ preview: preview + (originalSize > 500 ? '...' : ''),
522
+ truncated: isTooLarge,
523
+ reason: isTooLarge
524
+ ? `Response too large (${(originalSize / 1024).toFixed(2)} KB > ${(maxSize / 1024).toFixed(2)} KB)`
525
+ : 'Summary mode enabled',
526
+ },
527
+ tip: isTooLarge
528
+ ? 'Use collect_code tool to collect and compress this script, or increase maxSize parameter'
529
+ : 'Set returnSummary=false to get full body',
530
+ };
531
+ }
532
+ else {
533
+ result = {
534
+ success: true,
535
+ requestId,
536
+ attempts: attemptsMade,
537
+ body: body.body,
538
+ base64Encoded: body.base64Encoded,
539
+ size: originalSize,
540
+ sizeKB: (originalSize / 1024).toFixed(2),
541
+ };
542
+ }
543
+ return {
544
+ content: [
545
+ {
546
+ type: 'text',
547
+ text: JSON.stringify(result, null, 2),
548
+ },
549
+ ],
550
+ };
551
+ }
552
+ async handleNetworkGetStats(_args) {
553
+ if (!this.consoleMonitor.isNetworkEnabled()) {
554
+ const result = {
555
+ success: false,
556
+ message: 'Network monitoring is not enabled',
557
+ hint: 'Use network_enable tool first',
558
+ };
559
+ return {
560
+ content: [
561
+ {
562
+ type: 'text',
563
+ text: JSON.stringify(result, null, 2),
564
+ },
565
+ ],
566
+ };
567
+ }
568
+ const requests = this.consoleMonitor
569
+ .getNetworkRequests()
570
+ .filter((req) => isNetworkRequestPayload(req));
571
+ const responses = this.consoleMonitor.getNetworkResponses().filter(isNetworkResponsePayload);
572
+ const byMethod = {};
573
+ requests.forEach((req) => {
574
+ byMethod[req.method] = (byMethod[req.method] || 0) + 1;
575
+ });
576
+ const byStatus = {};
577
+ responses.forEach((res) => {
578
+ byStatus[res.status] = (byStatus[res.status] || 0) + 1;
579
+ });
580
+ const byType = {};
581
+ requests.forEach((req) => {
582
+ const type = req.type || 'unknown';
583
+ byType[type] = (byType[type] || 0) + 1;
584
+ });
585
+ const timestamps = requests
586
+ .map((r) => r.timestamp)
587
+ .filter((t) => isFiniteNumber(t));
588
+ const timeStats = timestamps.length > 0
589
+ ? {
590
+ earliest: Math.min(...timestamps),
591
+ latest: Math.max(...timestamps),
592
+ duration: Math.max(...timestamps) - Math.min(...timestamps),
593
+ }
594
+ : null;
595
+ const result = {
596
+ success: true,
597
+ stats: {
598
+ totalRequests: requests.length,
599
+ totalResponses: responses.length,
600
+ byMethod,
601
+ byStatus,
602
+ byType,
603
+ timeStats,
604
+ monitoringEnabled: true,
605
+ },
606
+ };
607
+ return {
608
+ content: [
609
+ {
610
+ type: 'text',
611
+ text: JSON.stringify(result, null, 2),
612
+ },
613
+ ],
614
+ };
615
+ }
616
+ async cleanup() {
617
+ if (this.performanceMonitor) {
618
+ await this.performanceMonitor.close();
619
+ this.performanceMonitor = null;
620
+ }
621
+ logger.info('AdvancedHandlersBase cleaned up');
622
+ }
623
+ }