@jshookmcp/jshook 0.2.9 → 0.3.1

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 (316) hide show
  1. package/README.md +25 -50
  2. package/README.zh.md +25 -48
  3. package/dist/AntiCheatDetector-CGVGNfy5.mjs +1 -0
  4. package/dist/CacheAdapters-CdAxBmVW.mjs +1 -0
  5. package/dist/CodeInjector-BlgyqTOk.mjs +1 -0
  6. package/dist/ConsoleMonitor-Dkqc0HNi.mjs +490 -0
  7. package/dist/DOMInspector-BYY_EJ0C.mjs +95 -0
  8. package/dist/DarwinAPI-DC4HGGLl.mjs +1 -0
  9. package/dist/DetailedDataManager-BniBJlVv.mjs +1 -0
  10. package/dist/EventBus-DgciURGg.mjs +1 -0
  11. package/dist/EvidenceGraphBridge-BIfgB7HP.mjs +1 -0
  12. package/dist/ExtensionManager-erMpqcLk.mjs +1 -0
  13. package/dist/FingerprintManager-N7BZqjxP.mjs +1 -0
  14. package/dist/HardwareBreakpoint-OcJqNFVc.mjs +1 -0
  15. package/dist/HeapAnalyzer-CqAxZzeS.mjs +1 -0
  16. package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-Bf1fbrNK.mjs} +66 -174
  17. package/dist/InstrumentationSession-DxXs0sCp.mjs +1 -0
  18. package/dist/MCPServer.search.handlers.domain-DVbWL1bT.mjs +1 -0
  19. package/dist/MemoryController-BaqstM5w.mjs +2 -0
  20. package/dist/MemoryScanSession-CaxAjZJf.mjs +1 -0
  21. package/dist/MemoryScanner-BLYnMJy6.mjs +1 -0
  22. package/dist/NativeMemoryManager.impl-CI554XbY.mjs +1 -0
  23. package/dist/NativeMemoryManager.utils-DM4NC3FE.mjs +1 -0
  24. package/dist/PEAnalyzer-DJyaJTQJ.mjs +1 -0
  25. package/dist/PageController-D9jVkH0i.mjs +1 -0
  26. package/dist/PointerChainEngine-5nF9eNlu.mjs +1 -0
  27. package/dist/PrerequisiteError-Bl3dK8XA.mjs +1 -0
  28. package/dist/ProcessRegistry-Hf12LlR9.mjs +1 -0
  29. package/dist/ResponseBuilder-B2lu4KEl.mjs +1 -0
  30. package/dist/ReverseEvidenceGraph-B931HeoW.mjs +2 -0
  31. package/dist/ScriptManager-fgqiALgj.mjs +7 -0
  32. package/dist/Speedhack-l6s8L2Qw.mjs +1 -0
  33. package/dist/StealthVerifier-Dhbj4B4P.mjs +1 -0
  34. package/dist/StructureAnalyzer-A-WamfYE.mjs +2 -0
  35. package/dist/ToolCatalog-D_IKl1Hu.mjs +1 -0
  36. package/dist/ToolError-DWU_z7gp.mjs +1 -0
  37. package/dist/ToolProbe-xsfALmN3.mjs +1 -0
  38. package/dist/ToolRegistry-B0Zs-phN.mjs +1 -0
  39. package/dist/ToolRouter.policy-CFHoN_Lw.mjs +4 -0
  40. package/dist/TraceRecorder-Dd8jLXpi.mjs +272 -0
  41. package/dist/VersionDetector-DMoUWyNm.mjs +9 -0
  42. package/dist/Win32API-Bhi5xFBe.mjs +1 -0
  43. package/dist/Win32Debug-CQteFL4F.mjs +1 -0
  44. package/dist/WorkflowEngine-CxEp2WXH.mjs +1 -0
  45. package/dist/analysis-BuR-NgX8.mjs +5 -0
  46. package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BOTZH6-0.mjs} +8 -259
  47. package/dist/artifactRetention-NBdncOEW.mjs +1 -0
  48. package/dist/artifacts-B5xQuEa_.mjs +1 -0
  49. package/dist/authorization-schema-B40obG1A.mjs +1 -0
  50. package/dist/betterSqlite3-CGaxz4AX.mjs +1 -0
  51. package/dist/binary-instrument-Cf9qqLlM.mjs +7 -0
  52. package/dist/bind-helpers-BlAOQrFQ.mjs +1 -0
  53. package/dist/boringssl-inspector-BST5vtKx.mjs +2 -0
  54. package/dist/browser-C4Le3xqA.mjs +11 -0
  55. package/dist/capabilities-DbYCv-HF.mjs +1 -0
  56. package/dist/chunk-C_pMuVsO.mjs +1 -0
  57. package/dist/collector-CKO8RPK8.mjs +1 -0
  58. package/dist/concurrency-CcK46d0h.mjs +1 -0
  59. package/dist/constants-Cp6hBrrx.mjs +1 -0
  60. package/dist/coordination-BbijHEHH.mjs +1 -0
  61. package/dist/debugger-CRJq_krh.mjs +1 -0
  62. package/dist/definitions-BGobEDQa.mjs +1 -0
  63. package/dist/definitions-BGwNSkVm.mjs +1 -0
  64. package/dist/definitions-BbxOUiP-.mjs +1 -0
  65. package/dist/definitions-CCP9gphV.mjs +1 -0
  66. package/dist/definitions-CIO9O-Sw.mjs +1 -0
  67. package/dist/definitions-CYFbewnd.mjs +1 -0
  68. package/dist/definitions-CdWEuIkI.mjs +1 -0
  69. package/dist/definitions-CoQFbggH.mjs +1 -0
  70. package/dist/definitions-CuJRsJ6N.mjs +1 -0
  71. package/dist/definitions-DI9YXsJk.mjs +1 -0
  72. package/dist/definitions-DJklW2sS.mjs +1 -0
  73. package/dist/definitions-DZ8uKusP.mjs +1 -0
  74. package/dist/definitions-Dds_zrWx.mjs +1 -0
  75. package/dist/definitions-Dgrg7f3D.mjs +1 -0
  76. package/dist/definitions-DtE0XLrT.mjs +1 -0
  77. package/dist/definitions-LaYTuwQd.mjs +26 -0
  78. package/dist/definitions-NoVp_9Pm.mjs +1 -0
  79. package/dist/definitions-OvGsfxdt.mjs +1 -0
  80. package/dist/definitions-jXPaVy4P.mjs +1 -0
  81. package/dist/encoding-DGcr6Aj_.mjs +2 -0
  82. package/dist/ensure-browser-core-Buls24LQ.mjs +1 -0
  83. package/dist/evidence-graph-bridge-B0yhGPcs.mjs +1 -0
  84. package/dist/factory-Cx_1LorX.mjs +1 -0
  85. package/dist/flat-target-session-CO5g78k3.mjs +1 -0
  86. package/dist/formatAddress-C7j2fDlM.mjs +1 -0
  87. package/dist/graphql-HLf3MS8H.mjs +62 -0
  88. package/dist/handlers-BLMa4X7l.mjs +54 -0
  89. package/dist/handlers-BP12ZsWc.mjs +4 -0
  90. package/dist/handlers-BZoPla6E.mjs +1 -0
  91. package/dist/handlers-BggKiVx9.mjs +2 -0
  92. package/dist/handlers-D3iev8g1.mjs +1 -0
  93. package/dist/handlers-D49r1-1P.mjs +1 -0
  94. package/dist/handlers-DCE45Ww8.mjs +2 -0
  95. package/dist/handlers-DW5AbYs5.mjs +5 -0
  96. package/dist/handlers-De5u62Ga2.mjs +1 -0
  97. package/dist/handlers-DmQzIc44.mjs +31 -0
  98. package/dist/handlers-DnJRGp7t.mjs +302 -0
  99. package/dist/handlers-Dv_runVv.mjs +2 -0
  100. package/dist/handlers-S9Ws0IGy.mjs +2 -0
  101. package/dist/{handlers-Bl8zkwz1.mjs → handlers-pVNpaw4A.mjs} +144 -841
  102. package/dist/handlers.impl-CD2_kOcC.mjs +1 -0
  103. package/dist/hooks-DDKppogd.mjs +600 -0
  104. package/dist/index.mjs +12 -5225
  105. package/dist/logger-sBC6IdRT.mjs +1 -0
  106. package/dist/maintenance-CutEO84j.mjs +1 -0
  107. package/dist/manifest-BFGxlDRh.mjs +123 -0
  108. package/dist/manifest-BPuE6oH2.mjs +1 -0
  109. package/dist/manifest-BXry5N09.mjs +1 -0
  110. package/dist/manifest-BeP_zJGb2.mjs +1 -0
  111. package/dist/manifest-C0g67k6U.mjs +1 -0
  112. package/dist/manifest-C1nZkTkO.mjs +1 -0
  113. package/dist/manifest-C7qV1z7F.mjs +1 -0
  114. package/dist/manifest-CDeUZGUZ.mjs +1 -0
  115. package/dist/manifest-CDiCtaQT.mjs +1 -0
  116. package/dist/manifest-CFn0359q2.mjs +1 -0
  117. package/dist/manifest-CGq4NpqH2.mjs +1 -0
  118. package/dist/manifest-CJMGt7Qy.mjs +1 -0
  119. package/dist/manifest-CRIJq4Hs.mjs +1 -0
  120. package/dist/manifest-C_hEIjSx.mjs +1 -0
  121. package/dist/manifest-CeQmtQOY.mjs +1 -0
  122. package/dist/manifest-Cq0j7GZt.mjs +1 -0
  123. package/dist/manifest-CtPmHAdn.mjs +1 -0
  124. package/dist/manifest-Cx2IVMUY.mjs +1 -0
  125. package/dist/manifest-D16xPXro.mjs +1 -0
  126. package/dist/manifest-D44TaRJU.mjs +1 -0
  127. package/dist/manifest-D610kxZr.mjs +2 -0
  128. package/dist/manifest-DC-SMF6b.mjs +1 -0
  129. package/dist/manifest-DD3rtxvV.mjs +1 -0
  130. package/dist/manifest-DKUorv5M.mjs +1 -0
  131. package/dist/manifest-DMJlcsTR.mjs +1 -0
  132. package/dist/manifest-DWUUWBz0.mjs +1 -0
  133. package/dist/manifest-De-6Wf2R.mjs +1 -0
  134. package/dist/manifest-Dgh0uDW-.mjs +1 -0
  135. package/dist/manifest-Dm0o3i2U.mjs +1 -0
  136. package/dist/manifest-DsVh7Y4U.mjs +1 -0
  137. package/dist/manifest-DtEFSRaq.mjs +1 -0
  138. package/dist/manifest-H-EpAyZQ.mjs +1 -0
  139. package/dist/manifest-ais9Afrw.mjs +1 -0
  140. package/dist/manifest-tmb54wmA.mjs +1 -0
  141. package/dist/manifest-yu2xiQqe.mjs +1 -0
  142. package/dist/manifest-zrbrpKCC.mjs +1 -0
  143. package/dist/matchesWildcardPattern-BGqLSmEs.mjs +1 -0
  144. package/dist/modules-p-PUNv9r.mjs +332 -0
  145. package/dist/mojo-ipc-VGlv3Qyp.mjs +9 -0
  146. package/dist/network-BjZ1Y-GB.mjs +7 -0
  147. package/dist/outputPaths-BonGThuc.mjs +2 -0
  148. package/dist/parse-args-Cuk7-xUt.mjs +1 -0
  149. package/dist/platform-C446Lf97.mjs +93 -0
  150. package/dist/playwright-cdp-fallback-BwVR-_T3.mjs +1 -0
  151. package/dist/process-C9f2A5zk.mjs +962 -0
  152. package/dist/proxy-CvRepxgV.mjs +1 -0
  153. package/dist/registry-DUHIPE-v.mjs +1 -0
  154. package/dist/response-C7rKQst4.mjs +1 -0
  155. package/dist/search-defaults-D2bY-rzH.mjs +1 -0
  156. package/dist/server/plugin-api.mjs +1 -293
  157. package/dist/shared-state-board-Cyg-xh_k.mjs +1 -0
  158. package/dist/sourcemap-D6Q1UuAp.mjs +1 -0
  159. package/dist/ssrf-policy-T96MR3r6.mjs +1 -0
  160. package/dist/streaming-CTX58tbb.mjs +1 -0
  161. package/dist/tool-builder-CI9914Tf.mjs +1 -0
  162. package/dist/transform-Cv9P2vVD.mjs +103 -0
  163. package/dist/types-CuyefmGT.mjs +1 -0
  164. package/dist/types-DtThH00r.mjs +1 -0
  165. package/dist/wasm-DaJa8J0V.mjs +174 -0
  166. package/dist/webcrack-CsLLJIs9.mjs +46 -0
  167. package/dist/workflow-CYIXtrWD.mjs +101 -0
  168. package/package.json +12 -7
  169. package/dist/AntiCheatDetector-BNk-EoBt.mjs +0 -244
  170. package/dist/CacheAdapters-CDe5WPSV.mjs +0 -80
  171. package/dist/CodeInjector-Cq8q01kp.mjs +0 -150
  172. package/dist/ConsoleMonitor-CPVQW1Y-.mjs +0 -2201
  173. package/dist/DarwinAPI-BNPxu0RH.mjs +0 -363
  174. package/dist/DetailedDataManager-BQQcxh64.mjs +0 -217
  175. package/dist/EventBus-DgPmwpeu.mjs +0 -141
  176. package/dist/EvidenceGraphBridge-SFesNera.mjs +0 -153
  177. package/dist/ExtensionManager-CWYgw0YW.mjs +0 -714
  178. package/dist/FingerprintManager-gzWtkKuf.mjs +0 -96
  179. package/dist/HardwareBreakpoint-B9gZCdFP.mjs +0 -239
  180. package/dist/HeapAnalyzer-BLDH0dCv.mjs +0 -284
  181. package/dist/InstrumentationSession-CvPC7Jwy.mjs +0 -244
  182. package/dist/MemoryController-CbVdCIJF.mjs +0 -167
  183. package/dist/MemoryScanSession-BsDZbLYm.mjs +0 -278
  184. package/dist/MemoryScanner-Bcpml6II.mjs +0 -425
  185. package/dist/NativeMemoryManager.impl-dZtA1ZGn.mjs +0 -482
  186. package/dist/NativeMemoryManager.utils-B-FjA2mJ.mjs +0 -165
  187. package/dist/PEAnalyzer-D1lzJ_VG.mjs +0 -385
  188. package/dist/PageController-Bqm2kZ_X.mjs +0 -417
  189. package/dist/PointerChainEngine-BOhyVsjx.mjs +0 -322
  190. package/dist/PrerequisiteError-Dl33Svkz.mjs +0 -20
  191. package/dist/ResponseBuilder-D3iFYx2N.mjs +0 -143
  192. package/dist/ReverseEvidenceGraph-Dlsk94LC.mjs +0 -269
  193. package/dist/ScriptManager-aHHq0X7U.mjs +0 -3000
  194. package/dist/Speedhack-CqdIFlQl.mjs +0 -156
  195. package/dist/StealthVerifier-Bo4T3bz8.mjs +0 -135
  196. package/dist/StructureAnalyzer-DhFaPvRO.mjs +0 -426
  197. package/dist/ToolCatalog-C0JGZoOm.mjs +0 -582
  198. package/dist/ToolError-jh9whhMd.mjs +0 -15
  199. package/dist/ToolProbe-oC7aPrkv.mjs +0 -45
  200. package/dist/ToolRegistry-BjaF4oNz.mjs +0 -131
  201. package/dist/ToolRouter.policy-BWV67ZK-.mjs +0 -304
  202. package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
  203. package/dist/VersionDetector-CwVLVdDM.mjs +0 -104
  204. package/dist/Win32API-CePkipZY.mjs +0 -340
  205. package/dist/Win32Debug-BvKs-gxc.mjs +0 -274
  206. package/dist/WorkflowEngine-CuvkZtWu.mjs +0 -598
  207. package/dist/analysis-CL9uACt9.mjs +0 -463
  208. package/dist/artifactRetention-CFEprwPw.mjs +0 -591
  209. package/dist/artifacts-Bk2-_uPq.mjs +0 -59
  210. package/dist/betterSqlite3-0pqusHHH.mjs +0 -74
  211. package/dist/binary-instrument-CXfpx6fT.mjs +0 -979
  212. package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
  213. package/dist/boringssl-inspector-BH2D3VKc.mjs +0 -180
  214. package/dist/browser-BpOr5PEx.mjs +0 -4082
  215. package/dist/chunk-CjcI7cDX.mjs +0 -15
  216. package/dist/concurrency-Bt0yv1kJ.mjs +0 -41
  217. package/dist/constants-B0OANIBL.mjs +0 -519
  218. package/dist/coordination-qUbyF8KU.mjs +0 -259
  219. package/dist/debugger-gnKxRSN0.mjs +0 -1271
  220. package/dist/definitions-6M-eejaT.mjs +0 -53
  221. package/dist/definitions-B18eyf0B.mjs +0 -18
  222. package/dist/definitions-B3QdlrHv.mjs +0 -34
  223. package/dist/definitions-B4rAvHNZ.mjs +0 -63
  224. package/dist/definitions-BB_4jnmy.mjs +0 -37
  225. package/dist/definitions-BMfYXoNC.mjs +0 -43
  226. package/dist/definitions-Beid2EB3.mjs +0 -27
  227. package/dist/definitions-C1UvM5Iy.mjs +0 -126
  228. package/dist/definitions-CXEI7QC72.mjs +0 -216
  229. package/dist/definitions-C_4r7Fo-2.mjs +0 -14
  230. package/dist/definitions-CkFDALoa.mjs +0 -26
  231. package/dist/definitions-Cke7zEb8.mjs +0 -94
  232. package/dist/definitions-ClJLzsJQ.mjs +0 -25
  233. package/dist/definitions-Cq-zroAU.mjs +0 -28
  234. package/dist/definitions-Cy3Sl6gV.mjs +0 -34
  235. package/dist/definitions-D3VsGcvz.mjs +0 -47
  236. package/dist/definitions-DVGfrn7y.mjs +0 -96
  237. package/dist/definitions-LKpC3-nL.mjs +0 -9
  238. package/dist/definitions-bAhHQJq9.mjs +0 -359
  239. package/dist/encoding-Bvz5jLRv.mjs +0 -1065
  240. package/dist/evidence-graph-bridge-C_fv9PuC.mjs +0 -135
  241. package/dist/factory-DxlGh9Xf.mjs +0 -575
  242. package/dist/formatAddress-DVkj9kpI.mjs +0 -17
  243. package/dist/graphql-DYWzJ29s.mjs +0 -1026
  244. package/dist/handlers-9sAbfIg-.mjs +0 -2552
  245. package/dist/handlers-C67ktuRN.mjs +0 -710
  246. package/dist/handlers-C87g8oCe.mjs +0 -276
  247. package/dist/handlers-CTsDAO6p.mjs +0 -681
  248. package/dist/handlers-Cgyg6c0U.mjs +0 -645
  249. package/dist/handlers-D6j6yka7.mjs +0 -2124
  250. package/dist/handlers-DdFzXLvF.mjs +0 -446
  251. package/dist/handlers-DeLOCd5m.mjs +0 -799
  252. package/dist/handlers-DlCJN4Td.mjs +0 -757
  253. package/dist/handlers-DxGIq15_2.mjs +0 -917
  254. package/dist/handlers-U6L4xhuF.mjs +0 -585
  255. package/dist/handlers-tB9Mp9ZK.mjs +0 -84
  256. package/dist/handlers-tiy7EIBp.mjs +0 -572
  257. package/dist/handlers.impl-DS0d9fUw.mjs +0 -761
  258. package/dist/hooks-CzCWByww.mjs +0 -898
  259. package/dist/logger-Dh_xb7_2.mjs +0 -93
  260. package/dist/maintenance-P7ePRXQC.mjs +0 -830
  261. package/dist/manifest-2ToTpjv8.mjs +0 -106
  262. package/dist/manifest-3g71z6Bg.mjs +0 -79
  263. package/dist/manifest-82baTv4U.mjs +0 -45
  264. package/dist/manifest-B3QVVeBS.mjs +0 -82
  265. package/dist/manifest-BB2J8IMJ.mjs +0 -149
  266. package/dist/manifest-BKbgbSiY.mjs +0 -60
  267. package/dist/manifest-Bcf-TJzH.mjs +0 -848
  268. package/dist/manifest-BmtZzQiQ2.mjs +0 -45
  269. package/dist/manifest-Bnd7kqEY.mjs +0 -55
  270. package/dist/manifest-BqQX6OQC2.mjs +0 -65
  271. package/dist/manifest-BqrQ4Tpj.mjs +0 -81
  272. package/dist/manifest-Br4RPFt5.mjs +0 -370
  273. package/dist/manifest-C5qDjysN.mjs +0 -107
  274. package/dist/manifest-C9RT5nk32.mjs +0 -34
  275. package/dist/manifest-CAhOuvSl.mjs +0 -204
  276. package/dist/manifest-CBYWCUBJ.mjs +0 -51
  277. package/dist/manifest-CFADCRa1.mjs +0 -37
  278. package/dist/manifest-CQVhavRF.mjs +0 -114
  279. package/dist/manifest-CT7zZBV1.mjs +0 -48
  280. package/dist/manifest-CV12bcrF.mjs +0 -121
  281. package/dist/manifest-CXsRWjjI.mjs +0 -224
  282. package/dist/manifest-CZLUCfG02.mjs +0 -95
  283. package/dist/manifest-D6phHKFd.mjs +0 -131
  284. package/dist/manifest-DCyjf4n2.mjs +0 -294
  285. package/dist/manifest-DHsnKgP6.mjs +0 -60
  286. package/dist/manifest-Df_dliIe.mjs +0 -55
  287. package/dist/manifest-Dh8WBmEW.mjs +0 -129
  288. package/dist/manifest-DhKRAT8_.mjs +0 -92
  289. package/dist/manifest-DlpTj4ic2.mjs +0 -193
  290. package/dist/manifest-DrbmZcFl2.mjs +0 -253
  291. package/dist/manifest-DuwHjUa5.mjs +0 -70
  292. package/dist/manifest-DzwvxPJX.mjs +0 -38
  293. package/dist/manifest-NXctwWQq.mjs +0 -68
  294. package/dist/manifest-Sc_0JQ13.mjs +0 -418
  295. package/dist/manifest-gZ4s_UtG.mjs +0 -96
  296. package/dist/manifest-qSleDqdO.mjs +0 -1023
  297. package/dist/modules-C184v-S9.mjs +0 -11365
  298. package/dist/mojo-ipc-B_H61Afw.mjs +0 -525
  299. package/dist/network-671Cw6hV.mjs +0 -3346
  300. package/dist/outputPaths-B1uGmrWZ.mjs +0 -1145
  301. package/dist/parse-args-BlRjqlkL.mjs +0 -39
  302. package/dist/platform-WmNn8Sxb.mjs +0 -2070
  303. package/dist/process-QcbIy5Zq.mjs +0 -1401
  304. package/dist/proxy-DqNs0bAd.mjs +0 -170
  305. package/dist/registry-D-6e18lB.mjs +0 -34
  306. package/dist/response-BQVP-xUn.mjs +0 -28
  307. package/dist/shared-state-board-DV-dpHFJ.mjs +0 -586
  308. package/dist/sourcemap-Dq8ez8vS.mjs +0 -650
  309. package/dist/ssrf-policy-ZaUfvhq7.mjs +0 -166
  310. package/dist/streaming-BUQ0VJsg.mjs +0 -725
  311. package/dist/tool-builder-DCbIC5Eo.mjs +0 -186
  312. package/dist/transform-CiYJfNX0.mjs +0 -1007
  313. package/dist/types-Bx92KJfT.mjs +0 -4
  314. package/dist/types-CPhOReNX.mjs +0 -37
  315. package/dist/wasm-DQTnHDs4.mjs +0 -531
  316. package/dist/workflow-f3xJOcjx.mjs +0 -725
