@jshookmcp/jshook 0.3.0 → 0.3.2

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 (346) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +32 -49
  3. package/README.zh.md +32 -47
  4. package/dist/AntiCheatDetector-B6d4Qe9D.mjs +1 -0
  5. package/dist/BrowserSessionCoordinator-BJ-HOxo0.mjs +1 -0
  6. package/dist/CacheAdapters-CsNtQIR8.mjs +1 -0
  7. package/dist/CodeInjector-Cll_7bLJ.mjs +1 -0
  8. package/dist/ConsoleMonitor-CxDJV15E.mjs +306 -0
  9. package/dist/DOMInspector-C19J4zeq.mjs +95 -0
  10. package/dist/DarwinAPI-ZfQdpLNI.mjs +1 -0
  11. package/dist/DetailedDataManager-DmQ1LT-W.mjs +1 -0
  12. package/dist/EventBus-DL8iLA09.mjs +1 -0
  13. package/dist/EvidenceGraphBridge-BtbwXsLC.mjs +1 -0
  14. package/dist/ExtensionManager-BD724zkO.mjs +1 -0
  15. package/dist/ExtensionManager.tools-oVMJgPcN.mjs +1 -0
  16. package/dist/FingerprintManager-DT0EAUEo.mjs +1 -0
  17. package/dist/HardwareBreakpoint-BUfPdp0f.mjs +1 -0
  18. package/dist/HeapAnalyzer-B_aqY8oj.mjs +1 -0
  19. package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs} +66 -101
  20. package/dist/InstrumentationSession-D_G1ZPyd.mjs +1 -0
  21. package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +1 -0
  22. package/dist/MemoryController-X1XNSn1n.mjs +2 -0
  23. package/dist/MemoryScanSession-DG_F-PjE.mjs +1 -0
  24. package/dist/MemoryScanner-g1_L1ub5.mjs +1 -0
  25. package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +1 -0
  26. package/dist/NativeMemoryManager.utils-BHy1P_jM.mjs +1 -0
  27. package/dist/NetworkMonitor-B_-au6aV.mjs +185 -0
  28. package/dist/PEAnalyzer-yWQaGrcx.mjs +1 -0
  29. package/dist/PageController-Dfsm1_o7.mjs +1 -0
  30. package/dist/PointerChainEngine-BhCUkmxY.mjs +1 -0
  31. package/dist/PrerequisiteError-BjCQA-gK.mjs +1 -0
  32. package/dist/ProcessRegistry-C-bN48oR.mjs +1 -0
  33. package/dist/ResponseBuilder-BfWP-uaT.mjs +1 -0
  34. package/dist/ReverseEvidenceGraph-BhSYYdiI.mjs +2 -0
  35. package/dist/RingBuffer-Dm54ELKT.mjs +1 -0
  36. package/dist/ScriptManager-LWGPTdvD.mjs +7 -0
  37. package/dist/ServerRuntimeState-D2bWHqEE.mjs +1 -0
  38. package/dist/Speedhack-yseDPSZ9.mjs +1 -0
  39. package/dist/StealthVerifier-BmcxfwSF.mjs +1 -0
  40. package/dist/StructureAnalyzer-C5lpuZkg.mjs +2 -0
  41. package/dist/ToolCatalog-CYdD9F5f.mjs +1 -0
  42. package/dist/ToolError-DWU_z7gp.mjs +1 -0
  43. package/dist/ToolProbe-C7ZU2x7M.mjs +1 -0
  44. package/dist/ToolRegistry-C5oB8KP8.mjs +1 -0
  45. package/dist/ToolRouter.policy-CfhJczkt.mjs +4 -0
  46. package/dist/TraceRecorder-BiJWBXHX.mjs +272 -0
  47. package/dist/VersionDetector-CHT36Az0.mjs +9 -0
  48. package/dist/Win32API-eUCF57l_.mjs +1 -0
  49. package/dist/Win32Debug-CYrIQBvr.mjs +1 -0
  50. package/dist/WorkflowEngine-D876meOO.mjs +1 -0
  51. package/dist/analysis-D4swdMvq.mjs +6 -0
  52. package/dist/{antidebug-BRKeyt27.mjs → antidebug-7L3ygj_9.mjs} +8 -259
  53. package/dist/apk-packer-BqXcInnX.mjs +1 -0
  54. package/dist/artifactRetention-BCPQASm7.mjs +1 -0
  55. package/dist/artifacts-CkodUM4j.mjs +1 -0
  56. package/dist/authorization-schema-BOFwSXUN.mjs +1 -0
  57. package/dist/betterSqlite3-Brtq-SIQ.mjs +1 -0
  58. package/dist/binary-instrument-DU7V6TUM.mjs +7 -0
  59. package/dist/binary-secrets-PdMVoyt0.mjs +1 -0
  60. package/dist/bind-helpers-m2U8glkF.mjs +1 -0
  61. package/dist/boringssl-inspector-BBaJwwkU.mjs +2 -0
  62. package/dist/browser-Qqco2rOT.mjs +11 -0
  63. package/dist/capabilities-CyXuKUl1.mjs +1 -0
  64. package/dist/chunk-C_pMuVsO.mjs +1 -0
  65. package/dist/collector-Bpl6qy2L.mjs +1 -0
  66. package/dist/concurrency-DCr8WQ2M.mjs +1 -0
  67. package/dist/constants-BYj8Xek8.mjs +1 -0
  68. package/dist/coordination-CWXW1o8K.mjs +1 -0
  69. package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
  70. package/dist/debugger-DyALjYMk.mjs +1 -0
  71. package/dist/definitions-BWxBke3r.mjs +1 -0
  72. package/dist/definitions-BYwATKc-.mjs +1 -0
  73. package/dist/definitions-B_83XfNQ.mjs +1 -0
  74. package/dist/definitions-Bf3H1EwV.mjs +1 -0
  75. package/dist/definitions-BftdXgXI.mjs +1 -0
  76. package/dist/definitions-Bio5XJYy.mjs +1 -0
  77. package/dist/definitions-C3qNgSn1.mjs +1 -0
  78. package/dist/definitions-CB6vmOer.mjs +1 -0
  79. package/dist/definitions-CMZRSy3k.mjs +1 -0
  80. package/dist/definitions-CQd7yCQH.mjs +1 -0
  81. package/dist/definitions-CT8ln6GQ.mjs +1 -0
  82. package/dist/definitions-Cenu6mxo.mjs +1 -0
  83. package/dist/definitions-D4g-MS10.mjs +1 -0
  84. package/dist/definitions-D5wl_8HN.mjs +1 -0
  85. package/dist/definitions-DAQm1Xar.mjs +1 -0
  86. package/dist/definitions-DP1vgxEY.mjs +1 -0
  87. package/dist/definitions-DxFNRQNK2.mjs +1 -0
  88. package/dist/definitions-Ibci7e_L.mjs +1 -0
  89. package/dist/definitions-OeLvmlQy.mjs +1 -0
  90. package/dist/definitions-RZYGD_Ey.mjs +1 -0
  91. package/dist/definitions-Tls8c0A0.mjs +1 -0
  92. package/dist/definitions-bybDvnG0.mjs +26 -0
  93. package/dist/definitions-l7TjdE6V.mjs +1 -0
  94. package/dist/encoding-ycOaz8Vr.mjs +2 -0
  95. package/dist/ensure-browser-core-DxWC-NTp.mjs +1 -0
  96. package/dist/evidence-graph-bridge-CV_UdYqj.mjs +1 -0
  97. package/dist/factory-CKr4fAE1.mjs +1 -0
  98. package/dist/flat-target-session-DvcQX7J5.mjs +1 -0
  99. package/dist/formatAddress-vLA_hOJt.mjs +1 -0
  100. package/dist/graphql-B2TiPEow.mjs +62 -0
  101. package/dist/handlers-0yKLRIfo.mjs +2 -0
  102. package/dist/handlers-8zN_vBIz.mjs +1 -0
  103. package/dist/handlers-B62K4FTc.mjs +1 -0
  104. package/dist/handlers-BpDlVVVU.mjs +1 -0
  105. package/dist/handlers-CMJK7m1c.mjs +31 -0
  106. package/dist/handlers-D2ZOul9p.mjs +54 -0
  107. package/dist/handlers-D5E40ssn.mjs +5 -0
  108. package/dist/handlers-DGbdQAgD.mjs +4 -0
  109. package/dist/handlers-DHO3rjsW.mjs +1 -0
  110. package/dist/handlers-FJ80VzUI.mjs +2 -0
  111. package/dist/handlers-VHWrxbM_.mjs +1 -0
  112. package/dist/handlers-l8QIKqBj.mjs +2 -0
  113. package/dist/handlers-mPFiNPe8.mjs +302 -0
  114. package/dist/{handlers-Dz9PYsCa.mjs → handlers-yo_xYzT8.mjs} +118 -904
  115. package/dist/handlers.impl-D9Hh8Bgl.mjs +1 -0
  116. package/dist/hooks-D4XLfgtV.mjs +600 -0
  117. package/dist/index.mjs +13 -5240
  118. package/dist/jadx-search-B_Yse0Zh.mjs +5 -0
  119. package/dist/logger-sBC6IdRT.mjs +1 -0
  120. package/dist/maintenance-BUpIukhg.mjs +1 -0
  121. package/dist/manifest-0Jpt_AQa.mjs +1 -0
  122. package/dist/manifest-B3fZbSWR.mjs +1 -0
  123. package/dist/manifest-B7NB2rh2.mjs +1 -0
  124. package/dist/manifest-BDi4nbH1.mjs +1 -0
  125. package/dist/manifest-BLDfkE7n.mjs +1 -0
  126. package/dist/manifest-BcXbB4gf.mjs +1 -0
  127. package/dist/manifest-Bdnc_vrc.mjs +1 -0
  128. package/dist/manifest-BuYKgCnp.mjs +1 -0
  129. package/dist/manifest-CBfNnGPV.mjs +1 -0
  130. package/dist/manifest-CPS1Xv69.mjs +1 -0
  131. package/dist/manifest-CQH9FhwI.mjs +1 -0
  132. package/dist/manifest-CRryuZF4.mjs +1 -0
  133. package/dist/manifest-CctIumog.mjs +1 -0
  134. package/dist/manifest-CvTe5ZGV2.mjs +1 -0
  135. package/dist/manifest-D-5GH0DV.mjs +1 -0
  136. package/dist/manifest-D3Ssf3IC.mjs +1 -0
  137. package/dist/manifest-D5ck3NvC.mjs +1 -0
  138. package/dist/manifest-D9jUUJAu.mjs +1 -0
  139. package/dist/manifest-DCx6w2XV.mjs +1 -0
  140. package/dist/manifest-DG19q-Ld.mjs +1 -0
  141. package/dist/manifest-DLMlD0Zc.mjs +1 -0
  142. package/dist/manifest-DYpn8w_h.mjs +1 -0
  143. package/dist/manifest-DYzWI8Xs.mjs +1 -0
  144. package/dist/manifest-D_obs5F4.mjs +1 -0
  145. package/dist/manifest-DujQqEQR.mjs +2 -0
  146. package/dist/manifest-DwL2ik8P.mjs +1 -0
  147. package/dist/manifest-ItF5P8A12.mjs +1 -0
  148. package/dist/manifest-KZphqIyX.mjs +1 -0
  149. package/dist/manifest-LG42zPLY2.mjs +1 -0
  150. package/dist/manifest-LLdI5m4T.mjs +1 -0
  151. package/dist/manifest-QYbQXJn0.mjs +1 -0
  152. package/dist/manifest-RcpX_MyZ.mjs +123 -0
  153. package/dist/manifest-YgVd8Sgz.mjs +1 -0
  154. package/dist/manifest-Zy7Odg5J.mjs +1 -0
  155. package/dist/manifest-ff1H7Pdp.mjs +1 -0
  156. package/dist/manifest-iuhF6pTL2.mjs +1 -0
  157. package/dist/manifest-nXHmtMSp2.mjs +1 -0
  158. package/dist/manifest-xWfu6iLo.mjs +1 -0
  159. package/dist/manifest-yC16OhL2.mjs +1 -0
  160. package/dist/manifest-ztWJoXy4.mjs +1 -0
  161. package/dist/matchesWildcardPattern-BAG6LvX5.mjs +1 -0
  162. package/dist/modules-BPBcSaM-.mjs +333 -0
  163. package/dist/mojo-ipc-BhwsdVUW.mjs +9 -0
  164. package/dist/native/scripts/linux/enum-windows.sh +12 -12
  165. package/dist/native/scripts/macos/enum-windows.applescript +22 -22
  166. package/dist/native-j8l473zn.mjs +961 -0
  167. package/dist/network-T0VRwNPd.mjs +7 -0
  168. package/dist/outputPaths-B4Ic4RZh.mjs +2 -0
  169. package/dist/parse-args-Bw413PlW.mjs +1 -0
  170. package/dist/platform-CzaQtISh.mjs +93 -0
  171. package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +1 -0
  172. package/dist/process-CWhsCWrf.mjs +2 -0
  173. package/dist/proxy-DZFlDsG3.mjs +2 -0
  174. package/dist/registry-DH4sc1dt.mjs +1 -0
  175. package/dist/renderer-pid-9tJnZ_9N.mjs +1 -0
  176. package/dist/response-C7rKQst4.mjs +1 -0
  177. package/dist/search-defaults-lYBVn_3L.mjs +1 -0
  178. package/dist/server/plugin-api.d.mts +19 -36
  179. package/dist/server/plugin-api.mjs +1 -293
  180. package/dist/shared-state-board-BSjXLUV1.mjs +1 -0
  181. package/dist/sourcemap-Dh3Ai_ur.mjs +1 -0
  182. package/dist/ssrf-policy-CsIJGkpd.mjs +1 -0
  183. package/dist/streaming-BcJ0B6ao.mjs +1 -0
  184. package/dist/tool-builder-qif8M9-K.mjs +1 -0
  185. package/dist/transform-DOxzeWPB.mjs +103 -0
  186. package/dist/types-D9EiE5o9.mjs +1 -0
  187. package/dist/types-Fz69RzbZ.mjs +1 -0
  188. package/dist/wasm-CZ_HTfKR.mjs +174 -0
  189. package/dist/webcrack-C1iYG_EX.mjs +46 -0
  190. package/dist/workflow-BdwQmARn.mjs +101 -0
  191. package/package.json +55 -82
  192. package/src/native/scripts/linux/enum-windows.sh +12 -12
  193. package/src/native/scripts/macos/enum-windows.applescript +22 -22
  194. package/dist/AntiCheatDetector-CqGDXmfc.mjs +0 -350
  195. package/dist/CacheAdapters-jJFy20G-.mjs +0 -80
  196. package/dist/CodeInjector-BdjRfNx7.mjs +0 -150
  197. package/dist/ConsoleMonitor-DykL3IAw.mjs +0 -2269
  198. package/dist/DarwinAPI-ETyy0xyo.mjs +0 -363
  199. package/dist/DetailedDataManager-HT49OrvF.mjs +0 -217
  200. package/dist/EventBus-DFKvADm3.mjs +0 -141
  201. package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +0 -153
  202. package/dist/ExtensionManager-BDMsY2Dz.mjs +0 -721
  203. package/dist/FingerprintManager-BN4UQWnX.mjs +0 -96
  204. package/dist/HardwareBreakpoint-Cc2AFq1Y.mjs +0 -239
  205. package/dist/HeapAnalyzer-DruMgsgj.mjs +0 -284
  206. package/dist/InstrumentationSession-DLH0vd-z.mjs +0 -244
  207. package/dist/MemoryController-CMtviNW_.mjs +0 -167
  208. package/dist/MemoryScanSession-ITgb_NMi.mjs +0 -278
  209. package/dist/MemoryScanner-CiL7Z3ey.mjs +0 -428
  210. package/dist/NativeMemoryManager.impl-D9Lkovvn.mjs +0 -485
  211. package/dist/NativeMemoryManager.utils-BBlAixF5.mjs +0 -165
  212. package/dist/PEAnalyzer-DMQ44gen.mjs +0 -385
  213. package/dist/PageController-BPJNqqBN.mjs +0 -431
  214. package/dist/PointerChainEngine-K7wN8Z-w.mjs +0 -325
  215. package/dist/PrerequisiteError-TuyZIs6n.mjs +0 -20
  216. package/dist/ProcessRegistry-zGg12QbE.mjs +0 -74
  217. package/dist/ResponseBuilder-CJXWmWNw.mjs +0 -143
  218. package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +0 -269
  219. package/dist/ScriptManager-ZuWD-0Jg.mjs +0 -3003
  220. package/dist/Speedhack-D-z0umeT.mjs +0 -156
  221. package/dist/StealthVerifier-BWmPgQsv.mjs +0 -135
  222. package/dist/StructureAnalyzer-Cav5AVSL.mjs +0 -429
  223. package/dist/ToolCatalog-5OJdMiF0.mjs +0 -582
  224. package/dist/ToolError-jh9whhMd.mjs +0 -15
  225. package/dist/ToolProbe-DbCFGyrg.mjs +0 -45
  226. package/dist/ToolRegistry-B9krbTtI.mjs +0 -180
  227. package/dist/ToolRouter.policy-BGDAGyeH.mjs +0 -344
  228. package/dist/TraceRecorder-B41Z5XBj.mjs +0 -1286
  229. package/dist/VersionDetector-K3V4vGsw.mjs +0 -104
  230. package/dist/Win32API-C2kjj0ze.mjs +0 -346
  231. package/dist/Win32Debug-CKrGOTpo.mjs +0 -274
  232. package/dist/WorkflowEngine-DJ6M4opp.mjs +0 -569
  233. package/dist/analysis-BHeJW2Nb.mjs +0 -1234
  234. package/dist/artifactRetention-CPXkUJXp.mjs +0 -598
  235. package/dist/artifacts-DkfosXH3.mjs +0 -59
  236. package/dist/authorization-schema-DRqyJMSk.mjs +0 -31
  237. package/dist/betterSqlite3-DLSBZodi.mjs +0 -74
  238. package/dist/binary-instrument--V3MAhJ4.mjs +0 -971
  239. package/dist/bind-helpers-ClV34xdn.mjs +0 -42
  240. package/dist/boringssl-inspector-Bo_LOLaS.mjs +0 -180
  241. package/dist/browser-Dx3_S2cG.mjs +0 -4369
  242. package/dist/capabilities-CcHlvWgK.mjs +0 -33
  243. package/dist/chunk-CjcI7cDX.mjs +0 -15
  244. package/dist/concurrency-Drev_Vz9.mjs +0 -41
  245. package/dist/constants-CDZLOoVv.mjs +0 -534
  246. package/dist/coordination-DgItD9DL.mjs +0 -259
  247. package/dist/debugger-RS3RSAqs.mjs +0 -1288
  248. package/dist/definitions-BEoYofW5.mjs +0 -47
  249. package/dist/definitions-BRaefg3u.mjs +0 -365
  250. package/dist/definitions-BbkvZkiv.mjs +0 -96
  251. package/dist/definitions-BtWSHJ3o.mjs +0 -17
  252. package/dist/definitions-C1gCHO0i.mjs +0 -43
  253. package/dist/definitions-CDOg_b-l.mjs +0 -138
  254. package/dist/definitions-CVPD9hzZ.mjs +0 -54
  255. package/dist/definitions-Cea8Lgl7.mjs +0 -94
  256. package/dist/definitions-DAgIyjxM.mjs +0 -10
  257. package/dist/definitions-DJA27nsL.mjs +0 -66
  258. package/dist/definitions-DKPFU3LW.mjs +0 -25
  259. package/dist/definitions-DPRpZQ96.mjs +0 -47
  260. package/dist/definitions-DUE5gmdn.mjs +0 -18
  261. package/dist/definitions-DYVjOtxa.mjs +0 -26
  262. package/dist/definitions-DcYLVLCo.mjs +0 -37
  263. package/dist/definitions-Pp5LI2H4.mjs +0 -27
  264. package/dist/definitions-j9KdHVNR.mjs +0 -14
  265. package/dist/definitions-uzkjBwa7.mjs +0 -258
  266. package/dist/definitions-va-AnLuQ.mjs +0 -28
  267. package/dist/encoding-DJeqHmpd.mjs +0 -1079
  268. package/dist/evidence-graph-bridge-DcYizFk2.mjs +0 -136
  269. package/dist/factory-C90tBff6.mjs +0 -575
  270. package/dist/flat-target-session-Dgax2Cy3.mjs +0 -29
  271. package/dist/formatAddress-nnMvEohD.mjs +0 -17
  272. package/dist/graphql-CoHrhweh.mjs +0 -1197
  273. package/dist/handlers-4jmR0nMs.mjs +0 -898
  274. package/dist/handlers-BAHPxcch.mjs +0 -789
  275. package/dist/handlers-BOs9b907.mjs +0 -2600
  276. package/dist/handlers-BWXEy6ef.mjs +0 -917
  277. package/dist/handlers-Bndn6QvE.mjs +0 -111
  278. package/dist/handlers-BqC4bD4s.mjs +0 -681
  279. package/dist/handlers-BtYq60bM2.mjs +0 -276
  280. package/dist/handlers-BzgcB4iv.mjs +0 -799
  281. package/dist/handlers-CRyRWj2b.mjs +0 -859
  282. package/dist/handlers-CVv2H1uq.mjs +0 -592
  283. package/dist/handlers-Dl5a7JS4.mjs +0 -572
  284. package/dist/handlers-Dx2d7jt7.mjs +0 -2537
  285. package/dist/handlers-HujRKC3b.mjs +0 -661
  286. package/dist/handlers.impl-XWXkQfyi.mjs +0 -807
  287. package/dist/hooks-B1B8NRHL.mjs +0 -898
  288. package/dist/logger-Dh_xb7_2.mjs +0 -93
  289. package/dist/maintenance-PRMkLVRW.mjs +0 -835
  290. package/dist/manifest-67Bok-Si.mjs +0 -58
  291. package/dist/manifest-6lNTMZAB2.mjs +0 -87
  292. package/dist/manifest-B2duEHiH.mjs +0 -90
  293. package/dist/manifest-B6EY9Vm8.mjs +0 -57
  294. package/dist/manifest-B6nKSbyY.mjs +0 -95
  295. package/dist/manifest-BL8AQNPF.mjs +0 -106
  296. package/dist/manifest-BSZvJJmV.mjs +0 -47
  297. package/dist/manifest-BU7qzUyX.mjs +0 -418
  298. package/dist/manifest-Bl62e8WK.mjs +0 -49
  299. package/dist/manifest-Bo5cXjdt.mjs +0 -82
  300. package/dist/manifest-BpS4gtUK.mjs +0 -1347
  301. package/dist/manifest-Bv65_e2W.mjs +0 -101
  302. package/dist/manifest-BytNIF4Z.mjs +0 -117
  303. package/dist/manifest-C-xtsjS3.mjs +0 -81
  304. package/dist/manifest-CDYl7OhA.mjs +0 -66
  305. package/dist/manifest-CRZ3xmkD.mjs +0 -61
  306. package/dist/manifest-CoW6u4Tp.mjs +0 -132
  307. package/dist/manifest-Cq5zN_8A.mjs +0 -50
  308. package/dist/manifest-D7YZM_2e.mjs +0 -194
  309. package/dist/manifest-DE_VrAeQ.mjs +0 -314
  310. package/dist/manifest-DGsXSCpT.mjs +0 -39
  311. package/dist/manifest-DJ2vfEuW.mjs +0 -156
  312. package/dist/manifest-DPXDYhEu.mjs +0 -80
  313. package/dist/manifest-Dd4fQb0a.mjs +0 -322
  314. package/dist/manifest-Deq6opGg.mjs +0 -223
  315. package/dist/manifest-DfJTafJK.mjs +0 -37
  316. package/dist/manifest-DgOdgN_j.mjs +0 -50
  317. package/dist/manifest-DlbMW4v4.mjs +0 -47
  318. package/dist/manifest-DmVfbH0w.mjs +0 -374
  319. package/dist/manifest-Dog6Ddjr.mjs +0 -109
  320. package/dist/manifest-DvgU5FWb.mjs +0 -58
  321. package/dist/manifest-HsfDBs7j.mjs +0 -50
  322. package/dist/manifest-I8oQHvCG.mjs +0 -186
  323. package/dist/manifest-NvH_a-av.mjs +0 -786
  324. package/dist/manifest-cEJU1v0Z.mjs +0 -129
  325. package/dist/manifest-wOl5XLB12.mjs +0 -112
  326. package/dist/modules-tZozf0LQ.mjs +0 -10635
  327. package/dist/mojo-ipc-DXNEXEqb.mjs +0 -640
  328. package/dist/network-CPVvwvFg.mjs +0 -3852
  329. package/dist/outputPaths-um7lCRY3.mjs +0 -1141
  330. package/dist/parse-args-B4cY5Vx5.mjs +0 -39
  331. package/dist/platform-CYeFoTWp.mjs +0 -2161
  332. package/dist/process-BTbgcVc6.mjs +0 -1306
  333. package/dist/proxy-r8YN6nP1.mjs +0 -192
  334. package/dist/registry-Bl8ZQW61.mjs +0 -34
  335. package/dist/response-CWhh2aLo.mjs +0 -34
  336. package/dist/shared-state-board-BoZnSoj-.mjs +0 -586
  337. package/dist/sourcemap-BIDHUVXy.mjs +0 -934
  338. package/dist/ssrf-policy-Dsqd-DTX.mjs +0 -166
  339. package/dist/streaming-Dal6utPp.mjs +0 -725
  340. package/dist/tool-builder-BHJp32mV.mjs +0 -186
  341. package/dist/transform-DRVgGG90.mjs +0 -1011
  342. package/dist/types-Bx92KJfT.mjs +0 -4
  343. package/dist/types-DDBWs9UP.mjs +0 -37
  344. package/dist/wasm-BYx5UOeG.mjs +0 -1044
  345. package/dist/webcrack-Be0_FccV.mjs +0 -747
  346. package/dist/workflow-BpuKEtvn.mjs +0 -725
