@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
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{$ as t,et as n,tt as r}from"./constants-BYj8Xek8.mjs";var i=class i{static instance;cache=new Map;cleanupInterval=null;DEFAULT_TTL=t;MAX_TTL=n;MAX_CACHE_SIZE=100;AUTO_EXTEND_ON_ACCESS=!0;EXTEND_DURATION=900*1e3;serializationMemo=new WeakMap;constructor(){this.cleanupInterval=setInterval(()=>this.cleanup(),300*1e3),typeof this.cleanupInterval==`object`&&`unref`in this.cleanupInterval&&this.cleanupInterval.unref()}static getInstance(){return this.instance||=new i,this.instance}shutdown(){this.cleanupInterval&&=(clearInterval(this.cleanupInterval),null),this.cache.clear(),i.instance=void 0,e.info(`DetailedDataManager shut down`)}serializeWithMemo(e){if(typeof e==`object`&&e){let t=this.serializationMemo.get(e);if(t)return t}let t=JSON.stringify(e),n={json:t,size:t.length};return typeof e==`object`&&e&&this.serializationMemo.set(e,n),n}isRecord(e){return typeof e==`object`&&!!e}readPathSegment(e,t){return Object(e)[t]}smartHandle(t,n=r){if(t==null||typeof t!=`object`&&typeof t!=`string`||typeof t==`string`&&t.length<=n)return t;let{json:i,size:a}=this.serializeWithMemo(t);return a<=n?t:(e.info(`Data too large (${(a/1024).toFixed(1)}KB), returning summary with detailId`),this.createDetailedResponseWithSize(t,i,a))}createDetailedResponseWithSize(e,t,n){let r=this.storeWithSize(e,n);return{summary:this.generateSummaryFromJson(e,t,n),detailId:r,hint:`Data too large. Use get_detailed_data("${r}") to retrieve full data, or get_detailed_data("${r}", path="key.subkey") for specific part.`,expiresAt:Date.now()+this.DEFAULT_TTL}}store(e,t){let{size:n}=this.serializeWithMemo(e);return this.storeWithSize(e,n,t)}storeWithSize(t,n,r){this.cache.size>=this.MAX_CACHE_SIZE&&this.evictLRU();let i=`detail_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,a=Date.now(),o=r||this.DEFAULT_TTL,s={data:t,expiresAt:a+o,createdAt:a,lastAccessedAt:a,accessCount:0,size:n};return this.cache.set(i,s),e.debug(`Stored detailed data: ${i}, size: ${(n/1024).toFixed(1)}KB, expires in ${o/1e3}s`),i}retrieve(t,n){let r=this.cache.get(t);if(!r)throw Error(`DetailId not found or expired: ${t}`);let i=Date.now();if(i>r.expiresAt)throw this.cache.delete(t),Error(`DetailId expired: ${t}`);return r.lastAccessedAt=i,r.accessCount++,this.AUTO_EXTEND_ON_ACCESS&&r.expiresAt-i<300*1e3&&(r.expiresAt=Math.min(i+this.EXTEND_DURATION,i+this.MAX_TTL),e.debug(`Auto-extended detailId ${t}, new expiry: ${new Date(r.expiresAt).toISOString()}`)),n?this.getByPath(r.data,n):r.data}getByPath(e,t){let n=t.split(`.`),r=e;for(let e of n){if(r==null)throw Error(`Path not found: ${t} (stopped at ${e})`);r=this.readPathSegment(r,e)}return r}generateSummaryFromJson(e,t,n){let r={type:Array.isArray(e)?`array`:typeof e,size:n,sizeKB:(n/1024).toFixed(1)+`KB`,preview:t.substring(0,200)+(n>200?`...`:``)};if(this.isRecord(e)){let t=Object.keys(e);if(r.structure={keys:t.slice(0,50)},Array.isArray(e))r.structure.length=e.length;else{let n=t.filter(t=>typeof e[t]==`function`),i=t.filter(t=>typeof e[t]!=`function`);r.structure.methods=n.slice(0,30),r.structure.properties=i.slice(0,50)}}return r}cleanup(){let t=Date.now(),n=0;for(let[e,r]of this.cache.entries())t>r.expiresAt&&(this.cache.delete(e),n++);n>0&&e.debug(`Cleaned ${n} expired detailed data entries`)}evictLRU(){if(this.cache.size===0)return;let t=null,n=1/0;for(let[e,r]of this.cache.entries())r.lastAccessedAt<n&&(n=r.lastAccessedAt,t=e);if(t){let n=this.cache.get(t);this.cache.delete(t),e.info(`Evicted LRU entry: ${t}, last accessed: ${new Date(n.lastAccessedAt).toISOString()}, access count: ${n.accessCount}`)}}extend(t,n){let r=this.cache.get(t);if(!r)throw Error(`DetailId not found: ${t}`);let i=Date.now();if(i>r.expiresAt)throw Error(`DetailId already expired: ${t}`);let a=n||this.EXTEND_DURATION,o=Math.min(r.expiresAt+a,i+this.MAX_TTL);r.expiresAt=o,e.info(`Extended detailId ${t} by ${a/1e3}s, new expiry: ${new Date(o).toISOString()}`)}getStats(){let e=0,t=0,n=Array.from(this.cache.values());for(let r of n)e+=r.size,t+=r.accessCount;return{cacheSize:this.cache.size,maxCacheSize:this.MAX_CACHE_SIZE,defaultTTLSeconds:this.DEFAULT_TTL/1e3,maxTTLSeconds:this.MAX_TTL/1e3,totalSizeKB:(e/1024).toFixed(1),avgAccessCount:n.length>0?(t/n.length).toFixed(1):`0`,autoExtendEnabled:this.AUTO_EXTEND_ON_ACCESS,extendDurationSeconds:this.EXTEND_DURATION/1e3}}getDetailedStats(){let e=Date.now(),t=Array.from(this.cache.entries()).map(([t,n])=>({detailId:t,sizeKB:(n.size/1024).toFixed(1),createdAt:new Date(n.createdAt).toISOString(),lastAccessedAt:new Date(n.lastAccessedAt).toISOString(),expiresAt:new Date(n.expiresAt).toISOString(),remainingSeconds:Math.max(0,Math.floor((n.expiresAt-e)/1e3)),accessCount:n.accessCount,isExpired:e>n.expiresAt}));return t.sort((e,t)=>new Date(t.lastAccessedAt).getTime()-new Date(e.lastAccessedAt).getTime()),t}clear(){this.cache.clear(),e.info(`Cleared all detailed data cache`)}};export{i as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";import{t as n}from"./ToolCatalog-CYdD9F5f.mjs";import{i as r,n as i,r as a,t as o}from"./ExtensionManager.tools-oVMJgPcN.mjs";import{t as s}from"./types-Fz69RzbZ.mjs";import{createHash as c}from"node:crypto";import{existsSync as l,readFileSync as u}from"node:fs";import{basename as d,dirname as f,isAbsolute as p,join as m,relative as ee,resolve as h}from"node:path";import{fileURLToPath as te,pathToFileURL as g}from"node:url";import{readFile as _,readdir as v}from"node:fs/promises";function y(e){let t=e;for(;;){if(l(m(t,`package.json`)))return t;let e=f(t);if(e===t)break;t=e}return h(e,`..`,`..`,`..`,`..`)}const b=y(te(new URL(`.`,import.meta.url))),x=[m(b,`plugins`)],S=[m(b,`workflows`)];function C(e,t){let n=e?.trim();if(!n)return t;let r=n.split(`,`).map(e=>e.trim()).filter(Boolean);return r.length>0?[...new Set(r)]:t}function w(e,t=b){let n=e.map(e=>p(e)?e:h(t,e));return[...new Set(n)].toSorted((e,t)=>e.localeCompare(t))}function T(e){let t=e.trim().match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function E(e,t){let n=T(e),r=T(t);if(!n||!r)return null;let[i,a,o]=n,[s,c,l]=r;return i>s?1:i<s?-1:a>c?1:a<c?-1:o>l?1:o<l?-1:0}function ne(e,t){let n=e.trim();if(!n||n===`*`)return!0;if(n.startsWith(`>=`)){let e=E(t,n.slice(2).trim());return e!==null&&e>=0}if(n.startsWith(`^`)){let e=n.slice(1).trim(),r=T(t),i=T(e);if(!r||!i)return!1;let a=E(t,e);return a!==null&&a>=0&&r[0]===i[0]}if(n.startsWith(`~`)){let e=n.slice(1).trim(),r=T(t),i=T(e);if(!r||!i)return!1;let a=E(t,e);return a!==null&&a>=0&&r[0]===i[0]&&r[1]===i[1]}let r=E(t,n);return r!==null&&r===0}async function re(e){let t=await _(e);return c(`sha256`).update(t).digest(`hex`)}function D(e){return e.trim().toLowerCase().replace(/^0x/,``)}function O(e){return[`1`,`true`].includes(e.toLowerCase())}function k(){let e=process.env.MCP_PLUGIN_SIGNATURE_REQUIRED;return e===void 0||e.trim()===``?process.env.NODE_ENV===`production`:O(e)}function A(){let e=process.env.MCP_PLUGIN_STRICT_LOAD;return e===void 0||e.trim()===``?k():O(e)||k()}function j(e){let t=e?.trim();return t?new Set(t.split(`,`).map(e=>D(e)).filter(e=>e.length>0)):new Set}async function ie(e,t){let n=[];return ne(e.compatibleCoreRange,t)||n.push(`Plugin ${e.id} incompatible with core ${t}; requires ${e.compatibleCoreRange}`),{ok:n.length===0,errors:n,warnings:[]}}function ae(e){if(!e||typeof e!=`object`)return!1;let t=e;return!!(typeof t.id==`string`&&typeof t.version==`string`&&Array.isArray(t.tools)&&(t.workflows===void 0||Array.isArray(t.workflows)))}function M(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.kind===`workflow-contract`&&t.version===1&&typeof t.id==`string`&&typeof t.displayName==`string`&&typeof t.build==`function`}function N(e){return e.endsWith(`.js`)||e.endsWith(`.mjs`)||e.endsWith(`.cjs`)}function P(e){return e.endsWith(`.ts`)||e.endsWith(`.mts`)||e.endsWith(`.cts`)}async function F(e,t){let n=new Set;for(let r of e)try{await se(r,t,n)}catch{continue}return[...n].toSorted((e,t)=>e.localeCompare(t))}const oe=new Set([`node_modules`,`.git`,`.pnpm`]);async function se(e,t,n){let r=[e];for(;r.length>0;){let e=r.pop();if(!e)continue;let i=await v(e,{withFileTypes:!0});for(let a of i){let i=h(e,a.name);if(a.isDirectory()){oe.has(a.name)||r.push(i);continue}a.isFile()&&t(d(i))&&n.add(i)}}}function I(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+/g,`/`).replace(/^\/+|\/+$/g,``).toLowerCase(),r=ee(e,f(t)).replace(/^[/\\]+/,``).replace(/\\/g,`/`).replace(/\/+/g,`/`).replace(/^\/+|\/+$/g,``).toLowerCase();return!r||r===`dist`?`${n}::`:`${n}::${r.endsWith(`/dist`)?r.slice(0,-5):r}`}function L(e){return e.isJs?0:e.isTs?1:2}function ce(e,t){if(!e||typeof e!=`object`)return!1;let n=e;if(n.version!==1||n.kind!==t||typeof n.slug!=`string`||typeof n.id!=`string`||!n.source||typeof n.source!=`object`)return!1;let r=n.source;return typeof r.type==`string`&&typeof r.repo==`string`&&typeof r.ref==`string`&&typeof r.commit==`string`&&typeof r.subpath==`string`&&typeof r.entry==`string`}async function R(e,t){let n=[];for(let[r,i]of e.entries()){let e=await F([i],e=>e===s);for(let a of e){let e;try{e=JSON.parse(await _(a,`utf8`))}catch{continue}if(!ce(e,t))continue;let o=e.source.entry.trim();if(!o)continue;let s=h(f(a),o);l(s)&&n.push({file:s,key:I(i,s),isJs:N(s),isTs:P(s),rootIndex:r,priority:0})}}return n}function z(e){let t=new Map;for(let n of e.toSorted((e,t)=>e.file.localeCompare(t.file))){let e=t.get(n.key);if(!e){t.set(n.key,n);continue}let r=e.rootIndex,i=n.rootIndex,a=e.priority,o=n.priority,s=L(e),c=L(n);(i<r||i===r&&o<a||i===r&&o===a&&c<s||i===r&&o===a&&c===s&&n.file.localeCompare(e.file)<0)&&t.set(n.key,n)}return[...t.values()].map(e=>e.file).toSorted((e,t)=>e.localeCompare(t))}async function B(e){let t=await R(e,`plugin`);for(let[n,r]of e.entries()){let e=await F([r],e=>e===`manifest.js`||e===`manifest.ts`);for(let i of e)t.push({file:i,key:I(r,i),isJs:N(i),isTs:P(i),rootIndex:n,priority:1})}return z(t)}async function V(e){let t=await R(e,`workflow`);for(let[n,r]of e.entries()){let e=await F([r],e=>e.endsWith(`.workflow.js`)||e.endsWith(`.workflow.mjs`)||e.endsWith(`.workflow.cjs`)||e.endsWith(`.workflow.ts`)||e.endsWith(`.workflow.mts`)||e.endsWith(`.workflow.cts`)||e===`workflow.js`||e===`workflow.mjs`||e===`workflow.cjs`||e===`workflow.ts`||e===`workflow.mts`||e===`workflow.cts`);for(let i of e)t.push({file:i,key:I(r,i),isJs:N(i),isTs:P(i),rootIndex:n,priority:1})}return z(t)}function le(e,t,n){let r=t.split(`.`).filter(Boolean),i=e.config;for(let e of r){if(!i||typeof i!=`object`)return n;i=i[e]}return i??n}function H(e,n){let r=new URL(g(e).href);return r.searchParams.set(`reloadTs`,String(Date.now())),t.debug(`[extensions] Loading fresh ${n} module: ${e}`),r.href}async function ue(e){let n=0,i=new Set;for(let[n,r]of e.extensionPluginRuntimeById.entries()){try{r.plugin.onDeactivateHandler&&r.state===`activated`&&(await r.plugin.onDeactivateHandler(r.lifecycleContext),r.state=`deactivated`)}catch(e){t.warn(`Plugin onDeactivate failed for "${n}":`,e)}try{r.plugin.onDeactivateHandler&&(r.state=`unloaded`)}catch(e){t.warn(`Plugin onUnload failed for "${n}":`,e)}}for(let r of e.extensionToolsByName.values()){i.add(r.domain);try{a(e,r,{onRemoveError:e=>{t.warn(`Failed to remove extension tool "${r.name}":`,e)}})}catch(e){t.warn(`Failed to remove extension tool "${r.name}":`,e)}n++}for(let t of i)r(e,t);return e.extensionToolsByName.clear(),e.extensionPluginsById.clear(),e.extensionPluginRuntimeById.clear(),e.extensionWorkflowsById.clear(),e.extensionWorkflowRuntimeById.clear(),n}function U(e,t,n){let r=[`full`],a=[...e.extensionToolsByName.values()].map(t=>({name:t.name,domain:t.domain,source:t.source,profiles:t.profiles&&t.profiles.length>0?[...t.profiles]:r,visibleInCurrentProfile:i(e.baseTier,t),active:e.activatedToolNames.has(t.name),activationSource:t.activationSource,activatedAt:t.activatedAt}));return{pluginRoots:t,workflowRoots:n,pluginCount:e.extensionPluginsById.size,workflowCount:e.extensionWorkflowsById.size,toolCount:e.extensionToolsByName.size,activeToolCount:a.filter(e=>e.active).length,currentProfile:e.baseTier,lastReloadAt:e.lastExtensionReloadAt,plugins:[...e.extensionPluginsById.values()],workflows:[...e.extensionWorkflowsById.values()],tools:a}}var de=e({ensureWorkflowsLoaded:()=>ve,listExtensions:()=>W,reloadExtensions:()=>_e});function W(e){return U(e,w(C(process.env.MCP_PLUGIN_ROOTS,x)),w(C(process.env.MCP_WORKFLOW_ROOTS,S)))}function fe(e){try{let t=u(e,`utf-8`),n={};for(let e of t.split(/\r?\n/)){let t=e.trim();if(!t||t.startsWith(`#`))continue;let r=t.indexOf(`:`);if(r<1)continue;let i=t.slice(0,r).trim(),a=t.slice(r+1).trim();i&&(n[i]=a)}return n}catch{return{}}}function G(e){return e?.trim()||void 0}function K(e,t,n){let r=m(e,`meta.yaml`);return l(r)?fe(r):(n.push(`Plugin "${t}" is missing meta.yaml; outward metadata now lives there.`),{})}function q(e){return{name:G(e.name),description:G(e.description),author:G(e.author),source_repo:G(e.source_repo)}}function pe(e){let t=e;for(;;){if(l(m(t,`.jshook-install.json`)))return t;let e=f(t);if(e===t)return null;t=e}}function me(e){let t=f(e);return pe(t)||(d(t).toLowerCase()===`dist`?f(t):t)}let he=Promise.resolve();const J=new WeakSet,Y=`MCP_PLUGIN_ALLOWED_DIGESTS is required when MCP_PLUGIN_SIGNATURE_REQUIRED=true or MCP_PLUGIN_STRICT_LOAD=true. The digest allowlist is the only pre-import trust boundary — without it, plugin code executes before integrity verification. No plugins will be loaded.`,ge=`[extensions] Loading plugins WITHOUT MCP_PLUGIN_ALLOWED_DIGESTS allowlist. Plugin code will execute on import() before post-load integrity checks. Set MCP_PLUGIN_STRICT_LOAD=true to enforce allowlist requirement.`;async function X(e){let t=he,n;he=new Promise(e=>{n=e}),await t;try{return await e()}finally{n()}}async function _e(e){return X(()=>be(e))}async function ve(e){e.extensionWorkflowRuntimeById.size>0||J.has(e)||await X(async()=>{if(e.extensionWorkflowRuntimeById.size>0||J.has(e))return;J.add(e);let n=[],r=[],i=w(C(process.env.MCP_PLUGIN_ROOTS,x)),a=w(C(process.env.MCP_WORKFLOW_ROOTS,S));await ye(e,i,n,r),await Z(e,await V(a),n,r);for(let e of n)t.warn(`[extensions] ${e}`);for(let e of r)t.error(`[extensions] ${e}`)})}async function Z(e,t,n,r){for(let i of t)try{let t=await import(H(i,`workflow`)),r=t.default??t;if(!M(r)){n.push(`Skip workflow file without valid WorkflowContract: ${i}`);continue}Q(e,r,i,n)}catch(e){r.push(`Failed to import workflow file ${i}: ${String(e)}`)}}function Q(e,t,n,r){if(e.extensionWorkflowsById.has(t.id))return r.push(`Skip workflow "${t.id}" from ${n}: duplicate id`),!1;let i={id:t.id,displayName:t.displayName,source:n,description:t.description,tags:t.tags,timeoutMs:t.timeoutMs,defaultMaxConcurrency:t.defaultMaxConcurrency,route:t.route};e.extensionWorkflowsById.set(i.id,i);let a={workflow:t,source:n,route:t.route};return e.extensionWorkflowRuntimeById.set(i.id,a),!0}function $(e,t,n,r,i){return{id:e.id,name:t.name??e.id,description:t.description,source:n,author:t.author,sourceRepo:t.source_repo,domains:r.length>0?[`plugin:${e.id}`]:[],workflows:i,tools:r}}async function ye(e,n,r,i){let a=j(process.env.MCP_PLUGIN_ALLOWED_DIGESTS);if(A()&&a.size===0){i.push(Y),t.error(`[extensions] `+Y);return}a.size===0&&t.warn(ge);let o=await B(n),s=e.config?.mcp?.version??`0.0.0`;for(let t of o){let n;try{if(n=D(await re(t)),a.size>0&&!a.has(n)){r.push(`Skip plugin file not in MCP_PLUGIN_ALLOWED_DIGESTS allowlist: ${t}`);continue}}catch(e){i.push(`Failed to hash plugin file ${t}: ${String(e)}`);continue}let o;try{let e=await import(H(t,`plugin`)),n=e.default??e;if(!ae(n)){r.push(`Skip plugin file without valid ExtensionBuilder: ${t}`);continue}o=n}catch(e){i.push(`Failed to import plugin file ${t}: ${String(e)}`);continue}let c=K(me(t),o.id,r);if(e.extensionPluginsById.has(o.id)){r.push(`Skip plugin "${o.id}" from ${t}: duplicate plugin id`);continue}try{let e=await ie(o,s);if(r.push(...e.warnings),!e.ok){i.push(...e.errors);continue}}catch(e){i.push(`Failed to verify plugin ${o.id}: ${String(e)}`);continue}let l=[],u=Array.isArray(o.workflows)?o.workflows:[];for(let n of u){if(!M(n)){r.push(`Skip invalid workflow contribution from plugin "${o.id}" in ${t}`);continue}Q(e,n,`${t}#workflow:${n.id}`,r)&&l.push(n.id)}let d=o.tools.map(e=>e.name);e.extensionPluginsById.set(o.id,$(o,q(c),t,d,l))}}async function be(e){let r=[],s=[],c=await ue(e),l=w(C(process.env.MCP_PLUGIN_ROOTS,x)),u=w(C(process.env.MCP_WORKFLOW_ROOTS,S)),d=j(process.env.MCP_PLUGIN_ALLOWED_DIGESTS),f=0;if(A()&&d.size===0){let n=Y;if(s.push(n),t.error(`[extensions] `+n),await Z(e,await V(u),r,s),c>0)try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after extension reload:`,e)}return e.lastExtensionReloadAt=new Date().toISOString(),{...U(e,l,u),addedTools:0,autoActivatedTools:[],removedTools:c,warnings:r,errors:s}}d.size===0&&t.warn(ge);let p=new Set(n.map(e=>e.name)),m=await B(l),ee=e.config?.mcp?.version??`0.0.0`;for(let n of m){let c;try{if(c=D(await re(n)),d.size>0&&!d.has(c)){r.push(`Skip plugin file not in MCP_PLUGIN_ALLOWED_DIGESTS allowlist: ${n}`);continue}}catch(e){s.push(`Failed to hash plugin file ${n}: ${String(e)}`);continue}let l;try{let e=await import(H(n,`plugin`)),t=e.default??e;if(!ae(t)){r.push(`Skip plugin file without valid ExtensionBuilder: ${n}`);continue}l=t}catch(e){s.push(`Failed to import plugin file ${n}: ${String(e)}`);continue}let u=me(n),m=K(u,l.id,r);if(e.extensionPluginsById.has(l.id)){r.push(`Skip plugin "${l.id}" from ${n}: duplicate plugin id`);continue}try{let e=await ie(l,ee);if(r.push(...e.warnings),!e.ok){s.push(...e.errors);continue}}catch(e){s.push(`Failed to verify plugin ${l.id}: ${String(e)}`);continue}let h=new Map,te=new Set,g=`loaded`,_=l.allowedTools.includes(`*`),v={pluginId:l.id,pluginRoot:u,config:e.config,get state(){return g},registerMetric(e){te.add(e)},async invokeTool(t,n={}){if(typeof t!=`string`||t.length===0)throw Error(`invokeTool requires a non-empty tool name`);if(!_&&!l.allowedTools.includes(t))throw Error(`Plugin "${l.id}" is not allowed to invoke "${t}". Declare it in allowTool calls.`);if(!p.has(t))throw Error(`Plugin "${l.id}" can only invoke built-in tools. "${t}" is not built-in.`);if(!e.router.has(t))throw Error(`Tool "${t}" is not available in the current active profile.`);return e.executeToolWithTracking(t,n??{})},hasPermission(e){return!0},getConfig(t,n){return le(e,t,n)},setRuntimeData(e,t){h.set(e,t)},getRuntimeData(e){return h.get(e)}},y={plugin:l,lifecycleContext:v,state:g,source:n},b=[],x=[];try{if(l.onLoadHandler&&await l.onLoadHandler(v),g=`loaded`,y.state=g,l.onValidateHandler){let e=await l.onValidateHandler(v);if(!e.valid){r.push(`Plugin ${l.id} validation failed: ${e.errors.join(`; `)}`);continue}g=`validated`,y.state=g}l.onActivateHandler&&(await l.onActivateHandler(v),g=`activated`,y.state=g),e.extensionPluginRuntimeById.set(l.id,y);let a=`plugin:${l.id}`;for(let s of l.tools){if(p.has(s.name)){r.push(`Skip tool "${s.name}" from plugin "${l.id}": collides with built-in tool name`);continue}if(e.extensionToolsByName.has(s.name)){r.push(`Skip duplicate extension tool "${s.name}" from plugin "${l.id}"`);continue}let c={name:s.name,domain:a,source:n,tool:{name:s.name,description:s.description,inputSchema:s.schema},profiles:s.profiles??l.profiles,handler:async e=>{try{return await s.handler(e,v)}catch(e){throw t.error(`[extension:${l.id}] Tool "${s.name}" failed:`,e),e}}};e.extensionToolsByName.set(s.name,c),b.push(s.name),x.push(c),i(e.baseTier,c)&&o(e,c,`reload`)&&f++}}catch(n){for(let n of x.toReversed())try{a(e,n,{removeDefinition:!0})}catch(e){t.warn(`Failed to roll back extension tool "${n.name}" for plugin "${l.id}":`,e)}e.extensionPluginRuntimeById.delete(l.id);try{l.onDeactivateHandler&&g===`activated`&&(await l.onDeactivateHandler(v),g=`deactivated`,y.state=g)}catch(e){t.warn(`Plugin onDeactivate failed during rollback for ${l.id}:`,e)}s.push(`Plugin lifecycle failed for ${l.id}: ${String(n)}`);continue}let S=[],C=Array.isArray(l.workflows)?l.workflows:[];for(let t of C){if(!M(t)){r.push(`Skip invalid workflow contribution from plugin "${l.id}" in ${n}`);continue}Q(e,t,`${n}#workflow:${t.id}`,r)&&S.push(t.id)}let w=$(l,q(m),n,b,S);e.extensionPluginsById.set(w.id,w)}if(await Z(e,await V(u),r,s),f>0||c>0)try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after extension reload:`,e)}return e.lastExtensionReloadAt=new Date().toISOString(),{...U(e,l,u),addedTools:e.extensionToolsByName.size,autoActivatedTools:[...e.extensionToolsByName.values()].filter(e=>e.activationSource===`reload`).map(e=>e.name).toSorted(),removedTools:c,warnings:r,errors:s}}export{_e as i,ve as n,W as r,de as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{r as t}from"./ToolCatalog-CYdD9F5f.mjs";import{n}from"./ServerRuntimeState-D2bWHqEE.mjs";function r(t,n,r,i){if(o(t,n),r<=0)return;let a=r*60*1e3,c=new Set(i),l=setTimeout(()=>{e.info(`Domain "${n}" TTL expired (${r}min) — auto-deactivating ${c.size} tools`),s(t,n).catch(t=>{e.error(`Failed to deactivate domain "${n}" on TTL expiry:`,t)})},a);t.domainTtlEntries.set(n,{timer:l,ttlMs:a,toolNames:c})}function i(t,n){let r=t.domainTtlEntries.get(n);if(!r)return;clearTimeout(r.timer);let i=r.ttlMs/6e4;r.timer=setTimeout(()=>{e.info(`Domain "${n}" TTL expired (${i}min) — auto-deactivating`),s(t,n).catch(t=>{e.error(`Failed to deactivate domain "${n}" on TTL expiry:`,t)})},r.ttlMs)}function a(e,n){let r=t(n);if(!r){let t=e.extensionToolsByName.get(n);t&&(r=t.domain)}r&&e.domainTtlEntries.has(r)&&i(e,r)}function o(e,t){let r=e.domainTtlEntries.get(t);r&&(clearTimeout(r.timer),e.domainTtlEntries.delete(t)),n(e)?.clearPendingDomainActivation(t)}async function s(r,i){let a=r.domainTtlEntries.get(i);if(!a)return;let o=a.toolNames;r.domainTtlEntries.delete(i),n(r)?.clearPendingDomainActivation(i);let s=0;for(let t of o){if(!r.activatedToolNames.has(t))continue;let n=r.activatedRegisteredTools.get(t);if(n)try{n.remove()}catch(n){e.warn(`Failed to remove tool "${t}" on domain TTL expiry:`,n)}r.router.removeHandler(t),r.activatedToolNames.delete(t),r.activatedRegisteredTools.delete(t);let i=r.extensionToolsByName.get(t);i&&(i.registeredTool=void 0),s++}if(s>0){r.enabledDomains.delete(i);for(let e of r.activatedToolNames)if(t(e)===i){r.enabledDomains.add(i);break}for(let e of r.selectedTools)if(t(e.name)===i){r.enabledDomains.add(i);break}try{await r.server.sendToolListChanged()}catch(t){e.warn(`sendToolListChanged failed after domain TTL expiry:`,t)}e.info(`Domain "${i}" deactivated: removed ${s} tools`)}}const c=[`full`];function l(e){return e.profiles&&e.profiles.length>0?e.profiles:c}function u(e,n){for(let r of e.selectedTools)if(t(r.name)===n)return!0;for(let r of e.activatedToolNames){let i=e.extensionToolsByName.get(r);if(i){if(i.domain===n)return!0;continue}if(t(r)===n)return!0}return!1}function d(e,t){if(u(e,t)){e.enabledDomains.add(t);return}e.enabledDomains.delete(t)}function f(e,t){return l(t).includes(e)}function p(e,t,n=`activate_tools`){if(e.activatedToolNames.has(t.name))return e.enabledDomains.add(t.domain),t.activationSource??=n,t.activatedAt??=new Date().toISOString(),!1;let r=e.registerSingleTool(t.tool);return e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,r),t.registeredTool=r,t.activationSource=n,t.activatedAt=new Date().toISOString(),e.enabledDomains.add(t.domain),t.handler&&e.router.addHandlers({[t.name]:t.handler}),!0}function m(e,t,n={}){let r=t.registeredTool??e.activatedRegisteredTools.get(t.name),i=!!r||e.activatedToolNames.has(t.name)||e.activatedRegisteredTools.has(t.name);if(r&&!n.skipRegisteredToolRemoval)try{r.remove()}catch(e){n.onRemoveError?.(e)}return e.router.removeHandler(t.name),e.activatedToolNames.delete(t.name),e.activatedRegisteredTools.delete(t.name),t.registeredTool=void 0,t.activationSource=void 0,t.activatedAt=void 0,n.removeDefinition&&e.extensionToolsByName.delete(t.name),d(e,t.domain),i}export{a,o as i,f as n,r as o,m as r,p as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";var n=class n{static instance=null;activeProfile=null;available=null;constructor(){}static getInstance(){return n.instance||=new n,n.instance}isAvailable(){if(this.available!==null)return this.available;try{e.resolve(`fingerprint-generator`),e.resolve(`fingerprint-injector`),this.available=!0}catch{this.available=!1}return this.available}async generateFingerprint(e){if(!this.isAvailable())return t.warn(`fingerprint-generator not installed. Run: pnpm add fingerprint-generator fingerprint-injector`),null;try{let{FingerprintGenerator:n}=await import(`fingerprint-generator`),r=new n,i={};e?.os&&(i.operatingSystems=[{windows:`windows`,macos:`macos`,linux:`linux`}[e.os]??`windows`]),e?.browser&&(i.browsers=[e.browser]),e?.locale&&(i.locales=[e.locale]),e?.screen&&(i.screen=e.screen);let a=r.getFingerprint(i);return this.activeProfile={fingerprint:a.fingerprint,headers:a.headers??{},generatedAt:Date.now(),os:e?.os??`windows`,browser:e?.browser??`chrome`},t.info(`Fingerprint generated for ${this.activeProfile.os}/${this.activeProfile.browser}`),this.activeProfile}catch(e){return t.error(`Failed to generate fingerprint:`,e),null}}async injectFingerprint(e,n){if(!this.isAvailable())throw Error(`fingerprint-injector not installed`);try{let{newInjectedPage:r}=await import(`fingerprint-injector`);await r(e,{fingerprint:`fingerprint`in n?n.fingerprint:n}),t.info(`Fingerprint injected into page`)}catch(e){throw t.error(`Failed to inject fingerprint:`,e),e}}getActiveProfile(){return this.activeProfile}clearProfile(){this.activeProfile=null}static resetInstance(){n.instance=null}};export{n as FingerprintManager};
@@ -1 +0,0 @@
1
- import{m as e,p as t}from"./constants-BYj8Xek8.mjs";import{t as n}from"./ToolError-DWU_z7gp.mjs";import{t as r}from"./Win32API-eUCF57l_.mjs";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y,y as b}from"./Win32Debug-CYrIQBvr.mjs";import{randomUUID as x}from"node:crypto";const S=e=>`0x${e.toString(16).toUpperCase()}`;var C=class{breakpoints=new Map;attachedPids=new Set;drAllocation=[!1,!1,!1,!1];async attach(e){if(!this.attachedPids.has(e)){d(e),p(!1),this.attachedPids.add(e);for(let e=0;e<100;e++){let e=u(100);if(!e)break;f(e.processId,e.threadId,h.CONTINUE)}}}async detach(e){for(let[t,n]of this.breakpoints)n.pid===e&&(this.clearDR(e,n.drIndex),this.drAllocation[n.drIndex]=!1,this.breakpoints.delete(t));if(this.attachedPids.has(e)){try{a(e)}catch{}this.attachedPids.delete(e)}}async setBreakpoint(e,t,n,r=4){this.attachedPids.has(e)||await this.attach(e);let i=this.allocateDR(),a=BigInt(t.startsWith(`0x`)?t:`0x${t}`);this.applyDRToAllThreads(e,i,a,n,r,!0);let o={id:x(),pid:e,address:`0x${a.toString(16).toUpperCase()}`,access:n,size:r,enabled:!0,drIndex:i,hitCount:0};return this.breakpoints.set(o.id,o),o}async removeBreakpoint(e){let t=this.breakpoints.get(e);return t?(this.clearDR(t.pid,t.drIndex),this.drAllocation[t.drIndex]=!1,this.breakpoints.delete(e),!0):!1}listBreakpoints(){return Array.from(this.breakpoints.values()).map(e=>({id:e.id,address:e.address,access:e.access,size:e.size,enabled:e.enabled,hitCount:e.hitCount,lastHit:e.lastHit}))}async waitForHit(e){let n=e??t,r=Date.now()+n;for(;Date.now()<r;){let e=Math.max(100,r-Date.now()),t=u(Math.min(e,500));if(t)if(t.exceptionCode===g.SINGLE_STEP){let e=this.processHit(t.threadId,t.processId,t.exceptionAddress);if(f(t.processId,t.threadId,h.CONTINUE),e)return e}else f(t.processId,t.threadId,h.CONTINUE)}return null}async traceAccess(n,r,i,a,o){let s=a??e,c=o??t,l=await this.setBreakpoint(n,r,i),u=[],d=Date.now()+c;for(;u.length<s&&Date.now()<d;){let e=await this.waitForHit(Math.min(1e3,d-Date.now()));e?.breakpointId===l.id&&u.push(e)}return await this.removeBreakpoint(l.id),u}allocateDR(){for(let e=0;e<4;e++)if(!this.drAllocation[e])return this.drAllocation[e]=!0,e;throw new n(`PREREQUISITE`,`All 4 hardware breakpoint registers (DR0-DR3) are in use`)}applyDRToAllThreads(e,t,n,a,u,d){let f=o(e),p={execute:`execute`,write:`write`,readwrite:`readwrite`,read:`read`};for(let e of f){let o;try{o=i(e)}catch{continue}try{m(o);let e=v(o,_.ALL),r=[72,80,88,96];d?e.writeBigUInt64LE(n,r[t]):e.writeBigUInt64LE(0n,r[t]);let i=Array.from(this.breakpoints.values()).filter(e=>e.enabled).map(e=>({drIndex:e.drIndex,enabled:!0,access:p[e.access],size:e.size}));d&&i.push({drIndex:t,enabled:!0,access:p[a],size:u});let f=l(i);e.writeBigUInt64LE(f,112),b(e,{contextFlags:_.ALL}),c(o,e),s(o)}catch{try{s(o)}catch{}}finally{r(o)}}}clearDR(e,t){this.applyDRToAllThreads(e,t,0n,`write`,1,!1)}processHit(e,t,n){let a;try{a=i(e)}catch{return null}try{let n=v(a,_.ALL),r=y(n);for(let[i,o]of this.breakpoints){if(o.pid!==t)continue;let s=1n<<BigInt(o.drIndex);if(r.dr6&s)return o.hitCount++,o.lastHit=Date.now(),n.writeBigUInt64LE(0n,104),c(a,n),{breakpointId:i,address:o.address,accessAddress:o.address,instructionAddress:S(r.rip),threadId:e,accessType:o.access,timestamp:Date.now(),registers:{rax:S(r.rax),rbx:S(r.rbx),rcx:S(r.rcx),rdx:S(r.rdx),rsi:S(r.rsi),rdi:S(r.rdi),rsp:S(r.rsp),rbp:S(r.rbp),r8:S(r.r8),r9:S(r.r9),r10:S(r.r10),r11:S(r.r11),r12:S(r.r12),r13:S(r.r13),r14:S(r.r14),r15:S(r.r15),rip:S(r.rip),rflags:`0x${r.eflags.toString(16).toUpperCase()}`}}}return null}finally{r(a)}}};const w=new C;export{C as HardwareBreakpointEngine,w as hardwareBreakpointEngine};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{Ct as t,St as n,Tt as r,wt as i}from"./constants-BYj8Xek8.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{b as o,d as s,t as c}from"./Win32API-eUCF57l_.mjs";import{m as l}from"./Win32Debug-CYrIQBvr.mjs";import u from"koffi";const d={FIXED:1,FREE:2,MOVEABLE:4},f={DEFAULT:1,SHARED:2};let p=null;function m(){let e=u.load(`kernel32.dll`);return{CreateToolhelp32Snapshot:e.func(`CreateToolhelp32Snapshot`,`intptr`,[`uint32`,`uint32`]),Heap32ListFirst:e.func(`Heap32ListFirst`,`bool`,[`intptr`,`_Inout_ uint8_t *`]),Heap32ListNext:e.func(`Heap32ListNext`,`bool`,[`intptr`,`_Inout_ uint8_t *`]),Heap32First:e.func(`Heap32First`,`bool`,[`_Inout_ uint8_t *`,`uint32`,`uintptr_t`]),Heap32Next:e.func(`Heap32Next`,`bool`,[`_Inout_ uint8_t *`]),CloseHandle:e.func(`int CloseHandle(intptr)`),HEAPLIST32_SIZE:36,HEAPENTRY32_SIZE:56}}function h(){return p||=m(),p}const g=[[`0-64B`,0,64],[`64-256B`,64,256],[`256B-1KB`,256,1024],[`1-4KB`,1024,4096],[`4-16KB`,4096,16384],[`16-64KB`,16384,65536],[`64KB-1MB`,65536,1048576],[`>1MB`,1048576,2**53-1]];function _(e){for(let t=0;t<g.length;t++){let n=g[t];if(e>=n[1]&&e<n[2])return t}return g.length-1}var v=class{async enumerateHeaps(e){let t=h(),r=t.CreateToolhelp32Snapshot(l.SNAPHEAPLIST,e);if(r===-1n&&typeof r==`bigint`)throw new a(`RUNTIME`,`Failed to create heap snapshot for PID ${e}`);let i=[];try{let a=Buffer.alloc(t.HEAPLIST32_SIZE);a.writeBigUInt64LE(BigInt(t.HEAPLIST32_SIZE),0);let o=t.Heap32ListFirst(r,a);for(;o;){let s=a.readUInt32LE(8),c=a.readBigUInt64LE(12),l=a.readUInt32LE(20),u=await this.enumerateBlocksInternal(e,c,n);i.push({heapId:`0x${c.toString(16)}`,processId:s,flags:l,isDefault:(l&f.DEFAULT)!==0,blockCount:u.length,totalSize:u.reduce((e,t)=>e+t.size,0)}),a.writeBigUInt64LE(BigInt(t.HEAPLIST32_SIZE),0),o=t.Heap32ListNext(r,a)}}finally{t.CloseHandle(r)}return{heaps:i,stats:this.computeStats(i,[])}}async enumerateBlocks(e,t,r){let i=BigInt(t),a=r?.maxBlocks??n;return this.enumerateBlocksInternal(e,i,a)}async getStats(e){let{heaps:t}=await this.enumerateHeaps(e),r=[];for(let i of t){let t=await this.enumerateBlocksInternal(e,BigInt(i.heapId),n);r.push(...t)}return this.computeStats(t,r)}async detectAnomalies(e){let t=[],{heaps:r}=await this.enumerateHeaps(e);for(let i of r){let r=await this.enumerateBlocksInternal(e,BigInt(i.heapId),n);this.detectSpray(r,i.heapId,t),this.detectSuspiciousSizes(r,i.heapId,t),await this.detectPossibleUaf(e,r,i.heapId,t)}return t}async enumerateBlocksInternal(e,t,n){let r=h(),i=[],a=Buffer.alloc(r.HEAPENTRY32_SIZE);a.writeBigUInt64LE(BigInt(r.HEAPENTRY32_SIZE),0);let o=r.Heap32First(a,e,t);for(;o&&i.length<n;){let e=a.readBigUInt64LE(16),n=Number(a.readBigUInt64LE(24)),s=a.readUInt32LE(32);i.push({address:`0x${e.toString(16)}`,size:n,flags:s,heapId:`0x${t.toString(16)}`,isFree:(s&d.FREE)!==0}),a.writeBigUInt64LE(BigInt(r.HEAPENTRY32_SIZE),0),o=r.Heap32Next(a)}return i}computeStats(e,t){let n=g.map(([e])=>({range:e,count:0,totalBytes:0})),r=0,i=0,a=0,o=2**53-1;for(let e of t){r+=e.size,e.isFree&&(i+=e.size),e.size>a&&(a=e.size),!e.isFree&&e.size<o&&(o=e.size);let t=_(e.size);n[t].count++,n[t].totalBytes+=e.size}return o===2**53-1&&(o=0),r===0&&e.length>0&&(r=e.reduce((e,t)=>e+t.totalSize,0)),{totalHeaps:e.length,totalBlocks:t.length||e.reduce((e,t)=>e+t.blockCount,0),totalSize:r,freeSize:i,usedSize:r-i,largestBlock:a,smallestBlock:o,averageBlockSize:t.length>0?Math.round(r/t.length):0,sizeDistribution:n,fragmentationRatio:r>0?i/r:0}}detectSpray(e,n,r){let a=new Map;for(let n of e){if(n.isFree)continue;let e=Math.round(n.size/t)*t,r=a.get(e)??[];r.push(n),a.set(e,r)}for(let[e,t]of a)t.length>=i&&r.push({type:`heap_spray_pattern`,severity:`high`,address:t[0].address,details:`${t.length} blocks of ~${e} bytes detected — possible heap spray`,heapId:n})}detectSuspiciousSizes(e,t,n){for(let i of e)i.size===0?n.push({type:`suspicious_size`,severity:`medium`,address:i.address,details:`Block with zero size`,heapId:t}):i.size>r&&n.push({type:`suspicious_size`,severity:`medium`,address:i.address,details:`Unusually large block: ${(i.size/(1024*1024)).toFixed(1)} MB`,heapId:t})}async detectPossibleUaf(t,n,r,i){let a=n.filter(e=>e.isFree&&e.size>=8).slice(0,100),l=null;try{l=o(t);for(let e of a){let t=BigInt(e.address),n=s(l,t,8);n&&n.readBigUInt64LE(0)!==0n&&i.push({type:`possible_uaf`,severity:`low`,address:e.address,details:`Free block has non-zero data: 0x${n.readBigUInt64LE(0).toString(16)}`,heapId:r})}}catch(n){e.debug(`UAF check failed for PID ${t}: ${n}`)}finally{l&&c(l)}}};const y=new v;export{v as HeapAnalyzer,y as heapAnalyzer};
@@ -1 +0,0 @@
1
- let e=0;function t(t){return`${t}-${Date.now().toString(36)}-${(++e).toString(36)}`}function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function r(e){let t=e.content.find(e=>e.type===`text`&&typeof e.text==`string`);if(!t)throw Error(`Expected JSON text payload from wrapped tool response`);let r;try{r=JSON.parse(t.text)}catch(e){throw Error(`Wrapped tool returned non-JSON text payload: ${e instanceof Error?e.message:String(e)}`,{cause:e})}if(!n(r))throw Error(`Wrapped tool returned JSON that is not an object`);return r}function i(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}var a=class{sessions=new Map;operations=new Map;artifacts=new Map;operationIndex=new Map;evidenceBridge;setEvidenceBridge(e){this.evidenceBridge=e}createSession(e){let n=t(`sess`),r={id:n,name:e,createdAt:Date.now(),operationCount:0,artifactCount:0,status:`active`};return this.sessions.set(n,r),this.operations.set(n,[]),this.artifacts.set(n,[]),r}destroySession(e){let t=this.sessions.get(e);if(!t)throw Error(`Session "${e}" not found`);t.status=`destroyed`;let n=this.operations.get(e)??[];for(let e of n)e.status===`active`&&(e.status=`completed`)}listSessions(){return[...this.sessions.values()].filter(e=>e.status===`active`)}getSession(e){return this.sessions.get(e)}registerOperation(e,n,r,i){let a=this.sessions.get(e);if(!a)throw Error(`Session "${e}" not found`);if(a.status===`destroyed`)throw Error(`Session "${e}" is destroyed — cannot register new operations`);let o=t(`op`),s={id:o,sessionId:e,type:n,target:r,config:i,createdAt:Date.now(),status:`active`},c=this.operations.get(e);return c.push(s),this.operationIndex.set(o,e),a.operationCount=c.length,this.evidenceBridge?.onOperation(s),s}getSessionOperations(e){return this.operations.get(e)??[]}recordArtifact(e,t){let n=this.operationIndex.get(e);if(!n)throw Error(`Operation "${e}" not found`);let r=(this.operations.get(n)??[]).find(t=>t.id===e);if(!r)throw Error(`Operation "${e}" metadata missing`);let i={operationId:e,sessionId:n,type:r.type,timestamp:Date.now(),data:t},a=this.artifacts.get(n);a.push(i);let o=this.sessions.get(n);return o.artifactCount=a.length,this.evidenceBridge?.onArtifact(i),i}getArtifacts(e,t){let n=this.artifacts.get(e)??[];return t?n.filter(e=>e.type===t):n}getSessionSnapshot(e){let t=this.sessions.get(e);if(t)return{session:t,stats:this.getSessionStats(e),operations:[...this.getSessionOperations(e)],artifacts:[...this.getArtifacts(e)]}}listSessionSnapshots(){return this.listSessions().map(e=>({session:e,stats:this.getSessionStats(e.id),operations:[...this.getSessionOperations(e.id)],artifacts:[...this.getArtifacts(e.id)]}))}async applyHookPreset(e,t,r){let a=i(r.presets),o=(typeof r.preset==`string`?r.preset:void 0)??(a.length>0?a.join(`, `):`hook_preset`);return this.executeTrackedTool({sessionId:e,type:`runtime-hook`,target:o,config:{...r},invoke:()=>t.handleHookPreset(r),isSuccessful:e=>i(e.injected).length>0,buildArtifacts:e=>{let t=i(e.injected);return[{presetIds:t,failedPresets:Array.isArray(e.failed)?e.failed.filter(e=>n(e)&&typeof e.preset==`string`&&typeof e.error==`string`):[],injectionPoint:e.method===`evaluateOnNewDocument`?`before-load`:`runtime`,scriptContent:t.join(`, `),body:e}]}})}async replayNetworkRequest(e,t,r){let i=typeof r.requestId==`string`?r.requestId:`network_replay`,a=typeof r.urlOverride==`string`?r.urlOverride:void 0;return this.executeTrackedTool({sessionId:e,type:`network-intercept`,target:i,config:{...r},invoke:()=>t.handleNetworkReplayRequest(r),buildArtifacts:e=>e.dryRun===!0&&n(e.preview)?[{requestId:i,url:typeof e.preview.url==`string`?e.preview.url:a,method:typeof e.preview.method==`string`?e.preview.method:void 0,headers:n(e.preview.headers)?e.preview.headers:void 0,body:e.preview.body,replayMode:`dry-run`}]:[{requestId:typeof e.requestId==`string`?e.requestId:i,url:a,method:typeof r.methodOverride==`string`?r.methodOverride:void 0,headers:n(e.headers)?e.headers:void 0,body:e.body,statusCode:typeof e.status==`number`?e.status:void 0,statusText:typeof e.statusText==`string`?e.statusText:void 0,bodyTruncated:typeof e.bodyTruncated==`boolean`?e.bodyTruncated:void 0,replayMode:`live`}]})}getSessionStats(e){let t=this.sessions.get(e);return t?{operationCount:t.operationCount,artifactCount:t.artifactCount}:{operationCount:0,artifactCount:0}}findOperation(e){let t=this.operationIndex.get(e);if(t)return(this.operations.get(t)??[]).find(t=>t.id===e)}setOperationStatus(e,t){let n=this.findOperation(e);n&&(n.status=t)}async executeTrackedTool(e){let t=this.registerOperation(e.sessionId,e.type,e.target,e.config);try{let n=r(await e.invoke());if(!(e.isSuccessful?e.isSuccessful(n):n.success!==!1))return this.setOperationStatus(t.id,`failed`),{operation:t,artifacts:[],payload:n};let i=(e.buildArtifacts?.(n)??[]).map(e=>this.recordArtifact(t.id,e));return this.setOperationStatus(t.id,`completed`),{operation:t,artifacts:i,payload:n}}catch(e){throw this.setOperationStatus(t.id,`failed`),e}}};export{a as InstrumentationSessionManager};
@@ -1 +0,0 @@
1
- import{t as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";import{Ar as n,Cr as r,Dr as i,Er as a,Fr as o,Lr as s,Mr as c,Nr as l,Or as u,Pr as d,Sr as f,Tr as p,_r as m,a as h,ar as g,br as _,cr as v,dr as y,fr as b,gr as ee,hr as te,ir as x,kr as S,lr as C,mr as w,nr as ne,or as re,pr as ie,rr as ae,sr as T,tr as oe,ur as E,vr as se,wr as ce,xr as le,yr as ue}from"./constants-BYj8Xek8.mjs";import{r as D}from"./response-C7rKQst4.mjs";import{c as O,d as de,f as fe,i as pe,l as me,n as he,p as k,r as A,s as ge,t as j}from"./ToolCatalog-CYdD9F5f.mjs";import{n as M}from"./ServerRuntimeState-D2bWHqEE.mjs";import{o as N,t as P}from"./ExtensionManager.tools-oVMJgPcN.mjs";import{t as F}from"./ProcessRegistry-C-bN48oR.mjs";import{t as I}from"./search-defaults-lYBVn_3L.mjs";import{t as L}from"./RingBuffer-Dm54ELKT.mjs";import{Worker as _e}from"worker_threads";function R(e,t){return ge(e,t)}const ve=[[`navigate`,`go`,`open`,`visit`,`browse`,`load`],[`intercept`,`capture`,`monitor`,`sniff`,`collect`,`record`,`track`],[`request`,`fetch`,`xhr`,`ajax`,`http`,`api`],[`authenticate`,`auth`,`login`,`credential`,`token`,`jwt`,`session`],[`breakpoint`,`pause`,`halt`,`stop`,`break`],[`step`,`next`,`continue`,`resume`],[`deobfuscate`,`beautify`,`unminify`,`decode`,`transform`,`decompile`],[`screenshot`,`snapshot`,`image`,`picture`,`photo`],[`evaluate`,`execute`,`run`,`eval`,`invoke`,`call`],[`element`,`node`,`selector`,`dom`,`component`],[`click`,`tap`,`press`,`interact`,`trigger`],[`type`,`input`,`enter`,`fill`,`write`],[`cookie`,`localstorage`,`storage`,`cache`,`indexeddb`],[`websocket`,`ws`,`socket`,`realtime`],[`scroll`,`swipe`,`drag`],[`search`,`find`,`query`,`lookup`,`discover`,`locate`],[`hook`,`patch`,`override`,`replace`,`wrap`,`proxy`],[`script`,`code`,`source`,`javascript`,`js`],[`bundle`,`webpack`,`module`,`pack`,`chunk`],[`block`,`filter`,`deny`,`reject`,`prevent`],[`allow`,`permit`,`whitelist`,`accept`,`enable`],[`remove`,`delete`,`clear`,`clean`,`purge`,`erase`],[`list`,`show`,`display`,`enumerate`,`get`],[`set`,`configure`,`config`,`setup`,`assign`],[`stealth`,`antidetect`,`fingerprint`,`evasion`,`undetected`],[`mobile`,`device`,`emulate`,`responsive`,`phone`],[`performance`,`profile`,`benchmark`,`metric`,`vitals`],[`register`,`signup`,`account`,`enroll`,`join`],[`captcha`,`challenge`,`verification`,`verify`,`solve`],[`tab`,`window`,`page`],[`inspect`,`examine`,`analyze`,`analyse`,`debug`,`investigate`],[`wait`,`delay`,`sleep`,`timeout`,`poll`],[`close`,`disconnect`,`quit`,`exit`,`shutdown`,`terminate`],[`traffic`,`network`,`request`,`response`,`connection`],[`heap`,`memory`,`allocation`,`gc`,`garbage`],[`export`,`save`,`dump`,`download`,`extract`],[`replay`,`resend`,`repeat`,`redo`,`retry`],[`variable`,`scope`,`local`,`closure`,`context`],[`watch`,`observe`,`monitor`,`trace`,`track`],[`protobuf`,`proto`,`binary`,`msgpack`,`grpc`],[`wasm`,`webassembly`,`assembly`],[`sse`,`eventsource`,`stream`,`streaming`],[`graphql`,`gql`,`introspect`,`mutation`,`subscription`],[`v8`,`heap`,`snapshot`,`bytecode`,`jit`,`turbofan`,`ignition`,`hiddenclass`],[`tls`,`ssl`,`boringssl`,`cert`,`certificate`,`pinning`,`handshake`,`keylog`],[`skia`,`gpu`,`render`,`scenegraph`,`scene`,`draw`,`paint`,`raster`,`layer`],[`frida`,`ghidra`,`ida`,`unidbg`,`jadx`,`binary`,`disassemble`,`decompile`,`instrument`],[`mojo`,`ipc`,`chromium`,`interface`,`broker`,`message`],[`syscall`,`etw`,`strace`,`dtrace`,`kernel`,`systemcall`,`tracefs`],[`adb`,`android`,`webview`,`apk`,`dalvik`,`art`,`emulator`],[`extension`,`plugin`,`addon`,`webhook`,`c2`,`bluetooth`,`ble`,`hid`,`serial`,`registry`]];var ye=class e{reverseMap;constructor(){this.reverseMap=e.buildReverseMap(ve)}expand(e){let t=this.reverseMap.get(e.toLowerCase());return t?[...t]:[]}expandQuery(e){let t=new Set(e.map(e=>e.toLowerCase())),n=[],r=f;for(let i of e){let e=this.reverseMap.get(i.toLowerCase());if(!e)continue;let a=0;for(let i of e){if(a>=r)break;t.has(i)||(n.push(i),t.add(i),a++)}}return n}static buildReverseMap(e){let t=new Map;for(let n of e)for(let e of n){let r=e.toLowerCase(),i=t.get(r);i||(i=new Set,t.set(r,i));for(let e of n){let t=e.toLowerCase();t!==r&&i.add(t)}}return t}};const be=g,xe=x;var Se=class e{queryCategoryProfiles;cjkQueryAliases;synonymExpander;constructor(t){this.queryCategoryProfiles=t?.queryCategoryProfiles===void 0?e.compileQueryCategoryProfiles(I.queryCategoryProfiles):e.compileQueryCategoryProfiles(t.queryCategoryProfiles),this.cjkQueryAliases=t?.cjkQueryAliases===void 0?e.compileCjkQueryAliasRules(I.cjkQueryAliases):e.compileCjkQueryAliasRules(t.cjkQueryAliases),this.synonymExpander=new ye}static compileQueryCategoryProfiles(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.domainBoosts))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=new Map(e.domainBoosts.flatMap(e=>!e||typeof e.domain!=`string`||e.domain.length===0||typeof e.weight!=`number`||!Number.isFinite(e.weight)?[]:[[e.domain,e.weight]]));return[{pattern:t,domainBoosts:n}]})}static compileCjkQueryAliasRules(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.tokens))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=e.tokens.filter(e=>typeof e==`string`&&e.length>0);return[{pattern:t,tokens:n}]})}detectQueryCategoryBoosts(e){let t=new Map;for(let n of this.queryCategoryProfiles)if(n.pattern.test(e))for(let[e,r]of n.domainBoosts){let n=t.get(e)??1;t.set(e,Math.max(n,r))}return t}expandCjkAliasTokens(e){let t=e.toLowerCase(),n=new Set;for(let e of this.cjkQueryAliases)if(e.pattern.test(t))for(let t of e.tokens)n.add(t);return[...n]}tokenise(e,t){let n=e.replace(/[_-]/g,` `);n=n.replace(/([\u4e00-\u9fff])/g,` $1 `);let r=n.split(/[^a-zA-Z0-9\u4e00-\u9fff]+/).filter(Boolean),i=[];for(let e of r){let t=e.toLowerCase(),n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/\s+/);if(n.length>1){for(let e of n)i.push(e.toLowerCase());i.push(t)}else i.push(t)}return i.push(...this.expandCjkAliasTokens(e)),t?.expandSynonyms&&i.push(...this.synonymExpander.expandQuery(i)),i}getK1(){return be}getB(){return xe}},Ce=class{worker=null;ready=!1;nextId=0;pending=new Map;isReady(){return this.ready}async embed(e){this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed`,id:t,text:e})})}async embedBatch(e){if(e.length===0)return[];this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed_batch`,id:t,texts:e})})}async terminate(){if(this.worker){for(let[,e]of this.pending)e.reject(Error(`EmbeddingEngine terminated`));this.pending.clear(),await this.worker.terminate(),this.worker=null,this.ready=!1}}ensureWorker(){if(this.worker)return;let e=new URL(`./EmbeddingWorker.js`,import.meta.url);this.worker=new _e(e),typeof this.worker.unref==`function`&&this.worker.unref(),F.register(this.worker),this.worker.on(`message`,e=>{let t=this.pending.get(e.id);t&&(this.pending.delete(e.id),e.type===`result`?(this.ready=!0,t.resolve(e.embedding)):e.type===`error`&&t.reject(Error(e.message??`Unknown worker error`)))}),this.worker.on(`error`,e=>{for(let[,t]of this.pending)t.reject(e);this.pending.clear(),this.worker=null,this.ready=!1}),this.worker.on(`exit`,e=>{if(e!==0){let t=Error(`Embedding worker exited with code ${e}`);for(let[,e]of this.pending)e.reject(t);this.pending.clear()}this.worker=null,this.ready=!1})}},we=class e{compiledRules;constructor(t){this.compiledRules=t===void 0?e.compileIntentToolBoostRules(I.intentToolBoostRules):e.compileIntentToolBoostRules(t)}static compileIntentToolBoostRules(e){let t=[];for(let n of e){if(!n||typeof n.pattern!=`string`||!Array.isArray(n.boosts)||n.boosts.length===0)continue;let e;try{e=new RegExp(n.pattern,n.flags??`i`)}catch{continue}let r=n.boosts.filter(e=>e&&typeof e.tool==`string`&&e.tool.length>0).map(e=>({tool:e.tool,bonus:Number.isFinite(e.bonus)?e.bonus:0})).filter(e=>e.bonus>0);r.length!==0&&t.push({pattern:e,boosts:r})}return t}resolveIntentToolBonuses(e){let t=e.toLowerCase(),n=new Map;for(let e of this.compiledRules)if(e.pattern.test(t))for(let{tool:t,bonus:r}of e.boosts){let e=n.get(t)??0;n.set(t,Math.max(e,r))}return n}getCompiledRules(){return this.compiledRules}},Te=class e{trigramSets;constructor(t){this.trigramSets=t.map(t=>e.extractTrigrams(t))}search(t,n=i){let r=e.extractTrigrams(t);if(r.size===0)return new Map;let a=new Map;for(let t=0;t<this.trigramSets.length;t++){let i=this.trigramSets[t];if(i.size===0)continue;let o=e.jaccardSimilarity(r,i);o>=n&&a.set(t,o)}return a}static extractTrigrams(e){let t=e.toLowerCase().replace(/[_\-\s]+/g,``),n=new Set;for(let e=0;e<=t.length-3;e++)n.add(t.slice(e,e+3));return n}static jaccardSimilarity(e,t){let n=0,[r,i]=e.size<=t.size?[e,t]:[t,e];for(let e of r)i.has(e)&&n++;let a=e.size+t.size-n;return a===0?0:n/a}};const z=.1,B=.8;var Ee=class{vectorWeight;lastVectorRanking=null;topN;learnUp;learnDown;constructor(e){this.vectorWeight=e?.vectorCosineWeight??n,this.topN=Math.max(1,d),this.learnUp=Math.max(0,o),this.learnDown=Math.max(0,l)}getVectorWeight(){return this.vectorWeight}recordVectorRanking(e){this.lastVectorRanking=e}recordToolCallFeedback(e,t){if(!this.lastVectorRanking||!t)return!1;let n=this.lastVectorRanking.get(e),r=this.vectorWeight;return n===void 0?this.vectorWeight=Math.max(z,this.vectorWeight-this.learnDown):n<this.topN?this.vectorWeight=Math.min(B,this.vectorWeight+this.learnUp):n<this.topN*2?this.vectorWeight=Math.min(B,this.vectorWeight+this.learnUp*.3):this.vectorWeight=Math.max(z,this.vectorWeight-this.learnDown),this.vectorWeight!==r}};const De=new Set(`the.a.an.is.are.was.were.be.been.to.of.in.for.on.with.at.by.from.or.and.not.this.that.it.its.if.as.will.can.may.must.should.would.could.e.g.default.optional.required.when.set`.split(`.`)),V={extractParamTokens(e){let t=[];if(!e||typeof e!=`object`)return t;let n=e.properties;if(!n||typeof n!=`object`)return t;for(let[e,r]of Object.entries(n)){let n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[\s_-]+/);for(let e of n){let n=e.toLowerCase();n.length>1&&t.push(n)}if(r&&typeof r==`object`){let e=r.description;if(typeof e==`string`){let n=e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);for(let e of n)e.length>2&&!De.has(e)&&t.push(e)}}}return t},extractShortDescription(e){if(!e)return``;let t=e.match(/^[^.!?\n]+[.!?]?/);if(t){let e=t[0].trim();return e.length>120?e.slice(0,117)+`...`:e}return e.length>120?e.slice(0,117)+`...`:e},containsCJK(e){return/[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af]/.test(e)},normalizeToolName(e){return e.toLowerCase().replace(/[\s-]+/g,`_`)}},H={queryToolNameMatch:.35,descriptionKeywordOverlap:.25,domainRelevance:.2,intentAlignment:.2};function U(e){return e.toLowerCase().replace(/[\s-]+/g,`_`).replace(/[^a-z0-9_]/g,``)}function W(e){return e.toLowerCase().replace(/[_-]/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[^a-z0-9]+/).filter(e=>e.length>0)}function Oe(e,t){if(e===t)return 1;if(e.length===0||t.length===0)return 0;let n=e.length<=t.length?e:t,r=e.length<=t.length?t:e,i=new Float64Array(n.length+1),a=new Float64Array(n.length+1);for(let e=1;e<=r.length;e++){let t=r[e-1];for(let e=1;e<=n.length;e++){let r=i[e-1]??0;t===n[e-1]?a[e]=r+1:a[e]=Math.max(i[e]??0,a[e-1]??0)}let o=i;i=a,a=o,a.fill(0)}return(i[n.length]??0)/Math.max(e.length,t.length)}function ke(e,t){if(e.size===0)return 0;let n=W(t),r=0;for(let t of n)e.has(t)&&r++;return r/e.size}var Ae=class{weights;domainKeywords;constructor(e){this.weights=e?{...H,...e}:H,this.domainKeywords=new Map}buildFromTools(e){let t=new Map;for(let n of e){if(!n.domain)continue;let e=t.get(n.domain);e||(e=new Map,t.set(n.domain,e));let r=W(n.name);for(let t of r)e.set(t,(e.get(t)??0)+1);let i=W(n.description);for(let t of i)t.length>=3&&e.set(t,(e.get(t)??0)+1)}for(let[e,n]of t){let t=[...n.entries()].toSorted((e,t)=>t[1]-e[1]).slice(0,15);this.domainKeywords.set(e,new Set(t.map(([e])=>e)))}}reRank(e,t,n){if(t.length===0)return[];let r=n??t.length,i=U(e),a=W(e),o=new Set(a),s=this.inferTargetDomain(a),c=[];for(let e=0;e<t.length;e++){let n=t[e],r=Oe(i,U(n.toolName)),l=ke(o,n.description),u=0;s.size>0&&n.domain&&(u=+!!s.has(n.domain));let d=this.computeIntentAlignment(a,n.description),f=this.weights.queryToolNameMatch*r+this.weights.descriptionKeywordOverlap*l+this.weights.domainRelevance*u+this.weights.intentAlignment*d,p=n.score*.3+f*.7;c.push({result:n,originalRank:e,reRankScore:p})}return c.toSorted((e,t)=>t.reRankScore-e.reRankScore).slice(0,r).map(e=>({toolName:e.result.toolName,originalRank:e.originalRank,reRankedScore:Math.round(e.reRankScore*1e4)/1e4}))}inferTargetDomain(e){let t=new Set,n=new Set(e);for(let[e,r]of this.domainKeywords)for(let i of r)if(n.has(i)){t.add(e);break}return t}computeIntentAlignment(e,t){if(e.length===0||this.domainKeywords.size===0)return 0;let n=t.toLowerCase(),r=[];for(let e of this.domainKeywords.values())for(let t of e)r.push(t);let i=e.filter(e=>r.includes(e));if(i.length===0)return 0;let a=0;for(let e of i)n.includes(e)&&a++;return a/i.length}};let je=0;function Me(){return`sq-${Date.now()}-${++je}`}function G(e,t){if(e.length===0)return 0;let n=Math.ceil(t/100*e.length)-1;return e[Math.max(0,n)]??0}var K=class{MAX_HISTORY=1e3;records=new L(this.MAX_HISTORY);lastRecordId;recordSearch(e,t,n,r){let i=Me(),a={id:i,query:e,timestamp:Date.now(),returnedTools:t,returnedScores:n,latencyMs:r};return this.records.push(a),this.lastRecordId=i,i}recordToolUsed(e,t){let n=this.records.toArray();for(let r=n.length-1;r>=0;r--){let i=n[r];if(i.id===e){i.usedTool=t;let e=i.returnedTools.indexOf(t);i.usedToolRank=e>=0?e+1:void 0;return}}}associateLastSearch(e){if(!this.lastRecordId)return;let t=this.records.toArray();for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.id===this.lastRecordId){let t=r.returnedTools.indexOf(e);t>=0&&(r.usedTool=e,r.usedToolRank=t+1);return}}}computeMetrics(){let e=this.records.toArray(),t=e.length;if(t===0)return{totalQueries:0,avgLatencyMs:0,p50LatencyMs:0,p99LatencyMs:0,toolUsedRate:0,avgUsedRank:0,mrr:0,topKDistribution:{}};let n=e.map(e=>e.latencyMs).toSorted((e,t)=>e-t),r=n.reduce((e,t)=>e+t,0),i=e.filter(e=>e.usedTool!==void 0),a=i.length/t,o=0,s=0,c={};if(i.length>0){let e=0,t=0;for(let n of i){let r=n.usedToolRank;if(r!==void 0&&r>0){e+=r,t+=1/r;let n=String(r);c[n]=(c[n]??0)+1}}o=e/i.length,s=t/i.length}return{totalQueries:t,avgLatencyMs:r/t,p50LatencyMs:G(n,50),p99LatencyMs:G(n,99),toolUsedRate:a,avgUsedRank:o,mrr:s,topKDistribution:c}}getRecentRecords(e=10){return this.records.toArray().slice(-e)}getStats(){return this.computeMetrics()}getEnhancementSuggestions(e,t,n){if(t>=5&&n>=.5)return null;let r=[];return t===0?r.push(`No tools found for "${e}". Try broader terms or use search_tools with a different query.`):t<3&&r.push(`Only ${t} tools found. Consider using synonyms or breaking down the query.`),n<.3&&t>0&&r.push(`Low relevance scores. Try more specific tool names or domain prefixes (e.g., "page_", "hook_", "network_").`),r.length>0?r:null}};function q(e,t,n){if(!t)return-1;let r=e.indexOf(t);for(;r>=0;){let i=r>0?e[r-1]:null,a=r+t.length<e.length?e[r+t.length]:null,o=i===null||!n.test(i),s=a===null||!n.test(a);if(o&&s)return r;r=e.indexOf(t,r+1)}return-1}function Ne(e){let t=new Map,n=new Map;for(let t=0;t<e.length;t++){let r=e[t].name,i=r.indexOf(`_`);if(i<=0)continue;let a=r.slice(0,i),o=n.get(a)??[];o.push(t),n.set(a,o)}for(let[,e]of n){if(e.length<2||e.length>15)continue;let n=oe/Math.sqrt(e.length);for(let r of e){let i=t.get(r)??[];for(let t of e)t!==r&&i.push({docIndex:t,weight:n});t.set(r,i)}}return t}function Pe(e){let t=[];for(let n=0;n<e.length;n++)e[n]>0&&t.push({idx:n,score:e[n]});t.sort((e,t)=>t.score-e.score);let n=new Map;for(let e=0;e<t.length;e++)n.set(t[e].idx,e);return n}function J(e){let t=[...e.entries()].toSorted((e,t)=>t[1]-e[1]),n=new Map;for(let e=0;e<t.length;e++)n.set(t[e][0],e);return n}function Fe(e,t){for(let n=0;n<e.length;n++){let r=t[n];r<=0||(e[n]=e[n]+r*ue*m)}}function Ie(e){let{scores:t,docs:n,affinityGraph:r}=e,i=[];for(let e=0;e<t.length;e++)t[e]>0&&i.push({idx:e,score:t[e]});if(i.length!==0){if(i.sort((e,t)=>t.score-e.score),r.size>0){let e=Math.min(ae,i.length);for(let n=0;n<e;n++){let{idx:e,score:a}=i[n],o=r.get(e);if(!o)continue;let s=1/(1+n);for(let{docIndex:e,weight:n}of o)t[e]>0&&(t[e]+=a*n*s*ne)}}if(C>0&&i.length>=C){let e=i.slice(0,10),r=new Map;for(let{idx:t}of e){let e=n[t].domain;e&&r.set(e,(r.get(e)??0)+1)}for(let[e,i]of r)if(!(i<C))for(let r=0;r<n.length;r++)t[r]>0&&n[r].domain===e&&(t[r]*=v)}}}function Le(e,t,n,r){return`${`${e}\0${t}`}${!n||n.size===0?``:`\0${[...n].toSorted().join(`|`)}`}${r?`\0${r}`:``}`}var Re=class{capacity;map=new Map;constructor(e){this.capacity=Math.max(1,e)}get(e){let t=this.map.get(e);return t!==void 0&&(this.map.delete(e),this.map.set(e,t)),t}set(e,t){if(this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let e=this.map.keys().next().value;this.map.delete(e)}}clear(){this.map.clear()}},Y=class{docs=[];invertedIndex=new Map;sortedKeys;avgDocLength;docCount;domainOverrides;domainScoreMultipliers;toolScoreMultipliers;extensionEtag=``;docNameIndex=new Map;affinityGraph;queryCache;trigramIndex;embeddingEngine;toolEmbeddings=null;feedbackTracker;recencyTracker=new Map;bm25Scorer;intentBoost;reRanker;qualityTracker=new K;constructor(e,t,n,r,i,a){let o=e??j;this.domainOverrides=t,this.domainScoreMultipliers=n,this.toolScoreMultipliers=r,this.docCount=o.length,this.bm25Scorer=new Se(i);let s=i?.vectorEnabled??c;this.embeddingEngine=s?new Ce:null,this.feedbackTracker=new Ee(i),this.intentBoost=new we(i?.intentToolBoostRules);let l=0;for(let e=0;e<o.length;e++){let t=o[e],n=this.domainOverrides?.get(t.name)??A(t.name),r=t.description??``,i=V.extractShortDescription(r),s=this.bm25Scorer.tokenise(t.name),c=new Set(s),u=n?this.bm25Scorer.tokenise(n):[],d=this.bm25Scorer.tokenise(r),f=V.extractParamTokens(t.inputSchema),p=[...s,...u,...d,...f],m={name:t.name,domain:n,description:r,shortDescription:i,tokens:p,length:p.length,nameTokens:s,nameTokenSet:c,nameTokenCount:c.size};this.docs.push(m),this.docNameIndex.set(t.name,e),l+=m.length;let h=new Map;for(let e of s){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,3),h.set(e,t)}for(let e of u){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,2),h.set(e,t)}for(let e of d){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,1),h.set(e,t)}for(let e of f){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,y),h.set(e,t)}let g=a?.get(t.name);if(g)for(let e of g){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,_),h.set(e,t)}for(let[t,{tf:n,weight:r}]of h){let i=this.invertedIndex.get(t);i||(i=[],this.invertedIndex.set(t,i)),i.push({docIndex:e,tf:n,weight:r})}}this.avgDocLength=this.docCount>0?l/this.docCount:1,this.sortedKeys=[...this.invertedIndex.keys()].toSorted(),this.reRanker=new Ae,this.reRanker.buildFromTools(this.docs.map(e=>({name:e.name,domain:e.domain??``,description:e.description}))),this.affinityGraph=Ne(this.docs),this.trigramIndex=new Te(this.docs.map(e=>e.name)),this.queryCache=new Re(ie)}async search(e,t=10,n,r,i){let a=performance.now(),o=this.bm25Scorer.tokenise(e);if(o.length===0)return[];if(le&&this.isSimpleQuery(e,o))return this.quickPathSearch(e,o,t,n);if(o.length>6){let e=o.filter(e=>this.invertedIndex.has(e));if(e.length>=3){let t=e.map(e=>{let t=this.invertedIndex.get(e).length;return{token:e,idf:Math.log((this.docCount-t+.5)/(t+.5)+1)}});t.sort((e,t)=>t.idf-e.idf);let n=new Set(t.slice(0,6).map(e=>e.token));o=o.filter(e=>n.has(e))}}let s=this.bm25Scorer.tokenise(o.join(` `),{expandSynonyms:!0}).filter(e=>!o.includes(e));o.push(...s);let c=(()=>{let t=e.toLowerCase();if(!/(?:\b(?:call|use|run|invoke|execute)\b|调用|执行|使用|运行)/i.test(t))return null;let n=/[a-z0-9_]/,r=/[a-z0-9]/,i=null,a=1/0;for(let e of this.docNameIndex.keys()){let o=q(t,e,n);o<0&&e.includes(`_`)&&(o=q(t,e.replace(/_/g,`-`),r),o<0&&(o=q(t,e.replace(/_/g,` `),r))),!(o<0)&&(o<a||o===a&&e.length>(i?.length??0))&&(i=e,a=o)}return i})(),l=Le(e,t,r,this.extensionEtag),u=this.queryCache.get(l);if(u&&this.isCachedEntryFresh(u)){let e=n??new Set;return u.results.map(t=>({...t,isActive:e.has(t.name)}))}let d=this.intentBoost.resolveIntentToolBonuses(e),f=new Float64Array(this.docCount);for(let e of o)if(this.scoreToken(e,f),e.length>=3){let t=this.findPrefixMatches(e);for(let n of t)if(n!==e){let e=this.invertedIndex.get(n);e&&this.scorePostings(e,this.docCount,f,b)}}await this.applyRRFFusion(o,e,f);let p=this.bm25Scorer.detectQueryCategoryBoosts(e),m=e.toLowerCase().replace(/[\s-]+/g,`_`),h=new Set(o);for(let e=0;e<this.docCount;e++){let t=this.docs[e],n=d.get(t.name)??0;if(f[e]<=0&&n<=0)continue;if(t.name===m){f[e]*=E;continue}let r=0;for(let e of o)t.nameTokenSet.has(e)&&r++;if(r>0&&t.nameTokenCount>0&&h.size>0){let n=r/t.nameTokenCount,i=r/h.size;f[e]*=1+T*n*i}let i=t.domain?this.domainScoreMultipliers?.get(t.domain)??1:1;if(i!==1&&(f[e]*=i),t.domain&&p.size>0){let n=p.get(t.domain);n!==void 0&&n>1&&(f[e]*=n)}let a=this.toolScoreMultipliers?.get(t.name)??1;a!==1&&(f[e]*=a)}if(this.applyIntentBonusBand(f,d),this.applyGraphExpansion(f),this.applyRecencyBoost(f),this.applyTierPenalty(f,r,i),c){let e=this.docNameIndex.get(c);if(e!==void 0){let t=0;for(let e=0;e<this.docCount;e++){let n=f[e];n>t&&(t=n)}let n=Math.max(1,t+1);f[e]+=n}}let g=n??new Set,_=[];for(let e=0;e<this.docCount;e++)if(f[e]>0){let t=this.docs[e];_.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(f[e]*1e3)/1e3,isActive:g.has(t.name)})}_.sort((e,t)=>t.score-e.score);let v=_.slice(0,t);if(v.length>1){let n=v.map(e=>({toolName:e.name,score:e.score,domain:e.domain??``,description:this.docs[this.docNameIndex.get(e.name)??0]?.description??``})),r=this.reRanker.reRank(e,n,t),i=new Map(r.map((e,t)=>[e.toolName,t]));v=v.slice().toSorted((e,t)=>(i.get(e.name)??0)-(i.get(t.name)??0))}this.queryCache.set(l,{results:v,vectorWeightAtCache:this.feedbackTracker.getVectorWeight(),cachedAtMs:Date.now()});let y=performance.now()-a;return this.qualityTracker.recordSearch(e,v.map(e=>e.name),v.map(e=>e.score),y),v}isCachedEntryFresh(e){let t=this.feedbackTracker.getVectorWeight();return Math.abs(t-e.vectorWeightAtCache)<=re}isSimpleQuery(e,t){let n=e.toLowerCase().replace(/[\s-]+/g,`_`);return!!(this.docNameIndex.has(n)||t.length===1)}quickPathSearch(e,t,n,r){let a=new Float64Array(this.docCount);for(let e of t)if(this.scoreToken(e,a),e.length>=3){let t=this.findPrefixMatches(e);for(let n of t)if(n!==e){let e=this.invertedIndex.get(n);e&&this.scorePostings(e,this.docCount,a,b)}}let o=this.trigramIndex.search(e,i),s=u;if(s>0)for(let[e,t]of o)t>0&&(a[e]+=t*s);let c=e.toLowerCase().replace(/[\s-]+/g,`_`);if(this.docNameIndex.has(c)){let e=this.docNameIndex.get(c);a[e]*=E}let l=r??new Set,d=[];for(let e=0;e<this.docCount;e++)if(a[e]>0){let t=this.docs[e];d.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(a[e]*1e3)/1e3,isActive:l.has(t.name)})}return d.sort((e,t)=>t.score-e.score),d.slice(0,n)}applyRecencyBoost(e){if(w<=0||this.recencyTracker.size===0)return;let t=ee;if(t<=0)return;let n=Date.now(),r=w;for(let[i,a]of this.recencyTracker){let o=n-a;if(o<0||o>t)continue;let s=this.docNameIndex.get(i);if(s===void 0||e[s]<=0)continue;let c=1+r*(1-o/t);e[s]*=c}}applyTierPenalty(e,t,n){if(!t||t.size===0)return;let i=n?n===`full`?ce:n===`workflow`?a:p:r;if(!(i>=1||i<=0))for(let n=0;n<this.docCount;n++){if(e[n]<=0)continue;let r=this.docs[n].domain;r&&(t.has(r)||(e[n]*=i))}}getDomainSummary(){let e=new Map;for(let t of this.docs){let n=e.get(t.domain)??[];n.push(t.name),e.set(t.domain,n)}return Array.from(e.entries()).map(([e,t])=>({domain:e,count:t.length,tools:t})).toSorted((e,t)=>t.count-e.count)}scoreToken(e,t){let n=this.invertedIndex.get(e);n&&this.scorePostings(n,this.docCount,t,1)}findPrefixMatches(e){let t=this.sortedKeys,n=0,r=t.length;for(;n<r;){let i=n+r>>>1;t[i]<e?n=i+1:r=i}let i=[];for(;n<t.length&&t[n].startsWith(e);)i.push(t[n]),n++;return i}scorePostings(e,t,n,r){let i=e.length,a=Math.log((this.docCount-i+.5)/(i+.5)+1),o=x,s=g;for(let{docIndex:t,tf:i,weight:c}of e){let e=this.docs[t],l=1-o+o*(e.length/this.avgDocLength),u=i*(s+1)/(i+s*l);n[t]+=a*u*c*r}}async applyRRFFusion(e,t,n){let r=se,a=u,o=Pe(n),s=J(this.trigramIndex.search(t,i)),c,l;if(S>0&&o.size>0){let e=[...o.entries()].find(([,e])=>e===0)?.[0];(e===void 0?0:n[e])>=S?(c=new Map,l=new Map):(c=await this.computeVectorCosineScores(t),l=J(c))}else c=await this.computeVectorCosineScores(t),l=J(c);let d=new Map;for(let[e,t]of l)d.set(this.docs[e].name,t);this.feedbackTracker.recordVectorRanking(d);let f=new Float64Array(this.docCount);for(let e=0;e<this.docCount;e++){let t=0,n=o.get(e);n!==void 0&&(t+=1/(r+n));let i=s.get(e);i!==void 0&&a>0&&(t+=a*(1/(r+i)));let c=l.get(e);c!==void 0&&this.feedbackTracker.getVectorWeight()>0&&(t+=this.feedbackTracker.getVectorWeight()*(1/(r+c))),f[e]=t}Fe(n,f)}async ensureToolEmbeddings(){if(this.toolEmbeddings||!this.embeddingEngine)return;let e=this.docs.map(e=>`${e.name.replace(/_/g,` `)}: ${e.description}`);this.toolEmbeddings=await this.embeddingEngine.embedBatch(e)}async computeVectorCosineScores(e){if(!this.embeddingEngine)return new Map;try{await this.ensureToolEmbeddings()}catch{return new Map}if(!this.toolEmbeddings)return new Map;let t;try{t=await this.embeddingEngine.embed(e)}catch{return new Map}let n=new Map;for(let e=0;e<this.toolEmbeddings.length;e++){let r=this.toolEmbeddings[e],i=0;for(let e=0;e<t.length;e++)i+=t[e]*r[e];i>0&&n.set(e,i)}return n}recordToolCallFeedback(e,t){for(this.feedbackTracker.recordToolCallFeedback(e,!!this.embeddingEngine),this.recencyTracker.delete(e),this.recencyTracker.set(e,Date.now());this.recencyTracker.size>te;){let e=this.recencyTracker.keys().next().value;if(e===void 0)break;this.recencyTracker.delete(e)}}associateLastSearch(e){this.qualityTracker.associateLastSearch(e)}getSearchQualityMetrics(){return this.qualityTracker.computeMetrics()}getSearchQualityTracker(){return this.qualityTracker}applyIntentBonusBand(e,t){if(t.size===0)return;let n=0;for(let t=0;t<this.docCount;t++)n=Math.max(n,e[t]);let r=0;for(let e of t.values())r=Math.max(r,e);if(r<=0)return;let i=Math.max(1,n+1),a=[...new Set([...t.values()].filter(e=>e>0))].toSorted((e,t)=>e-t),o=new Map;for(let e=0;e<a.length;e++)o.set(a[e],e+1);for(let[n,r]of t){if(r<=0)continue;let t=this.docNameIndex.get(n);if(t===void 0)continue;let a=o.get(r);a!==void 0&&(e[t]+=i*a)}}applyGraphExpansion(e){Ie({scores:e,docs:this.docs,affinityGraph:this.affinityGraph})}};function X(e){let t=new Set(e.selectedTools.map(e=>e.name));for(let n of e.activatedToolNames)t.add(n);return t}function ze(e){let t=new Set(he(e.baseTier));for(let n of e.enabledDomains)t.add(n);for(let n of e.extensionToolsByName.values())t.add(n.domain);for(let n of X(e)){let r=e.extensionToolsByName.get(n)?.domain;if(r){t.add(r);continue}let i=A(n);i&&t.add(i)}return t}function Be(e){return e.baseTier}function Ve(e){let t=new Map;for(let n of e.extensionToolsByName.values())t.set(n.name,n.domain);return t}async function Z(e){await O();let t=new Map(j.map(e=>[e.name,e]));for(let n of e.extensionToolsByName.values())t.set(n.name,n.tool);return[...t.values()]}async function He(e){return new Map((await Z(e)).map(e=>[e.name,e]))}const Q=new WeakMap;function Ue(){let e=new Map;for(let t of fe())if(t.sceneKeywords)for(let[n,r]of Object.entries(t.sceneKeywords))r.length>0&&e.set(n,r);return e}function We(e){let t=[];for(let[n,r]of e.extensionToolsByName)t.push(`${n}:${r.domain}`);return t.sort(),[e.extensionWorkflowRuntimeById.size,t.join(`|`)].join(`::`)}async function Ge(e){await O();let t=We(e),n=Q.get(e);if(n?.signature===t)return n.engine;let r=await Z(e),i=Ve(e),a=new Map,o=new Map;for(let t of e.extensionToolsByName.values())o.set(t.name,1.12);e.extensionWorkflowRuntimeById.size>0&&(a.set(`workflow`,s),o.set(`run_extension_workflow`,1.35),o.set(`list_extension_workflows`,1.25));let c=new Y(r,i,a,o,e.config.search,Ue());return c.extensionEtag=t,Q.set(e,{signature:t,engine:c}),c}function Ke(e){let t={};for(let e of k())t[e.domain]=(t[e.domain]??0)+1;for(let n of e.extensionToolsByName.values())t[n.domain]=(t[n.domain]??0)+1;let n=k().length,r=e.extensionToolsByName.size;return`Search ${n+r} tools across ${Object.keys(t).length} capability domains. This includes built-in tools plus any loaded plugin/workflow tools (${r} currently loaded). In search-tier sessions, call this before assuming a capability is unavailable. Use activate_tools for exact matches, activate_domain for an entire domain. Domains: ${Object.entries(t).toSorted((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} (${t})`).join(` | `)}. Query tip: before searching, distill your intent into key concepts (action verb + target + domain). Pass distilled keywords, not full sentences — the search engine works on token matching, not semantic understanding.`}var qe=e({handleActivateDomain:()=>$});async function $(e,n){let r=typeof n.domain==`string`?n.domain:``;if(!r)return D(JSON.stringify({success:!1,error:`domain must be a non-empty string`}));let i=new Set(de());for(let t of e.extensionToolsByName.values())i.add(t.domain);if(!i.has(r))return D(JSON.stringify({success:!1,error:`Unknown domain "${r}". Valid: ${[...i].join(`, `)}`}));await me(r);let a=typeof n.ttlMinutes==`number`?n.ttlMinutes:h,o=[...pe([r]),...[...e.extensionToolsByName.values()].filter(e=>e.domain===r).map(e=>e.tool)],s=X(e),c=[];e.enabledDomains.add(r);for(let t of o){if(s.has(t.name))continue;let n=e.extensionToolsByName.get(t.name);if(n)P(e,n,`activate_domain`);else{let n=e.registerSingleTool(t);e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,n)}c.push(t.name)}if(c.length>0){let n=new Set(c.filter(t=>!e.extensionToolsByName.has(t)));if(n.size>0){let t=R(e.handlerDeps,n);e.router.addHandlers(t)}for(let t of c){let n=e.extensionToolsByName.get(t);n?.handler&&e.router.addHandlers({[t]:n.handler})}N(e,r,a,c),M(e)?.setPendingDomainActivation(r,a,c);try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed:`,e)}}return t.info(`activate_domain: domain="${r}", activated ${c.length} tools, ttl=${a}min`),e.mcpLog.info(`jshookmcp`,{event:`domain_activated`,domain:r,toolCount:c.length}),D(JSON.stringify({success:!0,domain:r,activated:c.length,activatedTools:c,totalDomainTools:o.length,ttlMinutes:a>0?a:`no expiry`,hint:c.length>0?`Tools activated. If they do not appear in your tool list, use call_tool({ name: "<tool>", args: {...} }) to invoke them.`:void 0}))}export{Be as a,ze as c,X as i,K as l,$ as n,Ge as o,Ke as r,He as s,qe as t,R as u};
@@ -1,2 +0,0 @@
1
- import{Si as e,pt as t}from"./constants-BYj8Xek8.mjs";import{_ as n,b as r,d as i,m as a,t as o,u as s}from"./Win32API-eUCF57l_.mjs";import{i as c}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{randomUUID as l}from"node:crypto";var u=class{freezes=new Map;writeHistory=[];undoneStack=[];async writeValue(t,u,d,f){let p=BigInt(u.startsWith(`0x`)?u:`0x${u}`),{patternBytes:m}=c(d,f),h=Buffer.from(m),g=r(t,!0);try{let r=i(g,p,h.length),{oldProtect:o}=a(g,p,h.length,s.READWRITE);n(g,p,h),a(g,p,h.length,o);let c={id:l(),pid:t,address:`0x${p.toString(16).toUpperCase()}`,oldValue:Array.from(r),newValue:Array.from(h),timestamp:Date.now(),undone:!1};return this.writeHistory.push(c),this.undoneStack=[],this.writeHistory.length>e&&(this.writeHistory=this.writeHistory.slice(-e)),c}finally{o(g)}}async undo(){for(let e=this.writeHistory.length-1;e>=0;e--){let t=this.writeHistory[e];if(!t.undone){let e=BigInt(t.address),i=Buffer.from(t.oldValue),c=r(t.pid,!0);try{let{oldProtect:t}=a(c,e,i.length,s.READWRITE);n(c,e,i),a(c,e,i.length,t)}finally{o(c)}return t.undone=!0,this.undoneStack.push(t),t}}return null}async redo(){let e=this.undoneStack.pop();if(!e)return null;let t=BigInt(e.address),i=Buffer.from(e.newValue),c=r(e.pid,!0);try{let{oldProtect:e}=a(c,t,i.length,s.READWRITE);n(c,t,i),a(c,t,i.length,e)}finally{o(c)}return e.undone=!1,e}async freeze(e,i,u,d,f){let p=BigInt(i.startsWith(`0x`)?i:`0x${i}`),{patternBytes:m}=c(u,d),h=Buffer.from(m),g=f??t,_={id:l(),pid:e,address:`0x${p.toString(16).toUpperCase()}`,value:Array.from(h),valueType:d,intervalMs:g,isActive:!0};return _.timer=setInterval(()=>{try{let t=r(e,!0);try{let{oldProtect:e}=a(t,p,h.length,s.READWRITE);n(t,p,h),a(t,p,h.length,e)}finally{o(t)}}catch{_.isActive=!1,_.timer&&clearInterval(_.timer),this.freezes.delete(_.id)}},g),typeof _.timer.unref==`function`&&_.timer.unref(),this.freezes.set(_.id,_),_}async unfreeze(e){let t=this.freezes.get(e);return t?(t.timer&&clearInterval(t.timer),t.isActive=!1,this.freezes.delete(e),!0):!1}async unfreezeAll(){let e=0;for(let[t]of this.freezes)await this.unfreeze(t),e++;return e}listFreezes(){return Array.from(this.freezes.values()).map(({timer:e,...t})=>t)}async dumpMemory(e,t,n){let a=BigInt(t.startsWith(`0x`)?t:`0x${t}`),s=r(e,!1);try{return i(s,a,n)}finally{o(s)}}async dumpMemoryHex(e,t,n){let r=await this.dumpMemory(e,t,n),i=[],a=BigInt(t.startsWith(`0x`)?t:`0x${t}`);for(let e=0;e<r.length;e+=16){let t=a+BigInt(e),n=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e.toString(16).padStart(2,`0`)).join(` `),o=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e>=32&&e<=126?String.fromCharCode(e):`.`).join(``);i.push(`${t.toString(16).padStart(12,`0`)} ${n.padEnd(47)} |${o}|`)}return i.join(`
2
- `)}getWriteHistory(){return[...this.writeHistory]}};const d=new u;export{u as MemoryController,d as memoryController};
@@ -1 +0,0 @@
1
- import{$n as e,Jn as t,Xn as n,Yn as r,qn as i}from"./constants-BYj8Xek8.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{t as o}from"./factory-CKr4fAE1.mjs";import{i as s}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{t as c}from"./NativeMemoryManager.impl-DniBe2wf.mjs";import{n as l,t as u}from"./formatAddress-vLA_hOJt.mjs";import{n as d,r as f,scanSessionManager as p,t as m}from"./MemoryScanSession-DG_F-PjE.mjs";var h=class{nmm;providerCache=null;get provider(){return this.providerCache||=o(),this.providerCache}set provider(e){this.providerCache=e}constructor(e){this.nmm=e}async firstScan(e,t,n){let o=performance.now(),c=n.valueType,l=f(c),m=n.alignment??d(c),h=n.maxResults??r;if(l===0)return this.patternFirstScan(e,t,c,n);let{patternBytes:g}=s(t,c===`pointer`?`uint64`:c);if(g.length===0)throw new a(`VALIDATION`,`Invalid pattern for type ${c}: "${t}"`);let _=Buffer.from(g),v=p.createSession(e,n),y=[],b=new Map,x=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(x,n),t=e.length,r=0;for(let i of e){if(n.onProgress&&n.onProgress(r,t),r++,y.length>=h)break;let e=i.baseAddress,a=i.size,o=16*1024*1024;for(let t=0;t<a&&y.length<h;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(x,r,n).data}catch{break}if(m===l&&l>0){let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(;t<=i.length-l&&y.length<h;){let n=i.indexOf(_,t);if(n===-1)break;if(!this.isAlignedAddress(r+BigInt(n),e)){t=n+1;continue}let a=r+BigInt(n);y.push(a),b.set(a,Buffer.from(i.subarray(n,n+l))),t=n+e}}else{let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(let n=t;n<=i.length-l;n+=e)if(Buffer.compare(i.subarray(n,n+l),_)===0){let e=r+BigInt(n);if(y.push(e),b.set(e,Buffer.from(i.subarray(n,n+l))),y.length>=h)break}}}}}finally{this.provider.closeProcess(x)}p.updateSession(v,y,b);let S=`${(performance.now()-o).toFixed(1)}ms`,C=y.slice(0,i).map(u);return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:C,totalMatches:y.length,truncated:y.length>i,elapsed:S}}async nextScan(e,t,n,r){let o=performance.now(),c=p.getSession(e),{pid:l,valueType:d,addresses:h,previousValues:g}=c,_=f(d);if(_===0)throw new a(`VALIDATION`,`Next-scan is not supported for variable-length types (hex/string)`);let v=null,y=null;if(n!==void 0){let{patternBytes:e}=s(n,d===`pointer`?`uint64`:d);v=Buffer.from(e)}if(r!==void 0){let{patternBytes:e}=s(r,d===`pointer`?`uint64`:d);y=Buffer.from(e)}let b=[],x=new Map,S=this.provider.openProcess(l,!1);try{for(let e of h){let n;try{n=this.provider.readMemory(S,e,_).data}catch{continue}let r=g.get(e)??null;m(n,r,v,y,t,d)&&(b.push(e),x.set(e,Buffer.from(n)))}}finally{this.provider.closeProcess(S)}p.updateSession(e,b,x);let C=`${(performance.now()-o).toFixed(1)}ms`,w=b.slice(0,i).map(u);return{sessionId:e,matchCount:b.length,scanNumber:c.scanCount,addresses:w,totalMatches:b.length,truncated:b.length>i,elapsed:C}}async unknownInitialScan(t,n){let r=performance.now(),o=n.valueType,s=f(o),c=n.alignment??d(o),l=n.maxResults??e;if(s===0)throw new a(`VALIDATION`,`Unknown initial scan is not supported for variable-length types`);let m=p.createSession(t,n),h=[],g=new Map,_=this.provider.openProcess(t,!1);try{let e=this.getFilteredRegions(_,n),t=e.length,r=0;for(let i of e){if(n.onProgress&&n.onProgress(r,t),r++,h.length>=l)break;let e=i.baseAddress,a=i.size,o=16*1024*1024;for(let t=0;t<a&&h.length<l;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(_,r,n).data}catch{break}let u=this.getAlignStep(c),d=this.getAlignedChunkStart(r,u);for(let e=d;e<=i.length-s;e+=u){let t=r+BigInt(e);if(h.push(t),g.set(t,Buffer.from(i.subarray(e,e+s))),h.length>=l)break}}}}finally{this.provider.closeProcess(_)}p.updateSession(m,h,g);let v=`${(performance.now()-r).toFixed(1)}ms`;return{sessionId:m,matchCount:h.length,scanNumber:1,addresses:h.slice(0,i).map(u),totalMatches:h.length,truncated:h.length>i,elapsed:v}}async pointerScan(e,t,r={}){let a=performance.now(),o=r.maxResults??n,s=l(t),c={valueType:`pointer`,alignment:8,regionFilter:{moduleOnly:r.moduleOnly}},d=p.createSession(e,c),f=[],m=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(m,c);for(let t of e){if(r.moduleOnly,f.length>=o)break;let e=t.baseAddress,n=t.size,i=16*1024*1024;for(let t=0;t<n&&f.length<o;t+=i){let r=Math.min(i,n-t),a=e+BigInt(t),c;try{c=this.provider.readMemory(m,a,r).data}catch{break}for(let e=0;e<=c.length-8;e+=8){let t=c.readBigUInt64LE(e);if(Number(t>s?t-s:s-t)<=4096){let n=a+BigInt(e),r=t>=s?Number(t-s):-Number(s-t);if(f.push({address:u(n),value:u(t),offsetFromTarget:r}),f.length>=o)break}}}}}finally{this.provider.closeProcess(m)}let h=f.map(e=>l(e.address));p.updateSession(d,h,new Map);let g=`${(performance.now()-a).toFixed(1)}ms`;return{sessionId:d,pointers:f.slice(0,i),totalFound:f.length,elapsed:g}}async groupScan(e,n,o){let c=performance.now();if(n.length===0)throw new a(`VALIDATION`,`Group scan requires at least one value pattern`);let l=Math.max(...n.map(e=>e.offset+f(e.type)));if(l>t)throw new a(`VALIDATION`,`Group pattern too large: ${l} bytes (max ${t})`);let d=Array.from({length:l},()=>0),m=Array.from({length:l},()=>0);for(let e of n){let t=e.type===`pointer`?`uint64`:e.type,{patternBytes:n,mask:r}=s(e.value,t);for(let t=0;t<n.length;t++)d[e.offset+t]=n[t],m[e.offset+t]=r[t]}let h=o?.alignment??4,g=o?.maxResults??r,_={valueType:`int32`,alignment:h},v=p.createSession(e,_),y=[],b=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(b,_);for(let t of e){if(y.length>=g)break;let e=t.baseAddress,n=t.size,r=16*1024*1024,i=l-1;for(let t=0;t<n&&y.length<g;t+=r){let a=Math.min(r+i,n-t),o=e+BigInt(t),s;try{s=this.provider.readMemory(b,o,a).data}catch{break}let c=this.getAlignStep(h),u=this.getAlignedChunkStart(o,c);for(let e=u;e<=s.length-l;e+=c){let t=!0;for(let n=0;n<l;n++)if(m[n]===1&&s[e+n]!==d[n]){t=!1;break}if(t){let t=o+BigInt(e);if(y.push(t),y.length>=g)break}}}}}finally{this.provider.closeProcess(b)}p.updateSession(v,y,new Map);let x=`${(performance.now()-c).toFixed(1)}ms`;return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:y.slice(0,i).map(u),totalMatches:y.length,truncated:y.length>i,elapsed:x}}getAlignStep(e){return e>0?e:1}getAlignedChunkStart(e,t){let n=BigInt(t),r=e%n;return r===0n?0:Number(n-r)}isAlignedAddress(e,t){return e%BigInt(t)===0n}async patternFirstScan(e,t,n,o){let s=performance.now(),c=n===`pointer`?`uint64`:n,d=await this.nmm.scanMemory(e,t,c);if(!d.success)throw new a(`RUNTIME`,d.error??`Scan failed`);let f=p.createSession(e,o),m=o.maxResults??r,h=d.addresses.slice(0,m).map(l);p.updateSession(f,h,new Map);let g=`${(performance.now()-s).toFixed(1)}ms`;return{sessionId:f,matchCount:h.length,scanNumber:1,addresses:h.slice(0,i).map(u),totalMatches:d.addresses.length,truncated:h.length>i,elapsed:g}}getFilteredRegions(e,t){let n=[],r=0n,i=BigInt(`0x7FFFFFFF0000`),a=t.regionFilter;for(;r<i;){let t=this.provider.queryRegion(e,r);if(!t)break;let i=t.size;if(t.isReadable&&i>0&&i<=2**53-1){let e=!0;a?.writable&&!t.isWritable&&(e=!1),a?.executable&&!t.isExecutable&&(e=!1),a?.moduleOnly&&t.type!==`image`&&(e=!1),e&&n.push({baseAddress:t.baseAddress,size:i})}r=t.baseAddress+BigInt(t.size)}return n}};const g=new h(c);export{h as MemoryScanner,g as memoryScanner};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{v as t,y as n}from"./Win32API-eUCF57l_.mjs";import{n as r}from"./concurrency-DCr8WQ2M.mjs";import{t as i}from"./factory-CKr4fAE1.mjs";import{i as a,t as o}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{exec as s}from"node:child_process";import{promisify as c}from"node:util";async function l(e){if(process.platform===`darwin`)return u(e);if(!n())return{available:!1,reason:`Native memory operations require Windows or macOS. Current platform: ${process.platform}`};if(!t())return{available:!1,reason:`koffi library not available. Install with: pnpm add koffi`};try{let{stdout:t}=await e(`powershell.exe -NoProfile -Command "([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)"`,{timeout:5e3});if(t.trim().toLowerCase()!==`true`)return{available:!1,reason:`Native memory operations require Administrator privileges. Run as Administrator.`}}catch{return{available:!1,reason:`Failed to check Administrator privileges.`}}return{available:!0}}async function u(e){try{(await import(`koffi`)).default.load(`/usr/lib/libSystem.B.dylib`).unload()}catch{return{available:!1,reason:`koffi library cannot load libSystem.B.dylib. Install koffi with: pnpm add koffi`}}let t=``;try{let{stdout:n}=await e(`csrutil status 2>&1 || true`,{timeout:5e3});t=n.trim()}catch{}return process.getuid&&process.getuid()!==0?{available:!1,reason:`macOS memory operations require root privileges for task_for_pid. Run with: sudo node <your-script>.${t?` SIP status: ${t}`:``}`}:{available:!0}}const d=c(s);function f(e,t,n,r,i=16777216){if(t.length===0||e.regionSize<t.length||i<=0)return[];let a=Math.max(t.length-1,0),s=Buffer.alloc(0),c=[];for(let l=0;l<e.regionSize;l+=i){let u=Math.min(i,e.regionSize-l),d=r(e.baseAddress+BigInt(l),u),f=s.length>0?Buffer.concat([s,d]):d,p=o(f,t,n);for(let t of p){let n=l+t-s.length;c.push(e.baseAddress+BigInt(n))}if(a===0||l+u>=e.regionSize){s=Buffer.alloc(0);continue}let m=Math.min(a,f.length);s=f.subarray(f.length-m)}return c}var p=class{providerCache=null;get provider(){return this.providerCache||=i(),this.providerCache}set provider(e){this.providerCache=e}async checkAvailability(){return l(d)}async readMemory(t,n,r){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),i=this.provider.openProcess(t,!1);try{let{data:t}=this.provider.readMemory(i,e,r);return{success:!0,data:t.toString(`hex`).toUpperCase().match(/.{2}/g)?.join(` `)||``}}finally{this.provider.closeProcess(i)}}catch(i){return e.error(`Native memory read failed`,{pid:t,address:n,size:r,error:i instanceof Error?i.message:String(i)}),{success:!1,error:i instanceof Error?i.message:String(i)}}}async writeMemory(t,n,r,i=`hex`){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),a;a=i===`base64`?Buffer.from(r,`base64`):Buffer.from(r.replace(/\s/g,``),`hex`);let o=this.provider.openProcess(t,!0);try{let{bytesWritten:t}=this.provider.writeMemory(o,e,a);return{success:!0,bytesWritten:t}}finally{this.provider.closeProcess(o)}}catch(a){return e.error(`Native memory write failed`,{pid:t,address:n,encoding:i,dataLength:r.length,error:a instanceof Error?a.message:String(a)}),{success:!1,error:a instanceof Error?a.message:String(a)}}}async enumerateRegions(t){try{let e=this.provider.openProcess(t,!1),n=[];try{let t=0n,r=BigInt(`0x7FFFFFFF0000`);for(;t<r;){let r=this.provider.queryRegion(e,t);if(!r)break;n.push(m(r)),t=r.baseAddress+BigInt(r.size)}return{success:!0,regions:n}}finally{this.provider.closeProcess(e)}}catch(n){return e.error(`Native region enumeration failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}async checkMemoryProtection(t,n){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),r=this.provider.openProcess(t,!1);try{let t=this.provider.queryRegion(r,e);return t?{success:!0,protection:h(t.protection),isWritable:t.isWritable,isReadable:t.isReadable,isExecutable:t.isExecutable,regionStart:`0x${t.baseAddress.toString(16).toUpperCase()}`,regionSize:t.size}:{success:!1,error:`Failed to query memory region`}}finally{this.provider.closeProcess(r)}}catch(r){return e.error(`Native protection check failed`,{pid:t,address:n,error:r instanceof Error?r.message:String(r)}),{success:!1,error:r instanceof Error?r.message:String(r)}}}async scanMemory(t,n,i=`hex`){try{let{patternBytes:e,mask:o}=a(n,i);if(e.length===0)return{success:!1,addresses:[],error:`Invalid pattern`};let s=1e4,c=[],l=this.provider.openProcess(t,!1),u=[];try{let t=0n,n=BigInt(`0x7FFFFFFF0000`);for(;t<n;){let e=this.provider.queryRegion(l,t);if(!e)break;e.isReadable&&e.size>0&&e.size<=2**53-1&&c.push({baseAddress:e.baseAddress,regionSize:e.size}),t=e.baseAddress+BigInt(e.size)}let i=this.provider;u=await Promise.all(c.map(t=>r(async()=>{try{return f(t,e,o,(e,t)=>i.readMemory(l,e,t).data)}catch{return[]}})))}finally{this.provider.closeProcess(l)}let d=[];for(let e of u){for(let t of e)if(d.push(`0x${t.toString(16).toUpperCase()}`),d.length>=s)break;if(d.length>=s)break}return{success:!0,addresses:d,stats:{patternLength:e.length,resultsFound:d.length}}}catch(r){return e.error(`Native memory scan failed`,{pid:t,patternType:i,patternLength:n.length,error:r instanceof Error?r.message:String(r)}),{success:!1,addresses:[],error:r instanceof Error?r.message:String(r)}}}async enumerateModules(t){try{let e=this.provider.openProcess(t,!1);try{return{success:!0,modules:this.provider.enumerateModules(e).map(e=>({name:e.name,baseAddress:`0x${e.baseAddress.toString(16).toUpperCase()}`,size:e.size}))}}finally{this.provider.closeProcess(e)}}catch(n){return e.error(`Native module enumeration failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}async injectDll(t,n){if(process.platform!==`win32`)return{success:!1,error:`DLL injection is only supported on Windows`};try{let{openProcessForMemory:e,CloseHandle:r,WriteProcessMemory:i,VirtualAllocEx:a,CreateRemoteThread:o,GetModuleHandle:s,GetProcAddress:c,PAGE:l,MEM:u}=await import(`./Win32API-eUCF57l_.mjs`).then(e=>e.g),d=e(t,!0);try{let e=c(s(`kernel32.dll`),`LoadLibraryA`);if(!e)return{success:!1,error:`Failed to get LoadLibraryA address`};let t=Buffer.from(n+`\0`,`ascii`),f=a(d,0n,t.length,u.COMMIT|u.RESERVE,l.READWRITE);if(!f)return{success:!1,error:`Failed to allocate remote memory`};i(d,f,t);let{handle:p,threadId:m}=o(d,e,f);return p?(r(p),{success:!0,remoteThreadId:m}):{success:!1,error:`Failed to create remote thread`}}finally{r(d)}}catch(r){return e.error(`Native DLL injection failed`,{pid:t,dllPath:n,error:r instanceof Error?r.message:String(r)}),{success:!1,error:r instanceof Error?r.message:String(r)}}}async injectShellcode(t,n,r=`hex`){if(process.platform!==`win32`)return{success:!1,error:`Shellcode injection is only supported on Windows`};try{let e;e=r===`base64`?Buffer.from(n,`base64`):Buffer.from(n.replace(/\s/g,``),`hex`);let{openProcessForMemory:i,CloseHandle:a,WriteProcessMemory:o,VirtualAllocEx:s,VirtualProtectEx:c,CreateRemoteThread:l,PAGE:u,MEM:d}=await import(`./Win32API-eUCF57l_.mjs`).then(e=>e.g),f=i(t,!0);try{let t=s(f,0n,e.length,d.COMMIT|d.RESERVE,u.READWRITE);if(!t)return{success:!1,error:`Failed to allocate remote memory`};o(f,t,e);let{success:n}=c(f,t,e.length,u.EXECUTE_READWRITE);if(!n)return{success:!1,error:`Failed to change memory protection`};let{handle:r,threadId:i}=l(f,t,0n);return r?(a(r),{success:!0,remoteThreadId:i}):{success:!1,error:`Failed to create remote thread`}}finally{a(f)}}catch(i){return e.error(`Native shellcode injection failed`,{pid:t,encoding:r,shellcodeLength:n.length,error:i instanceof Error?i.message:String(i)}),{success:!1,error:i instanceof Error?i.message:String(i)}}}async checkDebugPort(t){if(process.platform!==`win32`)return{success:!1,error:`Debug port check is only supported on Windows`};try{let{openProcessForMemory:e,CloseHandle:n,NtQueryInformationProcess:r}=await import(`./Win32API-eUCF57l_.mjs`).then(e=>e.g),i=e(t,!1);try{let{status:e,debugPort:t}=r(i,7);return e===0?{success:!0,isDebugged:t!==0}:{success:!1,error:`NtQueryInformationProcess failed with status 0x${e.toString(16)}`}}finally{n(i)}}catch(n){return e.error(`Native debug port check failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}};function m(e){return{baseAddress:`0x${e.baseAddress.toString(16).toUpperCase()}`,size:e.size,state:e.state.toUpperCase(),protection:h(e.protection),isReadable:e.isReadable,isWritable:e.isWritable,isExecutable:e.isExecutable,type:e.type.toUpperCase()}}function h(e){if(e===0)return`NOACCESS`;let t=[],n=(e&1)!=0,r=(e&2)!=0,i=(e&4)!=0,a=(e&8)!=0;return n&&r&&i?t.push(`RWX`):n&&i?t.push(`RX`):n&&r?t.push(`RW`):n?t.push(`R`):i&&t.push(`X`),a&&t.push(`GUARD`),t.join(` `)||`UNKNOWN`}const g=new p;export{g as t};
@@ -1,185 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";function t(e){return`
2
- (function() {
3
- if (window.__xhrInterceptorInstalled) {
4
- console.log('[XHRInterceptor] Already installed');
5
- return;
6
- }
7
- window.__xhrInterceptorInstalled = true;
8
-
9
- const originalXHR = window.__originalXMLHttpRequestForHook || window.XMLHttpRequest;
10
- window.__originalXMLHttpRequestForHook = originalXHR;
11
- if (!window.__xhrRequests) {
12
- window.__xhrRequests = [];
13
- }
14
- const xhrRequests = window.__xhrRequests;
15
-
16
- window.XMLHttpRequest = function() {
17
- const xhr = new originalXHR();
18
- const requestInfo = {
19
- method: '',
20
- url: '',
21
- requestHeaders: {},
22
- responseHeaders: {},
23
- status: 0,
24
- response: null,
25
- timestamp: Date.now(),
26
- };
27
-
28
- const originalOpen = xhr.open;
29
- xhr.open = function(method, url, ...args) {
30
- requestInfo.method = method;
31
- requestInfo.url = url;
32
- console.log('[XHRInterceptor] XHR opened:', method, url);
33
- return originalOpen.call(xhr, method, url, ...args);
34
- };
35
-
36
- const originalSetRequestHeader = xhr.setRequestHeader;
37
- xhr.setRequestHeader = function(header, value) {
38
- requestInfo.requestHeaders[header] = value;
39
- return originalSetRequestHeader.call(xhr, header, value);
40
- };
41
-
42
- const originalSend = xhr.send;
43
- xhr.send = function(body) {
44
- let bodySize = 0;
45
- try {
46
- if (typeof body === 'string') bodySize = body.length;
47
- else if (body && typeof body.byteLength === 'number') bodySize = body.byteLength;
48
- else if (body && typeof body.size === 'number') bodySize = body.size;
49
- } catch {}
50
- console.log('[XHRInterceptor] XHR sent:', requestInfo.url, 'BodySize:', bodySize);
51
-
52
- xhr.addEventListener('load', function() {
53
- requestInfo.status = xhr.status;
54
- requestInfo.response = xhr.response;
55
- requestInfo.responseHeaders = xhr.getAllResponseHeaders();
56
-
57
- xhrRequests.push(requestInfo);
58
- if (xhrRequests.length > ${e}) {
59
- xhrRequests.splice(0, xhrRequests.length - ${e});
60
- }
61
- console.log('[XHRInterceptor] XHR completed:', requestInfo.url, 'Status:', xhr.status);
62
- });
63
-
64
- return originalSend.call(xhr, body);
65
- };
66
-
67
- return xhr;
68
- };
69
-
70
- window.__getXHRRequests = function() {
71
- return window.__xhrRequests || [];
72
- };
73
-
74
- console.log('[XHRInterceptor] XHR interceptor installed');
75
- })();
76
- `}function n(e){return`
77
- (function() {
78
- if (window.__fetchInterceptorInstalled) {
79
- console.log('[FetchInterceptor] Already installed');
80
- return;
81
- }
82
- window.__fetchInterceptorInstalled = true;
83
-
84
- const originalFetch = window.__originalFetchForHook || window.fetch;
85
- window.__originalFetchForHook = originalFetch;
86
- if (!window.__fetchRequests) {
87
- window.__fetchRequests = [];
88
- }
89
- const fetchRequests = window.__fetchRequests;
90
-
91
- window.fetch = function(url, options = {}) {
92
- const requestInfo = {
93
- url: typeof url === 'string' ? url : url.url,
94
- method: options.method || 'GET',
95
- headers: options.headers || {},
96
- body: options.body,
97
- timestamp: Date.now(),
98
- response: null,
99
- status: 0,
100
- };
101
-
102
- console.log('[FetchInterceptor] Fetch called:', requestInfo.method, requestInfo.url);
103
-
104
- return originalFetch.call(window, url, options).then(async (response) => {
105
- requestInfo.status = response.status;
106
-
107
- const clonedResponse = response.clone();
108
- try {
109
- requestInfo.response = await clonedResponse.text();
110
- } catch (e) {
111
- requestInfo.response = '[Unable to read response]';
112
- }
113
-
114
- fetchRequests.push(requestInfo);
115
- if (fetchRequests.length > ${e}) {
116
- fetchRequests.splice(0, fetchRequests.length - ${e});
117
- }
118
- // Auto-persist compact summary to localStorage so data survives context compression
119
- try {
120
- const summary = { url: requestInfo.url, method: requestInfo.method, status: requestInfo.status, ts: requestInfo.timestamp };
121
- const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
122
- prev.push(summary);
123
- if (prev.length > 500) prev.splice(0, prev.length - 500);
124
- localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
125
- } catch(e) {
126
- // best-effort persistence only; ignore quota or serialization failures
127
- }
128
- console.log('[FetchInterceptor] Fetch completed:', requestInfo.url, 'Status:', response.status);
129
-
130
- return response;
131
- }).catch((error) => {
132
- console.error('[FetchInterceptor] Fetch failed:', requestInfo.url, error);
133
- throw error;
134
- });
135
- };
136
-
137
- window.__getFetchRequests = function() {
138
- return window.__fetchRequests || [];
139
- };
140
-
141
- console.log('[FetchInterceptor] Fetch interceptor installed');
142
- })();
143
- `}const r=e=>typeof e==`object`&&!!e,i=e=>!r(e)||typeof e.requestId!=`string`||!r(e.request)||typeof e.request.url!=`string`||typeof e.request.method!=`string`||e.request.postData!==void 0&&typeof e.request.postData!=`string`?!1:typeof e.timestamp==`number`,a=e=>!r(e)||typeof e.requestId!=`string`||!r(e.response)||typeof e.response.url!=`string`||typeof e.response.status!=`number`||typeof e.response.statusText!=`string`||typeof e.response.mimeType!=`string`?!1:typeof e.timestamp==`number`,o=e=>r(e)&&typeof e.requestId==`string`,s=e=>r(e)&&typeof e.body==`string`&&typeof e.base64Encoded==`boolean`,c=e=>r(e)?e:{},l=e=>{if(!r(e))return;let t=e.result;if(r(t))return t.value},u=(e,t=0)=>typeof e==`number`&&Number.isFinite(e)?e:t,d=(e,t)=>typeof e==`boolean`?e:t;var f=class{cdpSession;identity;networkEnabled=!1;requests=new Map;responses=new Map;MAX_NETWORK_RECORDS=500;MAX_INJECTED_RECORDS=500;JS_RESPONSE_CONCURRENCY=6;responseBodyCache=new Map;MAX_BODY_CACHE_ENTRIES=200;networkListeners={};constructor(t,n={}){this.cdpSession=t,this.identity=n,this.cdpSession.on(`disconnected`,()=>{e.warn(`NetworkMonitor: CDP session disconnected`),this.networkEnabled=!1,this.networkListeners={}})}async enable(){if(!this.cdpSession)throw Error(`CDP session not initialized`);if(this.networkEnabled){e.warn(`Network monitoring already enabled`);return}try{await this.cdpSession.send(`Network.enable`,{maxTotalBufferSize:1e7,maxResourceBufferSize:5e6,maxPostDataSize:65536}),e.info(`Network domain enabled`),this.networkListeners.requestWillBeSent=t=>{if(!i(t)){e.debug(`Skipping malformed Network.requestWillBeSent payload`);return}let n=this.toScopedRequestId(t.requestId),r={requestId:n,rawRequestId:t.requestId,sessionId:this.identity.sessionId,targetId:this.identity.targetId,targetType:this.identity.targetType,frameId:t.frameId,url:t.request.url,method:t.request.method,headers:c(t.request.headers),postData:t.request.postData,timestamp:t.timestamp,type:t.type,httpVersion:t.request.httpVersion,initiator:t.initiator};if(this.requests.set(n,r),this.requests.size>this.MAX_NETWORK_RECORDS){let e=this.requests.keys().next().value;e&&this.requests.delete(e)}e.debug(`Network request captured: ${t.request.method} ${t.request.url} [${n}]`)},this.networkListeners.responseReceived=t=>{if(!a(t)){e.debug(`Skipping malformed Network.responseReceived payload`);return}let n=this.toScopedRequestId(t.requestId),r={requestId:n,rawRequestId:t.requestId,sessionId:this.identity.sessionId,targetId:this.identity.targetId,targetType:this.identity.targetType,frameId:t.frameId,url:t.response.url,status:t.response.status,statusText:t.response.statusText,headers:c(t.response.headers),mimeType:t.response.mimeType,timestamp:t.timestamp,fromCache:t.response.fromDiskCache||t.response.fromServiceWorker,timing:t.response.timing};if(this.responses.set(n,r),this.responses.size>this.MAX_NETWORK_RECORDS){let e=this.responses.keys().next().value;e&&this.responses.delete(e)}e.debug(`Network response captured: ${t.response.status} ${t.response.url} [${n}]`)},this.networkListeners.loadingFinished=t=>{if(!o(t)){e.debug(`Skipping malformed Network.loadingFinished payload`);return}let n=this.toScopedRequestId(t.requestId);e.debug(`Network loading finished: ${n}`),this.captureResponseBody(n).catch(t=>{e.debug(`[BodyCache] Auto-capture failed for ${n}: ${t instanceof Error?t.message:String(t)}`)})},this.cdpSession.on(`Network.requestWillBeSent`,this.networkListeners.requestWillBeSent),this.cdpSession.on(`Network.responseReceived`,this.networkListeners.responseReceived),this.cdpSession.on(`Network.loadingFinished`,this.networkListeners.loadingFinished),this.networkEnabled=!0,e.info(` Network monitoring enabled successfully`,{requestListeners:!!this.networkListeners.requestWillBeSent,responseListeners:!!this.networkListeners.responseReceived,loadingListeners:!!this.networkListeners.loadingFinished})}catch(t){throw e.error(` Failed to enable network monitoring:`,t),this.networkEnabled=!1,t}}async captureResponseBody(t){if(this.responseBodyCache.has(t))return;let n=this.responses.get(t);if(n&&!n.fromCache)try{let r=await this.cdpSession.send(`Network.getResponseBody`,{requestId:this.toRawRequestId(t)});if(!s(r))return;if(r.body.length>1048576){e.debug(`[BodyCache] Skipping oversized body for ${t} (${r.body.length} chars)`);return}if(this.responseBodyCache.size>=this.MAX_BODY_CACHE_ENTRIES){let e=this.responseBodyCache.keys().next().value;e&&this.responseBodyCache.delete(e)}this.responseBodyCache.set(t,{body:r.body,base64Encoded:r.base64Encoded}),e.debug(`[BodyCache] Cached body for ${t} (${r.body.length} chars, url=${n.url})`)}catch(n){e.debug(`[BodyCache] Could not capture body for ${t}: ${n instanceof Error?n.message:String(n)}`)}}async disable(){if(this.networkEnabled){this.networkListeners.requestWillBeSent&&this.cdpSession.off(`Network.requestWillBeSent`,this.networkListeners.requestWillBeSent),this.networkListeners.responseReceived&&this.cdpSession.off(`Network.responseReceived`,this.networkListeners.responseReceived),this.networkListeners.loadingFinished&&this.cdpSession.off(`Network.loadingFinished`,this.networkListeners.loadingFinished);try{await this.cdpSession.send(`Network.disable`)}catch(t){e.warn(`Failed to disable Network domain:`,t)}this.networkListeners={},this.networkEnabled=!1,e.info(`Network monitoring disabled`)}}isEnabled(){return this.networkEnabled}getStatus(){return{enabled:this.networkEnabled,requestCount:this.requests.size,responseCount:this.responses.size,listenerCount:Object.keys(this.networkListeners).filter(e=>this.networkListeners[e]!==void 0).length,cdpSessionActive:!0}}getRequests(e){let t=Array.from(this.requests.values());return e?.url&&(t=t.filter(t=>t.url.includes(e.url))),e?.method&&(t=t.filter(t=>t.method===e.method)),e?.limit&&(t=t.slice(-e.limit)),t}getResponses(e){let t=Array.from(this.responses.values());return e?.url&&(t=t.filter(t=>t.url.includes(e.url))),e?.status&&(t=t.filter(t=>t.status===e.status)),e?.limit&&(t=t.slice(-e.limit)),t}getActivity(e){return{request:this.requests.get(e),response:this.responses.get(e)}}async getResponseBody(t){if(!this.cdpSession)throw Error(`CDP session not initialized`);if(!this.networkEnabled)return e.error(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`),null;let n=this.responseBodyCache.get(t);if(n)return this.responseBodyCache.delete(t),this.responseBodyCache.set(t,n),e.debug(`[BodyCache] Cache hit for ${t}`),n;let r=this.requests.get(t),i=this.responses.get(t);if(!r)return e.error(`Request not found: ${t}. Make sure network monitoring was enabled before the request.`),null;if(!i)return e.warn(`Response not yet received for request: ${t}. The request may still be pending.`),null;try{let n=await this.cdpSession.send(`Network.getResponseBody`,{requestId:this.toRawRequestId(t)});return s(n)?(e.info(`Response body retrieved for request: ${t}`,{url:i.url,status:i.status,size:n.body.length,base64:n.base64Encoded}),{body:n.body,base64Encoded:n.base64Encoded}):(e.error(`Unexpected response body payload for ${t}`),null)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`Failed to get response body for ${t}:`,{url:i.url,status:i.status,error:r,hint:`The response body may not be available for this request type (e.g., cached, redirected, or failed requests)`}),null}}async getAllJavaScriptResponses(){let t=Array.from(this.responses.entries()).filter(([,e])=>e.mimeType.includes(`javascript`)||e.url.endsWith(`.js`)||e.url.includes(`.js?`)),n=[];for(let e=0;e<t.length;e+=this.JS_RESPONSE_CONCURRENCY){let r=t.slice(e,e+this.JS_RESPONSE_CONCURRENCY),i=await Promise.all(r.map(async([e,t])=>{let n=await this.getResponseBody(e);if(!n)return null;let r=n.base64Encoded?Buffer.from(n.body,`base64`).toString(`utf-8`):n.body;return{url:t.url,content:r,size:r.length,requestId:e}}));n.push(...i.filter(e=>e!==null))}return e.info(`Collected ${n.length} JavaScript responses`),n}clearRecords(){this.requests.clear(),this.responses.clear(),this.responseBodyCache.clear(),e.info(`Network records cleared`)}getStats(){let e={},t={},n={};for(let t of this.requests.values())e[t.method]=(e[t.method]||0)+1,t.type&&(n[t.type]=(n[t.type]||0)+1);for(let e of this.responses.values())t[e.status]=(t[e.status]||0)+1;return{totalRequests:this.requests.size,totalResponses:this.responses.size,byMethod:e,byStatus:t,byType:n}}async injectXHRInterceptor(n){if(!this.cdpSession)throw Error(`CDP session not initialized`);let r=t(this.MAX_INJECTED_RECORDS);n?.persistent?(await this.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:r}),e.info(`XHR interceptor injected (persistent)`)):(await this.cdpSession.send(`Runtime.evaluate`,{expression:r}),e.info(`XHR interceptor injected`))}async injectFetchInterceptor(t){if(!this.cdpSession)throw Error(`CDP session not initialized`);let r=n(this.MAX_INJECTED_RECORDS);t?.persistent?(await this.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:r}),e.info(`Fetch interceptor injected (persistent)`)):(await this.cdpSession.send(`Runtime.evaluate`,{expression:r}),e.info(`Fetch interceptor injected`))}async getXHRRequests(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=l(await this.cdpSession.send(`Runtime.evaluate`,{expression:`window.__getXHRRequests ? window.__getXHRRequests() : []`,returnByValue:!0}));return Array.isArray(e)?e.filter(e=>r(e)):[]}catch(t){return e.error(`Failed to get XHR requests:`,t),[]}}async getFetchRequests(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=l(await this.cdpSession.send(`Runtime.evaluate`,{expression:`window.__getFetchRequests ? window.__getFetchRequests() : []`,returnByValue:!0}));return Array.isArray(e)?e.filter(e=>r(e)):[]}catch(t){return e.error(`Failed to get Fetch requests:`,t),[]}}async clearInjectedBuffers(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=l(await this.cdpSession.send(`Runtime.evaluate`,{expression:`
144
- (() => {
145
- const xhrStore = Array.isArray(window.__xhrRequests)
146
- ? window.__xhrRequests
147
- : (typeof window.__getXHRRequests === 'function' ? window.__getXHRRequests() : null);
148
- const fetchStore = Array.isArray(window.__fetchRequests)
149
- ? window.__fetchRequests
150
- : (typeof window.__getFetchRequests === 'function' ? window.__getFetchRequests() : null);
151
-
152
- const xhrCleared = Array.isArray(xhrStore) ? xhrStore.length : 0;
153
- const fetchCleared = Array.isArray(fetchStore) ? fetchStore.length : 0;
154
-
155
- if (Array.isArray(xhrStore)) xhrStore.length = 0;
156
- if (Array.isArray(fetchStore)) fetchStore.length = 0;
157
-
158
- return { xhrCleared, fetchCleared };
159
- })()
160
- `,returnByValue:!0}));return r(e)?{xhrCleared:u(e.xhrCleared),fetchCleared:u(e.fetchCleared)}:{xhrCleared:0,fetchCleared:0}}catch(t){return e.error(`Failed to clear injected network buffers:`,t),{xhrCleared:0,fetchCleared:0}}}async resetInjectedInterceptors(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=l(await this.cdpSession.send(`Runtime.evaluate`,{expression:`
161
- (() => {
162
- let xhrReset = false;
163
- let fetchReset = false;
164
-
165
- if (window.__originalXMLHttpRequestForHook) {
166
- window.XMLHttpRequest = window.__originalXMLHttpRequestForHook;
167
- xhrReset = true;
168
- }
169
-
170
- if (window.__originalFetchForHook) {
171
- window.fetch = window.__originalFetchForHook;
172
- fetchReset = true;
173
- }
174
-
175
- if (Array.isArray(window.__xhrRequests)) window.__xhrRequests.length = 0;
176
- if (Array.isArray(window.__fetchRequests)) window.__fetchRequests.length = 0;
177
-
178
- window.__xhrInterceptorInstalled = false;
179
- window.__fetchInterceptorInstalled = false;
180
- delete window.__getXHRRequests;
181
- delete window.__getFetchRequests;
182
-
183
- return { xhrReset, fetchReset };
184
- })()
185
- `,returnByValue:!0}));return r(e)?{xhrReset:d(e.xhrReset,!1),fetchReset:d(e.fetchReset,!1)}:{xhrReset:!1,fetchReset:!1}}catch(t){return e.error(`Failed to reset injected network interceptors:`,t),{xhrReset:!1,fetchReset:!1}}}persistsAcrossContextSwitches(){return!1}toScopedRequestId(e){return this.identity.requestIdPrefix&&this.identity.requestIdPrefix.length>0?`${this.identity.requestIdPrefix}:${e}`:this.identity.sessionId&&this.identity.sessionId.length>0?`${this.identity.sessionId}:${e}`:e}toRawRequestId(e){let t=this.identity.requestIdPrefix;if(t&&e.startsWith(`${t}:`))return e.slice(t.length+1);let n=this.identity.sessionId;if(n&&e.startsWith(`${n}:`))return e.slice(n.length+1);let r=this.requests.get(e);if(r?.rawRequestId)return r.rawRequestId;let i=this.responses.get(e);return i?.rawRequestId?i.rawRequestId:e}};export{n,t as r,f as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{a as t,b as n,d as r,i,n as a,s as o,t as s}from"./Win32API-eUCF57l_.mjs";import{promises as c}from"node:fs";const l={CNT_CODE:32,CNT_INITIALIZED_DATA:64,CNT_UNINITIALIZED_DATA:128,MEM_EXECUTE:536870912,MEM_READ:1073741824,MEM_WRITE:2147483648},u={EXPORT:0,IMPORT:1,RESOURCE:2,EXCEPTION:3,IAT:12,DELAY_IMPORT:13};var d=class{async parseHeaders(e,t){let i=BigInt(t),a=n(e);try{let e=r(a,i,64),t=e.readUInt16LE(0);if(t!==23117)throw Error(`Invalid DOS header: expected 0x5A4D, got 0x${t.toString(16)}`);let n=e.readUInt32LE(60),o=r(a,i+BigInt(n),264),s=o.readUInt32LE(0);if(s!==17744)throw Error(`Invalid PE signature: expected 0x4550, got 0x${s.toString(16)}`);let c=o.readUInt16LE(4),l=o.readUInt16LE(6),u=o.readUInt32LE(8),d=o.readUInt16LE(22),f=o.readUInt16LE(24),p=f===523,m,h,g,_;return p?(h=o.readUInt32LE(40),m=o.readBigUInt64LE(48),g=o.readUInt32LE(80),_=o.readUInt32LE(132)):(h=o.readUInt32LE(40),m=BigInt(o.readUInt32LE(52)),g=o.readUInt32LE(80),_=o.readUInt32LE(116)),{dosHeader:{e_magic:t,e_lfanew:n},ntSignature:s,fileHeader:{machine:c,numberOfSections:l,timeDateStamp:u,characteristics:d},optionalHeader:{magic:f,imageBase:`0x${m.toString(16)}`,entryPoint:`0x${h.toString(16)}`,sizeOfImage:g,numberOfRvaAndSizes:_}}}finally{s(a)}}async listSections(e,t){let i=BigInt(t),a=n(e);try{let e=await this.readCoreHeaders(a,i),t=[];for(let n=0;n<e.numSections;n++){let o=e.firstSectionOffset+n*40,s=r(a,i+BigInt(o),40),c=s.indexOf(0),u=s.subarray(0,c>0&&c<=8?c:8).toString(`ascii`),d=s.readUInt32LE(8),f=s.readUInt32LE(12),p=s.readUInt32LE(16),m=s.readUInt32LE(36);t.push({name:u,virtualAddress:`0x${f.toString(16)}`,virtualSize:d,rawSize:p,characteristics:m,isExecutable:(m&l.MEM_EXECUTE)!==0,isWritable:(m&l.MEM_WRITE)!==0,isReadable:(m&l.MEM_READ)!==0})}return t}finally{s(a)}}async parseImports(e,t){let i=BigInt(t),a=n(e);try{let e=await this.readCoreHeaders(a,i),t=e.dataDirectories[u.IMPORT];if(!t||t.rva===0)return[];let n=[],o=t.rva;for(let t=0;t<500;t++){let t=r(a,i+BigInt(o),20),s=t.readUInt32LE(12);if(s===0)break;let c=r(a,i+BigInt(s),256),l=c.indexOf(0),u=c.subarray(0,l>0?l:256).toString(`ascii`),d=t.readUInt32LE(0)||t.readUInt32LE(16),f=this.readThunkArray(a,i,d,e.isPE32Plus);n.push({dllName:u,functions:f}),o+=20}return n}finally{s(a)}}async parseExports(e,t){let i=BigInt(t),a=n(e);try{let e=(await this.readCoreHeaders(a,i)).dataDirectories[u.EXPORT];if(!e||e.rva===0)return[];let t=r(a,i+BigInt(e.rva),40),n=t.readUInt32LE(24),o=t.readUInt32LE(28),s=t.readUInt32LE(32),c=t.readUInt32LE(36),l=t.readUInt32LE(16),d=[],f=r(a,i+BigInt(s),n*4),p=r(a,i+BigInt(c),n*2);for(let t=0;t<Math.min(n,2e3);t++){let n=f.readUInt32LE(t*4),s=p.readUInt16LE(t*2),c=r(a,i+BigInt(n),256),u=c.indexOf(0),m=c.subarray(0,u>0?u:256).toString(`ascii`),h=r(a,i+BigInt(o+s*4),4).readUInt32LE(0),g=null;if(h>=e.rva&&h<e.rva+e.size){let e=r(a,i+BigInt(h),256),t=e.indexOf(0);g=e.subarray(0,t>0?t:256).toString(`ascii`)}d.push({name:m,ordinal:l+s,rva:`0x${h.toString(16)}`,forwardedTo:g})}return d}finally{s(a)}}async detectInlineHooks(t,i){let a=n(t),o=[];try{let n=this.enumerateModulesInternal(a),s=i?n.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())):n;for(let n of s)try{let e=await c.readFile(n.path),i=await this.parseExports(t,n.base);for(let t of i){let i=parseInt(t.rva,16);if(i===0||t.forwardedTo)continue;let s=r(a,BigInt(n.base)+BigInt(i),16),c=this.rvaToFileOffset(e,i);if(c<0||c+16>e.length)continue;let l=e.subarray(c,c+16);if(!s.equals(l)){let e=this.classifyHook(s),r=this.decodeJumpTarget(s,BigInt(n.base)+BigInt(i));o.push({address:`0x${(BigInt(n.base)+BigInt(i)).toString(16)}`,moduleName:n.name,functionName:t.name,originalBytes:Array.from(l),currentBytes:Array.from(s),hookType:e,jumpTarget:r})}}}catch(t){e.debug(`Hook check skipped for ${n.name}: ${t}`)}}finally{s(a)}return o}async analyzeSections(e,t){let n=await this.listSections(e,t),r=[];for(let e of n)e.isReadable&&e.isWritable&&e.isExecutable?r.push({sectionName:e.name,anomalyType:`rwx`,severity:`high`,details:`Section ${e.name} has Read+Write+Execute permissions — unusual and potentially malicious`}):e.isWritable&&e.isExecutable?r.push({sectionName:e.name,anomalyType:`writable_code`,severity:`high`,details:`Section ${e.name} is writable and executable — code may be self-modifying or packed`}):e.isExecutable&&!e.name.startsWith(`.text`)&&!e.name.startsWith(`.code`)&&(e.characteristics&l.CNT_INITIALIZED_DATA)!==0&&r.push({sectionName:e.name,anomalyType:`executable_data`,severity:`medium`,details:`Data section ${e.name} has execute permission`});return r}async readCoreHeaders(e,t){let n=r(e,t,64).readUInt32LE(60),i=r(e,t+BigInt(n),264),a=i.readUInt16LE(6),o=i.readUInt16LE(20),s=i.readUInt16LE(24)===523,c=s?i.readUInt32LE(132):i.readUInt32LE(116),l=s?136:120,u=[];for(let e=0;e<Math.min(c,16);e++){let t=l+e*8;t+8<=i.length&&u.push({rva:i.readUInt32LE(t),size:i.readUInt32LE(t+4)})}return{numSections:a,isPE32Plus:s,firstSectionOffset:n+4+20+o,dataDirectories:u}}readThunkArray(e,t,n,i){let a=i?8:4,o=[],s=i?9223372036854775808n:2147483648n;for(let c=0;c<2e3;c++){let l=r(e,t+BigInt(n+c*a),a),u=i?l.readBigUInt64LE(0):BigInt(l.readUInt32LE(0));if(u===0n)break;if((u&s)!==0n)o.push({name:`Ordinal#${Number(u&65535n)}`,ordinal:Number(u&65535n),hint:0,thunkRva:`0x${(n+c*a).toString(16)}`});else{let i=Number(u),s=r(e,t+BigInt(i),258),l=s.readUInt16LE(0),d=s.indexOf(0,2),f=s.subarray(2,d>2?d:258).toString(`ascii`);o.push({name:f,ordinal:0,hint:l,thunkRva:`0x${(n+c*a).toString(16)}`})}}return o}enumerateModulesInternal(n){let r=[];try{let{modules:e,count:s}=a(n);for(let a=0;a<s;a++){let s=e[a],c=i(n,s),l=o(n,s),u=t(n,s)??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}classifyHook(e){return e[0]===233?`jmp_rel32`:e[0]===255&&e[1]===37?`jmp_abs64`:e[0]===104&&e[5]===195?`push_ret`:`unknown`}decodeJumpTarget(e,t){if(e[0]===233){let n=e.readInt32LE(1);return`0x${(t+5n+BigInt(n)).toString(16)}`}return e[0]===255&&e[1]===37&&e.length>=14?`0x${e.readBigUInt64LE(6).toString(16)}`:e[0]===104?`0x${e.readUInt32LE(1).toString(16)}`:`0x0`}};const f=new d;export{d as PEAnalyzer,f as peAnalyzer};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{hn as t,mn as n}from"./constants-BYj8Xek8.mjs";import{setTimeout as r}from"node:timers/promises";const i=[`load`,`domcontentloaded`,`networkidle`,`commit`];function a(e=`networkidle`){return e===`networkidle`?`networkidle2`:e===`commit`?`load`:e}var o=class{collector;pagePersistentScripts=new WeakMap;constructor(e){this.collector=e}getChromeNavigationWaitUntil(e=`networkidle`){return a(e)}async getBrowser(){return this.collector.getBrowser()}hasAttachedTargetSession(){return this.collector.getAttachedTargetSession()!==null}getAttachedTargetInfo(){return this.collector.getAttachedTargetInfo()}async evaluateAttachedTarget(e,t){return await this.collector.getBrowserTargetSessionManager().evaluate(e,t)}async addScriptToAttachedTarget(e){return await this.collector.getBrowserTargetSessionManager().addScriptToEvaluateOnNewDocument(e)}async addPersistentScriptToManagedTargets(e,t){return await this.collector.getBrowserTargetSessionManager().registerPersistentScript(e,t)}async addScriptToPageEvaluateOnNewDocument(e,t){let n=await this.collector.getActivePage();if(!t?.id)return await u(n,e);let r=this.getPagePersistentScriptRegistry(n),i=r.get(t.id);if(i?.source===e)return{identifier:i.identifier,reused:!0};i?.identifier&&await n.removeScriptToEvaluateOnNewDocument(i.identifier).catch(()=>{});let a=await u(n,e);return r.set(t.id,{source:e,identifier:a.identifier}),a}getPagePersistentScriptRegistry(e){let t=this.pagePersistentScripts.get(e);return t||(t=new Map,this.pagePersistentScripts.set(e,t)),t}async navigate(t,n){let r=await this.collector.getActivePage(),i=Date.now();await r.goto(t,{waitUntil:this.getChromeNavigationWaitUntil(n?.waitUntil),timeout:n?.timeout||3e4});let a=Date.now()-i,o=await r.title(),s=r.url();return e.info(`Navigated to: ${t}`),{url:s,title:o,loadTime:a}}async reload(t){await(await this.collector.getActivePage()).reload({waitUntil:this.getChromeNavigationWaitUntil(t?.waitUntil),timeout:t?.timeout||3e4}),e.info(`Page reloaded`)}async goBack(t=1e4){await(await this.collector.getActivePage()).goBack({waitUntil:`domcontentloaded`,timeout:t}),e.info(`Navigated back`)}async goForward(t=1e4){await(await this.collector.getActivePage()).goForward({waitUntil:`domcontentloaded`,timeout:t}),e.info(`Navigated forward`)}async click(t,n,r){let i=await this.collector.getActivePage(),a=await this.resolveFrame(i,r),o=n?.timeout,s={button:n?.button||`left`,clickCount:n?.clickCount||1,delay:n?.delay};if(n?.offset&&(s.offset=n.offset),typeof o==`number`&&Number.isFinite(o)&&o>0){i.setDefaultTimeout(o);try{await a.click(t,s)}finally{i.setDefaultTimeout(this.collector.config?.timeout??3e4)}}else await a.click(t,s);e.info(`Clicked: ${t}${r?.frameUrl||r?.frameSelector?` (in frame)`:``}`)}async type(t,n,r,i){let a=await this.collector.getActivePage();await(await this.resolveFrame(a,i)).type(t,n,{delay:r?.delay}),e.info(`Typed into ${t}: ${n.substring(0,20)}...`)}async select(t,n,r){let i=await this.collector.getActivePage();await(await this.resolveFrame(i,r)).select(t,...n),e.info(`Selected in ${t}: ${n.join(`, `)}`)}async hover(t,n){let r=await this.collector.getActivePage();await(await this.resolveFrame(r,n)).hover(t),e.info(`Hovered: ${t}`)}async scroll(t){await(await this.collector.getActivePage()).evaluate(e=>{window.scrollTo(e.x||0,e.y||0)},t),e.info(`Scrolled to: x=${t.x||0}, y=${t.y||0}`)}async waitForSelector(t,n){try{let r=await this.collector.getActivePage();await r.waitForSelector(t,{timeout:n||3e4});let i=await r.evaluate(e=>{let t=document.querySelector(e);return t?{tagName:t.tagName.toLowerCase(),id:t.id||void 0,className:t.className||void 0,textContent:t.textContent?.trim().substring(0,100)||void 0,attributes:Array.from(t.attributes).reduce((e,t)=>(e[t.name]=t.value,e),{})}:null},t);return e.info(`Selector appeared: ${t}`),{success:!0,element:i,message:`Selector appeared: ${t}`}}catch(n){return e.error(`waitForSelector timeout for ${t}:`,n),{success:!1,message:`Timeout waiting for selector: ${t}`}}}async waitForNavigation(t){await(await this.collector.getActivePage()).waitForNavigation({waitUntil:this.getChromeNavigationWaitUntil(),timeout:t||3e4}),e.info(`Navigation completed`)}async evaluate(t,n){let r=await this.collector.getActivePage();if(n?.frameUrl||n?.frameSelector){let i=await c(r,await this.resolveFrame(r,n),t);return e.info(`JavaScript executed (in frame)`),i}let i=await l(r,t);return e.info(`JavaScript executed`),i}async resolveFrame(e,t){if(!t)return e.mainFrame();if(t.frameUrl){let n=e.frames(),r=n.find(e=>e.url().includes(t.frameUrl));if(!r){let e=n.map(e=>e.url()).filter(e=>e&&e!==`about:blank`);throw Error(`No frame matching URL substring "${t.frameUrl}". Available frames: ${e.join(`, `)||`(none)`}`)}return r}if(t.frameSelector){await e.waitForSelector(t.frameSelector,{timeout:n}).catch(()=>null);let r=await e.$(t.frameSelector);if(!r)throw Error(`No element found for iframe selector: ${t.frameSelector}`);let i=await r.contentFrame();if(!i)throw Error(`Element "${t.frameSelector}" exists but has no content frame (not an iframe or not yet loaded).`);return i}return e.mainFrame()}async listFrames(){let e=await this.collector.getActivePage(),t=e.mainFrame(),n=e.frames(),r=d(t.url());return n.map(e=>{let n=e._id||e.url(),i=e.parentFrame(),a=i?i._id||i.url():null,o=d(e.url());return{frameId:n,url:e.url(),name:e.name()||``,parentFrameId:a,parentUrl:i?.url()||null,isMainFrame:e===t,crossOrigin:!!(e!==t&&o&&r&&o!==r)}})}async getURL(){return(await this.collector.getActivePage()).url()}async getTitle(){return await(await this.collector.getActivePage()).title()}async getContent(){return await(await this.collector.getActivePage()).content()}async screenshot(t){if(this.hasAttachedTargetSession()){let n=this.collector.getBrowserTargetSessionManager();if(n){let r=await n.captureScreenshot({format:t?.type??`png`,quality:t?.quality,clip:t?.clip});return e.info(`Screenshot taken via CDP${t?.path?`: ${t.path}`:``}`),r}}let n=await this.collector.getActivePage(),r={path:t?.path,type:t?.type||`png`,quality:t?.quality,fullPage:t?.fullPage||!1};t?.clip&&(r.clip=t.clip,r.fullPage=!1);let i=await n.screenshot(r);return e.info(`Screenshot taken${t?.path?`: ${t.path}`:``}`),i}async getPerformanceMetrics(){let t=await l(await this.collector.getActivePage(),()=>{let e=performance.getEntriesByType(`navigation`)[0];return{domContentLoaded:e.domContentLoadedEventEnd-e.domContentLoadedEventStart,loadComplete:e.loadEventEnd-e.loadEventStart,dns:e.domainLookupEnd-e.domainLookupStart,tcp:e.connectEnd-e.connectStart,request:e.responseStart-e.requestStart,response:e.responseEnd-e.responseStart,total:e.loadEventEnd-e.fetchStart,resources:performance.getEntriesByType(`resource`).length}});return e.info(`Performance metrics retrieved`),t}async injectScript(t){await l(await this.collector.getActivePage(),e=>{let t=document.createElement(`script`);t.textContent=e,document.head.appendChild(t)},t),e.info(`Script injected into page`)}async setCookies(t){await(await this.collector.getActivePage()).setCookie(...t),e.info(`Set ${t.length} cookies`)}async getCookies(){let t=await(await this.collector.getActivePage()).cookies();return e.info(`Retrieved ${t.length} cookies`),t}async clearCookies(){if(this.collector.isExistingBrowserConnection())throw Error(`Cannot clear cookies on an attached browser. This operation is restricted to browsers launched by jshook to prevent accidental modification of user data.`);let t=await this.collector.getActivePage(),n=await t.cookies();await t.deleteCookie(...n),e.info(`All cookies cleared`)}async setViewport(t,n){await(await this.collector.getActivePage()).setViewport({width:t,height:n}),e.info(`Viewport set to ${t}x${n}`)}async emulateDevice(t){let n=await this.collector.getActivePage(),r={iPhone:{viewport:{width:375,height:812,isMobile:!0},userAgent:`Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15`},iPad:{viewport:{width:768,height:1024,isMobile:!0},userAgent:`Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15`},Android:{viewport:{width:360,height:640,isMobile:!0},userAgent:`Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/91.0.4472.120`}},i=String(t||``).trim().toLowerCase(),a=null;if(i.includes(`iphone`)?a=`iPhone`:i.includes(`ipad`)?a=`iPad`:(i.includes(`android`)||i.includes(`pixel`))&&(a=`Android`),!a)throw Error(`Unsupported device "${t}". Supported values include: iPhone, iPad, Android (aliases like "iPhone 13" are accepted).`);let o=r[a];return await n.setViewport(o.viewport),await n.setUserAgent(o.userAgent),e.info(`Emulating ${a} (input: ${t})`),a}async waitForNetworkIdle(n=t){await(await this.collector.getActivePage()).waitForNetworkIdle({timeout:n}),e.info(`Network is idle`)}async getLocalStorage(){let t=await(await this.collector.getActivePage()).evaluate(()=>{let e={};for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&(e[n]=localStorage.getItem(n)||``)}return e});return e.info(`Retrieved ${Object.keys(t).length} localStorage items`),t}async setLocalStorage(t,n){await(await this.collector.getActivePage()).evaluate((e,t)=>{localStorage.setItem(e,t)},t,n),e.info(`Set localStorage: ${t}`)}async clearLocalStorage(){if(this.collector.isExistingBrowserConnection())throw Error(`Cannot clear localStorage on an attached browser. This operation is restricted to browsers launched by jshook to prevent accidental modification of user data.`);await(await this.collector.getActivePage()).evaluate(()=>{localStorage.clear()}),e.info(`LocalStorage cleared`)}async pressKey(t){await(await this.collector.getActivePage()).keyboard.press(t),e.info(`Pressed key: ${t}`)}async uploadFile(t,n,r){let i=await this.collector.getActivePage(),a=await(r?await this.resolveFrame(i,r):i).$(t);if(!a)throw Error(`File input not found: ${t}`);let o=Array.isArray(n)?n:[n];await a.uploadFile(...o),e.info(`File uploaded: ${o.join(`, `)}`)}async getAllLinks(){let t=await(await this.collector.getActivePage()).evaluate(()=>{let e=document.querySelectorAll(`a[href]`),t=[];for(let n=0;n<e.length;n++){let r=e[n];t.push({text:r.textContent?.trim()||``,href:r.href})}return t});return e.info(`Found ${t.length} links`),t}async getPage(){return await this.collector.getActivePage()}};async function s(e,t=500){let n=new AbortController,i=r(t,void 0,{signal:n.signal}).then(()=>{throw Error(`cdp_unreachable`)}),a=null;try{a=await Promise.race([e.createCDPSession(),i]),await Promise.race([a.send(`Runtime.evaluate`,{expression:`1`,returnByValue:!0}),i])}catch(e){throw(e instanceof Error?e.message:String(e))===`cdp_unreachable`?Error(`CDP session unresponsive — the debugger may be blocking page evaluation. Call debugger_lifecycle({ action: 'disable' })() before this tool, or run it before debugger_lifecycle({ action: 'enable' })().`,{cause:e}):e}finally{if(n.abort(),a)try{await a.detach()}catch{}}}async function c(e,t,n,...r){let i=3e4;await s(e);let a;try{return await Promise.race([t.evaluate(n,...r),new Promise((e,t)=>{a=setTimeout(()=>t(Error(`page.evaluate timed out after ${i}ms`)),i)})])}finally{a!==void 0&&clearTimeout(a)}}async function l(e,t,...n){return c(e,e,t,...n)}async function u(e,t,...n){let r=3e4;return await s(e),Promise.race([e.evaluateOnNewDocument(t,...n),new Promise((e,t)=>setTimeout(()=>t(Error(`page.evaluateOnNewDocument timed out after ${r}ms`)),r))])}function d(e){try{return new URL(e).origin}catch{return null}}async function f(e,t){let n=3e4;return Promise.race([e.coverage.startJSCoverage(t),new Promise((e,t)=>setTimeout(()=>t(Error(`coverage.startJSCoverage timed out after ${n}ms`)),n))])}async function p(e,t){let n=3e4;return Promise.race([e.coverage.startCSSCoverage(t),new Promise((e,t)=>setTimeout(()=>t(Error(`coverage.startCSSCoverage timed out after ${n}ms`)),n))])}async function m(e){let t=3e4;return Promise.race([e.coverage.stopJSCoverage(),new Promise((e,n)=>setTimeout(()=>n(Error(`coverage.stopJSCoverage timed out after ${t}ms`)),t))])}async function h(e){let t=3e4;return Promise.race([e.coverage.stopCSSCoverage(),new Promise((e,n)=>setTimeout(()=>n(Error(`coverage.stopCSSCoverage timed out after ${t}ms`)),t))])}export{m as a,i as c,h as i,a as l,p as n,u as o,f as r,l as s,o as t};
@@ -1 +0,0 @@
1
- import{_n as e,gn as t,vn as n,yn as r}from"./constants-BYj8Xek8.mjs";import{t as i}from"./factory-CKr4fAE1.mjs";import{t as a}from"./NativeMemoryManager.impl-DniBe2wf.mjs";import{n as o,t as s}from"./formatAddress-vLA_hOJt.mjs";import{randomUUID as c}from"node:crypto";var l=class{providerCache=null;get provider(){return this.providerCache||=i(),this.providerCache}set provider(e){this.providerCache=e}async scan(r,i,a){let c=performance.now(),l=Math.min(a?.maxDepth??4,t),u=a?.maxOffset??e,d=a?.maxResults??n,f=a?.alignment??8,p=a?.staticOnly??!1,m=o(i),h=this.provider.openProcess(r,!1);try{let e=await this.getModuleMap(r),t=[],n=new Set([m]);for(let e=0;e<l&&n.size!==0;e++){let e=this.scanLevel(h,n,u,f,a?.modules?{modules:a.modules}:void 0);if(e.length===0)break;t.push(e),n=new Set;for(let t of e)if(n.add(t.pointerAddress),n.size>5e4)break}let i=this.buildChains(t,m,e,d,p),o=`${(performance.now()-c).toFixed(1)}ms`;return{pid:r,targetAddress:s(m),chains:i,totalFound:i.length,maxDepth:l,elapsed:o}}finally{this.provider.closeProcess(h)}}async validateChain(e,t){let n=this.provider.openProcess(e,!1);try{let e=o(t.baseAddress);for(let r=0;r<t.links.length;r++){let i=t.links[r],a;try{a=this.provider.readMemory(n,e,8).data.readBigUInt64LE(0)}catch{return{chainId:t.id,isValid:!1,resolvedAddress:null,expectedAddress:t.targetAddress,brokenAt:r}}e=a+BigInt(i.offset)}let r=s(e),i=o(t.targetAddress),a=e===i;return{chainId:t.id,isValid:a,resolvedAddress:r,expectedAddress:t.targetAddress,brokenAt:a?void 0:t.links.length-1}}finally{this.provider.closeProcess(n)}}async validateChains(e,t){let n=[];for(let r of t)n.push(await this.validateChain(e,r));return n}async resolveChain(e,t){let n=this.provider.openProcess(e,!1);try{let e=o(t.baseAddress);for(let r of t.links){let t;try{t=this.provider.readMemory(n,e,8).data.readBigUInt64LE(0)}catch{return null}e=t+BigInt(r.offset)}return s(e)}finally{this.provider.closeProcess(n)}}exportChains(e){return JSON.stringify(e,null,2)}importChains(e){let t=JSON.parse(e);if(!Array.isArray(t))throw Error(`Invalid chain data: expected array`);return t}async getModuleMap(e){let t=new Map;try{let n=await a.enumerateModules(e);if(n.success&&n.modules)for(let e of n.modules){let n=o(e.baseAddress);t.set(e.name.toLowerCase(),{name:e.name,base:n,size:e.size})}}catch{}return t}resolveToModule(e,t){for(let n of t.values())if(e>=n.base&&e<n.base+BigInt(n.size))return{module:n.name,offset:Number(e-n.base)};return null}scanLevel(e,t,n,i,a){let o=[],s=r,c=Array.from(t).toSorted((e,t)=>e<t?-1:+(e>t));if(c.length===0)return o;let l=BigInt(n),u=c[0]-l,d=c[c.length-1]+l,f=0n,p=BigInt(`0x7FFFFFFF0000`);for(;f<p;){let t=this.provider.queryRegion(e,f);if(!t)break;let r=t.size;if(t.isReadable&&r>0&&r<=2**53-1){let a=t.baseAddress;for(let t=0;t<r&&o.length<1e5;t+=s){let f=Math.min(s,r-t),p=a+BigInt(t),m;try{m=this.provider.readMemory(e,p,f).data}catch{break}for(let e=0;e<=m.length-8;e+=i){let t=m.readBigUInt64LE(e);if(t<u||t>d)continue;let r=t-l,i=t+l,a=0,s=c.length;for(;a<s;){let e=a+s>>>1;c[e]<r?a=e+1:s=e}for(let r=a;r<c.length&&c[r]<=i;r++){let i=c[r];if(Number(t>i?t-i:i-t)<=n){let n=p+BigInt(e),r=Number(i-t);o.push({pointerAddress:n,pointsTo:t,offset:r});break}}}}}f=t.baseAddress+BigInt(t.size)}return o}buildChains(t,n,r,i,a){if(t.length===0)return[];let o=[],l=s(n);for(let n=0;n<t.length&&o.length<i;n++){let u=t[n];if(n===0)for(let e of u){if(o.length>=i)break;let t=s(e.pointerAddress),n=this.resolveToModule(e.pointerAddress,r),u=n!==null;if(a&&!u)continue;let d={address:t,module:n?.module,moduleOffset:n?.offset,offset:e.offset};o.push({id:c(),links:[d],targetAddress:l,baseAddress:t,isStatic:u,depth:1,lastValidated:Date.now(),isValid:!0})}else{let d=t[n-1],f=new Map;for(let e of d)f.set(e.pointerAddress,e);let p=BigInt(e);for(let e of u){if(o.length>=i)break;let t;if(t=f.get(e.pointsTo),!t){for(let n of d)if((e.pointsTo>n.pointerAddress?e.pointsTo-n.pointerAddress:n.pointerAddress-e.pointsTo)<=p){t=n;break}}if(!t)continue;let n=s(e.pointerAddress),u=this.resolveToModule(e.pointerAddress,r),m=u!==null;if(a&&!m)continue;let h=[{address:n,module:u?.module,moduleOffset:u?.offset,offset:Number(t.pointerAddress-e.pointsTo)},{address:s(t.pointerAddress),offset:t.offset}];o.push({id:c(),links:h,targetAddress:l,baseAddress:n,isStatic:m,depth:h.length,lastValidated:Date.now(),isValid:!0})}}}return o.sort((e,t)=>e.isStatic===t.isStatic?e.depth-t.depth:e.isStatic?-1:1),o.slice(0,i)}};const u=new l;export{l as PointerChainEngine,u as pointerChainEngine};
@@ -1 +0,0 @@
1
- import{t as e}from"./ToolError-DWU_z7gp.mjs";var t=class extends e{constructor(e){super(`PREREQUISITE`,e),this.name=`PrerequisiteError`}};export{t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{st as t}from"./constants-BYj8Xek8.mjs";const n=new class{processes=new Set;register(e){e&&(this.processes.add(e),`kill`in e?e.once(`close`,()=>this.unregister(e)):`terminate`in e&&(typeof e.once==`function`?e.once(`exit`,()=>this.unregister(e)):typeof e.on==`function`&&e.on(`exit`,()=>this.unregister(e))))}unregister(e){e&&this.processes.delete(e)}async terminateAll(){if(this.processes.size===0)return;e.debug(`[ProcessRegistry] Attempting to terminate ${this.processes.size} active processes/workers...`);let n=[];for(let r of this.processes)`terminate`in r?n.push(r.terminate().then(()=>{this.processes.delete(r)}).catch(t=>{e.warn(`[ProcessRegistry] Error terminating worker: ${t.message}`)})):`kill`in r&&n.push(new Promise(n=>{if(r.killed||r.exitCode!==null||r.signalCode!==null)return this.processes.delete(r),n();r.kill(`SIGTERM`);let i=!1,a=()=>{i||(i=!0,this.processes.delete(r),n())};r.once(`exit`,a),r.once(`close`,a),setTimeout(()=>{if(!i&&!r.killed&&r.exitCode===null){e.debug(`[ProcessRegistry] Force killing child process PID ${r.pid}`);try{r.kill(`SIGKILL`)}catch{}a()}},t).unref()}));await Promise.race([Promise.all(n),new Promise(e=>setTimeout(e,t+1e3).unref())]),this.processes.clear(),e.debug(`[ProcessRegistry] Termination sweep complete.`)}};export{n as t};
@@ -1,2 +0,0 @@
1
- import{t as e}from"./chunk-C_pMuVsO.mjs";var t=e({ReverseEvidenceGraph:()=>i});let n=1;function r(e){return`${e}-${n++}`}var i=class{nodes=new Map;edges=new Map;eventBus;isDirty=!1;mutationSeq=0;lastPersistedSeq=0;persistNotifier;setEventBus(e){this.eventBus=e}setPersistNotifier(e){this.persistNotifier=e}markDirty(){this.isDirty=!0,this.mutationSeq++,this.persistNotifier?.()}commit(){this.isDirty&&this.eventBus&&(this.isDirty=!1,this.eventBus.emit(`evidence:updated`,{timestamp:new Date().toISOString(),reason:`Tool execution committed changes`}))}addNode(e,t,n={}){let i={id:r(e),type:e,label:t,metadata:n,createdAt:Date.now()};return this.nodes.set(i.id,i),this.markDirty(),i}addEdge(e,t,n,i){if(!this.nodes.has(e))throw Error(`Source node "${e}" not found`);if(!this.nodes.has(t))throw Error(`Target node "${t}" not found`);let a={id:r(`edge`),source:e,target:t,type:n,metadata:i};return this.edges.set(a.id,a),this.markDirty(),a}getNode(e){return this.nodes.get(e)}removeNode(e){if(!this.nodes.has(e))return!1;this.nodes.delete(e);for(let[t,n]of this.edges)(n.source===e||n.target===e)&&this.edges.delete(t);return this.markDirty(),!0}getEdgesFrom(e){return[...this.edges.values()].filter(t=>t.source===e)}getEdgesTo(e){return[...this.edges.values()].filter(t=>t.target===e)}get nodeCount(){return this.nodes.size}get edgeCount(){return this.edges.size}getEvidenceChain(e,t=`forward`){if(!this.nodes.get(e))return[];let n=new Set,r=[e],i=[];for(;r.length>0;){let e=r.shift();if(n.has(e))continue;n.add(e);let a=this.nodes.get(e);a&&i.push(a);let o=t===`forward`?this.getEdgesFrom(e):this.getEdgesTo(e);for(let e of o){let i=t===`forward`?e.target:e.source;n.has(i)||r.push(i)}}return i}queryByUrl(e){let t=[...this.nodes.values()].filter(t=>t.type===`request`&&typeof t.metadata.url==`string`||typeof t.metadata.url==`string`?t.metadata.url.includes(e):!1),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}queryByFunction(e){let t=[...this.nodes.values()].filter(t=>t.type===`function`&&typeof t.metadata.functionName==`string`?t.metadata.functionName.includes(e):!!(t.label.includes(e)&&(t.type===`function`||t.type===`breakpoint-hook`))),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}queryByScriptId(e){let t=[...this.nodes.values()].filter(t=>t.type===`script`&&t.metadata.scriptId===e),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}exportJson(){return{version:1,nodes:[...this.nodes.values()],edges:[...this.edges.values()],exportedAt:new Date().toISOString()}}exportMarkdown(){let e=[];e.push(`# Reverse Evidence Graph Report`),e.push(``),e.push(`**Exported:** ${new Date().toISOString()}`),e.push(`**Nodes:** ${this.nodes.size} | **Edges:** ${this.edges.size}`),e.push(``);let t=new Map;for(let e of this.nodes.values()){let n=t.get(e.type)??[];n.push(e),t.set(e.type,n)}for(let n of[`request`,`initiator-stack`,`script`,`function`,`breakpoint-hook`,`captured-data`,`replay-artifact`,`v8-heap-object`,`v8-hidden-class`,`network-request`,`network-response`,`canvas-scene-node`,`canvas-render-node`,`skia-draw-call`,`syscall-event`,`mojo-message`,`mojo-interface`,`binary-symbol`,`binary-function`,`binary-module`,`proto-message`,`proto-state`]){let r=t.get(n);if(!(!r||r.length===0)){e.push(`## ${n} (${r.length})`),e.push(``);for(let t of r){e.push(`### ${t.label}`),e.push(`- **ID:** \`${t.id}\``),e.push(`- **Created:** ${new Date(t.createdAt).toISOString()}`);let n=Object.keys(t.metadata);if(n.length>0)for(let r of n){let n=t.metadata[r],i=typeof n==`string`?n:JSON.stringify(n);e.push(`- **${r}:** ${i}`)}let r=this.getEdgesFrom(t.id),i=this.getEdgesTo(t.id);r.length>0&&e.push(`- **→ Out:** ${r.map(e=>`${e.type} → \`${e.target}\``).join(`, `)}`),i.length>0&&e.push(`- **← In:** ${i.map(e=>`\`${e.source}\` ${e.type} →`).join(`, `)}`),e.push(``)}}}return e.join(`
2
- `)}getSnapshotSeq(){return this.mutationSeq}getLastPersistedSeq(){return this.lastPersistedSeq}markPersisted(){this.lastPersistedSeq=this.mutationSeq}isPersistDirty(){return this.mutationSeq!==this.lastPersistedSeq}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),graph:this.exportJson()}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1||!t.graph)return;let{nodes:n,edges:r}=t.graph;this.nodes.clear(),this.edges.clear();for(let e of n)this.nodes.set(e.id,e);for(let e of r)this.edges.set(e.id,e);this.mutationSeq=n.length+r.length,this.lastPersistedSeq=this.mutationSeq,this.isDirty=!1}};export{t};
@@ -1,7 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{t}from"./matchesWildcardPattern-BAG6LvX5.mjs";import{setImmediate as n}from"node:timers/promises";const r=e=>e instanceof Error?e.message:String(e),i=e=>typeof e==`object`&&e?e:null,a=e=>typeof e==`function`?e:null,o=(e,t)=>{let n=i(e),r=n?.default;return a(i(r)?.default)??a(r)??a(n?.[t])??a(e)};async function s(t,n,i,a={}){let{maxDepth:s=3,maxSize:c=500,includeComments:l=!0}=a,u=await t.getScriptSource(n);if(!u?.source)throw Error(`Script not found: ${n}`);let d,f,p,m;try{d=await import(`@babel/parser`);let e=o(await import(`@babel/traverse`),`traverse`);if(typeof e!=`function`)throw Error(`Invalid @babel/traverse export shape`);f=e;let t=o(await import(`@babel/generator`),`generate`);if(typeof t!=`function`)throw Error(`Invalid @babel/generator export shape`);p=t,m=await import(`@babel/types`)}catch(e){throw Error(`Failed to load Babel dependencies. Please install: npm install @babel/parser @babel/traverse @babel/generator @babel/types\nError: ${r(e)}`,{cause:e})}let h;try{h=d.parse(u.source,{sourceType:`unambiguous`,plugins:[`jsx`,`typescript`]})}catch(e){throw Error(`Failed to parse script ${n}: ${r(e)}`,{cause:e})}let g=new Map,_={},v=e=>{let t=new Set;return e.traverse({CallExpression(e){m.isIdentifier(e.node.callee)&&t.add(e.node.callee.name)}}),Array.from(t)};f(h,{FunctionDeclaration(e){let t=e.node.id?.name;if(!t)return;let n=p(e.node,{comments:l}).code,r=v(e);g.set(t,{name:t,code:n,startLine:e.node.loc?.start.line||0,endLine:e.node.loc?.end.line||0,dependencies:r,size:n.length}),_[t]=r},VariableDeclarator(e){if(m.isIdentifier(e.node.id)&&(m.isFunctionExpression(e.node.init)||m.isArrowFunctionExpression(e.node.init))){let t=e.node.id.name,n=p(e.node,{comments:l}).code,r=v(e);g.set(t,{name:t,code:n,startLine:e.node.loc?.start.line||0,endLine:e.node.loc?.end.line||0,dependencies:r,size:n.length}),_[t]=r}}});let y=new Set,b=[i],x=0;for(;b.length>0&&x<s;){let e=b.shift();if(y.has(e))continue;let t=g.get(e);if(t){y.add(e);for(let e of t.dependencies)!y.has(e)&&g.has(e)&&b.push(e);x++}}let S=Array.from(y).map(e=>g.get(e)).filter(Boolean),C=S.map(e=>e.code).join(`
2
-
3
- `),w=C.length;return w>c*1024&&e.warn(`Extracted code size (${(w/1024).toFixed(2)}KB) exceeds limit (${c}KB)`),e.info(`extractFunctionTree: ${i} - extracted ${S.length} functions (${(w/1024).toFixed(2)}KB)`),{mainFunction:i,code:C,functions:S,callGraph:_,totalSize:w,extractedCount:S.length}}var c=class r{collector;static SOURCE_LOAD_BATCH_SIZE=8;static SEARCH_LINE_YIELD_INTERVAL=250;static SEARCH_SCRIPT_YIELD_INTERVAL=10;cdpSession=null;scripts=new Map;scriptsByUrl=new Map;initialized=!1;initPromise;keywordIndex=new Map;scriptChunks=new Map;CHUNK_SIZE=100*1024;MAX_KEYWORD_INDEX_ENTRIES=5e4;CDP_HEALTH_PROBE_INTERVAL_MS=3e4;lastHealthProbeAt=0;constructor(e){this.collector=e}async init(){if(!this.initialized){if(this.initPromise)return this.initPromise;this.initPromise=this.doInit();try{return await this.initPromise}finally{this.initPromise=void 0}}}async doInit(){let t=await this.collector.getActivePage();this.cdpSession=await t.createCDPSession(),this.cdpSession.on(`Debugger.scriptParsed`,t=>{let n={scriptId:t.scriptId,url:t.url,startLine:t.startLine,startColumn:t.startColumn,endLine:t.endLine,endColumn:t.endColumn,sourceLength:t.length};this.scripts.set(t.scriptId,n),t.url&&(this.scriptsByUrl.has(t.url)||this.scriptsByUrl.set(t.url,[]),this.scriptsByUrl.get(t.url).push(n)),e.debug(`Script parsed: ${t.url||`inline`} (${t.scriptId})`)}),await this.cdpSession.send(`Debugger.enable`),this.initialized=!0,this.lastHealthProbeAt=Date.now(),e.info(`ScriptManager initialized`)}async loadScriptSourceInternal(t){if(t.source)return!0;try{let{scriptSource:e}=await this.cdpSession.send(`Debugger.getScriptSource`,{scriptId:t.scriptId});return t.source=e,t.sourceLength=e.length,this.buildKeywordIndex(t.scriptId,t.url,e),this.chunkScript(t.scriptId,e),!0}catch(n){return e.warn(`Failed to get source for script ${t.scriptId}:`,n),!1}}async enable(){return this.init()}async ensureCdpSession(){if(!this.cdpSession){await this.init();return}if(!this.initialized){await this.init();return}let t=Date.now();if(!(t-this.lastHealthProbeAt<this.CDP_HEALTH_PROBE_INTERVAL_MS))try{await Promise.race([this.cdpSession.send(`Runtime.evaluate`,{expression:`1`,returnByValue:!0}),new Promise((e,t)=>setTimeout(()=>t(Error(`session_unreachable`)),3e3))]),this.lastHealthProbeAt=t}catch{e.warn(`ScriptManager CDP session unresponsive (zombie), reinitializing...`),this.cdpSession=null,this.initialized=!1,this.lastHealthProbeAt=0,this.scripts.clear(),this.scriptsByUrl.clear(),this.keywordIndex.clear(),this.scriptChunks.clear(),await this.init()}}async getAllScripts(t=!1,i=1e3){await this.ensureCdpSession();let a=Array.from(this.scripts.values());a.length>i&&e.warn(`Found ${a.length} scripts, limiting to ${i}. Increase maxScripts parameter if needed.`);let o=a.slice(0,i);if(t){e.warn(`Loading source code for ${o.length} scripts. This may use significant memory.`);let t=0,i=0,a=o.filter(e=>!e.source);for(let s=0;s<a.length;s+=r.SOURCE_LOAD_BATCH_SIZE){let c=a.slice(s,s+r.SOURCE_LOAD_BATCH_SIZE),l=await Promise.allSettled(c.map(async n=>{await this.loadScriptSourceInternal(n)?(t++,t%10==0&&e.debug(`Loaded ${t}/${o.length} scripts...`)):i++}));for(let e of l)e.status===`rejected`&&i++;await n()}e.info(`getAllScripts: ${o.length} scripts (loaded: ${t}, failed: ${i})`)}else e.info(`getAllScripts: ${o.length} scripts (source not included)`);return o}async getScriptSource(n,r){if(!n&&!r)throw Error(`Either scriptId or url parameter must be provided`);await this.ensureCdpSession();let i;if(n)i=this.scripts.get(n);else if(r){for(let[e,n]of this.scriptsByUrl.entries())if(t(e,r)){i=n[0];break}}return i?!i.source&&!await this.loadScriptSourceInternal(i)?(e.error(`Failed to get script source for ${i.scriptId}`),null):(e.info(`getScriptSource: ${i.url||`inline`} (${i.sourceLength} bytes)`),i):(e.warn(`Script not found: ${n||r}`),null)}async findScriptsByUrl(n){await this.ensureCdpSession();let r=[];for(let[e,i]of this.scriptsByUrl.entries())t(e,n)&&r.push(...i);return e.info(`findScriptsByUrl: ${n} - found ${r.length} scripts`),r}clearCache(){this.clear()}async searchInScripts(t,i={}){await this.ensureCdpSession();let{isRegex:a=!1,caseSensitive:o=!1,contextLines:s=3,maxMatches:c=100}=i,l=a?new RegExp(t,o?`g`:`gi`):new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),o?`g`:`gi`),u=[],d=await this.getAllScripts(!0,500);for(let[e,t]of d.entries()){if(!t.source)continue;if(u.length>=c)break;let i=t.source.split(`
4
- `);for(let e=0;e<i.length;e++){let a=i[e];if(!a)continue;let o=Array.from(a.matchAll(l));for(let n of o){if(u.length>=c)break;let r=Math.max(0,e-s),o=Math.min(i.length-1,e+s),l=i.slice(r,o+1).join(`
5
- `);if(l.length>2e3){let e=n.index||0,t=Math.max(0,e-100),r=Math.min(a.length,e+100);l=(t>0?`...`:``)+a.substring(t,r)+(r<a.length?`...`:``)}u.push({scriptId:t.scriptId,url:t.url||`inline`,line:e+1,column:n.index||0,matchText:n[0],context:l})}(e+1)%r.SEARCH_LINE_YIELD_INTERVAL===0&&await n()}(e+1)%r.SEARCH_SCRIPT_YIELD_INTERVAL===0&&await n()}return e.info(`searchInScripts: "${t}" - found ${u.length} matches`),{keyword:t,totalMatches:u.length,matches:u}}async extractFunctionTree(e,t,n={}){return s(this,e,t,n)}clear(){this.scripts.clear(),this.scriptsByUrl.clear(),this.keywordIndex.clear(),this.scriptChunks.clear(),e.info(` ScriptManager cleared - ready for new website`)}async close(){if(this.initPromise=void 0,this.clear(),this.cdpSession){try{await this.cdpSession.send(`Debugger.disable`),await this.cdpSession.detach(),e.info(`CDP session closed`)}catch(t){e.warn(`Failed to close CDP session:`,t)}this.cdpSession=null}this.initialized=!1,e.info(` ScriptManager closed`)}getStats(){let e=0;for(let t of this.scriptChunks.values())e+=t.length;return{totalScripts:this.scripts.size,totalUrls:this.scriptsByUrl.size,indexedKeywords:this.keywordIndex.size,totalChunks:e}}buildKeywordIndex(t,n,r){let i=r.split(`
6
- `),a=/\b[a-zA-Z_$][a-zA-Z0-9_$]{2,}\b/g;for(let e=0;e<i.length;e++){let r=i[e];if(!r)continue;let o=Array.from(r.matchAll(a));for(let a of o){let o=a[0].toLowerCase(),s=Math.max(0,e-3),c=Math.min(i.length-1,e+3),l=i.slice(s,c+1).join(`
7
- `);if(l.length>1e3){let e=a.index||0,t=Math.max(0,e-50),n=Math.min(r.length,e+50);l=(t>0?`...`:``)+r.substring(t,n)+(n<r.length?`...`:``)}let u={scriptId:t,url:n,line:e+1,column:a.index||0,context:l};this.keywordIndex.has(o)||this.keywordIndex.set(o,[]),this.keywordIndex.get(o).push(u)}}if(e.debug(` Indexed ${this.keywordIndex.size} keywords for ${n}`),this.keywordIndex.size>this.MAX_KEYWORD_INDEX_ENTRIES){let t=this.keywordIndex.size-this.MAX_KEYWORD_INDEX_ENTRIES,n=0;for(let[e]of this.keywordIndex){if(n>=t)break;this.keywordIndex.delete(e),n++}e.debug(` Keyword index pruned ${n} entries (cap: ${this.MAX_KEYWORD_INDEX_ENTRIES})`)}}chunkScript(t,n){let r=[],i=0,a=0;for(;i<n.length;){let e=n.substring(i,i+this.CHUNK_SIZE);r.push({scriptId:t,chunkIndex:a,content:e,size:e.length}),i+=this.CHUNK_SIZE,a++}this.scriptChunks.set(t,r),e.debug(` Chunked script ${t} into ${r.length} chunks`)}getScriptChunk(e,t){let n=this.scriptChunks.get(e);if(!n||t>=n.length)return null;let r=n[t];return r?r.content:null}async searchInScriptsEnhanced(t,n={}){let{isRegex:r=!1,caseSensitive:i=!1,maxMatches:a=100}=n,o=i?t:t.toLowerCase(),s=[];if(r)return{...await this.searchInScripts(t,n),searchMethod:`regex`};for(let[e,t]of this.keywordIndex.entries()){if(e.includes(o)){for(let n of t)if(s.push({scriptId:n.scriptId,url:n.url,line:n.line,column:n.column,matchText:e,context:n.context}),s.length>=a)break}if(s.length>=a)break}return e.info(` Enhanced search (indexed) found ${s.length} matches for "${t}"`),{keyword:t,totalMatches:s.length,matches:s,searchMethod:`indexed`}}};export{c as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-sBC6IdRT.mjs";import{t}from"./ToolCatalog-CYdD9F5f.mjs";const n={endpoint:null,selectedIndex:null,selectedUrl:null,selectedTitle:null,selectedTargetId:null,browserPid:null,rendererPid:null,attachedAt:null};var r=class{dirty=!1;persistedRevision=0;revision=0;pendingActivatedDomains=new Set;pendingDomainTtls=new Map;browserAttach={...n};toolCoverage=new Map;markPersisted(){this.persistedRevision=this.revision,this.dirty=!1}isPersistDirty(){return this.dirty||this.revision!==this.persistedRevision}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),activatedDomains:[...this.pendingActivatedDomains].toSorted(),domainTtls:Object.fromEntries([...this.pendingDomainTtls.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,{ttlMinutes:t.ttlMinutes,toolNames:[...t.toolNames]}])),browserAttach:{...this.browserAttach},toolCoverage:Object.fromEntries([...this.toolCoverage.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,{...t,lastArgsKeys:[...t.lastArgsKeys]}]))}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1)return;if(this.pendingActivatedDomains=new Set(Array.isArray(t.activatedDomains)?t.activatedDomains.filter(e=>typeof e==`string`):[]),this.pendingDomainTtls=new Map,t.domainTtls&&typeof t.domainTtls==`object`)for(let[e,n]of Object.entries(t.domainTtls)){if(!n||typeof n!=`object`)continue;let t=n,r=Number(t.ttlMinutes),i=Array.isArray(t.toolNames)?t.toolNames.filter(e=>typeof e==`string`):[];Number.isFinite(r)&&this.pendingDomainTtls.set(e,{ttlMinutes:r,toolNames:i})}let r=t.browserAttach;if(this.browserAttach=r&&typeof r==`object`?{endpoint:typeof r.endpoint==`string`?r.endpoint:null,selectedIndex:typeof r.selectedIndex==`number`&&Number.isInteger(r.selectedIndex)?r.selectedIndex:null,selectedUrl:typeof r.selectedUrl==`string`?r.selectedUrl:null,selectedTitle:typeof r.selectedTitle==`string`?r.selectedTitle:null,selectedTargetId:typeof r.selectedTargetId==`string`?r.selectedTargetId:null,browserPid:typeof r.browserPid==`number`&&Number.isInteger(r.browserPid)?r.browserPid:null,rendererPid:typeof r.rendererPid==`number`&&Number.isInteger(r.rendererPid)?r.rendererPid:null,attachedAt:typeof r.attachedAt==`string`?r.attachedAt:null}:{...n},this.toolCoverage.clear(),t.toolCoverage&&typeof t.toolCoverage==`object`)for(let[e,n]of Object.entries(t.toolCoverage)){if(!n||typeof n!=`object`)continue;let t=n;this.toolCoverage.set(e,{count:typeof t.count==`number`&&Number.isFinite(t.count)&&t.count>=0?Math.trunc(t.count):0,lastCalledAt:typeof t.lastCalledAt==`string`?t.lastCalledAt:null,lastArgsKeys:Array.isArray(t.lastArgsKeys)?t.lastArgsKeys.filter(e=>typeof e==`string`):[]})}this.revision+=1,this.persistedRevision=this.revision,this.dirty=!1}noteDirty(){this.revision+=1,this.dirty=!0}setPendingDomainActivation(e,t,n){this.pendingActivatedDomains.add(e),this.pendingDomainTtls.set(e,{ttlMinutes:t,toolNames:[...n]}),this.noteDirty()}clearPendingDomainActivation(e){let t=this.pendingActivatedDomains.delete(e),n=this.pendingDomainTtls.delete(e);(t||n)&&this.noteDirty()}getPendingActivatedDomains(){return[...this.pendingActivatedDomains]}getPendingDomainTtl(e){return this.pendingDomainTtls.get(e)??null}setBrowserAttach(e){this.browserAttach={...this.browserAttach,...e},this.noteDirty()}clearBrowserAttach(){this.browserAttach={...n},this.noteDirty()}getBrowserAttach(){return{...this.browserAttach}}recordToolCall(e,t){let n={count:(this.toolCoverage.get(e)?.count??0)+1,lastCalledAt:new Date().toISOString(),lastArgsKeys:Object.keys(t).filter(e=>e!==`_meta`).toSorted()};this.toolCoverage.set(e,n),this.noteDirty()}getCoverageSummary(e){let n=Object.fromEntries([...this.toolCoverage.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,{...t,lastArgsKeys:[...t.lastArgsKeys]}])),r=new Set([...t.map(e=>e.name),...e.selectedTools.map(e=>e.name),...e.activatedToolNames,...e.extensionToolsByName.keys(),...e.metaToolsByName.keys()]),i=[...this.toolCoverage.keys()].filter(e=>!r.has(e)).toSorted((e,t)=>e.localeCompare(t)),a=[...r].filter(e=>!this.toolCoverage.has(e)).toSorted((e,t)=>e.localeCompare(t));return{called:n,calledCount:this.toolCoverage.size,uncataloguedCalls:i,uncataloguedCallCount:i.length,totalKnownTools:r.size,uncalled:a,uncalledCount:a.length}}};function i(e){return!e||typeof e.getDomainInstance!=`function`?null:e.getDomainInstance(`serverRuntimeState`)??null}async function a(t){let n=i(t);if(!n)return;let r=n.getPendingActivatedDomains();if(r.length!==0){for(let i of r)if(!(t.enabledDomains.has(i)&&t.domainTtlEntries.has(i)))try{let{handleActivateDomain:e}=await import(`./MCPServer.search.handlers.domain-BbS-6LnX.mjs`).then(e=>e.t),r=n.getPendingDomainTtl(i);await e(t,{domain:i,...r?{ttlMinutes:r.ttlMinutes}:{}})}catch(t){e.warn(`Failed to restore activated domain "${i}":`,t)}}}export{i as n,a as r,r as t};
@@ -1 +0,0 @@
1
- import{_ as e,b as t,c as n,d as r,f as i,l as a,m as o,o as s,p as c,t as l,u}from"./Win32API-eUCF57l_.mjs";import{l as d}from"./Win32Debug-CYrIQBvr.mjs";var f=class{states=new Map;async apply(r,o){this.states.has(r)&&await this.remove(r);let c=t(r,!0),d=[],f=[];try{let t=s(`kernel32.dll`);if(t===0n)throw Error(`Cannot find kernel32.dll`);let l=i(c,0n,4096,a.COMMIT|a.RESERVE,u.EXECUTE_READWRITE);if(l===0n)throw Error(`VirtualAllocEx failed for speedhack shared memory`);let p=Buffer.alloc(8);p.writeDoubleLE(o,0),e(c,l,p);let m=Buffer.alloc(8,0);e(c,l+8n,m),e(c,l+16n,m);let h=n(t,`GetTickCount64`);h!==0n&&await this.hookTimeFunction(c,h,l,256n,`gettick64`)&&(d.push(`GetTickCount64`),f.push(`gettick64`));let g=n(t,`QueryPerformanceCounter`);return g!==0n&&await this.hookTimeFunction(c,g,l,512n,`qpc`)&&(d.push(`QueryPerformanceCounter`),f.push(`qpc`)),this.states.set(r,{pid:r,speed:o,hookedApis:d,isActive:!0,allocatedMemory:`0x${l.toString(16).toUpperCase()}`,patchIds:f}),{success:d.length>0,hookedApis:d}}catch(e){throw l(c),e}finally{l(c)}}async setSpeed(n,r){let i=this.states.get(n);if(!i||!i.isActive||!i.allocatedMemory)return!1;let a=BigInt(i.allocatedMemory),o=t(n,!0);try{let t=Buffer.alloc(8);return t.writeDoubleLE(r,0),e(o,a,t),i.speed=r,!0}finally{l(o)}}getSpeed(e){let t=this.states.get(e);return t?.isActive?t.speed:null}async remove(n){let i=this.states.get(n);if(!i)return!1;let s=t(n,!0);try{if(i.allocatedMemory){let t=BigInt(i.allocatedMemory);for(let n=0;n<i.patchIds.length;n++)try{let i=r(s,t+(3072n+BigInt(n*32)),32),a=i.readBigUInt64LE(0),c=i.readUInt32LE(8);if(a!==0n&&c>0&&c<=16){let t=i.subarray(12,12+c),{oldProtect:n}=o(s,a,c,u.EXECUTE_READWRITE);e(s,a,t),d(s,a,c),o(s,a,c,n)}}catch{}c(s,t,0,a.RELEASE)}}finally{l(s)}return i.isActive=!1,this.states.delete(n),!0}isActive(e){return this.states.get(e)?.isActive??!1}listActive(){return Array.from(this.states.values()).filter(e=>e.isActive)}async hookTimeFunction(t,n,i,a,s){try{let s=r(t,n,14),c=i+a;e(t,c,s);let l=n+14n,f=this.buildAbsoluteJump(l);e(t,c+14n,Buffer.from(f));let p=this.buildAbsoluteJump(c),{oldProtect:m}=o(t,n,14,u.EXECUTE_READWRITE);e(t,n,Buffer.from(p)),d(t,n,14),o(t,n,14,m);let h=this.states.size,g=3072n+BigInt(h*32),_=Buffer.alloc(32);return _.writeBigUInt64LE(n,0),_.writeUInt32LE(14,8),s.copy(_,12),e(t,i+g,_),d(t,c,32),!0}catch{return!1}}buildAbsoluteJump(e){let t=Buffer.alloc(14);return t[0]=255,t[1]=37,t.writeUInt32LE(0,2),t.writeBigUInt64LE(e,6),Array.from(t)}};const p=new f;export{f as Speedhack,p as speedhack};