@jshookmcp/jshook 0.3.2 → 0.3.4

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 (357) hide show
  1. package/README.md +19 -4
  2. package/README.zh.md +19 -4
  3. package/dist/AntiCheatDetector-B-mz4DK_.mjs +1 -0
  4. package/dist/{BrowserSessionCoordinator-BJ-HOxo0.mjs → BrowserSessionCoordinator-Cdic8FsH.mjs} +1 -1
  5. package/dist/CodeAnalyzerDataFlow-a-NkwcaG.mjs +2 -0
  6. package/dist/CodeInjector-B099WO6x.mjs +1 -0
  7. package/dist/ConsoleMonitor-BZRqrBH-.mjs +306 -0
  8. package/dist/CpuEngine-BC8jayy9.mjs +1 -0
  9. package/dist/DartAotExecutor-B7WVTKsd.mjs +1 -0
  10. package/dist/DartAotLoader-BxdhW-K2.mjs +2 -0
  11. package/dist/DarwinAPI-DzojdfjF.mjs +1 -0
  12. package/dist/DetailedDataManager-Dgh402Gp.mjs +5 -0
  13. package/dist/ExecutionSandbox-QbWQmzuC.mjs +45 -0
  14. package/dist/ExtensionManager.tools-D3h818Xs.mjs +1 -0
  15. package/dist/FingerprintManager-D9Zlr6be.mjs +1 -0
  16. package/dist/HardwareBreakpoint-C_lJ22bj.mjs +1 -0
  17. package/dist/HeapAnalyzer-bJbLvzp6.mjs +1 -0
  18. package/dist/HookPatternScanner-yx4vJ9sd.mjs +1 -0
  19. package/dist/InstrumentationSession-Cv1wikLA.mjs +1 -0
  20. package/dist/IntegrityScanner-BB7sw-SA.mjs +1 -0
  21. package/dist/JScramblerDeobfuscator-NVR5VatT.mjs +1 -0
  22. package/dist/MCPServer.activation.ttl-C2wOCMLV.mjs +1 -0
  23. package/dist/MCPServer.search.helpers-DlassAew.mjs +2 -0
  24. package/dist/MCPServer.search.validation-DnifPCCv.mjs +1 -0
  25. package/dist/MemoryController-CCsGuGJS.mjs +2 -0
  26. package/dist/{MemoryScanSession-DG_F-PjE.mjs → MemoryScanSession-BZ2A9Ph1.mjs} +1 -1
  27. package/dist/MemoryScanner-DAxsq7Sx.mjs +1 -0
  28. package/dist/NativeMemoryManager.impl-BIJzXMqH.mjs +1 -0
  29. package/dist/{NativeMemoryManager.utils-BHy1P_jM.mjs → NativeMemoryManager.utils-CMoul2an.mjs} +1 -1
  30. package/dist/PEAnalyzer-CB_kaTis.mjs +1 -0
  31. package/dist/PackerDeobfuscator-BpwGjxDL.mjs +7 -0
  32. package/dist/PointerChainEngine-B6SYv6ZM.mjs +1 -0
  33. package/dist/ProcessRegistry-C5W1Tkn9.mjs +1 -0
  34. package/dist/{handlers-mPFiNPe8.mjs → QuickJSSandbox-CIde-jzG.mjs} +2 -5
  35. package/dist/{ResponseBuilder-BfWP-uaT.mjs → ResponseBuilder-BLicSCjn.mjs} +1 -1
  36. package/dist/ReverseEvidenceGraph-DJzk0GQz.mjs +2 -0
  37. package/dist/ServerRuntimeState-DGXNv8Ji.mjs +1 -0
  38. package/dist/Speedhack-MGoeq1ZS.mjs +1 -0
  39. package/dist/StructureAnalyzer-CCTWAXR3.mjs +2 -0
  40. package/dist/ToolHandlerMap-C40EmuLT.mjs +1 -0
  41. package/dist/{ToolProbe-C7ZU2x7M.mjs → ToolProbe-B02GC3ZY.mjs} +1 -1
  42. package/dist/ToolRegistry-CzqQxFqf.mjs +1 -0
  43. package/dist/ToolRouter.policy-Bgb3S8jc.mjs +4 -0
  44. package/dist/TraceRecorder-BfeCTQUj.mjs +407 -0
  45. package/dist/VMDeobfuscator-BHtkV850.mjs +1 -0
  46. package/dist/Win32API-G7QPyckq.mjs +1 -0
  47. package/dist/{Win32Debug-CYrIQBvr.mjs → Win32Debug-6yzmtv5b.mjs} +1 -1
  48. package/dist/allocation-track-CiI-CnaI.mjs +1 -0
  49. package/dist/analysis-CojUzwX-.mjs +27 -0
  50. package/dist/antidebug-CgU84TE1.mjs +1 -0
  51. package/dist/apk-DrPBsOq8.mjs +1 -0
  52. package/dist/artifactRetention-Bk6fW2uF.mjs +1 -0
  53. package/dist/artifacts-Bx9GLx4J.mjs +1 -0
  54. package/dist/ast-bridge-BlOrmVAv.mjs +1 -0
  55. package/dist/ast-utils-B9E5k_v1.mjs +1 -0
  56. package/dist/{betterSqlite3-Brtq-SIQ.mjs → betterSqlite3-Bdo_ifuJ.mjs} +1 -1
  57. package/dist/binary-instrument-DiE1BP0x.mjs +12 -0
  58. package/dist/boringssl-inspector-C6M3sOga.mjs +2 -0
  59. package/dist/browser-QDUu5ML9.mjs +29 -0
  60. package/dist/{handlers-yo_xYzT8.mjs → canvas-g5kmLdY-.mjs} +1098 -24
  61. package/dist/{capabilities-CyXuKUl1.mjs → capabilities-DwzyxL2w.mjs} +1 -1
  62. package/dist/cdp-session-Dy4OwMOP.mjs +1 -0
  63. package/dist/collector-Cld4i-E4.mjs +1 -0
  64. package/dist/config-5ODJ3Aj0.mjs +3 -0
  65. package/dist/constants-nvsLpSri.mjs +1 -0
  66. package/dist/coordination-C6y2gM9O.mjs +98 -0
  67. package/dist/coverage-and-block--cWjjEe5.mjs +1 -0
  68. package/dist/dart-inspector-D4IKxZ6u.mjs +0 -0
  69. package/dist/debugger-C2SpiXoO.mjs +1 -0
  70. package/dist/definitions-0mtilYzG.mjs +1 -0
  71. package/dist/definitions-9csunmeX.mjs +1 -0
  72. package/dist/definitions-B11MudW_.mjs +1 -0
  73. package/dist/definitions-BKpRDjcI.mjs +1 -0
  74. package/dist/definitions-BXE3H4re.mjs +1 -0
  75. package/dist/definitions-BlPHe5DX.mjs +1 -0
  76. package/dist/definitions-Bob4XMxI.mjs +27 -0
  77. package/dist/definitions-BpIQN2nm.mjs +1 -0
  78. package/dist/definitions-BvolWeSu.mjs +1 -0
  79. package/dist/definitions-C-6j3Ejl.mjs +1 -0
  80. package/dist/definitions-C-AdFfFu.mjs +1 -0
  81. package/dist/definitions-CArdw_9T.mjs +1 -0
  82. package/dist/definitions-CCvIcRrT.mjs +1 -0
  83. package/dist/definitions-CJPE5PIl.mjs +1 -0
  84. package/dist/definitions-CbqeW06u.mjs +1 -0
  85. package/dist/definitions-Cexmkypg.mjs +1 -0
  86. package/dist/definitions-D1dxl8qt.mjs +1 -0
  87. package/dist/definitions-D3uT-ZbU.mjs +1 -0
  88. package/dist/definitions-DtOY5iUc.mjs +1 -0
  89. package/dist/{definitions-DxFNRQNK2.mjs → definitions-DvrYdDCJ2.mjs} +1 -1
  90. package/dist/{definitions-Cenu6mxo.mjs → definitions-aeRd5DAR.mjs} +1 -1
  91. package/dist/definitions-ihxOqOC4.mjs +1 -0
  92. package/dist/deopt-trace-qnAcC931.mjs +17 -0
  93. package/dist/disasm-DoxSucGp.mjs +1 -0
  94. package/dist/dumpsys-parser-Du-5ruEe.mjs +2 -0
  95. package/dist/encoding-UMtwgy4M.mjs +2 -0
  96. package/dist/ensure-browser-core-BP70x0TB.mjs +285 -0
  97. package/dist/factory-BeND77hf.mjs +2 -0
  98. package/dist/graphql-CF7QKJME.mjs +68 -0
  99. package/dist/grpc-raw-Dp7ps2sv.mjs +1 -0
  100. package/dist/handlers--qCl9vNv.mjs +1 -0
  101. package/dist/handlers-BHIu1LqA.mjs +1 -0
  102. package/dist/{antidebug-7L3ygj_9.mjs → handlers-BQ4K8Jbr.mjs} +2 -2
  103. package/dist/handlers-BxQv-wtf.mjs +8 -0
  104. package/dist/handlers-ByYG27-5.mjs +1 -0
  105. package/dist/handlers-C0I9-BtX.mjs +5 -0
  106. package/dist/handlers-CL0Iokmw.mjs +1 -0
  107. package/dist/handlers-CNbhIdSK.mjs +4 -0
  108. package/dist/handlers-CnTTSJFs.mjs +109 -0
  109. package/dist/handlers-CoDx6akJ2.mjs +49 -0
  110. package/dist/{handlers-0yKLRIfo.mjs → handlers-DASJI0Pn.mjs} +1 -1
  111. package/dist/handlers-DRKMaA-_.mjs +74 -0
  112. package/dist/handlers-Dalu0olz.mjs +2 -0
  113. package/dist/handlers-KY0g31ny.mjs +9 -0
  114. package/dist/handlers-oGo60aVv.mjs +1 -0
  115. package/dist/handlers.impl-BTXLw6Qc.mjs +1 -0
  116. package/dist/heap-sampling-BqdiU-5j.mjs +1 -0
  117. package/dist/{hooks-D4XLfgtV.mjs → hooks-COK3t5rT.mjs} +52 -33
  118. package/dist/index.mjs +11 -11
  119. package/dist/logger-BGCcd-jJ.mjs +1 -0
  120. package/dist/macro-nUYUjKNZ.mjs +2 -0
  121. package/dist/maintenance-CfnE7ZKU.mjs +4 -0
  122. package/dist/manifest-7EOTUc0D.mjs +1 -0
  123. package/dist/manifest-B5ujuQmf.mjs +1 -0
  124. package/dist/manifest-BErXl3zn.mjs +1 -0
  125. package/dist/manifest-BKA-mD3J.mjs +1 -0
  126. package/dist/manifest-BUXj23bX.mjs +1 -0
  127. package/dist/manifest-BfXt9cau.mjs +1 -0
  128. package/dist/manifest-Bx-tpURK.mjs +1 -0
  129. package/dist/manifest-C0owVAdq.mjs +1 -0
  130. package/dist/manifest-C5XqYc9o.mjs +1 -0
  131. package/dist/manifest-CVKzLjsA.mjs +1 -0
  132. package/dist/manifest-CaeFjdhj.mjs +1 -0
  133. package/dist/manifest-CegBgip0.mjs +1 -0
  134. package/dist/manifest-CoJHqlgS.mjs +1 -0
  135. package/dist/manifest-D0dbtDqd.mjs +1 -0
  136. package/dist/manifest-D5Gr8ujd.mjs +12 -0
  137. package/dist/manifest-D82z-5og.mjs +1 -0
  138. package/dist/manifest-DA2afIwh.mjs +1 -0
  139. package/dist/manifest-DAbiFP5o.mjs +1 -0
  140. package/dist/manifest-DEY0s1O72.mjs +1 -0
  141. package/dist/manifest-DTOqNqiA.mjs +1 -0
  142. package/dist/manifest-DZ6ELNgX.mjs +1 -0
  143. package/dist/manifest-DjHkjddT.mjs +1 -0
  144. package/dist/manifest-DocA_itf2.mjs +1 -0
  145. package/dist/manifest-Dpnhvfq0.mjs +1 -0
  146. package/dist/manifest-DucPMG_a.mjs +1 -0
  147. package/dist/manifest-Dw5yYEac.mjs +1 -0
  148. package/dist/manifest-Ic_Cg66S.mjs +1 -0
  149. package/dist/manifest-JHaG6GMN.mjs +1 -0
  150. package/dist/manifest-QdkIzmYM.mjs +1 -0
  151. package/dist/manifest-YZqaCe25.mjs +1 -0
  152. package/dist/manifest-f0lUeXwq.mjs +1 -0
  153. package/dist/manifest-h-Ebisf8.mjs +1 -0
  154. package/dist/manifest-oOfTymBS.mjs +1 -0
  155. package/dist/manifest-qXqrO6KC.mjs +2 -0
  156. package/dist/mapsParser-DrJoeC0c.mjs +1 -0
  157. package/dist/modules-CC_ADmwi.mjs +333 -0
  158. package/dist/mojo-ipc-kVztXYw-.mjs +140 -0
  159. package/dist/native-D9ouskXO.mjs +961 -0
  160. package/dist/native-bridge-Dzd7hYoq.mjs +1 -0
  161. package/dist/network-C5Y-S87J.mjs +7 -0
  162. package/dist/one-gadget-CiWFE17F.mjs +1 -0
  163. package/dist/outputPaths-CHtELDyi.mjs +1 -0
  164. package/dist/parse-args-B6dwWc9k.mjs +1 -0
  165. package/dist/platform-BIXgJaM3.mjs +94 -0
  166. package/dist/process-aDIfLC0v.mjs +6 -0
  167. package/dist/proxy-DsHsQ1I4.mjs +2 -0
  168. package/dist/registry-7h8jJ9y9.mjs +1 -0
  169. package/dist/{registry-DH4sc1dt.mjs → registry-DJDnkQW2.mjs} +1 -1
  170. package/dist/response-R8ghbZSb.mjs +1 -0
  171. package/dist/retry-policy-DtYv0kDi.mjs +1 -0
  172. package/dist/reverseEngineeringConfig-BhZLOa3C.mjs +1 -0
  173. package/dist/safeOutput-Dt4mfjXA.mjs +1 -0
  174. package/dist/search-defaults-BBRJNAzC.mjs +1 -0
  175. package/dist/server/plugin-api.mjs +1 -1
  176. package/dist/server/search/EmbeddingWorker.d.mts +1 -0
  177. package/dist/server/search/EmbeddingWorker.mjs +1 -0
  178. package/dist/shared-BKtWZDGN.mjs +1 -0
  179. package/dist/sourcemap-2VIeVeKw.mjs +3 -0
  180. package/dist/streaming-DkpE3GGU.mjs +15 -0
  181. package/dist/syscall-DGZoYM_U.mjs +1 -0
  182. package/dist/transform-BJqsBC_-.mjs +105 -0
  183. package/dist/turbofan-graph-CbGHNVtl.mjs +1 -0
  184. package/dist/turbofan-inspect--NdCuYXi.mjs +23 -0
  185. package/dist/types-CWSvzmIh.mjs +1 -0
  186. package/dist/v8-inspector-CTJo08-K.mjs +297 -0
  187. package/dist/wasm-DX4Qm2Vs.mjs +235 -0
  188. package/dist/weakrefs-inspect-CnhaF-rN.mjs +57 -0
  189. package/dist/webgpu-D4-DxbxZ.mjs +6 -0
  190. package/dist/workflow-DHktRNF2.mjs +108 -0
  191. package/package.json +33 -27
  192. package/dist/AntiCheatDetector-B6d4Qe9D.mjs +0 -1
  193. package/dist/CodeInjector-Cll_7bLJ.mjs +0 -1
  194. package/dist/ConsoleMonitor-CxDJV15E.mjs +0 -306
  195. package/dist/DOMInspector-C19J4zeq.mjs +0 -95
  196. package/dist/DarwinAPI-ZfQdpLNI.mjs +0 -1
  197. package/dist/DetailedDataManager-DmQ1LT-W.mjs +0 -1
  198. package/dist/ExtensionManager-BD724zkO.mjs +0 -1
  199. package/dist/ExtensionManager.tools-oVMJgPcN.mjs +0 -1
  200. package/dist/FingerprintManager-DT0EAUEo.mjs +0 -1
  201. package/dist/HardwareBreakpoint-BUfPdp0f.mjs +0 -1
  202. package/dist/HeapAnalyzer-B_aqY8oj.mjs +0 -1
  203. package/dist/InstrumentationSession-D_G1ZPyd.mjs +0 -1
  204. package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +0 -1
  205. package/dist/MemoryController-X1XNSn1n.mjs +0 -2
  206. package/dist/MemoryScanner-g1_L1ub5.mjs +0 -1
  207. package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +0 -1
  208. package/dist/NetworkMonitor-B_-au6aV.mjs +0 -185
  209. package/dist/PEAnalyzer-yWQaGrcx.mjs +0 -1
  210. package/dist/PageController-Dfsm1_o7.mjs +0 -1
  211. package/dist/PointerChainEngine-BhCUkmxY.mjs +0 -1
  212. package/dist/PrerequisiteError-BjCQA-gK.mjs +0 -1
  213. package/dist/ProcessRegistry-C-bN48oR.mjs +0 -1
  214. package/dist/ReverseEvidenceGraph-BhSYYdiI.mjs +0 -2
  215. package/dist/ScriptManager-LWGPTdvD.mjs +0 -7
  216. package/dist/ServerRuntimeState-D2bWHqEE.mjs +0 -1
  217. package/dist/Speedhack-yseDPSZ9.mjs +0 -1
  218. package/dist/StructureAnalyzer-C5lpuZkg.mjs +0 -2
  219. package/dist/ToolCatalog-CYdD9F5f.mjs +0 -1
  220. package/dist/ToolRegistry-C5oB8KP8.mjs +0 -1
  221. package/dist/ToolRouter.policy-CfhJczkt.mjs +0 -4
  222. package/dist/TraceRecorder-BiJWBXHX.mjs +0 -272
  223. package/dist/VersionDetector-CHT36Az0.mjs +0 -9
  224. package/dist/Win32API-eUCF57l_.mjs +0 -1
  225. package/dist/WorkflowEngine-D876meOO.mjs +0 -1
  226. package/dist/analysis-D4swdMvq.mjs +0 -6
  227. package/dist/apk-packer-BqXcInnX.mjs +0 -1
  228. package/dist/artifactRetention-BCPQASm7.mjs +0 -1
  229. package/dist/artifacts-CkodUM4j.mjs +0 -1
  230. package/dist/binary-instrument-DU7V6TUM.mjs +0 -7
  231. package/dist/binary-secrets-PdMVoyt0.mjs +0 -1
  232. package/dist/boringssl-inspector-BBaJwwkU.mjs +0 -2
  233. package/dist/browser-Qqco2rOT.mjs +0 -11
  234. package/dist/collector-Bpl6qy2L.mjs +0 -1
  235. package/dist/constants-BYj8Xek8.mjs +0 -1
  236. package/dist/coordination-CWXW1o8K.mjs +0 -1
  237. package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
  238. package/dist/debugger-DyALjYMk.mjs +0 -1
  239. package/dist/definitions-BWxBke3r.mjs +0 -1
  240. package/dist/definitions-BYwATKc-.mjs +0 -1
  241. package/dist/definitions-B_83XfNQ.mjs +0 -1
  242. package/dist/definitions-Bf3H1EwV.mjs +0 -1
  243. package/dist/definitions-BftdXgXI.mjs +0 -1
  244. package/dist/definitions-Bio5XJYy.mjs +0 -1
  245. package/dist/definitions-C3qNgSn1.mjs +0 -1
  246. package/dist/definitions-CB6vmOer.mjs +0 -1
  247. package/dist/definitions-CMZRSy3k.mjs +0 -1
  248. package/dist/definitions-CQd7yCQH.mjs +0 -1
  249. package/dist/definitions-CT8ln6GQ.mjs +0 -1
  250. package/dist/definitions-D4g-MS10.mjs +0 -1
  251. package/dist/definitions-D5wl_8HN.mjs +0 -1
  252. package/dist/definitions-DAQm1Xar.mjs +0 -1
  253. package/dist/definitions-DP1vgxEY.mjs +0 -1
  254. package/dist/definitions-Ibci7e_L.mjs +0 -1
  255. package/dist/definitions-OeLvmlQy.mjs +0 -1
  256. package/dist/definitions-RZYGD_Ey.mjs +0 -1
  257. package/dist/definitions-Tls8c0A0.mjs +0 -1
  258. package/dist/definitions-bybDvnG0.mjs +0 -26
  259. package/dist/definitions-l7TjdE6V.mjs +0 -1
  260. package/dist/encoding-ycOaz8Vr.mjs +0 -2
  261. package/dist/ensure-browser-core-DxWC-NTp.mjs +0 -1
  262. package/dist/factory-CKr4fAE1.mjs +0 -1
  263. package/dist/flat-target-session-DvcQX7J5.mjs +0 -1
  264. package/dist/graphql-B2TiPEow.mjs +0 -62
  265. package/dist/handlers-8zN_vBIz.mjs +0 -1
  266. package/dist/handlers-B62K4FTc.mjs +0 -1
  267. package/dist/handlers-BpDlVVVU.mjs +0 -1
  268. package/dist/handlers-CMJK7m1c.mjs +0 -31
  269. package/dist/handlers-D2ZOul9p.mjs +0 -54
  270. package/dist/handlers-D5E40ssn.mjs +0 -5
  271. package/dist/handlers-DGbdQAgD.mjs +0 -4
  272. package/dist/handlers-DHO3rjsW.mjs +0 -1
  273. package/dist/handlers-FJ80VzUI.mjs +0 -2
  274. package/dist/handlers-VHWrxbM_.mjs +0 -1
  275. package/dist/handlers-l8QIKqBj.mjs +0 -2
  276. package/dist/handlers.impl-D9Hh8Bgl.mjs +0 -1
  277. package/dist/jadx-search-B_Yse0Zh.mjs +0 -5
  278. package/dist/logger-sBC6IdRT.mjs +0 -1
  279. package/dist/maintenance-BUpIukhg.mjs +0 -1
  280. package/dist/manifest-0Jpt_AQa.mjs +0 -1
  281. package/dist/manifest-B3fZbSWR.mjs +0 -1
  282. package/dist/manifest-B7NB2rh2.mjs +0 -1
  283. package/dist/manifest-BDi4nbH1.mjs +0 -1
  284. package/dist/manifest-BLDfkE7n.mjs +0 -1
  285. package/dist/manifest-BcXbB4gf.mjs +0 -1
  286. package/dist/manifest-Bdnc_vrc.mjs +0 -1
  287. package/dist/manifest-BuYKgCnp.mjs +0 -1
  288. package/dist/manifest-CBfNnGPV.mjs +0 -1
  289. package/dist/manifest-CPS1Xv69.mjs +0 -1
  290. package/dist/manifest-CQH9FhwI.mjs +0 -1
  291. package/dist/manifest-CRryuZF4.mjs +0 -1
  292. package/dist/manifest-CctIumog.mjs +0 -1
  293. package/dist/manifest-CvTe5ZGV2.mjs +0 -1
  294. package/dist/manifest-D-5GH0DV.mjs +0 -1
  295. package/dist/manifest-D3Ssf3IC.mjs +0 -1
  296. package/dist/manifest-D5ck3NvC.mjs +0 -1
  297. package/dist/manifest-D9jUUJAu.mjs +0 -1
  298. package/dist/manifest-DCx6w2XV.mjs +0 -1
  299. package/dist/manifest-DG19q-Ld.mjs +0 -1
  300. package/dist/manifest-DLMlD0Zc.mjs +0 -1
  301. package/dist/manifest-DYpn8w_h.mjs +0 -1
  302. package/dist/manifest-DYzWI8Xs.mjs +0 -1
  303. package/dist/manifest-D_obs5F4.mjs +0 -1
  304. package/dist/manifest-DujQqEQR.mjs +0 -2
  305. package/dist/manifest-DwL2ik8P.mjs +0 -1
  306. package/dist/manifest-ItF5P8A12.mjs +0 -1
  307. package/dist/manifest-KZphqIyX.mjs +0 -1
  308. package/dist/manifest-LG42zPLY2.mjs +0 -1
  309. package/dist/manifest-LLdI5m4T.mjs +0 -1
  310. package/dist/manifest-QYbQXJn0.mjs +0 -1
  311. package/dist/manifest-RcpX_MyZ.mjs +0 -123
  312. package/dist/manifest-YgVd8Sgz.mjs +0 -1
  313. package/dist/manifest-Zy7Odg5J.mjs +0 -1
  314. package/dist/manifest-ff1H7Pdp.mjs +0 -1
  315. package/dist/manifest-iuhF6pTL2.mjs +0 -1
  316. package/dist/manifest-nXHmtMSp2.mjs +0 -1
  317. package/dist/manifest-xWfu6iLo.mjs +0 -1
  318. package/dist/manifest-yC16OhL2.mjs +0 -1
  319. package/dist/manifest-ztWJoXy4.mjs +0 -1
  320. package/dist/matchesWildcardPattern-BAG6LvX5.mjs +0 -1
  321. package/dist/modules-BPBcSaM-.mjs +0 -333
  322. package/dist/mojo-ipc-BhwsdVUW.mjs +0 -9
  323. package/dist/native-j8l473zn.mjs +0 -961
  324. package/dist/network-T0VRwNPd.mjs +0 -7
  325. package/dist/outputPaths-B4Ic4RZh.mjs +0 -2
  326. package/dist/parse-args-Bw413PlW.mjs +0 -1
  327. package/dist/platform-CzaQtISh.mjs +0 -93
  328. package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +0 -1
  329. package/dist/process-CWhsCWrf.mjs +0 -2
  330. package/dist/proxy-DZFlDsG3.mjs +0 -2
  331. package/dist/renderer-pid-9tJnZ_9N.mjs +0 -1
  332. package/dist/response-C7rKQst4.mjs +0 -1
  333. package/dist/search-defaults-lYBVn_3L.mjs +0 -1
  334. package/dist/shared-state-board-BSjXLUV1.mjs +0 -1
  335. package/dist/sourcemap-Dh3Ai_ur.mjs +0 -1
  336. package/dist/streaming-BcJ0B6ao.mjs +0 -1
  337. package/dist/transform-DOxzeWPB.mjs +0 -103
  338. package/dist/types-D9EiE5o9.mjs +0 -1
  339. package/dist/wasm-CZ_HTfKR.mjs +0 -174
  340. package/dist/webcrack-C1iYG_EX.mjs +0 -46
  341. package/dist/workflow-BdwQmARn.mjs +0 -101
  342. /package/dist/{CacheAdapters-CsNtQIR8.mjs → CacheAdapters-BlDrQg8f.mjs} +0 -0
  343. /package/dist/{EventBus-DL8iLA09.mjs → EventBus-Cm-t-B65.mjs} +0 -0
  344. /package/dist/{EvidenceGraphBridge-BtbwXsLC.mjs → EvidenceGraphBridge-DBDc0wUA.mjs} +0 -0
  345. /package/dist/{HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs → HookGeneratorBuilders.core.generators.storage-CWaWpOHa.mjs} +0 -0
  346. /package/dist/{RingBuffer-Dm54ELKT.mjs → RingBuffer-B6RTHmij.mjs} +0 -0
  347. /package/dist/{StealthVerifier-BmcxfwSF.mjs → StealthVerifier-DMBrtkhN.mjs} +0 -0
  348. /package/dist/{ToolError-DWU_z7gp.mjs → ToolError-g3rjWzhx.mjs} +0 -0
  349. /package/dist/{authorization-schema-BOFwSXUN.mjs → authorization-schema-Jtikc5Yt.mjs} +0 -0
  350. /package/dist/{bind-helpers-m2U8glkF.mjs → bind-helpers-D0mGAOof.mjs} +0 -0
  351. /package/dist/{concurrency-DCr8WQ2M.mjs → concurrency-Dehnw4JC.mjs} +0 -0
  352. /package/dist/{evidence-graph-bridge-CV_UdYqj.mjs → evidence-graph-bridge-eT9icP6a.mjs} +0 -0
  353. /package/dist/{formatAddress-vLA_hOJt.mjs → formatAddress-DAcw4Ckg.mjs} +0 -0
  354. /package/dist/{chunk-C_pMuVsO.mjs → rolldown-runtime-88NL7fhV.mjs} +0 -0
  355. /package/dist/{ssrf-policy-CsIJGkpd.mjs → ssrf-policy-B72vdy23.mjs} +0 -0
  356. /package/dist/{tool-builder-qif8M9-K.mjs → tool-builder-CpLh-UQd.mjs} +0 -0
  357. /package/dist/{types-Fz69RzbZ.mjs → types-BzPBzmVB.mjs} +0 -0