package/README.md CHANGED
@@ -1,27 +1,24 @@
1
1
  # @jshookmcp/jshook
2
2
 
3
3
  [![License: AGPLv3](https://img.shields.io/badge/License-AGPLv3-red.svg)](LICENSE)
4
- [![Node.js 20.19+ or 22.12+](https://img.shields.io/badge/node-20.19%2B%20%7C%2022.12%2B-brightgreen.svg)](https://nodejs.org/)
5
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6.svg)](https://www.typescriptlang.org/)
4
+ [![Node.js 22.12+](https://img.shields.io/badge/node-22.12%2B-brightgreen.svg)](https://nodejs.org/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6.svg)](https://www.typescriptlang.org/)
6
6
  [![MCP](https://img.shields.io/badge/MCP-current-8A2BE2.svg)](https://modelcontextprotocol.io/)
7
7
  [![pnpm](https://img.shields.io/badge/pnpm-10.x-F69220.svg)](https://pnpm.io/)
8
8
 
9
9
  English | [中文](./README.zh.md)
10
10
 
11
- An MCP (Model Context Protocol) server with a runtime-registry-driven catalog of built-in tools for AI-assisted JavaScript analysis and security analysis. It combines browser automation, Chrome DevTools Protocol debugging, network monitoring, intelligent JavaScript hooks, LLM-powered code analysis, process and memory inspection, WASM tooling, source-map reconstruction, AST transforms, and composite workflows in a single server.
11
+ An MCP server that gives AI agents **402 tools across 36 domains** for JavaScript analysis and security research browser automation, CDP debugging, network interception, JS hooks, LLM-powered code analysis, process/memory forensics, WASM reverse engineering, source-map reconstruction, AST transforms, and composite workflows in a single server.
12
12
 
13
- ## Documentation / Quick Links
13
+ ## Quick Links
14
14
 
15
- - **[📖 Read the Documentation](https://vmoranv.github.io/jshookmcp/)**
16
- - **[🚀 Getting Started](https://vmoranv.github.io/jshookmcp/guide/getting-started.html)**
17
- - **[⚙️ Configuration](https://vmoranv.github.io/jshookmcp/guide/configuration.html)**
18
- - **[📚 Tool Reference](https://vmoranv.github.io/jshookmcp/reference/)**
15
+ - **[📖 Documentation](https://vmoranv.github.io/jshookmcp/)** · **[🚀 Getting Started](https://vmoranv.github.io/jshookmcp/guide/getting-started.html)** · **[⚙️ Configuration](https://vmoranv.github.io/jshookmcp/guide/configuration.html)** · **[📚 Tool Reference](https://vmoranv.github.io/jshookmcp/reference/)**
19
16
 
20
17
  ## 🚀 Quick Start
21
18
 
22
- Use jshookmcp instantly with Claude Desktop or Cursor without installing anything globally.
19
+ No global install needed add to your MCP client config and you're ready:
23
20
 
24
- **Claude Desktop Configuration (`claude_desktop_config.json`)**:
21
+ **Claude Desktop / Cursor (`claude_desktop_config.json`)**:
25
22
 
26
23
  ```json
27
24
  {
@@ -29,60 +26,48 @@ Use jshookmcp instantly with Claude Desktop or Cursor without installing anythin
29
26
  "jshook": {
30
27
  "command": "npx",
31
28
  "args": ["-y", "@jshookmcp/jshook@latest"],
32
- "env": {
33
- "JSHOOK_BASE_PROFILE": "search"
34
- }
29
+ "env": { "JSHOOK_BASE_PROFILE": "search" }
35
30
  }
36
31
  }
37
32
  }
38
33
  ```
39
34
 
40
- *(Note for Windows users: If `npx` is not found, specify the absolute path to `npx.cmd`)*
35
+ *(Windows: use `npx.cmd` absolute path if `npx` is not found)*
41
36
 
42
- ## 🌟 Key Highlights
37
+ ## 🌟 Highlights
43
38
 
44
- - 🤖 **AI-Driven Analysis**: Leverage LLMs for intelligent JavaScript deobfuscation, cryptographic algorithm detection, and AST-level code comprehension.
45
- - ⚡ **Search-First Context Efficiency**: BM25-powered `search_tools` + dynamic boosts cut jshook's tool-schema init delta from ~40.0K+ tokens (`full`) to ~3.0K (`search`) (Claude server-side count; excludes Claude Code base prompt).
46
- - 🎯 **Progressive Capability Tiers**: Three built-in profiles (`search`/`workflow`/`full`), with `search` as the default base tier for on-demand capability scaling.
47
- - 🌐 **Full-Stack Automation**: Seamlessly orchestrate Chromium/Camoufox browsers, CDP debugging, and network interception as atomic actions.
48
- - 🛡️ **Advanced Anti-Debug**: Built-in evasion for debugger statements, timing checks, and strict headless bot fingerprinting techniques.
49
- - 🧩 **Dynamic Extensibility**: Hot-reload plugins and workflows from local directories without recompiling the core server.
50
- - 🔧 **Zero-Wiring Extensibility**: Auto-discovered domains via `manifest.ts`, lazy handler instantiation, and B-Skeleton contracts for plugins/workflows.
51
- - 🛠️ **Reverse Engineering Toolchain**: Integrated WASM disassembly, binary entropy analysis, in-memory scanning, and bridges for Burp Suite/Ghidra/IDA Pro.
39
+ - 🤖 **AI-Driven Analysis** LLM-powered deobfuscation, crypto detection, AST comprehension
40
+ - ⚡ **Search-First Context Efficiency** `search` profile 3K tokens vs `full` 40K+ tokens
41
+ - 🎯 **Progressive Tiers** `search` `workflow` `full`, activate on demand
42
+ - 🌐 **Full-Stack Browser Automation** Chromium/Camoufox + CDP + anti-detection + CAPTCHA handling
43
+ - 🔁 **Runtime Recovery and Session Isolation** HTTP sessions restore activated domains, browser attach state, coverage state, and isolate browser-side session state per client
44
+ - 🧭 **Schema-First Meta Tools** `describe_tool`, validated `call_tool`, and `coverage_report` reduce parameter errors and make tool coverage visible
45
+ - 📡 **Network Interception** HTTP/2 frame building, MiTM capture, GraphQL, Burp Suite bridge
46
+ - 🛠️ **Reverse Engineering Toolchain** WASM disassembly, binary analysis, Frida, Ghidra/IDA bridges
47
+ - 🧰 **Process & Memory Forensics** — Native FFI scanning, hardware breakpoints, PE introspection
48
+ - 🧩 **Dynamic Extensibility** — Hot-reload plugins, declarative workflows, auto-discovered domains
52
49
 
53
- ## 🛡️ Core Capabilities
50
+ ## Recent Runtime Notes
54
51
 
55
- JSHookMCP exposes **360+ atomic tools** across 36 domains, empowering AI orchestrators with unparalleled capabilities:
52
+ - HTTP transport now multiplexes independent MCP sessions and restores runtime state after reconnects.
53
+ - `proxy_start` auto-generates a local HTTPS interception CA when needed.
54
+ - Browser CAPTCHA solving is now explicit-input driven: pass `taskKind`, `siteKey`, `imageBase64`, `callbackName`, and `responseSelector` as needed. Built-in widget/page signature probing is intentionally not used.
56
55
 
57
- - 🕸️ **Browser Automation & Reverse Engineering**: Zero-config Chromium/Camoufox injection, CDP (Chrome DevTools Protocol) orchestration, and iframe evaluation bypasses.
58
- - 📡 **Network Interception & Spoofing**: Deep HTTP/2 frame building, MiTM traffic capture, GraphQL introspection, and Burp Suite bridge.
59
- - 🧠 **AST & Semantic Analysis**: LLM-powered deobfuscation, WebAssembly (WASM) disassembly, Source Map reconstruction, and binary entropy visualization.
60
- - 🧰 **Process & Memory Forensics**: Native Frida instrumentation, memory scanning, pointer dereferencing, and strict Anti-Debug mitigation.
61
- - 🔌 **Dynamic Extensibility**: Hot-reloadable B-Skeleton plugins and declarative `WorkflowContract` pipelines.
56
+ ## Architecture
62
57
 
63
- > **[View the complete 36-domain tool catalog ↗](https://vmoranv.github.io/jshookmcp/reference/)**
64
-
65
- ## Architecture & Performance
66
-
67
- > [!TIP]
68
- > **Context Efficiency Benchmark**: Built-in tool-schema init delta (Claude server-side count): `search` ≈ 3.0K tokens vs `full` ≈ 40.0K+ tokens.
69
-
70
- - **Progressive Tool Discovery**: `search_tools` meta-tool (BM25 ranking) + `activate_tools` / `activate_domain` + profile-based tier upgrades (`boost_profile`)
71
- - **Search-tier behavior**: `search_tools` only searches and ranks results; it does not auto-run `activate_tools`, and it does not auto-run `boost_profile`. Preferred chain: `search_tools -> activate_tools / activate_domain -> boost_profile only when needed`
72
- - **Do not boost for one tool**: `activate_tools` can register exact tools across tiers from the current base tier; `boost_profile` is better when you expect to reuse a broad family of related tools repeatedly
73
- - **Lazy Domain Initialization**: Handler classes instantiated via Proxy on first invocation, not during startup
74
- - **Domain Self-Discovery**: Runtime manifest scanning (`domains/*/manifest.ts`) replaces hardcoded imports; add new domains by creating a single manifest file
75
- - **B-Skeleton Contracts**: Extensibility contracts for plugins (`PluginContract`), workflows (`WorkflowContract`), and observability (`InstrumentationContract`)
76
- - **MCP ToolAnnotations**: Every tool carries semantic annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) enabling AI orchestrators to reason about tool safety and side-effects before invocation
58
+ - **Runtime Registry** Domains auto-discovered via `manifest.ts`; add a domain by creating one file
59
+ - **Lazy Initialization** — Handlers instantiated on first call, not at startup
60
+ - **BM25 + Vector Search** — `search_tools` meta-tool with hybrid ranking and adaptive weights
61
+ - **MCP ToolAnnotations** — Every tool carries `readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`
77
62
 
78
63
  ## Registry Snapshot
79
64
 
80
65
  The built-in surface below is generated from the runtime registry and checked in CI.
81
66
 
82
67
  <!-- metadata-sync:start -->
83
- - Package version: `0.3.0`
84
- - Built-in Tools: `386`
85
- - Domains: `adb-bridge`, `antidebug`, `binary-instrument`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
68
+ - Package version: `0.3.2`
69
+ - Built-in Tools: `423`
70
+ - Domains: `adb-bridge`, `antidebug`, `apk-packer`, `binary-instrument`, `binary-secrets`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `dart-inspector`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `jadx-search`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
86
71
  - Note: this snapshot is generated from the runtime registry; do not edit the counts by hand.
87
72
  <!-- metadata-sync:end -->
88
73
 
@@ -92,8 +77,6 @@ The built-in surface below is generated from the runtime registry and checked in
92
77
 
93
78
  <div align="center">
94
79
 
95
- ## Star History
96
-
97
80
  <a href="https://www.star-history.com/?repos=vmoranv%2Fjshookmcp&type=date&legend=top-left">
98
81
  <picture>
99
82
  <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=vmoranv/jshookmcp&type=date&legend=top-left" />
package/README.zh.md CHANGED
@@ -1,27 +1,24 @@
1
1
  # @jshookmcp/jshook
2
2
 
3
3
  [![License: AGPLv3](https://img.shields.io/badge/License-AGPLv3-red.svg)](LICENSE)
4
- [![Node.js 20.19+ or 22.12+](https://img.shields.io/badge/node-20.19%2B%20%7C%2022.12%2B-brightgreen.svg)](https://nodejs.org/)
5
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6.svg)](https://www.typescriptlang.org/)
4
+ [![Node.js 22.12+](https://img.shields.io/badge/node-22.12%2B-brightgreen.svg)](https://nodejs.org/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6.svg)](https://www.typescriptlang.org/)
6
6
  [![MCP](https://img.shields.io/badge/MCP-current-8A2BE2.svg)](https://modelcontextprotocol.io/)
7
7
  [![pnpm](https://img.shields.io/badge/pnpm-10.x-F69220.svg)](https://pnpm.io/)
8
8
 
9
9
  [English](./README.md) | 中文
10
10
 
11
- 面向 AI 辅助 JavaScript 分析与安全分析的 MCP(模型上下文协议)服务器,内置工具面来自运行时 registry,而不是手写清单。它将浏览器自动化、Chrome DevTools Protocol 调试、网络监控、JavaScript Hook、LLM 驱动代码分析、进程与内存检查、WASM 工具链、Source Map 重建、AST 变换与复合工作流整合到同一服务中。
11
+ AI 赋予 **36 个技术域、402 个原子工具** 的 JavaScript 分析与安全研究 MCP 服务器——浏览器自动化、CDP 调试、网络拦截、JS Hook、LLM 代码分析、进程/内存取证、WASM 逆向、Source Map 重建、AST 变换与复合工作流,一应俱全。
12
12
 
13
- ## 文档与快速导航
13
+ ## 快速导航
14
14
 
15
- - **[📖 阅读官方文档](https://vmoranv.github.io/jshookmcp/)**
16
- - **[🚀 快速开始](https://vmoranv.github.io/jshookmcp/guide/getting-started.html)**
17
- - **[⚙️ 配置指南](https://vmoranv.github.io/jshookmcp/guide/configuration.html)**
18
- - **[📚 API 与工具参考](https://vmoranv.github.io/jshookmcp/reference/)**
15
+ - **[📖 官方文档](https://vmoranv.github.io/jshookmcp/)** · **[🚀 快速开始](https://vmoranv.github.io/jshookmcp/guide/getting-started.html)** · **[⚙️ 配置指南](https://vmoranv.github.io/jshookmcp/guide/configuration.html)** · **[📚 工具参考](https://vmoranv.github.io/jshookmcp/reference/)**
19
16
 
20
- ## 🚀 快速接入 (Quick Start)
17
+ ## 🚀 快速接入
21
18
 
22
- 无需全局安装任何环境,使用 `npx` 即可让 Claude Desktop 或 Cursor 瞬间获得强大的全双工安全分析能力。
19
+ 无需全局安装,添加到 MCP 客户端配置即可使用:
23
20
 
24
- **Claude Desktop 配置 (`claude_desktop_config.json`)**:
21
+ **Claude Desktop / Cursor (`claude_desktop_config.json`)**:
25
22
 
26
23
  ```json
27
24
  {
@@ -29,60 +26,48 @@
29
26
  "jshook": {
30
27
  "command": "npx",
31
28
  "args": ["-y", "@jshookmcp/jshook@latest"],
32
- "env": {
33
- "JSHOOK_BASE_PROFILE": "search"
34
- }
29
+ "env": { "JSHOOK_BASE_PROFILE": "search" }
35
30
  }
36
31
  }
37
32
  }
38
33
  ```
39
34
 
40
- *(Windows 用户注意: 若报错找不到 npx,请指定为绝对路径 `npx.cmd`)*
35
+ *(Windows 用户:若找不到 `npx`,请使用 `npx.cmd` 绝对路径)*
41
36
 
42
37
  ## 🌟 核心亮点
43
38
 
44
- - 🤖 **AI 智能分析**:结合大语言模型实现 JavaScript 语义级反混淆、加密算法识别与深度 AST 结构理解。
45
- - ⚡ **搜索优先的上下文效率**:BM25 驱动的 `search_tools` 配合动态加权,可将 jshook 内置配置档位中的“工具 schema 增量初始化上下文”从 `full` 档约 ~40.0K+ tokens 降至 `search` 档约 ~3.0K(Claude 服务端计数;不含 Claude Code 基线提示词)。
46
- - 🎯 **渐进式能力分层**:内置三档配置(`search`/`workflow`/`full`),默认从 `search` 基座档启动,按需升级能力范围。
47
- - 🌐 **全链路自动化**:将浏览器环境(Chromium/Camoufox)、CDP 底层调试与网络拦截无缝整合为原子操作。
48
- - 🛡️ **高级反反调试**:内置强大的指纹伪装与检测绕过补丁,轻松应对各类反爬与调试器对抗保护。
49
- - 🧩 **动态热插拔扩展**:支持从本地目录动态加载插件与高层工作流,无需重新编译主服务即可无限横向拓展能力。
50
- - 🔧 **零胶水扩展性**:通过 `manifest.ts` 自动发现域、懒加载处理器实例化、B-Skeleton 契约驱动的插件/工作流架构。
51
- - 🛠️ **全能逆向工具链**:集成 WASM 反编译、二进制漏洞/熵分析、实时内存扫描,并原生提供 Burp Suite 与 Ghidra/IDA Pro 桥接。
39
+ - 🤖 **AI 智能分析** LLM 驱动的 JS 反混淆、加密识别、AST 深度理解
40
+ - ⚡ **搜索优先** `search` 3K tokens vs `full` ≈ 40K+ tokens,按需加载
41
+ - 🎯 **渐进分层** `search` → `workflow` → `full`,按需激活
42
+ - 🌐 **全栈浏览器自动化** — Chromium/Camoufox + CDP + 反检测 + CAPTCHA 处理
43
+ - 🔁 **运行时恢复与会话隔离** — HTTP 会话支持恢复已激活域、浏览器 attach 状态、coverage 状态,并为每个客户端隔离浏览器侧会话状态
44
+ - 🧭 **Schema 优先元工具** — `describe_tool`、带参数校验的 `call_tool`、以及 `coverage_report` 降低参数错误并暴露工具覆盖率
45
+ - 📡 **网络拦截** HTTP/2 帧构造、MiTM 捕获、GraphQL、Burp Suite 桥接
46
+ - 🛠️ **全能逆向工具链** WASM 反编译、二进制分析、Frida、Ghidra/IDA 桥接
47
+ - 🧰 **进程与内存取证** — 原生 FFI 扫描、硬件断点、PE 内省
48
+ - 🧩 **动态热插拔** — 热重载插件、声明式工作流、自发现域
52
49
 
53
- ## 🛡️ 核心能力矩阵
50
+ ## 最近运行时变更
54
51
 
55
- JSHookMCP 36 个技术域提供了 **360+ 个内置原子工具**,赋予 AI 前所未有的能力栈:
52
+ - HTTP 传输现在支持多路复用独立 MCP 会话,并在重连后恢复运行时状态。
53
+ - `proxy_start` 在需要时会自动生成本地 HTTPS 拦截 CA。
54
+ - Browser 域的 CAPTCHA 求解已改为显式参数驱动:按需传入 `taskKind`、`siteKey`、`imageBase64`、`callbackName`、`responseSelector`。不会再内置页面/组件特征探测。
56
55
 
57
- - 🕸️ **浏览器自动化与逆向**:零配置注入 Chromium/Camoufox,接管 CDP (Chrome DevTools Protocol) 编排,支持 iframe 跨域突破。
58
- - 📡 **网络拦截与流量嗅探**:深度 HTTP/2 帧构造、中间人 (MiTM) 流量捕获、GraphQL 内省嗅探以及 Burp Suite 无缝桥接。
59
- - 🧠 **AST 与语义分析**:大模型驱动的代码反混淆、WebAssembly (WASM) 实时反编译、Source Map 重建以及二进制熵值可视化。
60
- - 🧰 **进程与内存剖析**:系统级 Frida hook 注入、内存地址扫描挖掘、指针解引用以及严苛的反反调试 (Anti-Debug) 对抗。
61
- - 🔌 **动态扩展性引擎**:支持热重载的 B-Skeleton 插件系统与声明式 `WorkflowContract` 业务流管线。
56
+ ## 架构
62
57
 
63
- > **[查看完整的 36 个能力域与工具参考 ↗](https://vmoranv.github.io/jshookmcp/reference/)**
64
-
65
- ## 架构与性能
66
-
67
- > [!TIP]
68
- > **上下文效率基准 (Context Efficiency Benchmark)**:基于 Claude 服务端实测,“Schema 初始化 Context 增量” —— `search` 档 ≈ 3.0K tokens vs `full` 档 ≈ 40.0K+ tokens。
69
-
70
- - **渐进式工具发现**:`search_tools` 元工具(BM25 排序)+ `activate_tools` / `activate_domain` + 配置档位升级(`boost_profile`)
71
- - **search 档行为说明**:`search_tools` 只负责检索与排序,不会自动 `activate_tools`,也不会自动 `boost_profile`;推荐链路是 `search_tools -> activate_tools / activate_domain -> (确有需要时)boost_profile`
72
- - **单工具不必先升档**:`activate_tools` 可跨当前基座档精确启用单个工具;只有在你接下来会反复使用一整组相关能力时,`boost_profile` 才更合适
73
- - **域延迟初始化**:处理器类通过 Proxy 在首次调用时实例化,而非启动时预加载
74
- - **域自发现架构**:运行时扫描 `domains/*/manifest.ts` 替代硬编码导入;新增域只需创建一个 manifest 文件
75
- - **B-Skeleton 契约**:插件(`PluginContract`)、工作流(`WorkflowContract`)、可观测性(`InstrumentationContract`)的扩展性契约
76
- - **MCP ToolAnnotations**:每个工具均带有语义标注(`readOnlyHint`、`destructiveHint`、`idempotentHint`、`openWorldHint`),使 AI 协调器能在调用前推理工具安全性与副作用
58
+ - **运行时注册表** 域通过 `manifest.ts` 自发现;新增域只需创建一个文件
59
+ - **延迟初始化** — Handler 在首次调用时实例化,而非启动时预加载
60
+ - **BM25 + 向量搜索** — `search_tools` 混合排序 + 自适应权重
61
+ - **MCP ToolAnnotations** — 每个工具携带 `readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`
77
62
 
78
63
  ## 注册表快照
79
64
 
80
65
  下面的内置能力快照由运行时 registry 动态生成,并在 CI 中校验。
81
66
 
82
67
  <!-- metadata-sync:start -->
83
- - 包版本:`0.3.0`
84
- - 内置工具数:`386`
85
- - 域列表:`adb-bridge`, `antidebug`, `binary-instrument`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
68
+ - 包版本:`0.3.2`
69
+ - 内置工具数:`423`
70
+ - 域列表:`adb-bridge`, `antidebug`, `apk-packer`, `binary-instrument`, `binary-secrets`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `dart-inspector`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `jadx-search`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
86
71
  - 说明:以上数据由运行时 registry 动态生成,不要手改计数。
87
72
  <!-- metadata-sync:end -->
88
73
 
@@ -0,0 +1 @@
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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-sBC6IdRT.mjs";import{AsyncLocalStorage as t}from"node:async_hooks";let n=0;var r=class{pageIdByHandle=new WeakMap;tabsById=new Map;aliasToPageId=new Map;currentPageId=null;sharedContext=new Map;upsertPage(e,t){let n=this.pageIdByHandle.get(e),r=n?this.tabsById.get(n)?.meta:null,i=typeof t.index==`number`&&Number.isFinite(t.index)?t.index:r?.index??0;return this.registerPage(e,{index:i,url:t.url,title:t.title})}registerPage(t,r){let i=t,a=this.pageIdByHandle.get(i);if(a){let e=this.tabsById.get(a);return e?(e.meta=r,e.stale=!1):this.tabsById.set(a,{page:t,meta:r,stale:!1}),a}n+=1;let o=`tab-${n}`;return this.pageIdByHandle.set(i,o),this.tabsById.set(o,{page:t,meta:r,stale:!1}),e.debug(`[TabRegistry] Registered page ${o} (index=${r.index}, url=${r.url})`),o}reconcilePages(t,n){let r=new Set;for(let e=0;e<t.length;e++){let i=t[e],a=n[e]??{index:e,url:``,title:``},o=this.registerPage(i,{...a,index:e});r.add(o)}let i=[];for(let[t,n]of this.tabsById)r.has(t)||(n.stale?i.push(t):(n.stale=!0,e.debug(`[TabRegistry] Page ${t} marked stale`)));for(let t of i)this.tabsById.delete(t),e.debug(`[TabRegistry] Page ${t} pruned (was already stale)`);return this.currentPageId&&!r.has(this.currentPageId)&&(e.debug(`[TabRegistry] Current page ${this.currentPageId} is stale, clearing`),this.currentPageId=null),this.listTabs()}bindAlias(e,t){return this.tabsById.has(t)?(this.aliasToPageId.set(e,t),!0):!1}bindAliasByIndex(e,t){for(let[n,r]of this.tabsById)if(r.meta.index===t&&!r.stale)return this.aliasToPageId.set(e,n),n;return null}unbindAlias(e){return this.aliasToPageId.delete(e)}resolveAlias(e){let t=this.aliasToPageId.get(e);if(!t)return null;let n=this.tabsById.get(t);return!n||n.stale?null:t}getPageById(e){let t=this.tabsById.get(e);return!t||t.stale?null:t.page}getTabById(e){let t=this.tabsById.get(e);if(!t)return null;let n=this.getAliasesForPageId(e);return{pageId:e,index:t.meta.index,url:t.meta.url,title:t.meta.title,page:t.page,aliases:n,stale:t.stale}}getTabByIndex(e){for(let[t,n]of this.tabsById)if(n.meta.index===e&&!n.stale)return this.getTabById(t);return null}findTab(e){for(let[t]of this.tabsById){let n=this.getTabById(t);if(n&&e(n))return n}return null}setCurrentPageId(e){let t=this.tabsById.get(e);return!t||t.stale?!1:(this.currentPageId=e,!0)}setCurrentByIndex(e){let t=this.getTabByIndex(e);return t&&(this.currentPageId=t.pageId),t}getCurrentPageId(){return this.currentPageId}getCurrentPage(){return this.currentPageId?this.getPageById(this.currentPageId):null}getCurrentTabInfo(e){let t=[],n=[];for(let[e,r]of this.aliasToPageId){let i=this.tabsById.get(r),a=!i||i.stale;t.push({alias:e,pageId:r,index:i?.meta.index??null,stale:a}),a&&n.push(e)}let r=this.currentPageId?this.tabsById.get(this.currentPageId):null,i=r&&!r.stale?r:null;return{driver:e,currentPageId:i?this.currentPageId:null,currentIndex:i?.meta.index??null,url:i?.meta.url??null,title:i?.meta.title??null,aliases:t,staleAliases:n}}getContextMeta(){let e=this.currentPageId?this.tabsById.get(this.currentPageId):null,t=e&&!e.stale?e:null;return{url:t?.meta.url??null,title:t?.meta.title??null,tabIndex:t?.meta.index??null,pageId:t?this.currentPageId:null}}listTabs(){let e=[];for(let[t,n]of this.tabsById)if(!n.stale){let r=this.getAliasesForPageId(t);e.push({pageId:t,index:n.meta.index,url:n.meta.url,title:n.meta.title,page:n.page,aliases:r,stale:!1})}return e.toSorted((e,t)=>e.index-t.index)}listAllTabs(){let e=[];for(let[t,n]of this.tabsById){let r=this.getAliasesForPageId(t);e.push({pageId:t,index:n.meta.index,url:n.meta.url,title:n.meta.title,page:n.page,aliases:r,stale:n.stale})}return e.toSorted((e,t)=>e.index-t.index)}setSharedContext(e,t){this.sharedContext.set(e,t)}getSharedContext(e){return{value:this.sharedContext.get(e)??null,found:this.sharedContext.has(e)}}getSharedContextMap(){let e={};return this.sharedContext.forEach((t,n)=>{e[n]=t}),e}clear(){this.tabsById.clear(),this.aliasToPageId.clear(),this.sharedContext.clear(),this.currentPageId=null}getAliasesForPageId(e){let t=[];for(let[n,r]of this.aliasToPageId)r===e&&t.push(n);return t}};function i(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function a(e){try{return JSON.parse(e)}catch{return null}}function o(e){if(!i(e)||!Array.isArray(e.content)||e.content.length===0)return null;let t=e.content[0];if(!i(t)||typeof t.text!=`string`)return null;let n=a(t.text);return i(n)?{currentTabIndex:typeof n.selectedIndex==`number`&&Number.isFinite(n.selectedIndex)?n.selectedIndex:typeof n.currentIndex==`number`&&Number.isFinite(n.currentIndex)?n.currentIndex:null,currentPageId:typeof n.selectedPageId==`string`?n.selectedPageId:null,currentTargetId:typeof n.targetId==`string`?n.targetId:null,lastToolName:typeof n.toolName==`string`?n.toolName:null,lastTouchedAt:new Date().toISOString()}:null}var s=class{getCollector;executionContext=new t;sessions=new Map;lastActiveSessionId=null;executionQueue=Promise.resolve();constructor(e){this.getCollector=e}normalizeSessionId(e){return typeof e!=`string`||e.trim().length===0?`default`:e}getCurrentSessionId(){return this.executionContext.getStore()?.sessionId??null}getOrCreateSession(e){let t=this.normalizeSessionId(e),n=this.sessions.get(t);return n||(n={tabRegistry:new r,currentTabIndex:null,currentPageId:null,currentTargetId:null,lastToolName:null,lastTouchedAt:null},this.sessions.set(t,n)),n}getTabRegistry(e){return this.getOrCreateSession(e).tabRegistry}noteToolResult(e,t,n){let r=this.getOrCreateSession(e);n?.currentTabIndex!==void 0&&(r.currentTabIndex=n.currentTabIndex??null),n?.currentPageId!==void 0&&(r.currentPageId=n.currentPageId??null),n?.currentTargetId!==void 0&&(r.currentTargetId=n.currentTargetId??null),r.lastToolName=t,r.lastTouchedAt=new Date().toISOString(),this.lastActiveSessionId=this.normalizeSessionId(e)}getSnapshot(e){let t=this.getOrCreateSession(e);return{currentTabIndex:t.currentTabIndex,currentPageId:t.currentPageId,currentTargetId:t.currentTargetId,lastToolName:t.lastToolName,lastTouchedAt:t.lastTouchedAt}}async restoreSessionContext(t){let n=this.normalizeSessionId(t),r=this.getOrCreateSession(n),i=this.getCollector();if(!i){this.lastActiveSessionId=n;return}if(this.lastActiveSessionId===n||r.currentTabIndex===null&&r.currentTargetId===null){this.lastActiveSessionId=n;return}if(typeof r.currentTabIndex==`number`)try{await i.selectPage(r.currentTabIndex)}catch(t){e.warn(`[browser-session] Failed to restore page index ${r.currentTabIndex} for session ${n}: ${t instanceof Error?t.message:String(t)}`)}if(r.currentTargetId)try{await i.attachCdpTarget(r.currentTargetId)}catch(t){e.warn(`[browser-session] Failed to restore target ${r.currentTargetId} for session ${n}: ${t instanceof Error?t.message:String(t)}`)}this.lastActiveSessionId=n}async runExclusive(e,t){let n=this.normalizeSessionId(e);if(this.executionContext.getStore()?.sessionId===n)return await t();let r=this.executionQueue,i,a=new Promise(e=>{i=e});this.executionQueue=r.then(()=>a),await r;try{return await this.executionContext.run({sessionId:n},t)}finally{i()}}};export{o as n,r,s as t};
@@ -0,0 +1 @@
1
+ var e=class{manager;name=`DetailedDataManager`;constructor(e){this.manager=e}getStats(){let e=this.manager.getStats();return{entries:e.cacheSize,size:this.estimateSize(e.cacheSize),hits:0,misses:0,ttl:e.defaultTTLSeconds*1e3,maxSize:e.maxCacheSize}}clear(){this.manager.clear()}estimateSize(e){return e*50*1024}},t=class{cache;name=`CodeCache`;constructor(e){this.cache=e}async getStats(){let e=await this.cache.getStats();return{entries:e.memoryEntries+e.diskEntries,size:e.totalSize,hits:0,misses:0}}async cleanup(){await this.cache.cleanup()}async clear(){await this.cache.clear()}},n=class{compressor;name=`CodeCompressor`;constructor(e){this.compressor=e}getStats(){let e=this.compressor.getStats(),t=this.compressor.getCacheSize(),n=e.cacheHits+e.cacheMisses,r=n>0?e.cacheHits/n:0;return{entries:t,size:this.estimateSize(t,e.totalCompressedSize),hits:e.cacheHits,misses:e.cacheMisses,hitRate:r}}clear(){this.compressor.clearCache()}estimateSize(e,t){return e===0?0:t/Math.max(1,e)*e}};function r(r,i,a){return[new e(r),new t(i),new n(a)]}export{r as createCacheAdapters};
@@ -0,0 +1 @@
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};