@@ -1,97 +1,22 @@
1
- import { t as logger } from "./logger-Dh_xb7_2.mjs";
2
- import { W as EXTERNAL_TOOL_FORCE_KILL_GRACE_MS } from "./constants-B0OANIBL.mjs";
3
- //#region src/utils/ProcessRegistry.ts
4
- /**
5
- * Global singleton registry to track and safely terminate orphaned child
6
- * processes and worker threads upon server shutdown.
7
- */
8
- var ProcessRegistrySingleton = class {
9
- processes = /* @__PURE__ */ new Set();
10
- /**
11
- * Register a ChildProcess or Worker for automatic cleanup on shutdown.
12
- */
13
- register(proc) {
14
- if (!proc) return;
15
- this.processes.add(proc);
16
- if ("kill" in proc) proc.once("close", () => this.unregister(proc));
17
- else if ("terminate" in proc) {
18
- if (typeof proc.once === "function") proc.once("exit", () => this.unregister(proc));
19
- else if (typeof proc.on === "function") proc.on("exit", () => this.unregister(proc));
20
- }
21
- }
22
- /**
23
- * Unregister a process/worker.
24
- */
25
- unregister(proc) {
26
- if (!proc) return;
27
- this.processes.delete(proc);
28
- }
29
- /**
30
- * Terminate all tracked processes and workers.
31
- * Sends SIGTERM, then after a grace period sends SIGKILL.
32
- */
33
- async terminateAll() {
34
- if (this.processes.size === 0) return;
35
- logger.debug(`[ProcessRegistry] Attempting to terminate ${this.processes.size} active processes/workers...`);
36
- const terminationPromises = [];
37
- for (const proc of this.processes) if ("terminate" in proc) terminationPromises.push(proc.terminate().then(() => {
38
- this.processes.delete(proc);
39
- }).catch((err) => {
40
- logger.warn(`[ProcessRegistry] Error terminating worker: ${err.message}`);
41
- }));
42
- else if ("kill" in proc) terminationPromises.push(new Promise((resolve) => {
43
- if (proc.killed || proc.exitCode !== null || proc.signalCode !== null) {
44
- this.processes.delete(proc);
45
- return resolve();
46
- }
47
- proc.kill("SIGTERM");
48
- let settled = false;
49
- const handleExit = () => {
50
- if (settled) return;
51
- settled = true;
52
- this.processes.delete(proc);
53
- resolve();
54
- };
55
- proc.once("exit", handleExit);
56
- proc.once("close", handleExit);
57
- setTimeout(() => {
58
- if (!settled && !proc.killed && proc.exitCode === null) {
59
- logger.debug(`[ProcessRegistry] Force killing child process PID ${proc.pid}`);
60
- try {
61
- proc.kill("SIGKILL");
62
- } catch {}
63
- handleExit();
64
- }
65
- }, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS).unref();
66
- }));
67
- await Promise.race([Promise.all(terminationPromises), new Promise((resolve) => setTimeout(resolve, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS + 1e3).unref())]);
68
- this.processes.clear();
69
- logger.debug(`[ProcessRegistry] Termination sweep complete.`);
70
- }
71
- };
72
- const ProcessRegistry = new ProcessRegistrySingleton();
73
- //#endregion
74
- //#region src/modules/hook/HookGeneratorBuilders.core.generators.runtime.ts
75
- function generateFunctionHook(target, action, customCode, condition, performance = false) {
76
- return `
1
+ function e(e,t,n,r,i=!1){return`
77
2
  (function() {
78
3
  'use strict';
79
- ${condition ? `
4
+ ${r?`
80
5
  let callCount = 0;
81
6
  let lastCallTime = 0;
82
- const maxCalls = ${condition.maxCalls || "Infinity"};
83
- const minInterval = ${condition.minInterval || 0};
84
- ` : ""}
7
+ const maxCalls = ${r.maxCalls||`Infinity`};
8
+ const minInterval = ${r.minInterval||0};
9
+ `:``}
85
10
 
86
- const originalFunction = ${target};
11
+ const originalFunction = ${e};
87
12
 
88
13
  if (typeof originalFunction !== 'function') {
89
- console.error('[Hook] Target is not a function: ${target}');
14
+ console.error('[Hook] Target is not a function: ${e}');
90
15
  return;
91
16
  }
92
17
 
93
- ${target} = function(...args) {
94
- ${condition ? `
18
+ ${e} = function(...args) {
19
+ ${r?`
95
20
  const now = Date.now();
96
21
  if (callCount >= maxCalls) {
97
22
  console.log('[Hook] Max calls reached, skipping');
@@ -103,14 +28,14 @@ ${target} = function(...args) {
103
28
  }
104
29
  callCount++;
105
30
  lastCallTime = now;
106
- ` : ""}
31
+ `:``}
107
32
 
108
- ${performance ? `
33
+ ${i?`
109
34
  const startTime = performance.now();
110
- ` : ""}
35
+ `:``}
111
36
 
112
37
  const hookContext = {
113
- target: '${target}',
38
+ target: '${e}',
114
39
  type: 'function',
115
40
  timestamp: Date.now(),
116
41
  arguments: args,
@@ -119,27 +44,24 @@ ${target} = function(...args) {
119
44
 
120
45
  console.log('[Hook] Function called:', hookContext);
121
46
 
122
- ${action === "block" ? "return undefined;" : ""}
123
- ${action === "modify" && customCode ? customCode : ""}
47
+ ${t===`block`?`return undefined;`:``}
48
+ ${t===`modify`&&n?n:``}
124
49
 
125
50
  const result = originalFunction.apply(this, args);
126
51
 
127
- ${performance ? `
52
+ ${i?`
128
53
  const endTime = performance.now();
129
54
  console.log('[Hook] Execution time:', (endTime - startTime).toFixed(2), 'ms');
130
- ` : ""}
55
+ `:``}
131
56
 
132
57
  console.log('[Hook] Function result:', result);
133
58
 
134
59
  return result;
135
60
  };
136
61
 
137
- console.log('[Hook] Successfully hooked: ${target}');
62
+ console.log('[Hook] Successfully hooked: ${e}');
138
63
  })();
139
- `.trim();
140
- }
141
- function generateEvalHook(action, customCode, _condition, _performance = false) {
142
- return `
64
+ `.trim()}function t(e,t,n,r=!1){return`
143
65
  (function() {
144
66
  'use strict';
145
67
 
@@ -162,8 +84,8 @@ window.eval = function(code) {
162
84
  timestamp: new Date().toISOString()
163
85
  });
164
86
 
165
- ${action === "block" ? "return undefined;" : ""}
166
- ${customCode || ""}
87
+ ${e===`block`?`return undefined;`:``}
88
+ ${t||``}
167
89
 
168
90
  try {
169
91
  const result = originalEval.call(this, code);
@@ -192,8 +114,8 @@ window.Function = function(...args) {
192
114
  timestamp: new Date().toISOString()
193
115
  });
194
116
 
195
- ${action === "block" ? "return function() {};" : ""}
196
- ${customCode || ""}
117
+ ${e===`block`?`return function() {};`:``}
118
+ ${t||``}
197
119
 
198
120
  try {
199
121
  const result = originalFunction.apply(this, args);
@@ -214,7 +136,7 @@ window.setTimeout = function(handler, timeout, ...args) {
214
136
  timestamp: new Date().toISOString()
215
137
  });
216
138
 
217
- ${action === "block" ? "return 0;" : ""}
139
+ ${e===`block`?`return 0;`:``}
218
140
  }
219
141
 
220
142
  return originalSetTimeout.apply(this, [handler, timeout, ...args]);
@@ -229,7 +151,7 @@ window.setInterval = function(handler, timeout, ...args) {
229
151
  timestamp: new Date().toISOString()
230
152
  });
231
153
 
232
- ${action === "block" ? "return 0;" : ""}
154
+ ${e===`block`?`return 0;`:``}
233
155
  }
234
156
 
235
157
  return originalSetInterval.apply(this, [handler, timeout, ...args]);
@@ -237,13 +159,7 @@ window.setInterval = function(handler, timeout, ...args) {
237
159
 
238
160
  console.log('[Eval Hook] Successfully hooked eval, Function, setTimeout, setInterval');
239
161
  })();
240
- `.trim();
241
- }
242
- function generateObjectMethodHook(target, action, customCode, _condition, _performance = false) {
243
- const parts = target.split(".");
244
- const methodName = parts.pop();
245
- const objectPath = parts.join(".");
246
- return `
162
+ `.trim()}function n(e,t,n,r,i=!1){let a=e.split(`.`),o=a.pop(),s=a.join(`.`);return`
247
163
  (function() {
248
164
  'use strict';
249
165
 
@@ -262,11 +178,11 @@ function getObjectByPath(path) {
262
178
  return obj;
263
179
  }
264
180
 
265
- const targetObject = getObjectByPath('${objectPath}');
266
- const methodName = '${methodName}';
181
+ const targetObject = getObjectByPath('${s}');
182
+ const methodName = '${o}';
267
183
 
268
184
  if (!targetObject) {
269
- console.error('[Object Hook] Target object not found: ${objectPath}');
185
+ console.error('[Object Hook] Target object not found: ${s}');
270
186
  return;
271
187
  }
272
188
 
@@ -274,7 +190,7 @@ const descriptor = Object.getOwnPropertyDescriptor(targetObject, methodName) ||
274
190
  Object.getOwnPropertyDescriptor(Object.getPrototypeOf(targetObject), methodName);
275
191
 
276
192
  if (!descriptor) {
277
- console.error('[Object Hook] Property not found: ${target}');
193
+ console.error('[Object Hook] Property not found: ${e}');
278
194
  return;
279
195
  }
280
196
 
@@ -288,7 +204,7 @@ if (typeof targetObject[methodName] === 'function') {
288
204
  const startTime = performance.now();
289
205
  const stackTrace = new Error().stack.split('\\n').slice(2, 5).join('\\n');
290
206
 
291
- console.log(\`[Object Hook #\${callId}] ${target}:\`, {
207
+ console.log(\`[Object Hook #\${callId}] ${e}:\`, {
292
208
  arguments: args,
293
209
  this: this,
294
210
  thisType: this?.constructor?.name,
@@ -296,15 +212,15 @@ if (typeof targetObject[methodName] === 'function') {
296
212
  timestamp: new Date().toISOString()
297
213
  });
298
214
 
299
- ${action === "block" ? "return undefined;" : ""}
300
- ${customCode || ""}
215
+ ${t===`block`?`return undefined;`:``}
216
+ ${n||``}
301
217
 
302
218
  try {
303
219
  const result = originalMethod.apply(this, args);
304
220
  const endTime = performance.now();
305
221
  const duration = (endTime - startTime).toFixed(2);
306
222
 
307
- console.log(\`[Object Hook #\${callId}] ${target} result:\`, {
223
+ console.log(\`[Object Hook #\${callId}] ${e} result:\`, {
308
224
  result: result,
309
225
  resultType: typeof result,
310
226
  duration: duration + 'ms'
@@ -312,14 +228,14 @@ if (typeof targetObject[methodName] === 'function') {
312
228
 
313
229
  return result;
314
230
  } catch (error) {
315
- console.error(\`[Object Hook #\${callId}] ${target} error:\`, error);
231
+ console.error(\`[Object Hook #\${callId}] ${e} error:\`, error);
316
232
  throw error;
317
233
  }
318
234
  };
319
235
 
320
236
  Object.setPrototypeOf(targetObject[methodName], originalMethod);
321
237
 
322
- console.log('[Object Hook] Successfully hooked method: ${target}');
238
+ console.log('[Object Hook] Successfully hooked method: ${e}');
323
239
  }
324
240
  else if (descriptor.get || descriptor.set) {
325
241
  const originalGet = descriptor.get;
@@ -327,12 +243,12 @@ else if (descriptor.get || descriptor.set) {
327
243
 
328
244
  Object.defineProperty(targetObject, methodName, {
329
245
  get: function() {
330
- console.log('[Object Hook] getter called: ${target}');
246
+ console.log('[Object Hook] getter called: ${e}');
331
247
  return originalGet ? originalGet.call(this) : undefined;
332
248
  },
333
249
  set: function(value) {
334
- console.log('[Object Hook] setter called: ${target}', { value });
335
- ${action === "block" ? "return;" : ""}
250
+ console.log('[Object Hook] setter called: ${e}', { value });
251
+ ${t===`block`?`return;`:``}
336
252
  if (originalSet) {
337
253
  originalSet.call(this, value);
338
254
  }
@@ -341,14 +257,10 @@ else if (descriptor.get || descriptor.set) {
341
257
  enumerable: descriptor.enumerable
342
258
  });
343
259
 
344
- console.log('[Object Hook] Successfully hooked property: ${target}');
260
+ console.log('[Object Hook] Successfully hooked property: ${e}');
345
261
  }
346
262
  })();
347
- `.trim();
348
- }
349
- function generateAntiDebugBypass() {
350
- return `
351
- (function() {
263
+ `.trim()}function r(){return`(function() {
352
264
  'use strict';
353
265
 
354
266
  console.log('[Anti-Debug Bypass] Initializing...');
@@ -423,44 +335,39 @@ Object.defineProperty(window, 'devtools', {
423
335
  });
424
336
 
425
337
  console.log('[Anti-Debug Bypass] Successfully bypassed anti-debugging protections');
426
- })();
427
- `.trim();
428
- }
429
- function generateHookTemplate(targetName, targetType) {
430
- if (targetType === "function") return `
338
+ })();`}function i(e,t){return t===`function`?`
431
339
  (function() {
432
340
  'use strict';
433
341
 
434
- const original = ${targetName};
342
+ const original = ${e};
435
343
 
436
- ${targetName} = function(...args) {
437
- console.log('[Hook] ${targetName} called:', args);
344
+ ${e} = function(...args) {
345
+ console.log('[Hook] ${e} called:', args);
438
346
 
439
347
 
440
348
  const result = original.apply(this, args);
441
- console.log('[Hook] ${targetName} result:', result);
349
+ console.log('[Hook] ${e} result:', result);
442
350
 
443
351
  return result;
444
352
  };
445
353
 
446
- console.log('[Hook] Successfully hooked: ${targetName}');
354
+ console.log('[Hook] Successfully hooked: ${e}');
447
355
  })();
448
- `.trim();
449
- else if (targetType === "property") return `
356
+ `.trim():t===`property`?`
450
357
  (function() {
451
358
  'use strict';
452
359
 
453
- const descriptor = Object.getOwnPropertyDescriptor(${targetName.split(".").slice(0, -1).join(".")}, '${targetName.split(".").pop()}');
360
+ const descriptor = Object.getOwnPropertyDescriptor(${e.split(`.`).slice(0,-1).join(`.`)}, '${e.split(`.`).pop()}');
454
361
  const originalGet = descriptor?.get;
455
362
  const originalSet = descriptor?.set;
456
363
 
457
- Object.defineProperty(${targetName.split(".").slice(0, -1).join(".")}, '${targetName.split(".").pop()}', {
364
+ Object.defineProperty(${e.split(`.`).slice(0,-1).join(`.`)}, '${e.split(`.`).pop()}', {
458
365
  get: function() {
459
- console.log('[Hook] ${targetName} get');
366
+ console.log('[Hook] ${e} get');
460
367
  return originalGet ? originalGet.call(this) : undefined;
461
368
  },
462
369
  set: function(value) {
463
- console.log('[Hook] ${targetName} set:', value);
370
+ console.log('[Hook] ${e} set:', value);
464
371
  if (originalSet) {
465
372
  originalSet.call(this, value);
466
373
  }
@@ -468,17 +375,16 @@ Object.defineProperty(${targetName.split(".").slice(0, -1).join(".")}, '${target
468
375
  configurable: true
469
376
  });
470
377
 
471
- console.log('[Hook] Successfully hooked property: ${targetName}');
378
+ console.log('[Hook] Successfully hooked property: ${e}');
472
379
  })();
473
- `.trim();
474
- else return `
380
+ `.trim():`
475
381
  (function() {
476
382
  'use strict';
477
383
 
478
- const original = ${targetName};
384
+ const original = ${e};
479
385
 
480
- ${targetName} = function(...args) {
481
- console.log('[Hook] ${targetName} constructor called:', args);
386
+ ${e} = function(...args) {
387
+ console.log('[Hook] ${e} constructor called:', args);
482
388
 
483
389
  const instance = new original(...args);
484
390
 
@@ -496,16 +402,11 @@ ${targetName} = function(...args) {
496
402
  return instance;
497
403
  };
498
404
 
499
- ${targetName}.prototype = original.prototype;
405
+ ${e}.prototype = original.prototype;
500
406
 
501
- console.log('[Hook] Successfully hooked prototype: ${targetName}');
407
+ console.log('[Hook] Successfully hooked prototype: ${e}');
502
408
  })();
503
- `.trim();
504
- }
505
- //#endregion
506
- //#region src/modules/hook/HookGeneratorBuilders.core.generators.storage.ts
507
- function generateLocalStorageHook(action, customCode, _condition, _performance = false) {
508
- return `
409
+ `.trim()}function a(e,t,n,r=!1){return`
509
410
  (function() {
510
411
  'use strict';
511
412
 
@@ -526,8 +427,8 @@ Storage.prototype.setItem = function(key, value) {
526
427
  stackTrace: stackTrace
527
428
  });
528
429
 
529
- ${action === "block" ? "return;" : ""}
530
- ${customCode || ""}
430
+ ${e===`block`?`return;`:``}
431
+ ${t||``}
531
432
 
532
433
  return originalSetItem.apply(this, arguments);
533
434
  };
@@ -571,10 +472,7 @@ Storage.prototype.clear = function() {
571
472
 
572
473
  console.log('[Storage Hook] Successfully hooked localStorage and sessionStorage');
573
474
  })();
574
- `.trim();
575
- }
576
- function generateCookieHook(action, customCode, _condition, _performance = false) {
577
- return `
475
+ `.trim()}function o(e,t,n,r=!1){return`
578
476
  (function() {
579
477
  'use strict';
580
478
 
@@ -620,8 +518,8 @@ Object.defineProperty(document, 'cookie', {
620
518
  stackTrace: stackTrace
621
519
  });
622
520
 
623
- ${action === "block" ? "return;" : ""}
624
- ${customCode || ""}
521
+ ${e===`block`?`return;`:``}
522
+ ${t||``}
625
523
 
626
524
  return originalSet.call(this, value);
627
525
  },
@@ -630,10 +528,4 @@ Object.defineProperty(document, 'cookie', {
630
528
 
631
529
  console.log('[Cookie Hook] Successfully hooked document.cookie');
632
530
  })();
633
- `.trim();
634
- }
635
- function getInjectionInstructions(type) {
636
- return `This hook script monitors ${type} operations. Inject it into the target page via page_evaluate or console_execute to activate.`;
637
- }
638
- //#endregion
639
- export { generateEvalHook as a, generateObjectMethodHook as c, generateAntiDebugBypass as i, ProcessRegistry as l, generateLocalStorageHook as n, generateFunctionHook as o, getInjectionInstructions as r, generateHookTemplate as s, generateCookieHook as t };
531
+ `.trim()}function s(e){return`This hook script monitors ${e} operations. Inject it into the target page via page_evaluate or console_execute to activate.`}export{t as a,n as c,r as i,a as n,e as o,s as r,i as s,o as t};
@@ -0,0 +1 @@
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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";import{$n as n,Bn as r,Fn as i,Gn as a,Hn as o,In as s,Jn as c,Kn as l,Ln as u,Pn as d,Qn as f,Rn as p,Un as m,Vn as h,Wn as g,Xn as _,Yn as v,Zn as y,a as b,ar as x,cr as S,dr as C,er as ee,fr as te,hr as ne,ir as re,nr as ie,or as ae,pr as w,qn as T,rr as oe,sr as E,tr as D,ur as O,zn as se}from"./constants-Cp6hBrrx.mjs";import{r as k}from"./response-C7rKQst4.mjs";import{c as A,d as ce,f as le,i as ue,l as de,n as j,p as M,r as N,s as P,t as F}from"./ToolCatalog-D_IKl1Hu.mjs";import{t as I}from"./ProcessRegistry-Hf12LlR9.mjs";import{t as L}from"./search-defaults-D2bY-rzH.mjs";import{Worker as R}from"worker_threads";function z(e,t){return P(e,t)}function B(e,n,r,i){if(fe(e,n),r<=0)return;let a=r*60*1e3,o=new Set(i),s=setTimeout(()=>{t.info(`Domain "${n}" TTL expired (${r}min) — auto-deactivating ${o.size} tools`),U(e,n).catch(e=>{t.error(`Failed to deactivate domain "${n}" on TTL expiry:`,e)})},a);e.domainTtlEntries.set(n,{timer:s,ttlMs:a,toolNames:o})}function V(e,n){let r=e.domainTtlEntries.get(n);if(!r)return;clearTimeout(r.timer);let i=r.ttlMs/6e4;r.timer=setTimeout(()=>{t.info(`Domain "${n}" TTL expired (${i}min) — auto-deactivating`),U(e,n).catch(e=>{t.error(`Failed to deactivate domain "${n}" on TTL expiry:`,e)})},r.ttlMs)}function H(e,t){let n=N(t);if(!n){let r=e.extensionToolsByName.get(t);r&&(n=r.domain)}n&&e.domainTtlEntries.has(n)&&V(e,n)}function fe(e,t){let n=e.domainTtlEntries.get(t);n&&(clearTimeout(n.timer),e.domainTtlEntries.delete(t))}async function U(e,n){let r=e.domainTtlEntries.get(n);if(!r)return;let i=r.toolNames;e.domainTtlEntries.delete(n);let a=0;for(let n of i){if(!e.activatedToolNames.has(n))continue;let r=e.activatedRegisteredTools.get(n);if(r)try{r.remove()}catch(e){t.warn(`Failed to remove tool "${n}" on domain TTL expiry:`,e)}e.router.removeHandler(n),e.activatedToolNames.delete(n),e.activatedRegisteredTools.delete(n);let i=e.extensionToolsByName.get(n);i&&(i.registeredTool=void 0),a++}if(a>0){e.enabledDomains.delete(n);for(let t of e.activatedToolNames)if(N(t)===n){e.enabledDomains.add(n);break}for(let t of e.selectedTools)if(N(t.name)===n){e.enabledDomains.add(n);break}try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after domain TTL expiry:`,e)}t.info(`Domain "${n}" deactivated: removed ${a} tools`)}}const pe=[[`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 me=class e{reverseMap;constructor(){this.reverseMap=e.buildReverseMap(pe)}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=ee;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 he=p,ge=u;var _e=class e{queryCategoryProfiles;cjkQueryAliases;synonymExpander;constructor(t){this.queryCategoryProfiles=t?.queryCategoryProfiles===void 0?e.compileQueryCategoryProfiles(L.queryCategoryProfiles):e.compileQueryCategoryProfiles(t.queryCategoryProfiles),this.cjkQueryAliases=t?.cjkQueryAliases===void 0?e.compileCjkQueryAliasRules(L.cjkQueryAliases):e.compileCjkQueryAliasRules(t.cjkQueryAliases),this.synonymExpander=new me}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 he}getB(){return ge}},ve=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 R(e),typeof this.worker.unref==`function`&&this.worker.unref(),I.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})}},W=class e{compiledRules;constructor(t){this.compiledRules=t===void 0?e.compileIntentToolBoostRules(L.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}},ye=class e{trigramSets;constructor(t){this.trigramSets=t.map(t=>e.extractTrigrams(t))}search(t,n=x){let r=e.extractTrigrams(t);if(r.size===0)return new Map;let i=new Map;for(let t=0;t<this.trigramSets.length;t++){let a=this.trigramSets[t];if(a.size===0)continue;let o=e.jaccardSimilarity(r,a);o>=n&&i.set(t,o)}return i}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 G=.1,K=.8;var be=class{vectorWeight;lastVectorRanking=null;topN;learnUp;learnDown;constructor(e){this.vectorWeight=e?.vectorCosineWeight??S,this.topN=Math.max(1,te),this.learnUp=Math.max(0,w),this.learnDown=Math.max(0,C)}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(G,this.vectorWeight-this.learnDown):n<this.topN?this.vectorWeight=Math.min(K,this.vectorWeight+this.learnUp):n<this.topN*2?this.vectorWeight=Math.min(K,this.vectorWeight+this.learnUp*.3):this.vectorWeight=Math.max(G,this.vectorWeight-this.learnDown),this.vectorWeight!==r}};const xe=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(`.`)),q={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&&!xe.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,`_`)}};function J(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 Se(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=d/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 Ce(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 Y(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 we(e,t){for(let n=0;n<e.length;n++){let r=t[n];r<=0||(e[n]=e[n]+r*f*_)}}function Te(e){let{scores:t,docs:n,affinityGraph:r}=e,a=[];for(let e=0;e<t.length;e++)t[e]>0&&a.push({idx:e,score:t[e]});if(a.length!==0){if(a.sort((e,t)=>t.score-e.score),r.size>0){let e=Math.min(s,a.length);for(let n=0;n<e;n++){let{idx:e,score:o}=a[n],s=r.get(e);if(!s)continue;let c=1/(1+n);for(let{docIndex:e,weight:n}of s)t[e]>0&&(t[e]+=o*n*c*i)}}if(o>0&&a.length>=o){let e=a.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<o))for(let r=0;r<n.length;r++)t[r]>0&&n[r].domain===e&&(t[r]*=h)}}}function Ee(e,t,n,r){return`${`${e}\0${t}`}${!n||n.size===0?``:`\0${[...n].toSorted().join(`|`)}`}${r?`\0${r}`:``}`}var De=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()}},Oe=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;constructor(e,t,r,i,a,o){let s=e??F;this.domainOverrides=t,this.domainScoreMultipliers=r,this.toolScoreMultipliers=i,this.docCount=s.length,this.bm25Scorer=new _e(a);let c=a?.vectorEnabled??O;this.embeddingEngine=c?new ve:null,this.feedbackTracker=new be(a),this.intentBoost=new W(a?.intentToolBoostRules);let u=0;for(let e=0;e<s.length;e++){let t=s[e],r=this.domainOverrides?.get(t.name)??N(t.name),i=t.description??``,a=q.extractShortDescription(i),c=this.bm25Scorer.tokenise(t.name),l=new Set(c),d=r?this.bm25Scorer.tokenise(r):[],f=this.bm25Scorer.tokenise(i),p=q.extractParamTokens(t.inputSchema),m=[...c,...d,...f,...p],h={name:t.name,domain:r,description:i,shortDescription:a,tokens:m,length:m.length,nameTokens:c,nameTokenSet:l,nameTokenCount:l.size};this.docs.push(h),this.docNameIndex.set(t.name,e),u+=h.length;let _=new Map;for(let e of c){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,3),_.set(e,t)}for(let e of d){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,2),_.set(e,t)}for(let e of f){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,1),_.set(e,t)}for(let e of p){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,g),_.set(e,t)}let v=o?.get(t.name);if(v)for(let e of v){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,n),_.set(e,t)}for(let[t,{tf:n,weight:r}]of _){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?u/this.docCount:1,this.sortedKeys=[...this.invertedIndex.keys()].toSorted(),this.affinityGraph=Se(this.docs),this.trigramIndex=new ye(this.docs.map(e=>e.name)),this.queryCache=new De(l)}async search(e,t=10,n,i,o){let s=this.bm25Scorer.tokenise(e);if(s.length===0)return[];if(s.length>6){let e=s.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));s=s.filter(e=>n.has(e))}}let c=this.bm25Scorer.tokenise(s.join(` `),{expandSynonyms:!0}).filter(e=>!s.includes(e));s.push(...c);let l=(()=>{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=J(t,e,n);o<0&&e.includes(`_`)&&(o=J(t,e.replace(/_/g,`-`),r),o<0&&(o=J(t,e.replace(/_/g,` `),r))),!(o<0)&&(o<a||o===a&&e.length>(i?.length??0))&&(i=e,a=o)}return i})(),u=Ee(e,t,i,this.extensionEtag),d=this.queryCache.get(u);if(d&&this.isCachedEntryFresh(d)){let e=n??new Set;return d.results.map(t=>({...t,isActive:e.has(t.name)}))}let f=this.intentBoost.resolveIntentToolBonuses(e),p=new Float64Array(this.docCount);for(let e of s)if(this.scoreToken(e,p),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,p,a)}}await this.applyRRFFusion(s,e,p);let h=this.bm25Scorer.detectQueryCategoryBoosts(e),g=e.toLowerCase().replace(/[\s-]+/g,`_`),_=new Set(s);for(let e=0;e<this.docCount;e++){let t=this.docs[e],n=f.get(t.name)??0;if(p[e]<=0&&n<=0)continue;if(t.name===g){p[e]*=m;continue}let i=0;for(let e of s)t.nameTokenSet.has(e)&&i++;if(i>0&&t.nameTokenCount>0&&_.size>0){let n=i/t.nameTokenCount,a=i/_.size;p[e]*=1+r*n*a}let a=t.domain?this.domainScoreMultipliers?.get(t.domain)??1:1;if(a!==1&&(p[e]*=a),t.domain&&h.size>0){let n=h.get(t.domain);n!==void 0&&n>1&&(p[e]*=n)}let o=this.toolScoreMultipliers?.get(t.name)??1;o!==1&&(p[e]*=o)}if(this.applyIntentBonusBand(p,f),this.applyGraphExpansion(p),this.applyRecencyBoost(p),this.applyTierPenalty(p,i,o),l){let e=this.docNameIndex.get(l);if(e!==void 0){let t=0;for(let e=0;e<this.docCount;e++){let n=p[e];n>t&&(t=n)}let n=Math.max(1,t+1);p[e]+=n}}let v=n??new Set,y=[];for(let e=0;e<this.docCount;e++)if(p[e]>0){let t=this.docs[e];y.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(p[e]*1e3)/1e3,isActive:v.has(t.name)})}y.sort((e,t)=>t.score-e.score);let b=y.slice(0,t);return this.queryCache.set(u,{results:b,vectorWeightAtCache:this.feedbackTracker.getVectorWeight(),cachedAtMs:Date.now()}),b}isCachedEntryFresh(e){let t=this.feedbackTracker.getVectorWeight();return Math.abs(t-e.vectorWeightAtCache)<=se}applyRecencyBoost(e){if(T<=0||this.recencyTracker.size===0)return;let t=v;if(t<=0)return;let n=Date.now(),r=T;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 r=n?n===`full`?ie:n===`workflow`?re:oe:D;if(!(r>=1||r<=0))for(let n=0;n<this.docCount;n++){if(e[n]<=0)continue;let i=this.docs[n].domain;i&&(t.has(i)||(e[n]*=r))}}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=u,s=p;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=y,i=ae,a=Ce(n),o=Y(this.trigramIndex.search(t,x)),s,c;if(E>0&&a.size>0){let e=[...a.entries()].find(([,e])=>e===0)?.[0];(e===void 0?0:n[e])>=E?(s=new Map,c=new Map):(s=await this.computeVectorCosineScores(t),c=Y(s))}else s=await this.computeVectorCosineScores(t),c=Y(s);let l=new Map;for(let[e,t]of c)l.set(this.docs[e].name,t);this.feedbackTracker.recordVectorRanking(l);let u=new Float64Array(this.docCount);for(let e=0;e<this.docCount;e++){let t=0,n=a.get(e);n!==void 0&&(t+=1/(r+n));let s=o.get(e);s!==void 0&&i>0&&(t+=i*(1/(r+s)));let l=c.get(e);l!==void 0&&this.feedbackTracker.getVectorWeight()>0&&(t+=this.feedbackTracker.getVectorWeight()*(1/(r+l))),u[e]=t}we(n,u)}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>c;){let e=this.recencyTracker.keys().next().value;if(e===void 0)break;this.recencyTracker.delete(e)}}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){Te({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 ke(e){let t=new Set(j(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=N(n);i&&t.add(i)}return t}function Ae(e){return e.baseTier}function je(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 A();let t=new Map(F.map(e=>[e.name,e]));for(let n of e.extensionToolsByName.values())t.set(n.name,n.tool);return[...t.values()]}async function Me(e){return new Map((await Z(e)).map(e=>[e.name,e]))}const Q=new WeakMap;function Ne(){let e=new Map;for(let t of le())if(t.sceneKeywords)for(let[n,r]of Object.entries(t.sceneKeywords))r.length>0&&e.set(n,r);return e}function Pe(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 Fe(e){await A();let t=Pe(e),n=Q.get(e);if(n?.signature===t)return n.engine;let r=await Z(e),i=je(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`,ne),o.set(`run_extension_workflow`,1.35),o.set(`list_extension_workflows`,1.25));let s=new Oe(r,i,a,o,e.config.search,Ne());return s.extensionEtag=t,Q.set(e,{signature:t,engine:s}),s}function Ie(e){let t={};for(let e of M())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=M().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 Le=e({handleActivateDomain:()=>$});async function $(e,n){let r=typeof n.domain==`string`?n.domain:``;if(!r)return k(JSON.stringify({success:!1,error:`domain must be a non-empty string`}));let i=new Set(ce());for(let t of e.extensionToolsByName.values())i.add(t.domain);if(!i.has(r))return k(JSON.stringify({success:!1,error:`Unknown domain "${r}". Valid: ${[...i].join(`, `)}`}));await de(r);let a=typeof n.ttlMinutes==`number`?n.ttlMinutes:b,o=[...ue([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.registerSingleTool(t);e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,n);let r=e.extensionToolsByName.get(t.name);r&&(r.registeredTool=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=z(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})}B(e,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`),k(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{Ae as a,ke as c,X as i,H as l,$ as n,Fe as o,Ie as r,Me as s,Le as t,z as u};
@@ -0,0 +1,2 @@
1
+ import{Z as e,Zr as t}from"./constants-Cp6hBrrx.mjs";import{_ as n,b as r,d as i,m as a,t as o,u as s}from"./Win32API-Bhi5xFBe.mjs";import{i as c}from"./NativeMemoryManager.utils-DM4NC3FE.mjs";import{randomUUID as l}from"node:crypto";var u=class{freezes=new Map;writeHistory=[];undoneStack=[];async writeValue(e,u,d,f){let p=BigInt(u.startsWith(`0x`)?u:`0x${u}`),{patternBytes:m}=c(d,f),h=Buffer.from(m),g=r(e,!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:e,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>t&&(this.writeHistory=this.writeHistory.slice(-t)),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(t,i,u,d,f){let p=BigInt(i.startsWith(`0x`)?i:`0x${i}`),{patternBytes:m}=c(u,d),h=Buffer.from(m),g=f??e,_={id:l(),pid:t,address:`0x${p.toString(16).toUpperCase()}`,value:Array.from(h),valueType:d,intervalMs:g,isActive:!0};return _.timer=setInterval(()=>{try{let e=r(t,!0);try{let{oldProtect:t}=a(e,p,h.length,s.READWRITE);n(e,p,h),a(e,p,h.length,t)}finally{o(e)}}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};
@@ -0,0 +1 @@
1
+ import{An as e,jn as t}from"./constants-Cp6hBrrx.mjs";import{n,t as r}from"./formatAddress-C7j2fDlM.mjs";import{randomUUID as i}from"node:crypto";function a(e){switch(e){case`byte`:case`int8`:return 1;case`int16`:case`uint16`:return 2;case`int32`:case`uint32`:case`float`:return 4;case`int64`:case`uint64`:case`double`:case`pointer`:return 8;case`hex`:case`string`:return 0;default:return 4}}function o(e){switch(e){case`byte`:case`int8`:return 1;case`int16`:case`uint16`:return 2;case`int32`:case`uint32`:case`float`:return 4;case`int64`:case`uint64`:case`double`:case`pointer`:return 8;default:return 1}}function s(e){switch(e){case`byte`:return e=>e.readUInt8(0);case`int8`:return e=>e.readInt8(0);case`int16`:return e=>e.readInt16LE(0);case`uint16`:return e=>e.readUInt16LE(0);case`int32`:return e=>e.readInt32LE(0);case`uint32`:return e=>e.readUInt32LE(0);case`int64`:return e=>e.readBigInt64LE(0);case`uint64`:case`pointer`:return e=>e.readBigUInt64LE(0);case`float`:return e=>e.readFloatLE(0);case`double`:return e=>e.readDoubleLE(0);default:return e=>e.readInt32LE(0)}}function c(e){return e===`float`?(e,t)=>Math.abs(Number(e)-Number(t))<1e-6:e===`double`?(e,t)=>Math.abs(Number(e)-Number(t))<1e-12:e===`int64`||e===`uint64`||e===`pointer`?(e,t)=>e===t:(e,t)=>Number(e)===Number(t)}function l(e,t){let n=s(t),r=c(t),i=t===`int64`||t===`uint64`||t===`pointer`?(e,t)=>{let n=BigInt(e),r=BigInt(t);return n<r?-1:+(n>r)}:(e,t)=>Number(e)-Number(t);switch(e){case`exact`:return(e,t,i,a)=>i?r(n(e),n(i)):!1;case`unknown_initial`:return()=>!0;case`changed`:return(e,t,i,a)=>t?!r(n(e),n(t)):!1;case`unchanged`:return(e,t,i,a)=>t?r(n(e),n(t)):!0;case`increased`:return(e,t,r,a)=>t?i(n(e),n(t))>0:!1;case`decreased`:return(e,t,r,a)=>t?i(n(e),n(t))<0:!1;case`greater_than`:return(e,t,r,a)=>r?i(n(e),n(r))>0:!1;case`less_than`:return(e,t,r,a)=>r?i(n(e),n(r))<0:!1;case`between`:return(e,t,r,a)=>!r||!a?!1:i(n(e),n(r))>=0&&i(n(e),n(a))<=0;case`not_equal`:return(e,t,i,a)=>i?!r(n(e),n(i)):!1;default:return()=>!1}}const u=new Map;function d(e,t){let n=`${e}:${t}`,r=u.get(n);return r||(r=l(e,t),u.set(n,r)),r}function f(e,t,n,r,i,a){return d(i,a)(e,t,n,r)}var p=class{sessions=new Map;maxSessions;sessionTtlMs;constructor(n=e,r=t){this.maxSessions=n,this.sessionTtlMs=r}createSession(e,t){if(this.cleanup(),this.sessions.size>=this.maxSessions){let e=null,t=1/0;for(let[n,r]of this.sessions)r.createdAt<t&&(t=r.createdAt,e=n);e&&this.sessions.delete(e)}let n=i(),r=t.alignment??o(t.valueType),a=Date.now(),s={id:n,pid:e,valueType:t.valueType,alignment:r,createdAt:a,lastScanAt:a,scanCount:0,addresses:[],previousValues:new Map};return this.sessions.set(n,s),n}getSession(e){let t=this.sessions.get(e);if(!t)throw Error(`Scan session not found: ${e}`);if(Date.now()-t.lastScanAt>this.sessionTtlMs)throw this.sessions.delete(e),Error(`Scan session expired: ${e}`);return t}updateSession(e,t,n){let r=this.getSession(e);r.addresses=t,r.previousValues=n,r.lastScanAt=Date.now(),r.scanCount++}listSessions(){this.cleanup();let e=[],t=Date.now();for(let n of this.sessions.values()){let r=t-n.createdAt,i=Math.floor(r/6e4),a=Math.floor(r%6e4/1e3);e.push({id:n.id,pid:n.pid,valueType:n.valueType,addressCount:n.addresses.length,scanCount:n.scanCount,age:i>0?`${i}m${a}s`:`${a}s`})}return e}deleteSession(e){return this.sessions.delete(e)}cleanup(){let e=Date.now(),t=0;for(let[n,r]of this.sessions)e-r.lastScanAt>this.sessionTtlMs&&(this.sessions.delete(n),t++);return t}exportSession(e){let t=this.getSession(e),n={...t,addresses:t.addresses.map(e=>r(e)),previousValues:Array.from(t.previousValues.entries()).map(([e,t])=>[r(e),t.toString(`hex`)])};return JSON.stringify(n)}importSession(e){let t=JSON.parse(e),r=i(),a=Date.now(),o=new Map;if(Array.isArray(t.previousValues))for(let[e,r]of t.previousValues)typeof e==`string`&&typeof r==`string`&&o.set(n(e),Buffer.from(r,`hex`));let s=[];if(Array.isArray(t.addresses))for(let e of t.addresses)typeof e==`string`&&s.push(n(e));let c={id:r,pid:t.pid,valueType:t.valueType,alignment:t.alignment??4,createdAt:a,lastScanAt:a,scanCount:t.scanCount??0,addresses:s,previousValues:o};return this.sessions.set(r,c),r}};const m=new p;export{p as MemoryScanSessionManager,o as n,a as r,m as scanSessionManager,f as t};
@@ -0,0 +1 @@
1
+ import{Dn as e,En as t,Mn as n,On as r,kn as i}from"./constants-Cp6hBrrx.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{t as o}from"./factory-Cx_1LorX.mjs";import{i as s}from"./NativeMemoryManager.utils-DM4NC3FE.mjs";import{t as c}from"./NativeMemoryManager.impl-CI554XbY.mjs";import{n as l,t as u}from"./formatAddress-C7j2fDlM.mjs";import{n as d,r as f,scanSessionManager as p,t as m}from"./MemoryScanSession-CaxAjZJf.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,n,i){let o=performance.now(),c=i.valueType,l=f(c),m=i.alignment??d(c),h=i.maxResults??r;if(l===0)return this.patternFirstScan(e,n,c,i);let{patternBytes:g}=s(n,c===`pointer`?`uint64`:c);if(g.length===0)throw new a(`VALIDATION`,`Invalid pattern for type ${c}: "${n}"`);let _=Buffer.from(g),v=p.createSession(e,i),y=[],b=new Map,x=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(x,i),t=e.length,n=0;for(let r of e){if(i.onProgress&&i.onProgress(n,t),n++,y.length>=h)break;let e=r.baseAddress,a=r.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,t).map(u);return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:C,totalMatches:y.length,truncated:y.length>t,elapsed:S}}async nextScan(e,n,r,i){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(r!==void 0){let{patternBytes:e}=s(r,d===`pointer`?`uint64`:d);v=Buffer.from(e)}if(i!==void 0){let{patternBytes:e}=s(i,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 t;try{t=this.provider.readMemory(S,e,_).data}catch{continue}let r=g.get(e)??null;m(t,r,v,y,n,d)&&(b.push(e),x.set(e,Buffer.from(t)))}}finally{this.provider.closeProcess(S)}p.updateSession(e,b,x);let C=`${(performance.now()-o).toFixed(1)}ms`,w=b.slice(0,t).map(u);return{sessionId:e,matchCount:b.length,scanNumber:c.scanCount,addresses:w,totalMatches:b.length,truncated:b.length>t,elapsed:C}}async unknownInitialScan(e,r){let i=performance.now(),o=r.valueType,s=f(o),c=r.alignment??d(o),l=r.maxResults??n;if(s===0)throw new a(`VALIDATION`,`Unknown initial scan is not supported for variable-length types`);let m=p.createSession(e,r),h=[],g=new Map,_=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(_,r),t=e.length,n=0;for(let i of e){if(r.onProgress&&r.onProgress(n,t),n++,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()-i).toFixed(1)}ms`;return{sessionId:m,matchCount:h.length,scanNumber:1,addresses:h.slice(0,t).map(u),totalMatches:h.length,truncated:h.length>t,elapsed:v}}async pointerScan(e,n,r={}){let a=performance.now(),o=r.maxResults??i,s=l(n),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,t),totalFound:f.length,elapsed:g}}async groupScan(n,i,o){let c=performance.now();if(i.length===0)throw new a(`VALIDATION`,`Group scan requires at least one value pattern`);let l=Math.max(...i.map(e=>e.offset+f(e.type)));if(l>e)throw new a(`VALIDATION`,`Group pattern too large: ${l} bytes (max ${e})`);let d=Array.from({length:l},()=>0),m=Array.from({length:l},()=>0);for(let e of i){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(n,_),y=[],b=this.provider.openProcess(n,!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,t).map(u),totalMatches:y.length,truncated:y.length>t,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,n,i,o){let s=performance.now(),c=i===`pointer`?`uint64`:i,d=await this.nmm.scanMemory(e,n,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,t).map(u),totalMatches:d.addresses.length,truncated:h.length>t,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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-sBC6IdRT.mjs";import{v as t,y as n}from"./Win32API-Bhi5xFBe.mjs";import{n as r}from"./concurrency-CcK46d0h.mjs";import{t as i}from"./factory-Cx_1LorX.mjs";import{i as a,t as o}from"./NativeMemoryManager.utils-DM4NC3FE.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-Bhi5xFBe.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-Bhi5xFBe.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-Bhi5xFBe.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};
@@ -0,0 +1 @@
1
+ import{u as e,v as t}from"./Win32API-Bhi5xFBe.mjs";function n(){return t()}function r(e,t){let n=[],r=[];switch(t){case`hex`:{let t=e.trim().split(/\s+/);for(let e of t)if(e===`??`||e===`**`||e===`?`)n.push(0),r.push(0);else{let t=parseInt(e,16);isNaN(t)||(n.push(t),r.push(1))}break}case`int32`:{let t=parseInt(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(4);e.writeInt32LE(t,0),n.push(...e),r.push(1,1,1,1)}break}case`int64`:{let t=BigInt(e),i=Buffer.allocUnsafe(8);i.writeBigInt64LE(t,0),n.push(...i),r.push(1,1,1,1,1,1,1,1);break}case`float`:{let t=parseFloat(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(4);e.writeFloatLE(t,0),n.push(...e),r.push(1,1,1,1)}break}case`double`:{let t=parseFloat(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(8);e.writeDoubleLE(t,0),n.push(...e),r.push(1,1,1,1,1,1,1,1)}break}case`string`:{let t=Buffer.from(e,`utf8`);n.push(...t),r.push(...t.map(()=>1));break}case`byte`:{let t=parseInt(e)&255;n.push(t),r.push(1);break}case`int8`:{let t=parseInt(e),i=Buffer.allocUnsafe(1);i.writeInt8(t,0),n.push(...i),r.push(1);break}case`int16`:{let t=parseInt(e),i=Buffer.allocUnsafe(2);i.writeInt16LE(t,0),n.push(...i),r.push(1,1);break}case`uint16`:{let t=parseInt(e),i=Buffer.allocUnsafe(2);i.writeUInt16LE(t,0),n.push(...i),r.push(1,1);break}case`uint32`:{let t=parseInt(e)>>>0,i=Buffer.allocUnsafe(4);i.writeUInt32LE(t,0),n.push(...i),r.push(1,1,1,1);break}case`uint64`:case`pointer`:{let t=BigInt(e),i=Buffer.allocUnsafe(8);i.writeBigUInt64LE(t,0),n.push(...i),r.push(1,1,1,1,1,1,1,1);break}}return{patternBytes:n,mask:r}}function i(e,t){let n=[],r=t.length;if(r===0||e.length<r)return n;let i=r-1,a=new Uint32Array(256);a.fill(r);for(let e=0;e<i;e++){let n=t[e];n!==void 0&&(a[n]=i-e)}let o=0;for(;o<=e.length-r;){let s=i;for(;s>=0&&e[o+s]===t[s];)s--;if(s<0){n.push(o),o+=1;continue}let c=e[o+i];if(c===void 0)break;o+=a[c]??r}return n}function a(e,t,n){if(t.length===0)return[];if(n.every(e=>e===1))return i(e,t);let r=[];for(let i=0;i<=e.length-t.length;i++){let a=!0;for(let r=0;r<t.length;r++)if(n[r]===1&&e[i+r]!==t[r]){a=!1;break}a&&r.push(i)}return r}function o(t){return(t&e.EXECUTE)!==0||(t&e.EXECUTE_READ)!==0||(t&e.EXECUTE_READWRITE)!==0}export{r as i,o as n,n as r,a as t};
@@ -0,0 +1 @@
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-Bhi5xFBe.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};