@@ -0,0 +1,108 @@
1
+ import{t as e}from"./logger-BGCcd-jJ.mjs";import{_n as t,gn as n,hn as r,mn as i,vn as a}from"./constants-nvsLpSri.mjs";import{n as o}from"./artifacts-Bx9GLx4J.mjs";import{i as s,n as c}from"./response-R8ghbZSb.mjs";import{c as l,i as u,n as d,s as f}from"./parse-args-B6dwWc9k.mjs";import{r as p,t as m}from"./ResponseBuilder-BLicSCjn.mjs";import{t as h}from"./reverseEngineeringConfig-BhZLOa3C.mjs";import{a as g,s as _}from"./ssrf-policy-B72vdy23.mjs";import"./definitions-Cexmkypg.mjs";import{a as v,n as y,o as b,t as x}from"./retry-policy-DtYv0kDi.mjs";import{isAbsolute as S,join as C,normalize as ee}from"node:path";import{readFile as te,stat as ne}from"node:fs/promises";import{randomUUID as w}from"node:crypto";import{BlockList as T,isIP as E}from"node:net";import{lookup as D}from"node:dns/promises";const O=[{name:`auth_extract`,description:`Extract auth tokens from localStorage and cookies`,code:`(function(){
2
+ var keys=['token','active_token','access_token','jwt','auth_token','userRole','id_token','refresh_token'];
3
+ var r={};
4
+ for(var i=0;i<keys.length;i++){var v=localStorage.getItem(keys[i]);if(v)r[keys[i]]=v;}
5
+ r._cookies=document.cookie;
6
+ return r;
7
+ })()`},{name:`bundle_search`,description:`Fetch a remote JS bundle and search it with regex patterns. params: { url: string, patterns: string[] }`,code:`(async function(){
8
+ var p=typeof __params__!=='undefined'?__params__:{};
9
+ if(!p.url)return{error:'params.url required'};
10
+ var resp=await fetch(p.url);
11
+ var text=await resp.text();
12
+ var patterns=p.patterns||[];
13
+ var results={};
14
+ for(var i=0;i<patterns.length;i++){
15
+ var re=new RegExp(patterns[i],'g');
16
+ var matches=[];var m;
17
+ while((m=re.exec(text))!==null){
18
+ var s=Math.max(0,m.index-80),e=Math.min(text.length,m.index+m[0].length+80);
19
+ matches.push({match:m[0],ctx:text.slice(s,e)});
20
+ if(matches.length>=10)break;
21
+ }
22
+ results[patterns[i]]=matches;
23
+ }
24
+ return{size:text.length,results:results};
25
+ })()`},{name:`react_fill_form`,description:`Fill React controlled form inputs using native setter trick. params: { fields: { "selector": "value" } }`,code:`(function(){
26
+ var p=typeof __params__!=='undefined'?__params__:{};
27
+ var fields=p.fields||{};
28
+ var ns=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set;
29
+ var r={};
30
+ var entries=Object.entries(fields);
31
+ for(var i=0;i<entries.length;i++){
32
+ var sel=entries[i][0],val=entries[i][1];
33
+ var el=document.querySelector(sel);
34
+ if(!el){r[sel]='not found';continue;}
35
+ ns.call(el,val);
36
+ el.dispatchEvent(new Event('input',{bubbles:true}));
37
+ el.dispatchEvent(new Event('change',{bubbles:true}));
38
+ r[sel]='filled';
39
+ }
40
+ return r;
41
+ })()`},{name:`dom_find_upgrade_buttons`,description:`Scan the current page for upgrade/subscription/tier-related UI elements`,code:`(function(){
42
+ var kw=['upgrade','plus','pro','premium','subscribe','plan','tier','vip','membership'];
43
+ var r=[];
44
+ document.querySelectorAll('button,a,[role=button],[class*=upgrade],[class*=premium],[class*=plus]').forEach(function(el){
45
+ var t=(el.textContent||'').toLowerCase().trim();
46
+ var c=(el.className||'').toLowerCase();
47
+ if(kw.some(function(k){return t.includes(k)||c.includes(k);})){
48
+ r.push({tag:el.tagName,text:t.slice(0,120),cls:c.slice(0,100),href:el.href||null,id:el.id||null});
49
+ }
50
+ });
51
+ return r;
52
+ })()`}];function re(e){let t={deps:e,scriptRegistry:new Map,bundleCache:new Map,bundleCacheBytes:0};return ie(t.scriptRegistry),t}const k={BUNDLE_CACHE_TTL_MS:r,MAX_SCRIPTS:100,MAX_BUNDLE_CACHE:50,MAX_BUNDLE_CACHE_BYTES:i};function ie(e){for(let t of O)e.set(t.name,{code:t.code,description:t.description,source:`core`,protectedFromEviction:!0})}function ae(e){let t=Date.now();for(let[n,r]of e.bundleCache)t-r.cachedAt>=k.BUNDLE_CACHE_TTL_MS&&(e.bundleCacheBytes-=r.text.length,e.bundleCache.delete(n));for(;e.bundleCache.size>=k.MAX_BUNDLE_CACHE||e.bundleCacheBytes>k.MAX_BUNDLE_CACHE_BYTES;){let t=e.bundleCache.keys().next().value;if(t!==void 0){let n=e.bundleCache.get(t);n&&(e.bundleCacheBytes-=n.text.length),e.bundleCache.delete(t)}else break}}function A(e){return e.replace(/[<>/\u2028\u2029]/g,e=>{switch(e){case`<`:return`\\u003C`;case`>`:return`\\u003E`;case`/`:return`\\u002F`;case`\u2028`:return`\\u2028`;case`\u2029`:return`\\u2029`;default:return e}})}function j(e){return typeof e==`string`?e:void 0}function M(e){if(!(typeof e!=`object`||!e||Array.isArray(e)))return e}function N(e){return m.raw(e)}var oe=class{state;constructor(e){this.state=e}async handlePageScriptRegister(e){let t=j(e.name),n=j(e.code),r=j(e.description)??``;if(!t||!n)return N({success:!1,error:`name and code are required`});let i=typeof e.protected==`boolean`?e.protected:void 0,a=this.state.scriptRegistry.has(t);if(!a&&this.state.scriptRegistry.size>=k.MAX_SCRIPTS){let e,t=1/0;for(let[n,r]of this.state.scriptRegistry){if(r.protectedFromEviction)continue;let i=r.lastUsedAt??-1/0;i<t&&(t=i,e=n)}e!==void 0&&this.state.scriptRegistry.delete(e)}let o=this.state.scriptRegistry.get(t);return this.state.scriptRegistry.set(t,{code:n,description:r,source:o?.source??`user`,protectedFromEviction:i??o?.protectedFromEviction??!1,lastUsedAt:o?.lastUsedAt}),N({success:!0,action:a?`updated`:`registered`,name:t,description:r,protected:this.state.scriptRegistry.get(t)?.protectedFromEviction??!1,totalScripts:this.state.scriptRegistry.size,available:Array.from(this.state.scriptRegistry.keys())})}async handlePageScriptRun(t){let n=j(t.name),r=M(t.params),i=n?this.state.scriptRegistry.get(n):void 0;if(!i){let e=Array.from(this.state.scriptRegistry.keys());return N({success:!1,error:`Script "${n}" not found`,available:e})}i.lastUsedAt=Date.now();let a;a=r===void 0?i.code:`(function(){const __params__=JSON.parse(${A(JSON.stringify(JSON.stringify(r)))});return(${i.code});})()`;try{return await this.state.deps.browserHandlers.handlePageEvaluate({code:a})}catch(t){return e.error(`[page_script_run] Script "${n}" failed:`,t),N({success:!1,script:n,error:t instanceof Error?t.message:String(t)})}}async handleListExtensionWorkflows(){let e=this.state.deps.serverContext;if(!e)return N({success:!1,error:`Extension workflow runtime is unavailable in this handler context`});let{ensureWorkflowsLoaded:t}=await import(`./index.mjs`).then(e=>e.t);await t(e);let n=[...e.extensionWorkflowsById.values()].filter(e=>e.route?.kind!==`preset`);n.sort((e,t)=>e.id.localeCompare(t.id));let r=n.map(e=>({id:e.id,displayName:e.displayName,description:e.description,tags:e.tags,timeoutMs:e.timeoutMs,defaultMaxConcurrency:e.defaultMaxConcurrency,source:e.source,route:e.route?{kind:e.route.kind,priority:e.route.priority,requiredDomains:e.route.requiredDomains,triggerPatterns:e.route.triggerPatterns.map(e=>e.source),steps:e.route.steps}:void 0}));return N({success:!0,count:r.length,workflows:r})}async handleRunExtensionWorkflow(t,n){let r=this.state.deps.serverContext;if(!r)return N({success:!1,error:`Extension workflow runtime is unavailable in this handler context`});let i=j(t.workflowId)??j(t.id);if(!i)return N({success:!1,error:`workflowId is required`});let{ensureWorkflowsLoaded:a}=await import(`./index.mjs`).then(e=>e.t);await a(r);let o=r.extensionWorkflowRuntimeById.get(i);if(!o){let e=[...r.extensionWorkflowsById.values()].filter(e=>e.route?.kind!==`preset`).map(e=>e.id);return e.sort((e,t)=>e.localeCompare(t)),N({success:!1,error:`Extension workflow "${i}" not found`,available:e})}if(o.route?.kind===`preset`)return N({success:!1,workflowId:i,error:`Extension workflow "${i}" is a routing preset and cannot be executed directly. Use route_tool or the suggested preset steps instead.`});let s=j(t.profile),c=M(t.config),l=f(t,`nodeInputOverrides`),d=u(t,`timeoutMs`);try{let{executeExtensionWorkflow:e}=await import(`./retry-policy-DtYv0kDi.mjs`).then(e=>e.r);return N({success:!0,...await e(r,o.workflow,{profile:s,config:c,nodeInputOverrides:l,timeoutMs:d,retryPolicy:n})})}catch(t){return e.error(`[run_extension_workflow] Workflow "${i}" failed:`,t),N({success:!1,workflowId:i,error:t instanceof Error?t.message:String(t)})}}};function P(e){return e.trim().replace(/^\[|\]$/g,``).toLowerCase()}function F(e){if(e===void 0)return[];let t=typeof e==`string`?(()=>{try{return JSON.parse(e)}catch{return null}})():e;if(!Array.isArray(t))return null;let n=t.filter(e=>typeof e==`string`);return n.length===t.length?n.map(e=>e.trim()).filter(e=>e.length>0):null}function I(e){let t=e.trim(),n=t.includes(`://`)?t:`http://${t}`;try{let e=new URL(n);return e.port.length>0?{scope:`host`,value:e.host.toLowerCase()}:{scope:`hostname`,value:P(e.hostname)}}catch{return{scope:`hostname`,value:P(t)}}}function L(e,t){return e===void 0?{ok:!0,value:!1}:typeof e==`boolean`?{ok:!0,value:e}:{ok:!1,error:`${t} must be a boolean when provided`}}function R(e){let t=e.networkPolicy;if(t===void 0)return{policy:{allowPrivateNetwork:!1,allowInsecureHttp:!1,allowedHosts:[],allowedRedirectHosts:[],allowedCidrs:[],allowedCidrBlockList:new T}};let n=typeof t==`string`?(()=>{try{return JSON.parse(t)}catch{return null}})():t;if(!n||typeof n!=`object`||Array.isArray(n))return{error:`networkPolicy must be an object or valid JSON object string`};let r=n,i=L(r.allowPrivateNetwork,`networkPolicy.allowPrivateNetwork`);if(!i.ok)return{error:i.error};let a=L(r.allowInsecureHttp,`networkPolicy.allowInsecureHttp`);if(!a.ok)return{error:a.error};let o=F(r.allowedHosts);if(o===null)return{error:`networkPolicy.allowedHosts must be an array of strings`};let s=F(r.allowedRedirectHosts);if(s===null)return{error:`networkPolicy.allowedRedirectHosts must be an array of strings`};let c=F(r.allowedCidrs);if(c===null)return{error:`networkPolicy.allowedCidrs must be an array of strings`};let l=new T;for(let e of c){let[t,n]=e.split(`/`);if(!t||!n)return{error:`Invalid CIDR in networkPolicy.allowedCidrs: "${e}"`};let r=E(t);if(r===0)return{error:`Invalid CIDR base address in networkPolicy.allowedCidrs: "${e}"`};let i=Number(n),a=r===4?32:128;if(!Number.isInteger(i)||i<0||i>a)return{error:`Invalid CIDR prefix in networkPolicy.allowedCidrs: "${e}"`};l.addSubnet(t,i,r===4?`ipv4`:`ipv6`)}return{policy:{allowPrivateNetwork:i.value,allowInsecureHttp:a.value,allowedHosts:o.map(I),allowedRedirectHosts:s.map(I),allowedCidrs:c,allowedCidrBlockList:l}}}async function z(e,t,n){let r;try{r=new URL(e)}catch{throw Error(`Invalid ${n.label}: ${e}`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`Unsupported protocol for ${n.label}: ${r.protocol} — only http/https allowed`);let i=P(r.hostname),a=r.host.toLowerCase(),o=E(i),s=o===0?await D(i).then(e=>e.address).catch(t=>{throw Error(`DNS resolution failed for "${e}"`,{cause:t})}):i,c=E(s),l=c!==0&&t.allowedCidrs.length>0&&t.allowedCidrBlockList.check(s,c===4?`ipv4`:`ipv6`),u=n.allowRedirectHosts&&t.allowedRedirectHosts.length>0?t.allowedRedirectHosts:t.allowedHosts,d=u.some(e=>e.scope===`host`?e.value===a:e.value===i),f=u.length>0||t.allowedCidrs.length>0,p=!f||d||l;if(_(i)||_(s)){if(!t.allowPrivateNetwork)throw Error(`Blocked: ${n.label} "${e}" resolves to a private/reserved address`);if(!f||!p)throw Error(`Blocked: ${n.label} "${e}" requires an explicit networkPolicy host or CIDR allow rule`)}else if(f&&!p)throw Error(`Blocked: ${n.label} "${e}" is not authorized by networkPolicy`);let m=g(i)||g(s);if(r.protocol===`http:`&&!m){if(!t.allowInsecureHttp)throw Error(`Blocked: insecure HTTP requires networkPolicy.allowInsecureHttp for "${e}"`);if(!f||!p)throw Error(`Blocked: insecure HTTP target "${e}" requires an explicit networkPolicy host or CIDR allow rule`)}let h={},v=r.toString();if(n.rewriteHttpHostToResolvedIp&&r.protocol===`http:`&&o===0){let e=r.host,t=new URL(r.toString());t.hostname=s.includes(`:`)?`[${s}]`:s,v=t.toString(),h.Host=e}return{parsedUrl:r,resolvedIp:s,fetchUrl:v,headers:h}}var se=class{state;constructor(e){this.state=e}async handleApiProbeBatch(t){let n=typeof t.baseUrl==`string`?t.baseUrl.trim():``;if(n.length===0)return m.fail(`baseUrl is required and must be a non-empty string`).json();let r=R(t);if(!r.policy)return m.fail(r.error).json();let i,a={};try{let e=await z(n,r.policy,{label:`baseUrl`,rewriteHttpHostToResolvedIp:!0});i=e.fetchUrl.replace(/\/$/,``),a=e.headers}catch(e){return m.fail(e).json()}let o=i,s=t.paths,c=Array.isArray(s)?s:typeof s==`string`?(()=>{try{return JSON.parse(s)}catch{return[]}})():[],p=(l(t,`method`)??`GET`).toUpperCase(),h=f(t,`headers`)??{},g=l(t,`bodyTemplate`)??null,_=Array.isArray(t.includeBodyStatuses)?t.includeBodyStatuses.filter(e=>typeof e==`number`):[200,201,204],v=Math.max(0,Math.min(u(t,`maxBodySnippetLength`,500),1e4)),y=d(t,`autoInjectAuth`,!0),b=Math.max(1,Math.min(Math.trunc(u(t,`concurrency`,6)||6),32)),x=Math.max(0,Math.min(u(t,`delayMs`,0)||0,6e4)),S=Math.max(0,Math.min(u(t,`jitterMs`,0)||0,6e4));if(!c||c.length===0)return m.fail(`paths array is required and must not be empty`).json();let C=`(async function() {
53
+ var baseUrl = ${JSON.stringify(o)};
54
+ var paths = ${JSON.stringify(c)};
55
+ var method = ${JSON.stringify(p)};
56
+ var extraHeaders = ${JSON.stringify(h)};
57
+ var includeBodyStatuses = ${JSON.stringify(_)};
58
+ var maxSnippetLen = ${JSON.stringify(v)};
59
+ var autoInjectAuth = ${JSON.stringify(y)};
60
+ var bodyTemplate = ${JSON.stringify(g)};
61
+ var authHeaders = ${JSON.stringify(a)};
62
+ var concurrency = Math.min(paths.length, ${JSON.stringify(b)});
63
+ var delayMs = ${JSON.stringify(x)};
64
+ var jitterMs = ${JSON.stringify(S)};
65
+ function probeSleep(ms){ return new Promise(function(r){ setTimeout(r, ms); }); }
66
+ var headers = Object.assign({'Content-Type':'application/json'}, extraHeaders, authHeaders);
67
+ if (autoInjectAuth) {
68
+ var token = localStorage.getItem('token') || localStorage.getItem('active_token') || localStorage.getItem('access_token');
69
+ if (token) headers['Authorization'] = 'Bearer ' + token;
70
+ }
71
+ var results = {};
72
+ async function probePath(path) {
73
+ try {
74
+ var opts = {method: method, headers: headers, redirect: 'error'};
75
+ if (bodyTemplate && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
76
+ opts.body = bodyTemplate;
77
+ }
78
+ var resp = await fetch(baseUrl + path, opts);
79
+ var ct = resp.headers.get('content-type') || '';
80
+ var snippet = null;
81
+ if (includeBodyStatuses.indexOf(resp.status) !== -1) {
82
+ var text = await resp.text();
83
+ if (!ct.includes('text/html') && !ct.includes('application/xml')) {
84
+ snippet = text.length > maxSnippetLen ? text.slice(0, maxSnippetLen) + '...[truncated]' : text;
85
+ } else {
86
+ snippet = '[HTML/XML response suppressed]';
87
+ }
88
+ }
89
+ return [path, {status: resp.status, contentType: ct.split(';')[0].trim(), snippet: snippet}];
90
+ } catch(e) {
91
+ return [path, {status: -1, error: e instanceof Error ? e.message : String(e)}];
92
+ }
93
+ }
94
+ var nextIndex = 0;
95
+ await Promise.all(Array.from({ length: concurrency }, async function() {
96
+ while (nextIndex < paths.length) {
97
+ var currentIndex = nextIndex++;
98
+ var currentPath = paths[currentIndex];
99
+ if (delayMs > 0 || jitterMs > 0) {
100
+ var wait = delayMs + (jitterMs > 0 ? Math.random() * jitterMs : 0);
101
+ await probeSleep(wait);
102
+ }
103
+ var entry = await probePath(currentPath);
104
+ results[entry[0]] = entry[1];
105
+ }
106
+ }));
107
+ return {probed: paths.length, method: method, baseUrl: baseUrl, concurrency: concurrency, delayMs: delayMs, jitterMs: jitterMs, results: results};
108
+ })()`;try{let e=await this.state.deps.browserHandlers.handlePageEvaluate({code:C}),t=m.parse(e);return m.ok().merge(t).json()}catch(t){return e.error(`[api_probe_batch] Error:`,t),m.fail(t).json()}}},ce=class{state;constructor(e){this.state=e}async handleJsBundleSearch(e){let r=l(e,`url`,``),i=e.patterns,o=Array.isArray(i)?i:typeof i==`string`?(()=>{try{return JSON.parse(i)}catch{return[]}})():[],s=d(e,`cacheBundle`,!0),c=d(e,`stripNoise`,!0),f=u(e,`maxMatches`,10),p=d(e,`forceRefresh`,!1),h=R(e);if(!r||!o||o.length===0)return m.fail(`url and patterns are required`).json();if(!h.policy)return m.fail(h.error).json();let g=h.policy,_=a,v=t,y=async(e,t)=>{let n=e;for(let e=0;e<v;e++){let r=await z(n,g,{label:e===0?`bundle URL`:`redirect target`,allowRedirectHosts:e>0,rewriteHttpHostToResolvedIp:!0}),i=await fetch(r.fetchUrl,{signal:t,redirect:`manual`,headers:r.headers});if(i.status>=300&&i.status<400){let e=i.headers.get(`location`);if(!e)throw Error(`Redirect ${i.status} without Location header`);n=new URL(e,n).toString();continue}return i}throw Error(`Too many redirects (>${v})`)},b,x=!1;try{if(s){let e=this.state.bundleCache.get(r);if(e&&!p&&Date.now()-e.cachedAt<k.BUNDLE_CACHE_TTL_MS)b=e.text,x=!0;else{let e=new AbortController,t=setTimeout(()=>e.abort(),n);try{let t=await y(r,e.signal);if(!t.ok)return m.fail(`Fetch failed: ${t.status} ${t.statusText}`).merge({url:r}).json();if(b=await t.text(),b.length>_)return m.fail(`Response too large: ${b.length} bytes exceeds ${_} limit`).merge({url:r}).json();ae(this.state),this.state.bundleCache.set(r,{text:b,cachedAt:Date.now()}),this.state.bundleCacheBytes+=b.length}finally{clearTimeout(t)}}}else{let e=new AbortController,t=setTimeout(()=>e.abort(),3e4);try{let t=await y(r,e.signal);if(!t.ok)return m.fail(`Fetch failed: ${t.status} ${t.statusText}`).merge({url:r}).json();if(b=await t.text(),b.length>_)return m.fail(`Response too large: ${b.length} bytes exceeds ${_} limit`).merge({url:r}).json()}finally{clearTimeout(t)}}}catch(e){return m.fail(e).merge({url:r}).json()}let S={};for(let e of o){let t=e.contextBefore??80,n=e.contextAfter??80,r;try{r=new RegExp(e.regex,`g`)}catch(t){S[e.name]=[{match:``,index:-1,context:`Invalid regex: ${t instanceof Error?t.message:String(t)}`}];continue}let i=[],a;for(;(a=r.exec(b))!==null;){let e=Math.max(0,a.index-t),r=Math.min(b.length,a.index+a[0].length+n),o=b.slice(e,r);if(!(c&&(/[Mm]\d{1,6}(?:\.\d+)?[, ]\d{1,6}(?:\.\d+)?[CLHVSQTAZclhvsqtaz]/.test(o)||/data:[a-z+-]+\/[a-z+-]+;base64,/i.test(o)||o.replace(/[^A-Za-z0-9+/=]/g,``).length>o.length*.85&&o.length>200))&&(i.push({match:a[0],index:a.index,context:o}),i.length>=f))break}S[e.name]=i}return m.ok().merge({bundleUrl:r,bundleSize:b.length,cached:x,patternsSearched:o.length,results:S}).json()}},le=class{sessions=new Map;create(e){let t=new Date().toISOString(),n={sessionId:w(),createdAt:t,updatedAt:t,status:`planned`,artifactRoot:e.artifactRoot,target:e.target,steps:e.steps,evidenceRefs:e.evidenceRefs??[],runs:[],nextSteps:e.nextSteps};return this.sessions.set(n.sessionId,n),n}get(e){return this.sessions.get(e)}list(){return[...this.sessions.values()]}touch(e){return e.updatedAt=new Date().toISOString(),this.sessions.set(e.sessionId,e),e}},B=class{store;toolExecutor;constructor(e=new le,t){this.store=e,this.toolExecutor=t}create(e){let t=V(e),n=e.artifactRoot??o(`sessions`),r=H(t,n);return this.store.create({artifactRoot:n,target:t,steps:r,nextSteps:r.map(e=>`${e.id}: ${e.tool}`)})}status(e){return this.store.get(e)}list(){return this.store.list()}plan(e){let t=V(e),n=e.artifactRoot??o(`sessions`),r=H(t,n);return{target:t,artifactRoot:n,steps:r,nextSteps:r.map(e=>`${e.id}: ${e.tool}`)}}async run(e){let t=this.store.get(e.sessionId);if(!t)return{success:!1,reason:`Unknown reverse session: ${e.sessionId}`};let n=t.steps.filter(U);if(n.length===0){let e=Y({status:t.steps.some(e=>e.status===`blocked`)?`blocked`:`completed`,executedSteps:[],blockedSteps:t.steps.filter(e=>e.status===`blocked`),evidenceRefs:[],reason:t.steps.some(e=>e.status===`blocked`)?`No executable steps are available because remaining steps are blocked.`:`All executable steps are already completed.`});return t.runs.push(e),X(t),this.store.touch(t),{success:e.status===`completed`,session:t,run:e,reason:e.reason}}if(!this.toolExecutor)return{success:!1,reason:`No tool executor is configured for reverse-session run.`,session:t};let r=ue(e.maxSteps??n.length),i=e.stopOnError??!0,a=w(),o=new Date().toISOString(),s=[],c=[];t.status=`active`;for(let n of t.steps){if(s.length>=r)break;if(!U(n))continue;let o=Date.now();n.status=`running`,n.lastRunAt=new Date().toISOString(),n.attempts=(n.attempts??0)+1,delete n.error,this.store.touch(t);try{let r=de(await this.toolExecutor(n.tool,n.args)),l=r.body,u=fe(r),d=Date.now()-o,f=u?me(a,n,l):void 0;if(u?(n.status=`completed`,n.completedAt=new Date().toISOString(),f&&(n.resultRef=f,c.push(f),t.evidenceRefs.push(f)),await ge(t,l)):(n.status=`failed`,n.error=pe(l)??r.text??`Tool returned an unsuccessful result.`),s.push({stepId:n.id,tool:n.tool,success:u,durationMs:d,...f?{evidenceRef:f}:{},...n.error?{error:n.error}:{},...e.includeResults?{result:l}:{}}),this.store.touch(t),!u&&i)break}catch(e){let r=Date.now()-o,a=e instanceof Error?e.message:String(e);if(n.status=`failed`,n.error=a,s.push({stepId:n.id,tool:n.tool,success:!1,durationMs:r,error:a}),this.store.touch(t),i)break}}let l=t.steps.filter(e=>e.status===`blocked`),u=Y({runId:a,startedAt:o,status:ve(t.steps,s),executedSteps:s,blockedSteps:l,evidenceRefs:c});return t.runs.push(u),X(t),this.store.touch(t),{success:u.status!==`failed`&&s.length>0,session:t,run:u,...u.status===`failed`?{reason:ye(s)}:{}}}};function V(e){return{platform:e.platform===`android`||e.platform===`native`||e.platform===`web`?e.platform:e.packageName||e.apkPath?`android`:`unknown`,...e.packageName?{packageName:e.packageName}:{},...e.apkPath?{apkPath:e.apkPath}:{},...e.pid===void 0?{}:{pid:e.pid}}}function H(e,t){let n=[];if(e.apkPath?n.push({id:`apk-intake`,tool:`apk_dex_intake`,args:{apkPath:e.apkPath},status:`ready`}):n.push({id:`apk-intake`,tool:`apk_dex_intake`,args:{},status:`blocked`,reason:`apkPath is required for local APK/DEX intake.`}),e.packageName||e.pid!==void 0){let r=`${t.replace(/\\/g,`/`)}/android-runtime-dump`;n.push({id:`frida-dex-dump`,tool:`frida_dex_dump`,args:{outputDir:r,...e.packageName?{target:e.packageName}:{},...e.pid===void 0?{}:{pid:e.pid}},status:`planned`}),n.push({id:`runtime-dump-session`,tool:`android_runtime_dump_session`,args:{action:`start`,outputDir:r,...e.packageName?{packageName:e.packageName}:{},...e.pid===void 0?{}:{pid:e.pid}},status:`planned`})}return n.push({id:`transform-workbench`,tool:`transform_workbench`,args:{},status:`blocked`,reason:`Select a dumped artifact and provide inputBase64 plus transform steps.`}),n}function U(e){return e.status===`ready`||e.status===`planned`}function ue(e){return Number.isFinite(e)?Math.max(1,Math.min(Math.floor(e),h().reverseSession.runMaxSteps)):1}function W(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function de(e){if(!W(e))return{body:e,isError:!1};let t=e.content,n=e.isError===!0;if(!Array.isArray(t))return{body:e,isError:n};let r=t.map(e=>W(e)&&typeof e.text==`string`?e.text:``).find(e=>e.length>0);if(!r)return{body:e,isError:n};try{return{body:JSON.parse(r),isError:n,text:r}}catch{return{body:r,isError:n,text:r}}}function fe(e){if(e.isError)return!1;let t=e.body;return W(t)?!(t.success===!1||t.available===!1||typeof t.error==`string`&&t.success!==!0):!0}function pe(e){if(!W(e))return;let t=e.error??e.reason;return typeof t==`string`?t:void 0}function me(e,t,n){let r=he(n);return r?`${e}/${t.id}/${t.tool}/${r}`:`${e}/${t.id}/${t.tool}`}function he(e){if(!W(e))return;let t=e.artifact;if(W(t)&&typeof t.kind==`string`)return J(t.kind);for(let t of[`artifactPath`,`outputDir`,`sessionId`,`dumpedFiles`]){let n=e[t];if(typeof n==`string`&&n.trim().length>0)return J(n);if(Array.isArray(n))return J(`${t}-${n.length}`)}}async function ge(e,t){let n=e.steps.find(e=>e.id===`transform-workbench`&&e.status===`blocked`);if(!n)return;let r=_e(t);if(!r)return;let i=await ne(r).catch(()=>void 0);if(!i?.isFile()||i.size===0){n.reason=`Dumped artifact is not readable: ${r}`;return}let a=h().reverseSession;if(i.size>a.maxInlineTransformInputBytes){n.reason=`Dumped artifact is too large for inline transform input: ${r} (${i.size} bytes > ${a.maxInlineTransformInputBytes} bytes). Provide inputBase64 explicitly.`;return}let o=await te(r).catch(()=>void 0);if(!o||o.length===0){n.reason=`Dumped artifact is not readable: ${r}`;return}n.args={inputBase64:o.toString(`base64`),steps:[{op:`entropy`}],previewBytes:a.promotedTransformPreviewBytes,includeOutputBase64:!1},n.status=`planned`,n.reason=`Ready from dumped artifact: ${r}`}function _e(e){if(!W(e))return;let t=G(e);if(t)return t;let n=typeof e.outputDir==`string`?e.outputDir:void 0,r=e.dumpedFiles;if(n&&Array.isArray(r)){let e=r.find(e=>typeof e==`string`&&q(e));if(e)return K(n,e)}let i=e.evidence;if(n&&W(i)){let e=i.dumpedDex;if(W(e)&&Array.isArray(e.files))for(let t of e.files){let e=G(t);if(e&&q(e))return K(n,e)}}}function G(e){if(W(e))for(let t of[`artifactPath`,`path`,`filePath`]){let n=e[t];if(typeof n==`string`&&n.trim().length>0)return n.trim()}}function K(e,t){return ee(S(t)?t:C(e,t))}function q(e){return/\.(dex|cdex)$/i.test(e)}function J(e){return e.replace(/[^\w.-]+/g,`_`).replace(/^_+|_+$/g,``).slice(0,h().reverseSession.evidenceRefSegmentMaxChars)||`result`}function Y(e){let t=new Date().toISOString();return{runId:e.runId??w(),startedAt:e.startedAt??t,finishedAt:t,status:e.status,executedSteps:e.executedSteps,blockedSteps:e.blockedSteps,evidenceRefs:e.evidenceRefs,...e.reason?{reason:e.reason}:{}}}function ve(e,t){return t.some(e=>!e.success)?`failed`:e.every(e=>e.status===`completed`)&&t.length>0?`completed`:t.length===0&&e.some(e=>e.status===`blocked`)?`blocked`:`partial`}function X(e){let t=e.steps.some(e=>e.status===`failed`),n=e.steps.some(e=>e.status===`blocked`),r=e.steps.some(e=>e.status===`ready`||e.status===`planned`);t?e.status=`failed`:!n&&!r?e.status=`completed`:(e.runs.length>0||e.evidenceRefs.length>0)&&(e.status=`active`),e.nextSteps=e.steps.filter(e=>e.status!==`completed`).map(e=>`${e.id}: ${e.tool}${e.reason?` (${e.reason})`:``}`)}function ye(e){return e.findLast(e=>!e.success)?.error}var be=class{orchestrator;constructor(e){this.orchestrator=e instanceof B?e:new B(void 0,e)}async handleReverseSession(e){try{let t=Q(e,`action`)??`create`;if(t===`create`)return c({success:!0,action:t,session:this.orchestrator.create(Z(e))});if(t===`plan`)return c({success:!0,action:t,plan:this.orchestrator.plan(Z(e))});if(t===`status`){let n=$(e,`sessionId`),r=this.orchestrator.status(n);return c(r?{success:!0,action:t,session:r}:{success:!1,action:t,sessionId:n,reason:`Unknown reverse session: ${n}`})}if(t===`list`){let e=this.orchestrator.list();return c({success:!0,action:t,sessions:e,count:e.length})}if(t===`run`)return c({action:t,...await this.orchestrator.run(xe(e))});throw Error(`action must be one of: create, status, list, plan, run`)}catch(e){return c({tool:`reverse_session`,...s(e)})}}};function Z(e){let t=Q(e,`platform`),n=Q(e,`packageName`),r=Q(e,`apkPath`),i=Q(e,`artifactRoot`),a=typeof e.pid==`number`&&Number.isFinite(e.pid)?e.pid:void 0;return{...t?{platform:t}:{},...n?{packageName:n}:{},...r?{apkPath:r}:{},...a===void 0?{}:{pid:a},...i?{artifactRoot:i}:{}}}function Q(e,t){let n=e[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function $(e,t){let n=Q(e,t);if(!n)throw Error(`${t} must be a non-empty string`);return n}function xe(e){let t=$(e,`sessionId`),n=typeof e.maxSteps==`number`&&Number.isFinite(e.maxSteps)?e.maxSteps:void 0,r=typeof e.stopOnError==`boolean`?e.stopOnError:void 0,i=typeof e.includeResults==`boolean`?e.includeResults:void 0;return{sessionId:t,...n===void 0?{}:{maxSteps:n},...r===void 0?{}:{stopOnError:r},...i===void 0?{}:{includeResults:i}}}var Se=class{deps;scripts;api;account;reverseSession;retryPolicy=null;getStoredRetryPolicy(){return this.retryPolicy??x()??null}constructor(e){this.deps=e;let t=re(e);this.scripts=new oe(t),this.api=new se(t),this.account=new ce(t),this.reverseSession=new be(e.serverContext?(t,n)=>e.serverContext.executeToolWithTracking(t,n):void 0)}async handlePageScriptRegisterTool(e){return p(async()=>await this.handlePageScriptRegister(e))}async handlePageScriptRunTool(e){return p(async()=>await this.handlePageScriptRun(e))}async handleListExtensionWorkflowsTool(){return p(async()=>await this.handleListExtensionWorkflows())}async handleRunExtensionWorkflowTool(e){return p(async()=>await this.handleRunExtensionWorkflow(e))}async handleApiProbeBatchTool(e){return p(async()=>await this.handleApiProbeBatch(e))}async handleJsBundleSearchTool(e){return p(async()=>await this.handleJsBundleSearch(e))}async handleReverseSessionTool(e){return p(async()=>await this.handleReverseSession(e))}async handleWorkflowRunInspectTool(e){return p(async()=>await this.handleWorkflowRunInspect(e))}async handleWorkflowConditionalStepTool(e){return p(async()=>await this.handleWorkflowConditionalStep(e))}async handleWorkflowRetryPolicyTool(e){return p(async()=>await this.handleWorkflowRetryPolicy(e))}handlePageScriptRegister(e){return this.scripts.handlePageScriptRegister(e)}handlePageScriptRun(e){return this.scripts.handlePageScriptRun(e)}handleListExtensionWorkflows(){return this.scripts.handleListExtensionWorkflows()}handleRunExtensionWorkflow(e){return this.scripts.handleRunExtensionWorkflow(e,x())}handleApiProbeBatch(e){return this.api.handleApiProbeBatch(e)}handleJsBundleSearch(e){return this.account.handleJsBundleSearch(e)}handleReverseSession(e){return this.reverseSession.handleReverseSession(e)}async handleWorkflowRunInspect(e){let t=j(e.action)??`list`,n=v();if(t===`get`){let t=j(e.runId);if(!t)return N({success:!1,error:`runId is required for action=get`});let r=n.getRun(t);return N(r?{success:!0,run:r}:{success:!1,error:`Run "${t}" not found`})}if(t===`lastSuccess`){let t=j(e.workflowId);if(!t)return N({success:!1,error:`workflowId is required for action=lastSuccess`});let r=n.getLastSuccess(t);return N(r?{success:!0,result:r}:{success:!1,error:`No successful run recorded for workflow "${t}"`})}let r=j(e.workflowId),i=n.listRuns(r);return N({success:!0,count:i.length,runs:i})}async handleWorkflowConditionalStep(e){let t=j(e.predicateId);if(!t)return N({success:!1,error:`predicateId is required`});let n=M(e.whenTrue);if(!n)return N({success:!1,error:`whenTrue is required`});let r=j(n.tool);if(!r)return N({success:!1,error:`whenTrue.tool is required`});let i=(typeof n.args==`object`&&n.args!==null&&!Array.isArray(n.args)?n.args:void 0)??{},a=M(e.whenFalse),o=a?j(a.tool):void 0,s=a&&typeof a.args==`object`&&a.args!==null&&!Array.isArray(a.args)?a.args:{},c=typeof e.stepResults==`object`&&e.stepResults!==null&&!Array.isArray(e.stepResults)?e.stepResults:void 0;if(!c){let t=j(e.workflowId);if(t){let e=v().getLastSuccess(t);e?.stepResults&&(c=e.stepResults)}c||={}}let l={workflowRunId:`conditional-step`,profile:`workflow`,stepResults:new Map(Object.entries(c)),dataBus:null,invokeTool:()=>Promise.resolve(void 0),emitSpan:()=>{},emitMetric:()=>{},getConfig:(e,t)=>t},u={kind:`branch`,id:`conditional-step`,predicateId:t,whenTrue:{kind:`tool`,id:`dummy-true`,toolName:`dummy`}},d;try{d=await b(u,l)}catch(e){return N({success:!1,error:e instanceof Error?e.message:String(e)})}if(d)try{return N({success:!0,predicateId:t,branch:`whenTrue`,result:await this.deps.serverContext.executeToolWithTracking(r,i)})}catch(e){return N({success:!1,error:e instanceof Error?e.message:String(e)})}if(o)try{return N({success:!0,predicateId:t,branch:`whenFalse`,result:await this.deps.serverContext.executeToolWithTracking(o,s)})}catch(e){return N({success:!1,error:e instanceof Error?e.message:String(e)})}return N({success:!0,predicateId:t,branch:`skipped`,reason:`Predicate evaluated to false and no whenFalse branch was provided`})}async handleWorkflowRetryPolicy(e){let t=e.maxAttempts;if(t==null)return N({success:!1,error:`maxAttempts is required`});let n=Math.max(1,Math.min(10,Math.trunc(Number(t))||1)),r=e.backoffMs;if(r==null)return N({success:!1,error:`backoffMs is required`});let i=Math.max(0,Math.min(6e4,Math.trunc(Number(r))||0)),a=e.multiplier,o={maxAttempts:n,backoffMs:i,multiplier:a==null?2:Math.max(1,Math.min(10,Number(a)||1))};return this.retryPolicy=o,y(o),N({success:!0,stored:!0,policy:o})}};export{Se as WorkflowHandlers};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jshookmcp/jshook",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "MCP server with built-in tools across multiple domains for AI-assisted JavaScript analysis and security analysis — browser automation, CDP debugging, network monitoring, JS hooks, code analysis, and workflow orchestration",
5
5
  "keywords": [
6
6
  "ai",
@@ -67,48 +67,52 @@
67
67
  "registry": "https://registry.npmjs.org"
68
68
  },
69
69
  "dependencies": {
70
- "@babel/generator": "^7.29.1",
71
- "@babel/parser": "^7.29.2",
72
- "@babel/traverse": "^7.29.0",
73
- "@babel/types": "^7.29.0",
70
+ "@alexaltea/capstone-js": "^5.0.9",
71
+ "@babel/generator": "^8.0.0",
72
+ "@babel/parser": "^8.0.0",
73
+ "@babel/traverse": "^8.0.0",
74
+ "@babel/types": "^8.0.0",
74
75
  "@modelcontextprotocol/sdk": "^1.29.0",
75
- "dotenv": "^17.4.1",
76
- "jsdom": "^29.0.2",
77
- "koffi": "^3.0.1",
76
+ "binaryen": "^130.0.0",
77
+ "dotenv": "^17.4.2",
78
+ "jsdom": "^29.1.1",
79
+ "koffi": "^3.0.2",
78
80
  "mockttp": "^4.4.2",
81
+ "protobufjs": ">=7.6.3",
79
82
  "quickjs-emscripten": "^0.32.0",
80
83
  "rebrowser-puppeteer-core": "^24.8.1",
81
- "yauzl": "^3.3.1",
82
- "zod": "^4.3.6"
84
+ "yauzl": "^3.4.0",
85
+ "z3-solver": "^4.16.0",
86
+ "zod": "^4.4.3"
83
87
  },
84
88
  "devDependencies": {
85
89
  "@types/babel__generator": "^7.27.0",
86
90
  "@types/babel__traverse": "^7.28.0",
87
91
  "@types/better-sqlite3": "^7.6.13",
88
92
  "@types/jsdom": "^28.0.3",
89
- "@types/node": "^25.9.1",
90
- "@vitest/coverage-v8": "^4.1.7",
93
+ "@types/node": "^25.9.3",
94
+ "@vitest/coverage-v8": "^4.1.9",
91
95
  "cross-env": "^10.1.0",
92
- "lefthook": "^2.1.8",
96
+ "lefthook": "^2.1.9",
93
97
  "medium-zoom": "^1.1.0",
94
- "oxfmt": "^0.51.0",
95
- "oxlint": "^1.66.0",
98
+ "oxfmt": "^0.55.0",
99
+ "oxlint": "^1.70.0",
96
100
  "rollup-plugin-visualizer": "^7.0.1",
97
- "tinyglobby": "^0.2.16",
98
- "tsdown": "^0.22.0",
99
- "tsx": "^4.22.3",
100
- "typescript": "^6.0.2",
101
- "vite": "^8.0.14",
101
+ "tinyglobby": "^0.2.17",
102
+ "tsdown": "^0.22.3",
103
+ "tsx": "^4.22.4",
104
+ "typescript": "^6.0.3",
105
+ "vite": "^8.0.16",
102
106
  "vitepress": "1.6.4",
103
- "vitest": "^4.1.7",
104
- "vue": "^3.5.32"
107
+ "vitest": "^4.1.9",
108
+ "vue": "^3.5.38"
105
109
  },
106
110
  "optionalDependencies": {
107
111
  "@devicefarmer/adbkit": "^3.3.8",
108
- "@huggingface/transformers": "^4.0.1",
109
- "better-sqlite3": "12.10.0",
110
- "camoufox-js": "^0.10.2",
111
- "playwright-core": "^1.60.0",
112
+ "@huggingface/transformers": "^4.2.0",
113
+ "better-sqlite3": "12.11.1",
114
+ "camoufox-js": "^0.11.1",
115
+ "playwright-core": "^1.61.0",
112
116
  "webcrack": "2.16.0"
113
117
  },
114
118
  "engines": {
@@ -124,7 +128,9 @@
124
128
  "typecheck": "tsc --noEmit -p tsconfig.json && corepack pnpm -C packages/extension-sdk typecheck",
125
129
  "deps:update": "corepack pnpm update -r",
126
130
  "dev": "tsx --conditions=development watch src/index.ts",
131
+ "dev:daemon": "cross-env MCP_TRANSPORT=http tsx --conditions=development watch src/index.ts",
127
132
  "start": "node dist/index.mjs",
133
+ "daemon": "cross-env MCP_TRANSPORT=http node dist/index.mjs",
128
134
  "doctor": "tsx src/cli/doctor.ts",
129
135
  "docs:generate": "node scripts/generate-vitepress-reference.mjs",
130
136
  "docs:dev": "vitepress dev docs --host 127.0.0.1 --port 5173",
@@ -136,7 +142,7 @@
136
142
  "format": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" --write --no-error-on-unmatched-pattern",
137
143
  "format:check": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" --check --no-error-on-unmatched-pattern",
138
144
  "test": "node scripts/run-vitest-smart.mjs run",
139
- "test:e2e": "cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ vitest run --config tests/e2e/vitest.e2e.config.ts",
145
+ "test:e2e": "node scripts/build.mjs && cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ vitest run --config tests/e2e/vitest.e2e.config.ts",
140
146
  "test:e2e:portable": "cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ PUPPETEER_HEADLESS=true vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/portable-smoke.e2e.test.ts tests/e2e/process-lifecycle.test.ts",
141
147
  "test:e2e:protocol": "vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/protocol-pure-compute.e2e.test.ts",
142
148
  "test:e2e:protocol-runtime": "vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/protocol-runtime-assisted.e2e.test.ts",
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{a as t,b as n,d as r,h as i,i as a,n as o,s,t as c,u as l}from"./Win32API-eUCF57l_.mjs";import{PEAnalyzer as u}from"./PEAnalyzer-yWQaGrcx.mjs";import{createHash as d}from"node:crypto";import{promises as f}from"node:fs";const p=[{dll:`kernel32.dll`,funcs:[{name:`IsDebuggerPresent`,mechanism:`anti_debug_api`,confidence:`high`,bypass:`Hook IsDebuggerPresent to return 0, or patch PEB.BeingDebugged field`},{name:`CheckRemoteDebuggerPresent`,mechanism:`anti_debug_api`,confidence:`high`,bypass:`Hook CheckRemoteDebuggerPresent to set output to FALSE and return TRUE`},{name:`OutputDebugStringA`,mechanism:`exception_based`,confidence:`low`,bypass:`May be used for anti-debug timing — monitor for exception handler abuse`},{name:`GetTickCount`,mechanism:`timing_check`,confidence:`low`,bypass:`Hook GetTickCount to return consistent delta values`},{name:`GetTickCount64`,mechanism:`timing_check`,confidence:`low`,bypass:`Hook GetTickCount64 to return consistent delta values`},{name:`QueryPerformanceCounter`,mechanism:`timing_check`,confidence:`medium`,bypass:`Hook QPC to filter out debugging time deltas`}]},{dll:`ntdll.dll`,funcs:[{name:`NtQueryInformationProcess`,mechanism:`ntquery_debug`,confidence:`high`,bypass:`Hook NtQueryInformationProcess: return 0 for ProcessDebugPort (7), ProcessDebugObjectHandle (30), ProcessDebugFlags (31)`},{name:`NtSetInformationThread`,mechanism:`thread_hiding`,confidence:`medium`,bypass:`Hook NtSetInformationThread: intercept ThreadHideFromDebugger (0x11) calls`},{name:`NtClose`,mechanism:`exception_based`,confidence:`low`,bypass:`NtClose with invalid handle detects debugger via exception — hook to suppress`},{name:`RtlGetNtGlobalFlags`,mechanism:`heap_flags`,confidence:`medium`,bypass:`Clear NtGlobalFlag (FLG_HEAP_*) in PEB at offset 0xBC (x64)`}]}],m=[`GetThreadContext`,`SetThreadContext`],h={guardPageMaxRegions:2e4,guardPageTimeoutMs:2e3,integrityMaxModules:32,integrityMaxSections:128,integrityMaxBytes:16*1024*1024,integrityMaxSectionBytes:2*1024*1024,integrityTimeoutMs:3e3};var g=class{peAnalyzer=new u;options;constructor(e={}){this.options={...h,...e}}async detect(t){let r=[],i=n(t);try{let n=this.enumerateModules(i);for(let i of n)try{let e=await this.peAnalyzer.parseImports(t,i.base);for(let t of e){let e=t.dllName.toLowerCase();for(let n of p)if(e.includes(n.dll.toLowerCase().replace(`.dll`,``)))for(let e of n.funcs)t.functions.some(t=>t.name===e.name)&&r.push({mechanism:e.mechanism,confidence:e.confidence,location:`import:${e.name}`,moduleName:i.name,details:`${i.name} imports ${e.name} from ${t.dllName}`,bypassSuggestion:e.bypass});for(let e of t.functions)m.includes(e.name)&&r.push({mechanism:`hardware_breakpoint`,confidence:`medium`,location:`import:${e.name}`,moduleName:i.name,details:`${i.name} imports ${e.name} — may check debug registers for hardware breakpoints`,bypassSuggestion:`Hook GetThreadContext to zero out DR0-DR3 and DR6/DR7 before returning`})}}catch(t){e.debug(`Import scan skipped for ${i.name}: ${t}`)}}finally{c(i)}return r}async findGuardPages(e){return(await this.scanGuardPages(e)).guardPages}async scanGuardPages(e){let t=[],r=n(e),a=Date.now(),o={scannedRegions:0,queryFailures:0,durationMs:0,timedOut:!1,truncated:!1,maxRegions:this.options.guardPageMaxRegions,timeoutMs:this.options.guardPageTimeoutMs};try{let e=this.enumerateModules(r),n=0n;for(;n<140737488355327n;){if(this.isTimedOut(a,o.timeoutMs)){o.timedOut=!0,o.truncated=!0;break}if(o.scannedRegions>=o.maxRegions){o.truncated=!0;break}try{let a=i(r,n);if(!a.success)break;let s=a.info,c=s.BaseAddress+s.RegionSize;if(o.scannedRegions+=1,(s.Protect&l.GUARD)!==0){let n=null;for(let t of e){let e=BigInt(t.base);if(s.BaseAddress>=e&&s.BaseAddress<e+BigInt(t.size)){n=t.name;break}}t.push({address:`0x${s.BaseAddress.toString(16)}`,size:Number(s.RegionSize),moduleName:n,nearbySymbol:null})}if(s.RegionSize<=0n||c<=n||c<=s.BaseAddress){o.truncated=!0;break}n=c}catch{o.queryFailures+=1,n+=4096n}}}finally{o.durationMs=Date.now()-a,c(r)}return{guardPages:t,stats:o}}async checkIntegrity(e,t){return(await this.scanIntegrity(e,t)).sections}async scanIntegrity(t,i){let a=[],o=n(t),s=Date.now(),l={scannedModules:0,scannedSections:0,hashedBytes:0,skippedModules:0,skippedSections:0,durationMs:0,timedOut:!1,truncated:!1,maxModules:this.options.integrityMaxModules,maxSections:this.options.integrityMaxSections,maxBytes:this.options.integrityMaxBytes,timeoutMs:this.options.integrityTimeoutMs},u=!1;try{let n=this.enumerateModules(o),c=i?n.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())):n;for(let n of c){if(this.shouldStopIntegrityScan(l,s)){this.isTimedOut(s,l.timeoutMs)&&(l.timedOut=!0),l.truncated=!0;break}l.scannedModules+=1;try{let e=await f.readFile(n.path),i=await this.peAnalyzer.listSections(t,n.base);for(let t of i){if(this.shouldStopIntegrityScan(l,s)){this.isTimedOut(s,l.timeoutMs)&&(l.timedOut=!0),l.truncated=!0,u=!0;break}if(!t.isExecutable)continue;let i=parseInt(t.virtualAddress,16),c=Math.min(t.virtualSize,t.rawSize);if(c<=0)continue;if(c>this.options.integrityMaxSectionBytes){l.skippedSections+=1;continue}if(l.hashedBytes+c>l.maxBytes){l.truncated=!0,u=!0;break}let f=r(o,BigInt(n.base)+BigInt(i),c),p=this.rvaToFileOffset(e,i);if(p<0||p+c>e.length)continue;let m=e.subarray(p,p+c),h=d(`sha256`).update(f).digest(`hex`),g=d(`sha256`).update(m).digest(`hex`);a.push({sectionName:t.name,moduleName:n.name,diskHash:g,memoryHash:h,isModified:h!==g}),l.scannedSections+=1,l.hashedBytes+=c}}catch(t){l.skippedModules+=1,e.debug(`Integrity check skipped for ${n.name}: ${t}`)}if(u)break}}finally{l.durationMs=Date.now()-s,c(o)}return{sections:a,stats:l}}enumerateModules(n){let r=[];try{let{modules:e,count:i}=o(n);for(let o=0;o<i;o++){let i=e[o],c=a(n,i),l=s(n,i),u=t(n,i)??c;l.success&&r.push({name:c,base:`0x${l.info.lpBaseOfDll.toString(16)}`,path:u,size:l.info.SizeOfImage})}}catch(t){e.debug(`Module enumeration failed: ${t}`)}return r}rvaToFileOffset(e,t){let n=e.readUInt32LE(60),r=e.readUInt16LE(n+6),i=e.readUInt16LE(n+20),a=n+24+i;for(let n=0;n<r;n++){let r=a+n*40;if(r+40>e.length)break;let i=e.readUInt32LE(r+12),o=e.readUInt32LE(r+8),s=e.readUInt32LE(r+20);if(t>=i&&t<i+o)return s+(t-i)}return-1}isTimedOut(e,t){return Date.now()-e>=t}shouldStopIntegrityScan(e,t){return this.isTimedOut(t,e.timeoutMs)||e.scannedModules>=e.maxModules||e.scannedSections>=e.maxSections||e.hashedBytes>=e.maxBytes}};const _=new g;export{g as AntiCheatDetector,_ as antiCheatDetector};
@@ -1 +0,0 @@
1
- import{E as e}from"./constants-BYj8Xek8.mjs";import{t}from"./ToolError-DWU_z7gp.mjs";import{_ as n,b as r,d as i,f as a,h as o,l as s,m as c,p as l,t as u,u as d}from"./Win32API-eUCF57l_.mjs";import{l as f}from"./Win32Debug-CYrIQBvr.mjs";import{n as p}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{t as m}from"./NativeMemoryManager.impl-DniBe2wf.mjs";import{randomUUID as h}from"node:crypto";var g=class{patches=new Map;async patchBytes(e,t,a){let o=BigInt(t.startsWith(`0x`)?t:`0x${t}`),s=Buffer.from(a),l=r(e,!0);try{let t=i(l,o,s.length),{success:r,oldProtect:u}=c(l,o,s.length,d.EXECUTE_READWRITE);n(l,o,s),f(l,o,s.length),r&&c(l,o,s.length,u);let p={id:h(),pid:e,address:`0x${o.toString(16).toUpperCase()}`,originalBytes:Array.from(t),patchBytes:a,isApplied:!0,timestamp:Date.now()};return this.patches.set(p.id,p),p}finally{u(l)}}async unpatch(e){let t=this.patches.get(e);if(!t?.isApplied)return!1;let i=BigInt(t.address),a=Buffer.from(t.originalBytes),o=r(t.pid,!0);try{let{oldProtect:e}=c(o,i,a.length,d.EXECUTE_READWRITE);return n(o,i,a),f(o,i,a.length),c(o,i,a.length,e),t.isApplied=!1,!0}finally{u(o)}}async nopBytes(e,t,n){let r=Array.from({length:n},()=>144);return this.patchBytes(e,t,r)}async findCodeCaves(t,n){let a=n??e,s=[],c=r(t,!1);try{let e=await m.enumerateModules(t);if(!e.success||!e.modules)return s;for(let t of e.modules){let e=BigInt(t.baseAddress.startsWith(`0x`)?t.baseAddress:`0x${t.baseAddress}`),n=e,r=e+BigInt(t.size);for(;n<r;){let{success:e,info:r}=o(c,n);if(!e||r.RegionSize===0n)break;let l=Number(r.RegionSize);if(p(r.Protect)&&l>0)try{let e=i(c,r.BaseAddress,Math.min(l,4*1024*1024)),n=-1;for(let i=0;i<e.length;i++){let o=e[i];if(o===0||o===204)n===-1&&(n=i);else if(n!==-1){let e=i-n;if(e>=a){let i=r.BaseAddress+BigInt(n);s.push({address:`0x${i.toString(16).toUpperCase()}`,size:e,module:t.name,section:`.text`})}n=-1}}if(n!==-1){let i=e.length-n;if(i>=a){let e=r.BaseAddress+BigInt(n);s.push({address:`0x${e.toString(16).toUpperCase()}`,size:i,module:t.name,section:`.text`})}}}catch{}n=r.BaseAddress+r.RegionSize}}}finally{u(c)}return s.toSorted((e,t)=>t.size-e.size)}async allocateRemote(e,n){let i=r(e,!0);try{let e=a(i,0n,n,s.COMMIT|s.RESERVE,d.EXECUTE_READWRITE);if(e===0n)throw new t(`RUNTIME`,`VirtualAllocEx failed`);return`0x${e.toString(16).toUpperCase()}`}finally{u(i)}}async freeRemote(e,t,n){let i=BigInt(t.startsWith(`0x`)?t:`0x${t}`),a=r(e,!0);try{return l(a,i,0,s.RELEASE)}finally{u(a)}}listPatches(){return Array.from(this.patches.values())}};const _=new g;export{g as CodeInjector,_ as codeInjector};