@jshookmcp/jshook 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -661
- package/README.md +32 -49
- package/README.zh.md +32 -47
- package/dist/AntiCheatDetector-B6d4Qe9D.mjs +1 -0
- package/dist/BrowserSessionCoordinator-BJ-HOxo0.mjs +1 -0
- package/dist/CacheAdapters-CsNtQIR8.mjs +1 -0
- package/dist/CodeInjector-Cll_7bLJ.mjs +1 -0
- package/dist/ConsoleMonitor-CxDJV15E.mjs +306 -0
- package/dist/DOMInspector-C19J4zeq.mjs +95 -0
- package/dist/DarwinAPI-ZfQdpLNI.mjs +1 -0
- package/dist/DetailedDataManager-DmQ1LT-W.mjs +1 -0
- package/dist/EventBus-DL8iLA09.mjs +1 -0
- package/dist/EvidenceGraphBridge-BtbwXsLC.mjs +1 -0
- package/dist/ExtensionManager-BD724zkO.mjs +1 -0
- package/dist/ExtensionManager.tools-oVMJgPcN.mjs +1 -0
- package/dist/FingerprintManager-DT0EAUEo.mjs +1 -0
- package/dist/HardwareBreakpoint-BUfPdp0f.mjs +1 -0
- package/dist/HeapAnalyzer-B_aqY8oj.mjs +1 -0
- package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs} +66 -101
- package/dist/InstrumentationSession-D_G1ZPyd.mjs +1 -0
- package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +1 -0
- package/dist/MemoryController-X1XNSn1n.mjs +2 -0
- package/dist/MemoryScanSession-DG_F-PjE.mjs +1 -0
- package/dist/MemoryScanner-g1_L1ub5.mjs +1 -0
- package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +1 -0
- package/dist/NativeMemoryManager.utils-BHy1P_jM.mjs +1 -0
- package/dist/NetworkMonitor-B_-au6aV.mjs +185 -0
- package/dist/PEAnalyzer-yWQaGrcx.mjs +1 -0
- package/dist/PageController-Dfsm1_o7.mjs +1 -0
- package/dist/PointerChainEngine-BhCUkmxY.mjs +1 -0
- package/dist/PrerequisiteError-BjCQA-gK.mjs +1 -0
- package/dist/ProcessRegistry-C-bN48oR.mjs +1 -0
- package/dist/ResponseBuilder-BfWP-uaT.mjs +1 -0
- package/dist/ReverseEvidenceGraph-BhSYYdiI.mjs +2 -0
- package/dist/RingBuffer-Dm54ELKT.mjs +1 -0
- package/dist/ScriptManager-LWGPTdvD.mjs +7 -0
- package/dist/ServerRuntimeState-D2bWHqEE.mjs +1 -0
- package/dist/Speedhack-yseDPSZ9.mjs +1 -0
- package/dist/StealthVerifier-BmcxfwSF.mjs +1 -0
- package/dist/StructureAnalyzer-C5lpuZkg.mjs +2 -0
- package/dist/ToolCatalog-CYdD9F5f.mjs +1 -0
- package/dist/ToolError-DWU_z7gp.mjs +1 -0
- package/dist/ToolProbe-C7ZU2x7M.mjs +1 -0
- package/dist/ToolRegistry-C5oB8KP8.mjs +1 -0
- package/dist/ToolRouter.policy-CfhJczkt.mjs +4 -0
- package/dist/TraceRecorder-BiJWBXHX.mjs +272 -0
- package/dist/VersionDetector-CHT36Az0.mjs +9 -0
- package/dist/Win32API-eUCF57l_.mjs +1 -0
- package/dist/Win32Debug-CYrIQBvr.mjs +1 -0
- package/dist/WorkflowEngine-D876meOO.mjs +1 -0
- package/dist/analysis-D4swdMvq.mjs +6 -0
- package/dist/{antidebug-BRKeyt27.mjs → antidebug-7L3ygj_9.mjs} +8 -259
- package/dist/apk-packer-BqXcInnX.mjs +1 -0
- package/dist/artifactRetention-BCPQASm7.mjs +1 -0
- package/dist/artifacts-CkodUM4j.mjs +1 -0
- package/dist/authorization-schema-BOFwSXUN.mjs +1 -0
- package/dist/betterSqlite3-Brtq-SIQ.mjs +1 -0
- package/dist/binary-instrument-DU7V6TUM.mjs +7 -0
- package/dist/binary-secrets-PdMVoyt0.mjs +1 -0
- package/dist/bind-helpers-m2U8glkF.mjs +1 -0
- package/dist/boringssl-inspector-BBaJwwkU.mjs +2 -0
- package/dist/browser-Qqco2rOT.mjs +11 -0
- package/dist/capabilities-CyXuKUl1.mjs +1 -0
- package/dist/chunk-C_pMuVsO.mjs +1 -0
- package/dist/collector-Bpl6qy2L.mjs +1 -0
- package/dist/concurrency-DCr8WQ2M.mjs +1 -0
- package/dist/constants-BYj8Xek8.mjs +1 -0
- package/dist/coordination-CWXW1o8K.mjs +1 -0
- package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
- package/dist/debugger-DyALjYMk.mjs +1 -0
- package/dist/definitions-BWxBke3r.mjs +1 -0
- package/dist/definitions-BYwATKc-.mjs +1 -0
- package/dist/definitions-B_83XfNQ.mjs +1 -0
- package/dist/definitions-Bf3H1EwV.mjs +1 -0
- package/dist/definitions-BftdXgXI.mjs +1 -0
- package/dist/definitions-Bio5XJYy.mjs +1 -0
- package/dist/definitions-C3qNgSn1.mjs +1 -0
- package/dist/definitions-CB6vmOer.mjs +1 -0
- package/dist/definitions-CMZRSy3k.mjs +1 -0
- package/dist/definitions-CQd7yCQH.mjs +1 -0
- package/dist/definitions-CT8ln6GQ.mjs +1 -0
- package/dist/definitions-Cenu6mxo.mjs +1 -0
- package/dist/definitions-D4g-MS10.mjs +1 -0
- package/dist/definitions-D5wl_8HN.mjs +1 -0
- package/dist/definitions-DAQm1Xar.mjs +1 -0
- package/dist/definitions-DP1vgxEY.mjs +1 -0
- package/dist/definitions-DxFNRQNK2.mjs +1 -0
- package/dist/definitions-Ibci7e_L.mjs +1 -0
- package/dist/definitions-OeLvmlQy.mjs +1 -0
- package/dist/definitions-RZYGD_Ey.mjs +1 -0
- package/dist/definitions-Tls8c0A0.mjs +1 -0
- package/dist/definitions-bybDvnG0.mjs +26 -0
- package/dist/definitions-l7TjdE6V.mjs +1 -0
- package/dist/encoding-ycOaz8Vr.mjs +2 -0
- package/dist/ensure-browser-core-DxWC-NTp.mjs +1 -0
- package/dist/evidence-graph-bridge-CV_UdYqj.mjs +1 -0
- package/dist/factory-CKr4fAE1.mjs +1 -0
- package/dist/flat-target-session-DvcQX7J5.mjs +1 -0
- package/dist/formatAddress-vLA_hOJt.mjs +1 -0
- package/dist/graphql-B2TiPEow.mjs +62 -0
- package/dist/handlers-0yKLRIfo.mjs +2 -0
- package/dist/handlers-8zN_vBIz.mjs +1 -0
- package/dist/handlers-B62K4FTc.mjs +1 -0
- package/dist/handlers-BpDlVVVU.mjs +1 -0
- package/dist/handlers-CMJK7m1c.mjs +31 -0
- package/dist/handlers-D2ZOul9p.mjs +54 -0
- package/dist/handlers-D5E40ssn.mjs +5 -0
- package/dist/handlers-DGbdQAgD.mjs +4 -0
- package/dist/handlers-DHO3rjsW.mjs +1 -0
- package/dist/handlers-FJ80VzUI.mjs +2 -0
- package/dist/handlers-VHWrxbM_.mjs +1 -0
- package/dist/handlers-l8QIKqBj.mjs +2 -0
- package/dist/handlers-mPFiNPe8.mjs +302 -0
- package/dist/{handlers-Dz9PYsCa.mjs → handlers-yo_xYzT8.mjs} +118 -904
- package/dist/handlers.impl-D9Hh8Bgl.mjs +1 -0
- package/dist/hooks-D4XLfgtV.mjs +600 -0
- package/dist/index.mjs +13 -5240
- package/dist/jadx-search-B_Yse0Zh.mjs +5 -0
- package/dist/logger-sBC6IdRT.mjs +1 -0
- package/dist/maintenance-BUpIukhg.mjs +1 -0
- package/dist/manifest-0Jpt_AQa.mjs +1 -0
- package/dist/manifest-B3fZbSWR.mjs +1 -0
- package/dist/manifest-B7NB2rh2.mjs +1 -0
- package/dist/manifest-BDi4nbH1.mjs +1 -0
- package/dist/manifest-BLDfkE7n.mjs +1 -0
- package/dist/manifest-BcXbB4gf.mjs +1 -0
- package/dist/manifest-Bdnc_vrc.mjs +1 -0
- package/dist/manifest-BuYKgCnp.mjs +1 -0
- package/dist/manifest-CBfNnGPV.mjs +1 -0
- package/dist/manifest-CPS1Xv69.mjs +1 -0
- package/dist/manifest-CQH9FhwI.mjs +1 -0
- package/dist/manifest-CRryuZF4.mjs +1 -0
- package/dist/manifest-CctIumog.mjs +1 -0
- package/dist/manifest-CvTe5ZGV2.mjs +1 -0
- package/dist/manifest-D-5GH0DV.mjs +1 -0
- package/dist/manifest-D3Ssf3IC.mjs +1 -0
- package/dist/manifest-D5ck3NvC.mjs +1 -0
- package/dist/manifest-D9jUUJAu.mjs +1 -0
- package/dist/manifest-DCx6w2XV.mjs +1 -0
- package/dist/manifest-DG19q-Ld.mjs +1 -0
- package/dist/manifest-DLMlD0Zc.mjs +1 -0
- package/dist/manifest-DYpn8w_h.mjs +1 -0
- package/dist/manifest-DYzWI8Xs.mjs +1 -0
- package/dist/manifest-D_obs5F4.mjs +1 -0
- package/dist/manifest-DujQqEQR.mjs +2 -0
- package/dist/manifest-DwL2ik8P.mjs +1 -0
- package/dist/manifest-ItF5P8A12.mjs +1 -0
- package/dist/manifest-KZphqIyX.mjs +1 -0
- package/dist/manifest-LG42zPLY2.mjs +1 -0
- package/dist/manifest-LLdI5m4T.mjs +1 -0
- package/dist/manifest-QYbQXJn0.mjs +1 -0
- package/dist/manifest-RcpX_MyZ.mjs +123 -0
- package/dist/manifest-YgVd8Sgz.mjs +1 -0
- package/dist/manifest-Zy7Odg5J.mjs +1 -0
- package/dist/manifest-ff1H7Pdp.mjs +1 -0
- package/dist/manifest-iuhF6pTL2.mjs +1 -0
- package/dist/manifest-nXHmtMSp2.mjs +1 -0
- package/dist/manifest-xWfu6iLo.mjs +1 -0
- package/dist/manifest-yC16OhL2.mjs +1 -0
- package/dist/manifest-ztWJoXy4.mjs +1 -0
- package/dist/matchesWildcardPattern-BAG6LvX5.mjs +1 -0
- package/dist/modules-BPBcSaM-.mjs +333 -0
- package/dist/mojo-ipc-BhwsdVUW.mjs +9 -0
- package/dist/native/scripts/linux/enum-windows.sh +12 -12
- package/dist/native/scripts/macos/enum-windows.applescript +22 -22
- package/dist/native-j8l473zn.mjs +961 -0
- package/dist/network-T0VRwNPd.mjs +7 -0
- package/dist/outputPaths-B4Ic4RZh.mjs +2 -0
- package/dist/parse-args-Bw413PlW.mjs +1 -0
- package/dist/platform-CzaQtISh.mjs +93 -0
- package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +1 -0
- package/dist/process-CWhsCWrf.mjs +2 -0
- package/dist/proxy-DZFlDsG3.mjs +2 -0
- package/dist/registry-DH4sc1dt.mjs +1 -0
- package/dist/renderer-pid-9tJnZ_9N.mjs +1 -0
- package/dist/response-C7rKQst4.mjs +1 -0
- package/dist/search-defaults-lYBVn_3L.mjs +1 -0
- package/dist/server/plugin-api.d.mts +19 -36
- package/dist/server/plugin-api.mjs +1 -293
- package/dist/shared-state-board-BSjXLUV1.mjs +1 -0
- package/dist/sourcemap-Dh3Ai_ur.mjs +1 -0
- package/dist/ssrf-policy-CsIJGkpd.mjs +1 -0
- package/dist/streaming-BcJ0B6ao.mjs +1 -0
- package/dist/tool-builder-qif8M9-K.mjs +1 -0
- package/dist/transform-DOxzeWPB.mjs +103 -0
- package/dist/types-D9EiE5o9.mjs +1 -0
- package/dist/types-Fz69RzbZ.mjs +1 -0
- package/dist/wasm-CZ_HTfKR.mjs +174 -0
- package/dist/webcrack-C1iYG_EX.mjs +46 -0
- package/dist/workflow-BdwQmARn.mjs +101 -0
- package/package.json +55 -82
- package/src/native/scripts/linux/enum-windows.sh +12 -12
- package/src/native/scripts/macos/enum-windows.applescript +22 -22
- package/dist/AntiCheatDetector-CqGDXmfc.mjs +0 -350
- package/dist/CacheAdapters-jJFy20G-.mjs +0 -80
- package/dist/CodeInjector-BdjRfNx7.mjs +0 -150
- package/dist/ConsoleMonitor-DykL3IAw.mjs +0 -2269
- package/dist/DarwinAPI-ETyy0xyo.mjs +0 -363
- package/dist/DetailedDataManager-HT49OrvF.mjs +0 -217
- package/dist/EventBus-DFKvADm3.mjs +0 -141
- package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +0 -153
- package/dist/ExtensionManager-BDMsY2Dz.mjs +0 -721
- package/dist/FingerprintManager-BN4UQWnX.mjs +0 -96
- package/dist/HardwareBreakpoint-Cc2AFq1Y.mjs +0 -239
- package/dist/HeapAnalyzer-DruMgsgj.mjs +0 -284
- package/dist/InstrumentationSession-DLH0vd-z.mjs +0 -244
- package/dist/MemoryController-CMtviNW_.mjs +0 -167
- package/dist/MemoryScanSession-ITgb_NMi.mjs +0 -278
- package/dist/MemoryScanner-CiL7Z3ey.mjs +0 -428
- package/dist/NativeMemoryManager.impl-D9Lkovvn.mjs +0 -485
- package/dist/NativeMemoryManager.utils-BBlAixF5.mjs +0 -165
- package/dist/PEAnalyzer-DMQ44gen.mjs +0 -385
- package/dist/PageController-BPJNqqBN.mjs +0 -431
- package/dist/PointerChainEngine-K7wN8Z-w.mjs +0 -325
- package/dist/PrerequisiteError-TuyZIs6n.mjs +0 -20
- package/dist/ProcessRegistry-zGg12QbE.mjs +0 -74
- package/dist/ResponseBuilder-CJXWmWNw.mjs +0 -143
- package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +0 -269
- package/dist/ScriptManager-ZuWD-0Jg.mjs +0 -3003
- package/dist/Speedhack-D-z0umeT.mjs +0 -156
- package/dist/StealthVerifier-BWmPgQsv.mjs +0 -135
- package/dist/StructureAnalyzer-Cav5AVSL.mjs +0 -429
- package/dist/ToolCatalog-5OJdMiF0.mjs +0 -582
- package/dist/ToolError-jh9whhMd.mjs +0 -15
- package/dist/ToolProbe-DbCFGyrg.mjs +0 -45
- package/dist/ToolRegistry-B9krbTtI.mjs +0 -180
- package/dist/ToolRouter.policy-BGDAGyeH.mjs +0 -344
- package/dist/TraceRecorder-B41Z5XBj.mjs +0 -1286
- package/dist/VersionDetector-K3V4vGsw.mjs +0 -104
- package/dist/Win32API-C2kjj0ze.mjs +0 -346
- package/dist/Win32Debug-CKrGOTpo.mjs +0 -274
- package/dist/WorkflowEngine-DJ6M4opp.mjs +0 -569
- package/dist/analysis-BHeJW2Nb.mjs +0 -1234
- package/dist/artifactRetention-CPXkUJXp.mjs +0 -598
- package/dist/artifacts-DkfosXH3.mjs +0 -59
- package/dist/authorization-schema-DRqyJMSk.mjs +0 -31
- package/dist/betterSqlite3-DLSBZodi.mjs +0 -74
- package/dist/binary-instrument--V3MAhJ4.mjs +0 -971
- package/dist/bind-helpers-ClV34xdn.mjs +0 -42
- package/dist/boringssl-inspector-Bo_LOLaS.mjs +0 -180
- package/dist/browser-Dx3_S2cG.mjs +0 -4369
- package/dist/capabilities-CcHlvWgK.mjs +0 -33
- package/dist/chunk-CjcI7cDX.mjs +0 -15
- package/dist/concurrency-Drev_Vz9.mjs +0 -41
- package/dist/constants-CDZLOoVv.mjs +0 -534
- package/dist/coordination-DgItD9DL.mjs +0 -259
- package/dist/debugger-RS3RSAqs.mjs +0 -1288
- package/dist/definitions-BEoYofW5.mjs +0 -47
- package/dist/definitions-BRaefg3u.mjs +0 -365
- package/dist/definitions-BbkvZkiv.mjs +0 -96
- package/dist/definitions-BtWSHJ3o.mjs +0 -17
- package/dist/definitions-C1gCHO0i.mjs +0 -43
- package/dist/definitions-CDOg_b-l.mjs +0 -138
- package/dist/definitions-CVPD9hzZ.mjs +0 -54
- package/dist/definitions-Cea8Lgl7.mjs +0 -94
- package/dist/definitions-DAgIyjxM.mjs +0 -10
- package/dist/definitions-DJA27nsL.mjs +0 -66
- package/dist/definitions-DKPFU3LW.mjs +0 -25
- package/dist/definitions-DPRpZQ96.mjs +0 -47
- package/dist/definitions-DUE5gmdn.mjs +0 -18
- package/dist/definitions-DYVjOtxa.mjs +0 -26
- package/dist/definitions-DcYLVLCo.mjs +0 -37
- package/dist/definitions-Pp5LI2H4.mjs +0 -27
- package/dist/definitions-j9KdHVNR.mjs +0 -14
- package/dist/definitions-uzkjBwa7.mjs +0 -258
- package/dist/definitions-va-AnLuQ.mjs +0 -28
- package/dist/encoding-DJeqHmpd.mjs +0 -1079
- package/dist/evidence-graph-bridge-DcYizFk2.mjs +0 -136
- package/dist/factory-C90tBff6.mjs +0 -575
- package/dist/flat-target-session-Dgax2Cy3.mjs +0 -29
- package/dist/formatAddress-nnMvEohD.mjs +0 -17
- package/dist/graphql-CoHrhweh.mjs +0 -1197
- package/dist/handlers-4jmR0nMs.mjs +0 -898
- package/dist/handlers-BAHPxcch.mjs +0 -789
- package/dist/handlers-BOs9b907.mjs +0 -2600
- package/dist/handlers-BWXEy6ef.mjs +0 -917
- package/dist/handlers-Bndn6QvE.mjs +0 -111
- package/dist/handlers-BqC4bD4s.mjs +0 -681
- package/dist/handlers-BtYq60bM2.mjs +0 -276
- package/dist/handlers-BzgcB4iv.mjs +0 -799
- package/dist/handlers-CRyRWj2b.mjs +0 -859
- package/dist/handlers-CVv2H1uq.mjs +0 -592
- package/dist/handlers-Dl5a7JS4.mjs +0 -572
- package/dist/handlers-Dx2d7jt7.mjs +0 -2537
- package/dist/handlers-HujRKC3b.mjs +0 -661
- package/dist/handlers.impl-XWXkQfyi.mjs +0 -807
- package/dist/hooks-B1B8NRHL.mjs +0 -898
- package/dist/logger-Dh_xb7_2.mjs +0 -93
- package/dist/maintenance-PRMkLVRW.mjs +0 -835
- package/dist/manifest-67Bok-Si.mjs +0 -58
- package/dist/manifest-6lNTMZAB2.mjs +0 -87
- package/dist/manifest-B2duEHiH.mjs +0 -90
- package/dist/manifest-B6EY9Vm8.mjs +0 -57
- package/dist/manifest-B6nKSbyY.mjs +0 -95
- package/dist/manifest-BL8AQNPF.mjs +0 -106
- package/dist/manifest-BSZvJJmV.mjs +0 -47
- package/dist/manifest-BU7qzUyX.mjs +0 -418
- package/dist/manifest-Bl62e8WK.mjs +0 -49
- package/dist/manifest-Bo5cXjdt.mjs +0 -82
- package/dist/manifest-BpS4gtUK.mjs +0 -1347
- package/dist/manifest-Bv65_e2W.mjs +0 -101
- package/dist/manifest-BytNIF4Z.mjs +0 -117
- package/dist/manifest-C-xtsjS3.mjs +0 -81
- package/dist/manifest-CDYl7OhA.mjs +0 -66
- package/dist/manifest-CRZ3xmkD.mjs +0 -61
- package/dist/manifest-CoW6u4Tp.mjs +0 -132
- package/dist/manifest-Cq5zN_8A.mjs +0 -50
- package/dist/manifest-D7YZM_2e.mjs +0 -194
- package/dist/manifest-DE_VrAeQ.mjs +0 -314
- package/dist/manifest-DGsXSCpT.mjs +0 -39
- package/dist/manifest-DJ2vfEuW.mjs +0 -156
- package/dist/manifest-DPXDYhEu.mjs +0 -80
- package/dist/manifest-Dd4fQb0a.mjs +0 -322
- package/dist/manifest-Deq6opGg.mjs +0 -223
- package/dist/manifest-DfJTafJK.mjs +0 -37
- package/dist/manifest-DgOdgN_j.mjs +0 -50
- package/dist/manifest-DlbMW4v4.mjs +0 -47
- package/dist/manifest-DmVfbH0w.mjs +0 -374
- package/dist/manifest-Dog6Ddjr.mjs +0 -109
- package/dist/manifest-DvgU5FWb.mjs +0 -58
- package/dist/manifest-HsfDBs7j.mjs +0 -50
- package/dist/manifest-I8oQHvCG.mjs +0 -186
- package/dist/manifest-NvH_a-av.mjs +0 -786
- package/dist/manifest-cEJU1v0Z.mjs +0 -129
- package/dist/manifest-wOl5XLB12.mjs +0 -112
- package/dist/modules-tZozf0LQ.mjs +0 -10635
- package/dist/mojo-ipc-DXNEXEqb.mjs +0 -640
- package/dist/network-CPVvwvFg.mjs +0 -3852
- package/dist/outputPaths-um7lCRY3.mjs +0 -1141
- package/dist/parse-args-B4cY5Vx5.mjs +0 -39
- package/dist/platform-CYeFoTWp.mjs +0 -2161
- package/dist/process-BTbgcVc6.mjs +0 -1306
- package/dist/proxy-r8YN6nP1.mjs +0 -192
- package/dist/registry-Bl8ZQW61.mjs +0 -34
- package/dist/response-CWhh2aLo.mjs +0 -34
- package/dist/shared-state-board-BoZnSoj-.mjs +0 -586
- package/dist/sourcemap-BIDHUVXy.mjs +0 -934
- package/dist/ssrf-policy-Dsqd-DTX.mjs +0 -166
- package/dist/streaming-Dal6utPp.mjs +0 -725
- package/dist/tool-builder-BHJp32mV.mjs +0 -186
- package/dist/transform-DRVgGG90.mjs +0 -1011
- package/dist/types-Bx92KJfT.mjs +0 -4
- package/dist/types-DDBWs9UP.mjs +0 -37
- package/dist/wasm-BYx5UOeG.mjs +0 -1044
- package/dist/webcrack-Be0_FccV.mjs +0 -747
- package/dist/workflow-BpuKEtvn.mjs +0 -725
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{$ as t,et as n,tt as r}from"./constants-BYj8Xek8.mjs";var i=class i{static instance;cache=new Map;cleanupInterval=null;DEFAULT_TTL=t;MAX_TTL=n;MAX_CACHE_SIZE=100;AUTO_EXTEND_ON_ACCESS=!0;EXTEND_DURATION=900*1e3;serializationMemo=new WeakMap;constructor(){this.cleanupInterval=setInterval(()=>this.cleanup(),300*1e3),typeof this.cleanupInterval==`object`&&`unref`in this.cleanupInterval&&this.cleanupInterval.unref()}static getInstance(){return this.instance||=new i,this.instance}shutdown(){this.cleanupInterval&&=(clearInterval(this.cleanupInterval),null),this.cache.clear(),i.instance=void 0,e.info(`DetailedDataManager shut down`)}serializeWithMemo(e){if(typeof e==`object`&&e){let t=this.serializationMemo.get(e);if(t)return t}let t=JSON.stringify(e),n={json:t,size:t.length};return typeof e==`object`&&e&&this.serializationMemo.set(e,n),n}isRecord(e){return typeof e==`object`&&!!e}readPathSegment(e,t){return Object(e)[t]}smartHandle(t,n=r){if(t==null||typeof t!=`object`&&typeof t!=`string`||typeof t==`string`&&t.length<=n)return t;let{json:i,size:a}=this.serializeWithMemo(t);return a<=n?t:(e.info(`Data too large (${(a/1024).toFixed(1)}KB), returning summary with detailId`),this.createDetailedResponseWithSize(t,i,a))}createDetailedResponseWithSize(e,t,n){let r=this.storeWithSize(e,n);return{summary:this.generateSummaryFromJson(e,t,n),detailId:r,hint:`Data too large. Use get_detailed_data("${r}") to retrieve full data, or get_detailed_data("${r}", path="key.subkey") for specific part.`,expiresAt:Date.now()+this.DEFAULT_TTL}}store(e,t){let{size:n}=this.serializeWithMemo(e);return this.storeWithSize(e,n,t)}storeWithSize(t,n,r){this.cache.size>=this.MAX_CACHE_SIZE&&this.evictLRU();let i=`detail_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,a=Date.now(),o=r||this.DEFAULT_TTL,s={data:t,expiresAt:a+o,createdAt:a,lastAccessedAt:a,accessCount:0,size:n};return this.cache.set(i,s),e.debug(`Stored detailed data: ${i}, size: ${(n/1024).toFixed(1)}KB, expires in ${o/1e3}s`),i}retrieve(t,n){let r=this.cache.get(t);if(!r)throw Error(`DetailId not found or expired: ${t}`);let i=Date.now();if(i>r.expiresAt)throw this.cache.delete(t),Error(`DetailId expired: ${t}`);return r.lastAccessedAt=i,r.accessCount++,this.AUTO_EXTEND_ON_ACCESS&&r.expiresAt-i<300*1e3&&(r.expiresAt=Math.min(i+this.EXTEND_DURATION,i+this.MAX_TTL),e.debug(`Auto-extended detailId ${t}, new expiry: ${new Date(r.expiresAt).toISOString()}`)),n?this.getByPath(r.data,n):r.data}getByPath(e,t){let n=t.split(`.`),r=e;for(let e of n){if(r==null)throw Error(`Path not found: ${t} (stopped at ${e})`);r=this.readPathSegment(r,e)}return r}generateSummaryFromJson(e,t,n){let r={type:Array.isArray(e)?`array`:typeof e,size:n,sizeKB:(n/1024).toFixed(1)+`KB`,preview:t.substring(0,200)+(n>200?`...`:``)};if(this.isRecord(e)){let t=Object.keys(e);if(r.structure={keys:t.slice(0,50)},Array.isArray(e))r.structure.length=e.length;else{let n=t.filter(t=>typeof e[t]==`function`),i=t.filter(t=>typeof e[t]!=`function`);r.structure.methods=n.slice(0,30),r.structure.properties=i.slice(0,50)}}return r}cleanup(){let t=Date.now(),n=0;for(let[e,r]of this.cache.entries())t>r.expiresAt&&(this.cache.delete(e),n++);n>0&&e.debug(`Cleaned ${n} expired detailed data entries`)}evictLRU(){if(this.cache.size===0)return;let t=null,n=1/0;for(let[e,r]of this.cache.entries())r.lastAccessedAt<n&&(n=r.lastAccessedAt,t=e);if(t){let n=this.cache.get(t);this.cache.delete(t),e.info(`Evicted LRU entry: ${t}, last accessed: ${new Date(n.lastAccessedAt).toISOString()}, access count: ${n.accessCount}`)}}extend(t,n){let r=this.cache.get(t);if(!r)throw Error(`DetailId not found: ${t}`);let i=Date.now();if(i>r.expiresAt)throw Error(`DetailId already expired: ${t}`);let a=n||this.EXTEND_DURATION,o=Math.min(r.expiresAt+a,i+this.MAX_TTL);r.expiresAt=o,e.info(`Extended detailId ${t} by ${a/1e3}s, new expiry: ${new Date(o).toISOString()}`)}getStats(){let e=0,t=0,n=Array.from(this.cache.values());for(let r of n)e+=r.size,t+=r.accessCount;return{cacheSize:this.cache.size,maxCacheSize:this.MAX_CACHE_SIZE,defaultTTLSeconds:this.DEFAULT_TTL/1e3,maxTTLSeconds:this.MAX_TTL/1e3,totalSizeKB:(e/1024).toFixed(1),avgAccessCount:n.length>0?(t/n.length).toFixed(1):`0`,autoExtendEnabled:this.AUTO_EXTEND_ON_ACCESS,extendDurationSeconds:this.EXTEND_DURATION/1e3}}getDetailedStats(){let e=Date.now(),t=Array.from(this.cache.entries()).map(([t,n])=>({detailId:t,sizeKB:(n.size/1024).toFixed(1),createdAt:new Date(n.createdAt).toISOString(),lastAccessedAt:new Date(n.lastAccessedAt).toISOString(),expiresAt:new Date(n.expiresAt).toISOString(),remainingSeconds:Math.max(0,Math.floor((n.expiresAt-e)/1e3)),accessCount:n.accessCount,isExpired:e>n.expiresAt}));return t.sort((e,t)=>new Date(t.lastAccessedAt).getTime()-new Date(e.lastAccessedAt).getTime()),t}clear(){this.cache.clear(),e.info(`Cleared all detailed data cache`)}};export{i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{listeners=new Map;wildcardListeners=[];on(e,t){let n=this.listeners.get(e)??[],r={handler:t,once:!1};return n.push(r),this.listeners.set(e,n),()=>{let t=this.listeners.get(e);if(t){let e=t.indexOf(r);e>=0&&t.splice(e,1)}}}once(e,t){let n=this.listeners.get(e)??[],r={handler:t,once:!0};return n.push(r),this.listeners.set(e,n),()=>{let t=this.listeners.get(e);if(t){let e=t.indexOf(r);e>=0&&t.splice(e,1)}}}onAny(e){let t={handler:e,once:!1};return this.wildcardListeners.push(t),()=>{let e=this.wildcardListeners.indexOf(t);e>=0&&this.wildcardListeners.splice(e,1)}}async emit(e,t){let n=this.listeners.get(e);if(n){let e=[];for(let r=0;r<n.length;r++){let i=n[r];if(i){try{await i.handler(t)}catch{}i.once&&e.push(r)}}for(let t=e.length-1;t>=0;t--)n.splice(e[t],1)}if(this.wildcardListeners.length>0){let n={event:e,payload:t},r=this.wildcardListeners.map(e=>{try{return Promise.resolve(e.handler(n))}catch{return Promise.resolve()}});await Promise.allSettled(r)}}removeAllListeners(e){e?this.listeners.delete(e):(this.listeners.clear(),this.wildcardListeners.length=0)}listenerCount(e){return this.listeners.get(e)?.length??0}};function t(){return new e}function n(e,t,n=500){let r=0;return(i,a)=>{let o=Date.now();(o-r>=n||i===a)&&(r=o,e.emit(`tool:progress`,{progressToken:t,progress:i,total:a,timestamp:new Date().toISOString()}))}}export{t as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{graph;operationNodeMap=new Map;requestNodeMap=new Map;constructor(e){this.graph=e}getString(e){return typeof e==`string`&&e.length>0?e:void 0}getInitiatorLabel(e){let t=this.getString(e.initiator);if(t)return t;let n=this.getString(e.initiatorStack);if(n)return n;let r=e.initiator;if(r&&typeof r==`object`){let e=r;return this.getString(e.stack)??this.getString(e.url)??this.getString(e.type)??this.getString(e.name)}}linkRequestToInitiator(e,t){this.graph.addEdge(e,t,`initiates`)}onOperation(e){let t=null;switch(e.type){case`runtime-hook`:{let n=this.graph.addNode(`function`,e.target,{functionName:e.target,sessionId:e.sessionId,operationId:e.id}),r=this.getString(e.config.scriptId);if(r){let t=this.graph.addNode(`script`,`script:${r}`,{scriptId:r,sessionId:e.sessionId,operationId:e.id});this.graph.addEdge(t.id,n.id,`contains`)}let i=this.graph.addNode(`breakpoint-hook`,`hook:${e.target}`,{hookType:`runtime-hook`,sessionId:e.sessionId,operationId:e.id,config:e.config});this.graph.addEdge(n.id,i.id,`triggers`),t=i.id;break}case`network-intercept`:{let n=this.graph.addNode(`request`,e.target,{url:e.target,sessionId:e.sessionId,operationId:e.id,config:e.config});this.requestNodeMap.set(e.id,n.id);let r=this.getInitiatorLabel(e.config),i=null;if(r){let t=this.graph.addNode(`initiator-stack`,r,{sessionId:e.sessionId,operationId:e.id,initiator:e.config.initiator,initiatorStack:e.config.initiatorStack});this.linkRequestToInitiator(n.id,t.id),i=t.id}let a=this.getString(e.config.initiatorScriptId);if(i&&a){let t=this.graph.addNode(`script`,`script:${a}`,{scriptId:a,sessionId:e.sessionId,operationId:e.id});this.graph.addEdge(i,t.id,`loads`)}t=n.id;break}case`function-trace`:{let n=this.graph.addNode(`function`,e.target,{functionName:e.target,sessionId:e.sessionId,operationId:e.id,traceMode:!0}),r=this.getString(e.config.scriptId);if(r){let t=this.graph.addNode(`script`,`script:${r}`,{scriptId:r,sessionId:e.sessionId,operationId:e.id});this.graph.addEdge(t.id,n.id,`contains`)}t=n.id;break}case`before-load-inject`:t=this.graph.addNode(`script`,e.target,{injectionPoint:`before-load`,sessionId:e.sessionId,operationId:e.id}).id;break}return t&&this.operationNodeMap.set(e.id,t),t}onArtifact(e){let t=this.operationNodeMap.get(e.operationId),n=this.graph.addNode(`captured-data`,`data:${e.operationId}`,{sessionId:e.sessionId,operationId:e.operationId,artifactType:e.type,...e.data});if(t&&this.graph.addEdge(t,n.id,`captures`),e.data.replayMode===`live`){let t=this.graph.addNode(`replay-artifact`,`replay:${e.operationId}`,{sessionId:e.sessionId,operationId:e.operationId,artifactType:e.type,replayMode:e.data.replayMode,requestId:e.data.requestId,url:e.data.url,method:e.data.method,statusCode:e.data.statusCode});this.graph.addEdge(n.id,t.id,`replays`)}}};export{e as EvidenceGraphBridge};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";import{t as n}from"./ToolCatalog-CYdD9F5f.mjs";import{i as r,n as i,r as a,t as o}from"./ExtensionManager.tools-oVMJgPcN.mjs";import{t as s}from"./types-Fz69RzbZ.mjs";import{createHash as c}from"node:crypto";import{existsSync as l,readFileSync as u}from"node:fs";import{basename as d,dirname as f,isAbsolute as p,join as m,relative as ee,resolve as h}from"node:path";import{fileURLToPath as te,pathToFileURL as g}from"node:url";import{readFile as _,readdir as v}from"node:fs/promises";function y(e){let t=e;for(;;){if(l(m(t,`package.json`)))return t;let e=f(t);if(e===t)break;t=e}return h(e,`..`,`..`,`..`,`..`)}const b=y(te(new URL(`.`,import.meta.url))),x=[m(b,`plugins`)],S=[m(b,`workflows`)];function C(e,t){let n=e?.trim();if(!n)return t;let r=n.split(`,`).map(e=>e.trim()).filter(Boolean);return r.length>0?[...new Set(r)]:t}function w(e,t=b){let n=e.map(e=>p(e)?e:h(t,e));return[...new Set(n)].toSorted((e,t)=>e.localeCompare(t))}function T(e){let t=e.trim().match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function E(e,t){let n=T(e),r=T(t);if(!n||!r)return null;let[i,a,o]=n,[s,c,l]=r;return i>s?1:i<s?-1:a>c?1:a<c?-1:o>l?1:o<l?-1:0}function ne(e,t){let n=e.trim();if(!n||n===`*`)return!0;if(n.startsWith(`>=`)){let e=E(t,n.slice(2).trim());return e!==null&&e>=0}if(n.startsWith(`^`)){let e=n.slice(1).trim(),r=T(t),i=T(e);if(!r||!i)return!1;let a=E(t,e);return a!==null&&a>=0&&r[0]===i[0]}if(n.startsWith(`~`)){let e=n.slice(1).trim(),r=T(t),i=T(e);if(!r||!i)return!1;let a=E(t,e);return a!==null&&a>=0&&r[0]===i[0]&&r[1]===i[1]}let r=E(t,n);return r!==null&&r===0}async function re(e){let t=await _(e);return c(`sha256`).update(t).digest(`hex`)}function D(e){return e.trim().toLowerCase().replace(/^0x/,``)}function O(e){return[`1`,`true`].includes(e.toLowerCase())}function k(){let e=process.env.MCP_PLUGIN_SIGNATURE_REQUIRED;return e===void 0||e.trim()===``?process.env.NODE_ENV===`production`:O(e)}function A(){let e=process.env.MCP_PLUGIN_STRICT_LOAD;return e===void 0||e.trim()===``?k():O(e)||k()}function j(e){let t=e?.trim();return t?new Set(t.split(`,`).map(e=>D(e)).filter(e=>e.length>0)):new Set}async function ie(e,t){let n=[];return ne(e.compatibleCoreRange,t)||n.push(`Plugin ${e.id} incompatible with core ${t}; requires ${e.compatibleCoreRange}`),{ok:n.length===0,errors:n,warnings:[]}}function ae(e){if(!e||typeof e!=`object`)return!1;let t=e;return!!(typeof t.id==`string`&&typeof t.version==`string`&&Array.isArray(t.tools)&&(t.workflows===void 0||Array.isArray(t.workflows)))}function M(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.kind===`workflow-contract`&&t.version===1&&typeof t.id==`string`&&typeof t.displayName==`string`&&typeof t.build==`function`}function N(e){return e.endsWith(`.js`)||e.endsWith(`.mjs`)||e.endsWith(`.cjs`)}function P(e){return e.endsWith(`.ts`)||e.endsWith(`.mts`)||e.endsWith(`.cts`)}async function F(e,t){let n=new Set;for(let r of e)try{await se(r,t,n)}catch{continue}return[...n].toSorted((e,t)=>e.localeCompare(t))}const oe=new Set([`node_modules`,`.git`,`.pnpm`]);async function se(e,t,n){let r=[e];for(;r.length>0;){let e=r.pop();if(!e)continue;let i=await v(e,{withFileTypes:!0});for(let a of i){let i=h(e,a.name);if(a.isDirectory()){oe.has(a.name)||r.push(i);continue}a.isFile()&&t(d(i))&&n.add(i)}}}function I(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+/g,`/`).replace(/^\/+|\/+$/g,``).toLowerCase(),r=ee(e,f(t)).replace(/^[/\\]+/,``).replace(/\\/g,`/`).replace(/\/+/g,`/`).replace(/^\/+|\/+$/g,``).toLowerCase();return!r||r===`dist`?`${n}::`:`${n}::${r.endsWith(`/dist`)?r.slice(0,-5):r}`}function L(e){return e.isJs?0:e.isTs?1:2}function ce(e,t){if(!e||typeof e!=`object`)return!1;let n=e;if(n.version!==1||n.kind!==t||typeof n.slug!=`string`||typeof n.id!=`string`||!n.source||typeof n.source!=`object`)return!1;let r=n.source;return typeof r.type==`string`&&typeof r.repo==`string`&&typeof r.ref==`string`&&typeof r.commit==`string`&&typeof r.subpath==`string`&&typeof r.entry==`string`}async function R(e,t){let n=[];for(let[r,i]of e.entries()){let e=await F([i],e=>e===s);for(let a of e){let e;try{e=JSON.parse(await _(a,`utf8`))}catch{continue}if(!ce(e,t))continue;let o=e.source.entry.trim();if(!o)continue;let s=h(f(a),o);l(s)&&n.push({file:s,key:I(i,s),isJs:N(s),isTs:P(s),rootIndex:r,priority:0})}}return n}function z(e){let t=new Map;for(let n of e.toSorted((e,t)=>e.file.localeCompare(t.file))){let e=t.get(n.key);if(!e){t.set(n.key,n);continue}let r=e.rootIndex,i=n.rootIndex,a=e.priority,o=n.priority,s=L(e),c=L(n);(i<r||i===r&&o<a||i===r&&o===a&&c<s||i===r&&o===a&&c===s&&n.file.localeCompare(e.file)<0)&&t.set(n.key,n)}return[...t.values()].map(e=>e.file).toSorted((e,t)=>e.localeCompare(t))}async function B(e){let t=await R(e,`plugin`);for(let[n,r]of e.entries()){let e=await F([r],e=>e===`manifest.js`||e===`manifest.ts`);for(let i of e)t.push({file:i,key:I(r,i),isJs:N(i),isTs:P(i),rootIndex:n,priority:1})}return z(t)}async function V(e){let t=await R(e,`workflow`);for(let[n,r]of e.entries()){let e=await F([r],e=>e.endsWith(`.workflow.js`)||e.endsWith(`.workflow.mjs`)||e.endsWith(`.workflow.cjs`)||e.endsWith(`.workflow.ts`)||e.endsWith(`.workflow.mts`)||e.endsWith(`.workflow.cts`)||e===`workflow.js`||e===`workflow.mjs`||e===`workflow.cjs`||e===`workflow.ts`||e===`workflow.mts`||e===`workflow.cts`);for(let i of e)t.push({file:i,key:I(r,i),isJs:N(i),isTs:P(i),rootIndex:n,priority:1})}return z(t)}function le(e,t,n){let r=t.split(`.`).filter(Boolean),i=e.config;for(let e of r){if(!i||typeof i!=`object`)return n;i=i[e]}return i??n}function H(e,n){let r=new URL(g(e).href);return r.searchParams.set(`reloadTs`,String(Date.now())),t.debug(`[extensions] Loading fresh ${n} module: ${e}`),r.href}async function ue(e){let n=0,i=new Set;for(let[n,r]of e.extensionPluginRuntimeById.entries()){try{r.plugin.onDeactivateHandler&&r.state===`activated`&&(await r.plugin.onDeactivateHandler(r.lifecycleContext),r.state=`deactivated`)}catch(e){t.warn(`Plugin onDeactivate failed for "${n}":`,e)}try{r.plugin.onDeactivateHandler&&(r.state=`unloaded`)}catch(e){t.warn(`Plugin onUnload failed for "${n}":`,e)}}for(let r of e.extensionToolsByName.values()){i.add(r.domain);try{a(e,r,{onRemoveError:e=>{t.warn(`Failed to remove extension tool "${r.name}":`,e)}})}catch(e){t.warn(`Failed to remove extension tool "${r.name}":`,e)}n++}for(let t of i)r(e,t);return e.extensionToolsByName.clear(),e.extensionPluginsById.clear(),e.extensionPluginRuntimeById.clear(),e.extensionWorkflowsById.clear(),e.extensionWorkflowRuntimeById.clear(),n}function U(e,t,n){let r=[`full`],a=[...e.extensionToolsByName.values()].map(t=>({name:t.name,domain:t.domain,source:t.source,profiles:t.profiles&&t.profiles.length>0?[...t.profiles]:r,visibleInCurrentProfile:i(e.baseTier,t),active:e.activatedToolNames.has(t.name),activationSource:t.activationSource,activatedAt:t.activatedAt}));return{pluginRoots:t,workflowRoots:n,pluginCount:e.extensionPluginsById.size,workflowCount:e.extensionWorkflowsById.size,toolCount:e.extensionToolsByName.size,activeToolCount:a.filter(e=>e.active).length,currentProfile:e.baseTier,lastReloadAt:e.lastExtensionReloadAt,plugins:[...e.extensionPluginsById.values()],workflows:[...e.extensionWorkflowsById.values()],tools:a}}var de=e({ensureWorkflowsLoaded:()=>ve,listExtensions:()=>W,reloadExtensions:()=>_e});function W(e){return U(e,w(C(process.env.MCP_PLUGIN_ROOTS,x)),w(C(process.env.MCP_WORKFLOW_ROOTS,S)))}function fe(e){try{let t=u(e,`utf-8`),n={};for(let e of t.split(/\r?\n/)){let t=e.trim();if(!t||t.startsWith(`#`))continue;let r=t.indexOf(`:`);if(r<1)continue;let i=t.slice(0,r).trim(),a=t.slice(r+1).trim();i&&(n[i]=a)}return n}catch{return{}}}function G(e){return e?.trim()||void 0}function K(e,t,n){let r=m(e,`meta.yaml`);return l(r)?fe(r):(n.push(`Plugin "${t}" is missing meta.yaml; outward metadata now lives there.`),{})}function q(e){return{name:G(e.name),description:G(e.description),author:G(e.author),source_repo:G(e.source_repo)}}function pe(e){let t=e;for(;;){if(l(m(t,`.jshook-install.json`)))return t;let e=f(t);if(e===t)return null;t=e}}function me(e){let t=f(e);return pe(t)||(d(t).toLowerCase()===`dist`?f(t):t)}let he=Promise.resolve();const J=new WeakSet,Y=`MCP_PLUGIN_ALLOWED_DIGESTS is required when MCP_PLUGIN_SIGNATURE_REQUIRED=true or MCP_PLUGIN_STRICT_LOAD=true. The digest allowlist is the only pre-import trust boundary — without it, plugin code executes before integrity verification. No plugins will be loaded.`,ge=`[extensions] Loading plugins WITHOUT MCP_PLUGIN_ALLOWED_DIGESTS allowlist. Plugin code will execute on import() before post-load integrity checks. Set MCP_PLUGIN_STRICT_LOAD=true to enforce allowlist requirement.`;async function X(e){let t=he,n;he=new Promise(e=>{n=e}),await t;try{return await e()}finally{n()}}async function _e(e){return X(()=>be(e))}async function ve(e){e.extensionWorkflowRuntimeById.size>0||J.has(e)||await X(async()=>{if(e.extensionWorkflowRuntimeById.size>0||J.has(e))return;J.add(e);let n=[],r=[],i=w(C(process.env.MCP_PLUGIN_ROOTS,x)),a=w(C(process.env.MCP_WORKFLOW_ROOTS,S));await ye(e,i,n,r),await Z(e,await V(a),n,r);for(let e of n)t.warn(`[extensions] ${e}`);for(let e of r)t.error(`[extensions] ${e}`)})}async function Z(e,t,n,r){for(let i of t)try{let t=await import(H(i,`workflow`)),r=t.default??t;if(!M(r)){n.push(`Skip workflow file without valid WorkflowContract: ${i}`);continue}Q(e,r,i,n)}catch(e){r.push(`Failed to import workflow file ${i}: ${String(e)}`)}}function Q(e,t,n,r){if(e.extensionWorkflowsById.has(t.id))return r.push(`Skip workflow "${t.id}" from ${n}: duplicate id`),!1;let i={id:t.id,displayName:t.displayName,source:n,description:t.description,tags:t.tags,timeoutMs:t.timeoutMs,defaultMaxConcurrency:t.defaultMaxConcurrency,route:t.route};e.extensionWorkflowsById.set(i.id,i);let a={workflow:t,source:n,route:t.route};return e.extensionWorkflowRuntimeById.set(i.id,a),!0}function $(e,t,n,r,i){return{id:e.id,name:t.name??e.id,description:t.description,source:n,author:t.author,sourceRepo:t.source_repo,domains:r.length>0?[`plugin:${e.id}`]:[],workflows:i,tools:r}}async function ye(e,n,r,i){let a=j(process.env.MCP_PLUGIN_ALLOWED_DIGESTS);if(A()&&a.size===0){i.push(Y),t.error(`[extensions] `+Y);return}a.size===0&&t.warn(ge);let o=await B(n),s=e.config?.mcp?.version??`0.0.0`;for(let t of o){let n;try{if(n=D(await re(t)),a.size>0&&!a.has(n)){r.push(`Skip plugin file not in MCP_PLUGIN_ALLOWED_DIGESTS allowlist: ${t}`);continue}}catch(e){i.push(`Failed to hash plugin file ${t}: ${String(e)}`);continue}let o;try{let e=await import(H(t,`plugin`)),n=e.default??e;if(!ae(n)){r.push(`Skip plugin file without valid ExtensionBuilder: ${t}`);continue}o=n}catch(e){i.push(`Failed to import plugin file ${t}: ${String(e)}`);continue}let c=K(me(t),o.id,r);if(e.extensionPluginsById.has(o.id)){r.push(`Skip plugin "${o.id}" from ${t}: duplicate plugin id`);continue}try{let e=await ie(o,s);if(r.push(...e.warnings),!e.ok){i.push(...e.errors);continue}}catch(e){i.push(`Failed to verify plugin ${o.id}: ${String(e)}`);continue}let l=[],u=Array.isArray(o.workflows)?o.workflows:[];for(let n of u){if(!M(n)){r.push(`Skip invalid workflow contribution from plugin "${o.id}" in ${t}`);continue}Q(e,n,`${t}#workflow:${n.id}`,r)&&l.push(n.id)}let d=o.tools.map(e=>e.name);e.extensionPluginsById.set(o.id,$(o,q(c),t,d,l))}}async function be(e){let r=[],s=[],c=await ue(e),l=w(C(process.env.MCP_PLUGIN_ROOTS,x)),u=w(C(process.env.MCP_WORKFLOW_ROOTS,S)),d=j(process.env.MCP_PLUGIN_ALLOWED_DIGESTS),f=0;if(A()&&d.size===0){let n=Y;if(s.push(n),t.error(`[extensions] `+n),await Z(e,await V(u),r,s),c>0)try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after extension reload:`,e)}return e.lastExtensionReloadAt=new Date().toISOString(),{...U(e,l,u),addedTools:0,autoActivatedTools:[],removedTools:c,warnings:r,errors:s}}d.size===0&&t.warn(ge);let p=new Set(n.map(e=>e.name)),m=await B(l),ee=e.config?.mcp?.version??`0.0.0`;for(let n of m){let c;try{if(c=D(await re(n)),d.size>0&&!d.has(c)){r.push(`Skip plugin file not in MCP_PLUGIN_ALLOWED_DIGESTS allowlist: ${n}`);continue}}catch(e){s.push(`Failed to hash plugin file ${n}: ${String(e)}`);continue}let l;try{let e=await import(H(n,`plugin`)),t=e.default??e;if(!ae(t)){r.push(`Skip plugin file without valid ExtensionBuilder: ${n}`);continue}l=t}catch(e){s.push(`Failed to import plugin file ${n}: ${String(e)}`);continue}let u=me(n),m=K(u,l.id,r);if(e.extensionPluginsById.has(l.id)){r.push(`Skip plugin "${l.id}" from ${n}: duplicate plugin id`);continue}try{let e=await ie(l,ee);if(r.push(...e.warnings),!e.ok){s.push(...e.errors);continue}}catch(e){s.push(`Failed to verify plugin ${l.id}: ${String(e)}`);continue}let h=new Map,te=new Set,g=`loaded`,_=l.allowedTools.includes(`*`),v={pluginId:l.id,pluginRoot:u,config:e.config,get state(){return g},registerMetric(e){te.add(e)},async invokeTool(t,n={}){if(typeof t!=`string`||t.length===0)throw Error(`invokeTool requires a non-empty tool name`);if(!_&&!l.allowedTools.includes(t))throw Error(`Plugin "${l.id}" is not allowed to invoke "${t}". Declare it in allowTool calls.`);if(!p.has(t))throw Error(`Plugin "${l.id}" can only invoke built-in tools. "${t}" is not built-in.`);if(!e.router.has(t))throw Error(`Tool "${t}" is not available in the current active profile.`);return e.executeToolWithTracking(t,n??{})},hasPermission(e){return!0},getConfig(t,n){return le(e,t,n)},setRuntimeData(e,t){h.set(e,t)},getRuntimeData(e){return h.get(e)}},y={plugin:l,lifecycleContext:v,state:g,source:n},b=[],x=[];try{if(l.onLoadHandler&&await l.onLoadHandler(v),g=`loaded`,y.state=g,l.onValidateHandler){let e=await l.onValidateHandler(v);if(!e.valid){r.push(`Plugin ${l.id} validation failed: ${e.errors.join(`; `)}`);continue}g=`validated`,y.state=g}l.onActivateHandler&&(await l.onActivateHandler(v),g=`activated`,y.state=g),e.extensionPluginRuntimeById.set(l.id,y);let a=`plugin:${l.id}`;for(let s of l.tools){if(p.has(s.name)){r.push(`Skip tool "${s.name}" from plugin "${l.id}": collides with built-in tool name`);continue}if(e.extensionToolsByName.has(s.name)){r.push(`Skip duplicate extension tool "${s.name}" from plugin "${l.id}"`);continue}let c={name:s.name,domain:a,source:n,tool:{name:s.name,description:s.description,inputSchema:s.schema},profiles:s.profiles??l.profiles,handler:async e=>{try{return await s.handler(e,v)}catch(e){throw t.error(`[extension:${l.id}] Tool "${s.name}" failed:`,e),e}}};e.extensionToolsByName.set(s.name,c),b.push(s.name),x.push(c),i(e.baseTier,c)&&o(e,c,`reload`)&&f++}}catch(n){for(let n of x.toReversed())try{a(e,n,{removeDefinition:!0})}catch(e){t.warn(`Failed to roll back extension tool "${n.name}" for plugin "${l.id}":`,e)}e.extensionPluginRuntimeById.delete(l.id);try{l.onDeactivateHandler&&g===`activated`&&(await l.onDeactivateHandler(v),g=`deactivated`,y.state=g)}catch(e){t.warn(`Plugin onDeactivate failed during rollback for ${l.id}:`,e)}s.push(`Plugin lifecycle failed for ${l.id}: ${String(n)}`);continue}let S=[],C=Array.isArray(l.workflows)?l.workflows:[];for(let t of C){if(!M(t)){r.push(`Skip invalid workflow contribution from plugin "${l.id}" in ${n}`);continue}Q(e,t,`${n}#workflow:${t.id}`,r)&&S.push(t.id)}let w=$(l,q(m),n,b,S);e.extensionPluginsById.set(w.id,w)}if(await Z(e,await V(u),r,s),f>0||c>0)try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after extension reload:`,e)}return e.lastExtensionReloadAt=new Date().toISOString(),{...U(e,l,u),addedTools:e.extensionToolsByName.size,autoActivatedTools:[...e.extensionToolsByName.values()].filter(e=>e.activationSource===`reload`).map(e=>e.name).toSorted(),removedTools:c,warnings:r,errors:s}}export{_e as i,ve as n,W as r,de as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{r as t}from"./ToolCatalog-CYdD9F5f.mjs";import{n}from"./ServerRuntimeState-D2bWHqEE.mjs";function r(t,n,r,i){if(o(t,n),r<=0)return;let a=r*60*1e3,c=new Set(i),l=setTimeout(()=>{e.info(`Domain "${n}" TTL expired (${r}min) — auto-deactivating ${c.size} tools`),s(t,n).catch(t=>{e.error(`Failed to deactivate domain "${n}" on TTL expiry:`,t)})},a);t.domainTtlEntries.set(n,{timer:l,ttlMs:a,toolNames:c})}function i(t,n){let r=t.domainTtlEntries.get(n);if(!r)return;clearTimeout(r.timer);let i=r.ttlMs/6e4;r.timer=setTimeout(()=>{e.info(`Domain "${n}" TTL expired (${i}min) — auto-deactivating`),s(t,n).catch(t=>{e.error(`Failed to deactivate domain "${n}" on TTL expiry:`,t)})},r.ttlMs)}function a(e,n){let r=t(n);if(!r){let t=e.extensionToolsByName.get(n);t&&(r=t.domain)}r&&e.domainTtlEntries.has(r)&&i(e,r)}function o(e,t){let r=e.domainTtlEntries.get(t);r&&(clearTimeout(r.timer),e.domainTtlEntries.delete(t)),n(e)?.clearPendingDomainActivation(t)}async function s(r,i){let a=r.domainTtlEntries.get(i);if(!a)return;let o=a.toolNames;r.domainTtlEntries.delete(i),n(r)?.clearPendingDomainActivation(i);let s=0;for(let t of o){if(!r.activatedToolNames.has(t))continue;let n=r.activatedRegisteredTools.get(t);if(n)try{n.remove()}catch(n){e.warn(`Failed to remove tool "${t}" on domain TTL expiry:`,n)}r.router.removeHandler(t),r.activatedToolNames.delete(t),r.activatedRegisteredTools.delete(t);let i=r.extensionToolsByName.get(t);i&&(i.registeredTool=void 0),s++}if(s>0){r.enabledDomains.delete(i);for(let e of r.activatedToolNames)if(t(e)===i){r.enabledDomains.add(i);break}for(let e of r.selectedTools)if(t(e.name)===i){r.enabledDomains.add(i);break}try{await r.server.sendToolListChanged()}catch(t){e.warn(`sendToolListChanged failed after domain TTL expiry:`,t)}e.info(`Domain "${i}" deactivated: removed ${s} tools`)}}const c=[`full`];function l(e){return e.profiles&&e.profiles.length>0?e.profiles:c}function u(e,n){for(let r of e.selectedTools)if(t(r.name)===n)return!0;for(let r of e.activatedToolNames){let i=e.extensionToolsByName.get(r);if(i){if(i.domain===n)return!0;continue}if(t(r)===n)return!0}return!1}function d(e,t){if(u(e,t)){e.enabledDomains.add(t);return}e.enabledDomains.delete(t)}function f(e,t){return l(t).includes(e)}function p(e,t,n=`activate_tools`){if(e.activatedToolNames.has(t.name))return e.enabledDomains.add(t.domain),t.activationSource??=n,t.activatedAt??=new Date().toISOString(),!1;let r=e.registerSingleTool(t.tool);return e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,r),t.registeredTool=r,t.activationSource=n,t.activatedAt=new Date().toISOString(),e.enabledDomains.add(t.domain),t.handler&&e.router.addHandlers({[t.name]:t.handler}),!0}function m(e,t,n={}){let r=t.registeredTool??e.activatedRegisteredTools.get(t.name),i=!!r||e.activatedToolNames.has(t.name)||e.activatedRegisteredTools.has(t.name);if(r&&!n.skipRegisteredToolRemoval)try{r.remove()}catch(e){n.onRemoveError?.(e)}return e.router.removeHandler(t.name),e.activatedToolNames.delete(t.name),e.activatedRegisteredTools.delete(t.name),t.registeredTool=void 0,t.activationSource=void 0,t.activatedAt=void 0,n.removeDefinition&&e.extensionToolsByName.delete(t.name),d(e,t.domain),i}export{a,o as i,f as n,r as o,m as r,p as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";var n=class n{static instance=null;activeProfile=null;available=null;constructor(){}static getInstance(){return n.instance||=new n,n.instance}isAvailable(){if(this.available!==null)return this.available;try{e.resolve(`fingerprint-generator`),e.resolve(`fingerprint-injector`),this.available=!0}catch{this.available=!1}return this.available}async generateFingerprint(e){if(!this.isAvailable())return t.warn(`fingerprint-generator not installed. Run: pnpm add fingerprint-generator fingerprint-injector`),null;try{let{FingerprintGenerator:n}=await import(`fingerprint-generator`),r=new n,i={};e?.os&&(i.operatingSystems=[{windows:`windows`,macos:`macos`,linux:`linux`}[e.os]??`windows`]),e?.browser&&(i.browsers=[e.browser]),e?.locale&&(i.locales=[e.locale]),e?.screen&&(i.screen=e.screen);let a=r.getFingerprint(i);return this.activeProfile={fingerprint:a.fingerprint,headers:a.headers??{},generatedAt:Date.now(),os:e?.os??`windows`,browser:e?.browser??`chrome`},t.info(`Fingerprint generated for ${this.activeProfile.os}/${this.activeProfile.browser}`),this.activeProfile}catch(e){return t.error(`Failed to generate fingerprint:`,e),null}}async injectFingerprint(e,n){if(!this.isAvailable())throw Error(`fingerprint-injector not installed`);try{let{newInjectedPage:r}=await import(`fingerprint-injector`);await r(e,{fingerprint:`fingerprint`in n?n.fingerprint:n}),t.info(`Fingerprint injected into page`)}catch(e){throw t.error(`Failed to inject fingerprint:`,e),e}}getActiveProfile(){return this.activeProfile}clearProfile(){this.activeProfile=null}static resetInstance(){n.instance=null}};export{n as FingerprintManager};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as e,p as t}from"./constants-BYj8Xek8.mjs";import{t as n}from"./ToolError-DWU_z7gp.mjs";import{t as r}from"./Win32API-eUCF57l_.mjs";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,v as y,y as b}from"./Win32Debug-CYrIQBvr.mjs";import{randomUUID as x}from"node:crypto";const S=e=>`0x${e.toString(16).toUpperCase()}`;var C=class{breakpoints=new Map;attachedPids=new Set;drAllocation=[!1,!1,!1,!1];async attach(e){if(!this.attachedPids.has(e)){d(e),p(!1),this.attachedPids.add(e);for(let e=0;e<100;e++){let e=u(100);if(!e)break;f(e.processId,e.threadId,h.CONTINUE)}}}async detach(e){for(let[t,n]of this.breakpoints)n.pid===e&&(this.clearDR(e,n.drIndex),this.drAllocation[n.drIndex]=!1,this.breakpoints.delete(t));if(this.attachedPids.has(e)){try{a(e)}catch{}this.attachedPids.delete(e)}}async setBreakpoint(e,t,n,r=4){this.attachedPids.has(e)||await this.attach(e);let i=this.allocateDR(),a=BigInt(t.startsWith(`0x`)?t:`0x${t}`);this.applyDRToAllThreads(e,i,a,n,r,!0);let o={id:x(),pid:e,address:`0x${a.toString(16).toUpperCase()}`,access:n,size:r,enabled:!0,drIndex:i,hitCount:0};return this.breakpoints.set(o.id,o),o}async removeBreakpoint(e){let t=this.breakpoints.get(e);return t?(this.clearDR(t.pid,t.drIndex),this.drAllocation[t.drIndex]=!1,this.breakpoints.delete(e),!0):!1}listBreakpoints(){return Array.from(this.breakpoints.values()).map(e=>({id:e.id,address:e.address,access:e.access,size:e.size,enabled:e.enabled,hitCount:e.hitCount,lastHit:e.lastHit}))}async waitForHit(e){let n=e??t,r=Date.now()+n;for(;Date.now()<r;){let e=Math.max(100,r-Date.now()),t=u(Math.min(e,500));if(t)if(t.exceptionCode===g.SINGLE_STEP){let e=this.processHit(t.threadId,t.processId,t.exceptionAddress);if(f(t.processId,t.threadId,h.CONTINUE),e)return e}else f(t.processId,t.threadId,h.CONTINUE)}return null}async traceAccess(n,r,i,a,o){let s=a??e,c=o??t,l=await this.setBreakpoint(n,r,i),u=[],d=Date.now()+c;for(;u.length<s&&Date.now()<d;){let e=await this.waitForHit(Math.min(1e3,d-Date.now()));e?.breakpointId===l.id&&u.push(e)}return await this.removeBreakpoint(l.id),u}allocateDR(){for(let e=0;e<4;e++)if(!this.drAllocation[e])return this.drAllocation[e]=!0,e;throw new n(`PREREQUISITE`,`All 4 hardware breakpoint registers (DR0-DR3) are in use`)}applyDRToAllThreads(e,t,n,a,u,d){let f=o(e),p={execute:`execute`,write:`write`,readwrite:`readwrite`,read:`read`};for(let e of f){let o;try{o=i(e)}catch{continue}try{m(o);let e=v(o,_.ALL),r=[72,80,88,96];d?e.writeBigUInt64LE(n,r[t]):e.writeBigUInt64LE(0n,r[t]);let i=Array.from(this.breakpoints.values()).filter(e=>e.enabled).map(e=>({drIndex:e.drIndex,enabled:!0,access:p[e.access],size:e.size}));d&&i.push({drIndex:t,enabled:!0,access:p[a],size:u});let f=l(i);e.writeBigUInt64LE(f,112),b(e,{contextFlags:_.ALL}),c(o,e),s(o)}catch{try{s(o)}catch{}}finally{r(o)}}}clearDR(e,t){this.applyDRToAllThreads(e,t,0n,`write`,1,!1)}processHit(e,t,n){let a;try{a=i(e)}catch{return null}try{let n=v(a,_.ALL),r=y(n);for(let[i,o]of this.breakpoints){if(o.pid!==t)continue;let s=1n<<BigInt(o.drIndex);if(r.dr6&s)return o.hitCount++,o.lastHit=Date.now(),n.writeBigUInt64LE(0n,104),c(a,n),{breakpointId:i,address:o.address,accessAddress:o.address,instructionAddress:S(r.rip),threadId:e,accessType:o.access,timestamp:Date.now(),registers:{rax:S(r.rax),rbx:S(r.rbx),rcx:S(r.rcx),rdx:S(r.rdx),rsi:S(r.rsi),rdi:S(r.rdi),rsp:S(r.rsp),rbp:S(r.rbp),r8:S(r.r8),r9:S(r.r9),r10:S(r.r10),r11:S(r.r11),r12:S(r.r12),r13:S(r.r13),r14:S(r.r14),r15:S(r.r15),rip:S(r.rip),rflags:`0x${r.eflags.toString(16).toUpperCase()}`}}}return null}finally{r(a)}}};const w=new C;export{C as HardwareBreakpointEngine,w as hardwareBreakpointEngine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{Ct as t,St as n,Tt as r,wt as i}from"./constants-BYj8Xek8.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{b as o,d as s,t as c}from"./Win32API-eUCF57l_.mjs";import{m as l}from"./Win32Debug-CYrIQBvr.mjs";import u from"koffi";const d={FIXED:1,FREE:2,MOVEABLE:4},f={DEFAULT:1,SHARED:2};let p=null;function m(){let e=u.load(`kernel32.dll`);return{CreateToolhelp32Snapshot:e.func(`CreateToolhelp32Snapshot`,`intptr`,[`uint32`,`uint32`]),Heap32ListFirst:e.func(`Heap32ListFirst`,`bool`,[`intptr`,`_Inout_ uint8_t *`]),Heap32ListNext:e.func(`Heap32ListNext`,`bool`,[`intptr`,`_Inout_ uint8_t *`]),Heap32First:e.func(`Heap32First`,`bool`,[`_Inout_ uint8_t *`,`uint32`,`uintptr_t`]),Heap32Next:e.func(`Heap32Next`,`bool`,[`_Inout_ uint8_t *`]),CloseHandle:e.func(`int CloseHandle(intptr)`),HEAPLIST32_SIZE:36,HEAPENTRY32_SIZE:56}}function h(){return p||=m(),p}const g=[[`0-64B`,0,64],[`64-256B`,64,256],[`256B-1KB`,256,1024],[`1-4KB`,1024,4096],[`4-16KB`,4096,16384],[`16-64KB`,16384,65536],[`64KB-1MB`,65536,1048576],[`>1MB`,1048576,2**53-1]];function _(e){for(let t=0;t<g.length;t++){let n=g[t];if(e>=n[1]&&e<n[2])return t}return g.length-1}var v=class{async enumerateHeaps(e){let t=h(),r=t.CreateToolhelp32Snapshot(l.SNAPHEAPLIST,e);if(r===-1n&&typeof r==`bigint`)throw new a(`RUNTIME`,`Failed to create heap snapshot for PID ${e}`);let i=[];try{let a=Buffer.alloc(t.HEAPLIST32_SIZE);a.writeBigUInt64LE(BigInt(t.HEAPLIST32_SIZE),0);let o=t.Heap32ListFirst(r,a);for(;o;){let s=a.readUInt32LE(8),c=a.readBigUInt64LE(12),l=a.readUInt32LE(20),u=await this.enumerateBlocksInternal(e,c,n);i.push({heapId:`0x${c.toString(16)}`,processId:s,flags:l,isDefault:(l&f.DEFAULT)!==0,blockCount:u.length,totalSize:u.reduce((e,t)=>e+t.size,0)}),a.writeBigUInt64LE(BigInt(t.HEAPLIST32_SIZE),0),o=t.Heap32ListNext(r,a)}}finally{t.CloseHandle(r)}return{heaps:i,stats:this.computeStats(i,[])}}async enumerateBlocks(e,t,r){let i=BigInt(t),a=r?.maxBlocks??n;return this.enumerateBlocksInternal(e,i,a)}async getStats(e){let{heaps:t}=await this.enumerateHeaps(e),r=[];for(let i of t){let t=await this.enumerateBlocksInternal(e,BigInt(i.heapId),n);r.push(...t)}return this.computeStats(t,r)}async detectAnomalies(e){let t=[],{heaps:r}=await this.enumerateHeaps(e);for(let i of r){let r=await this.enumerateBlocksInternal(e,BigInt(i.heapId),n);this.detectSpray(r,i.heapId,t),this.detectSuspiciousSizes(r,i.heapId,t),await this.detectPossibleUaf(e,r,i.heapId,t)}return t}async enumerateBlocksInternal(e,t,n){let r=h(),i=[],a=Buffer.alloc(r.HEAPENTRY32_SIZE);a.writeBigUInt64LE(BigInt(r.HEAPENTRY32_SIZE),0);let o=r.Heap32First(a,e,t);for(;o&&i.length<n;){let e=a.readBigUInt64LE(16),n=Number(a.readBigUInt64LE(24)),s=a.readUInt32LE(32);i.push({address:`0x${e.toString(16)}`,size:n,flags:s,heapId:`0x${t.toString(16)}`,isFree:(s&d.FREE)!==0}),a.writeBigUInt64LE(BigInt(r.HEAPENTRY32_SIZE),0),o=r.Heap32Next(a)}return i}computeStats(e,t){let n=g.map(([e])=>({range:e,count:0,totalBytes:0})),r=0,i=0,a=0,o=2**53-1;for(let e of t){r+=e.size,e.isFree&&(i+=e.size),e.size>a&&(a=e.size),!e.isFree&&e.size<o&&(o=e.size);let t=_(e.size);n[t].count++,n[t].totalBytes+=e.size}return o===2**53-1&&(o=0),r===0&&e.length>0&&(r=e.reduce((e,t)=>e+t.totalSize,0)),{totalHeaps:e.length,totalBlocks:t.length||e.reduce((e,t)=>e+t.blockCount,0),totalSize:r,freeSize:i,usedSize:r-i,largestBlock:a,smallestBlock:o,averageBlockSize:t.length>0?Math.round(r/t.length):0,sizeDistribution:n,fragmentationRatio:r>0?i/r:0}}detectSpray(e,n,r){let a=new Map;for(let n of e){if(n.isFree)continue;let e=Math.round(n.size/t)*t,r=a.get(e)??[];r.push(n),a.set(e,r)}for(let[e,t]of a)t.length>=i&&r.push({type:`heap_spray_pattern`,severity:`high`,address:t[0].address,details:`${t.length} blocks of ~${e} bytes detected — possible heap spray`,heapId:n})}detectSuspiciousSizes(e,t,n){for(let i of e)i.size===0?n.push({type:`suspicious_size`,severity:`medium`,address:i.address,details:`Block with zero size`,heapId:t}):i.size>r&&n.push({type:`suspicious_size`,severity:`medium`,address:i.address,details:`Unusually large block: ${(i.size/(1024*1024)).toFixed(1)} MB`,heapId:t})}async detectPossibleUaf(t,n,r,i){let a=n.filter(e=>e.isFree&&e.size>=8).slice(0,100),l=null;try{l=o(t);for(let e of a){let t=BigInt(e.address),n=s(l,t,8);n&&n.readBigUInt64LE(0)!==0n&&i.push({type:`possible_uaf`,severity:`low`,address:e.address,details:`Free block has non-zero data: 0x${n.readBigUInt64LE(0).toString(16)}`,heapId:r})}}catch(n){e.debug(`UAF check failed for PID ${t}: ${n}`)}finally{l&&c(l)}}};const y=new v;export{v as HeapAnalyzer,y as heapAnalyzer};
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
function generateFunctionHook(target, action, customCode, condition, performance = false) {
|
|
3
|
-
return `
|
|
1
|
+
function e(e,t,n,r,i=!1){return`
|
|
4
2
|
(function() {
|
|
5
3
|
'use strict';
|
|
6
|
-
${
|
|
4
|
+
${r?`
|
|
7
5
|
let callCount = 0;
|
|
8
6
|
let lastCallTime = 0;
|
|
9
|
-
const maxCalls = ${
|
|
10
|
-
const minInterval = ${
|
|
11
|
-
|
|
7
|
+
const maxCalls = ${r.maxCalls||`Infinity`};
|
|
8
|
+
const minInterval = ${r.minInterval||0};
|
|
9
|
+
`:``}
|
|
12
10
|
|
|
13
|
-
const originalFunction = ${
|
|
11
|
+
const originalFunction = ${e};
|
|
14
12
|
|
|
15
13
|
if (typeof originalFunction !== 'function') {
|
|
16
|
-
console.error('[Hook] Target is not a function: ${
|
|
14
|
+
console.error('[Hook] Target is not a function: ${e}');
|
|
17
15
|
return;
|
|
18
16
|
}
|
|
19
17
|
|
|
20
|
-
${
|
|
21
|
-
${
|
|
18
|
+
${e} = function(...args) {
|
|
19
|
+
${r?`
|
|
22
20
|
const now = Date.now();
|
|
23
21
|
if (callCount >= maxCalls) {
|
|
24
22
|
console.log('[Hook] Max calls reached, skipping');
|
|
@@ -30,14 +28,14 @@ ${target} = function(...args) {
|
|
|
30
28
|
}
|
|
31
29
|
callCount++;
|
|
32
30
|
lastCallTime = now;
|
|
33
|
-
|
|
31
|
+
`:``}
|
|
34
32
|
|
|
35
|
-
${
|
|
33
|
+
${i?`
|
|
36
34
|
const startTime = performance.now();
|
|
37
|
-
|
|
35
|
+
`:``}
|
|
38
36
|
|
|
39
37
|
const hookContext = {
|
|
40
|
-
target: '${
|
|
38
|
+
target: '${e}',
|
|
41
39
|
type: 'function',
|
|
42
40
|
timestamp: Date.now(),
|
|
43
41
|
arguments: args,
|
|
@@ -46,27 +44,24 @@ ${target} = function(...args) {
|
|
|
46
44
|
|
|
47
45
|
console.log('[Hook] Function called:', hookContext);
|
|
48
46
|
|
|
49
|
-
${
|
|
50
|
-
${
|
|
47
|
+
${t===`block`?`return undefined;`:``}
|
|
48
|
+
${t===`modify`&&n?n:``}
|
|
51
49
|
|
|
52
50
|
const result = originalFunction.apply(this, args);
|
|
53
51
|
|
|
54
|
-
${
|
|
52
|
+
${i?`
|
|
55
53
|
const endTime = performance.now();
|
|
56
54
|
console.log('[Hook] Execution time:', (endTime - startTime).toFixed(2), 'ms');
|
|
57
|
-
|
|
55
|
+
`:``}
|
|
58
56
|
|
|
59
57
|
console.log('[Hook] Function result:', result);
|
|
60
58
|
|
|
61
59
|
return result;
|
|
62
60
|
};
|
|
63
61
|
|
|
64
|
-
console.log('[Hook] Successfully hooked: ${
|
|
62
|
+
console.log('[Hook] Successfully hooked: ${e}');
|
|
65
63
|
})();
|
|
66
|
-
`.trim()
|
|
67
|
-
}
|
|
68
|
-
function generateEvalHook(action, customCode, _condition, _performance = false) {
|
|
69
|
-
return `
|
|
64
|
+
`.trim()}function t(e,t,n,r=!1){return`
|
|
70
65
|
(function() {
|
|
71
66
|
'use strict';
|
|
72
67
|
|
|
@@ -89,8 +84,8 @@ window.eval = function(code) {
|
|
|
89
84
|
timestamp: new Date().toISOString()
|
|
90
85
|
});
|
|
91
86
|
|
|
92
|
-
${
|
|
93
|
-
${
|
|
87
|
+
${e===`block`?`return undefined;`:``}
|
|
88
|
+
${t||``}
|
|
94
89
|
|
|
95
90
|
try {
|
|
96
91
|
const result = originalEval.call(this, code);
|
|
@@ -119,8 +114,8 @@ window.Function = function(...args) {
|
|
|
119
114
|
timestamp: new Date().toISOString()
|
|
120
115
|
});
|
|
121
116
|
|
|
122
|
-
${
|
|
123
|
-
${
|
|
117
|
+
${e===`block`?`return function() {};`:``}
|
|
118
|
+
${t||``}
|
|
124
119
|
|
|
125
120
|
try {
|
|
126
121
|
const result = originalFunction.apply(this, args);
|
|
@@ -141,7 +136,7 @@ window.setTimeout = function(handler, timeout, ...args) {
|
|
|
141
136
|
timestamp: new Date().toISOString()
|
|
142
137
|
});
|
|
143
138
|
|
|
144
|
-
${
|
|
139
|
+
${e===`block`?`return 0;`:``}
|
|
145
140
|
}
|
|
146
141
|
|
|
147
142
|
return originalSetTimeout.apply(this, [handler, timeout, ...args]);
|
|
@@ -156,7 +151,7 @@ window.setInterval = function(handler, timeout, ...args) {
|
|
|
156
151
|
timestamp: new Date().toISOString()
|
|
157
152
|
});
|
|
158
153
|
|
|
159
|
-
${
|
|
154
|
+
${e===`block`?`return 0;`:``}
|
|
160
155
|
}
|
|
161
156
|
|
|
162
157
|
return originalSetInterval.apply(this, [handler, timeout, ...args]);
|
|
@@ -164,13 +159,7 @@ window.setInterval = function(handler, timeout, ...args) {
|
|
|
164
159
|
|
|
165
160
|
console.log('[Eval Hook] Successfully hooked eval, Function, setTimeout, setInterval');
|
|
166
161
|
})();
|
|
167
|
-
`.trim();
|
|
168
|
-
}
|
|
169
|
-
function generateObjectMethodHook(target, action, customCode, _condition, _performance = false) {
|
|
170
|
-
const parts = target.split(".");
|
|
171
|
-
const methodName = parts.pop();
|
|
172
|
-
const objectPath = parts.join(".");
|
|
173
|
-
return `
|
|
162
|
+
`.trim()}function n(e,t,n,r,i=!1){let a=e.split(`.`),o=a.pop(),s=a.join(`.`);return`
|
|
174
163
|
(function() {
|
|
175
164
|
'use strict';
|
|
176
165
|
|
|
@@ -189,11 +178,11 @@ function getObjectByPath(path) {
|
|
|
189
178
|
return obj;
|
|
190
179
|
}
|
|
191
180
|
|
|
192
|
-
const targetObject = getObjectByPath('${
|
|
193
|
-
const methodName = '${
|
|
181
|
+
const targetObject = getObjectByPath('${s}');
|
|
182
|
+
const methodName = '${o}';
|
|
194
183
|
|
|
195
184
|
if (!targetObject) {
|
|
196
|
-
console.error('[Object Hook] Target object not found: ${
|
|
185
|
+
console.error('[Object Hook] Target object not found: ${s}');
|
|
197
186
|
return;
|
|
198
187
|
}
|
|
199
188
|
|
|
@@ -201,7 +190,7 @@ const descriptor = Object.getOwnPropertyDescriptor(targetObject, methodName) ||
|
|
|
201
190
|
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(targetObject), methodName);
|
|
202
191
|
|
|
203
192
|
if (!descriptor) {
|
|
204
|
-
console.error('[Object Hook] Property not found: ${
|
|
193
|
+
console.error('[Object Hook] Property not found: ${e}');
|
|
205
194
|
return;
|
|
206
195
|
}
|
|
207
196
|
|
|
@@ -215,7 +204,7 @@ if (typeof targetObject[methodName] === 'function') {
|
|
|
215
204
|
const startTime = performance.now();
|
|
216
205
|
const stackTrace = new Error().stack.split('\\n').slice(2, 5).join('\\n');
|
|
217
206
|
|
|
218
|
-
console.log(\`[Object Hook #\${callId}] ${
|
|
207
|
+
console.log(\`[Object Hook #\${callId}] ${e}:\`, {
|
|
219
208
|
arguments: args,
|
|
220
209
|
this: this,
|
|
221
210
|
thisType: this?.constructor?.name,
|
|
@@ -223,15 +212,15 @@ if (typeof targetObject[methodName] === 'function') {
|
|
|
223
212
|
timestamp: new Date().toISOString()
|
|
224
213
|
});
|
|
225
214
|
|
|
226
|
-
${
|
|
227
|
-
${
|
|
215
|
+
${t===`block`?`return undefined;`:``}
|
|
216
|
+
${n||``}
|
|
228
217
|
|
|
229
218
|
try {
|
|
230
219
|
const result = originalMethod.apply(this, args);
|
|
231
220
|
const endTime = performance.now();
|
|
232
221
|
const duration = (endTime - startTime).toFixed(2);
|
|
233
222
|
|
|
234
|
-
console.log(\`[Object Hook #\${callId}] ${
|
|
223
|
+
console.log(\`[Object Hook #\${callId}] ${e} result:\`, {
|
|
235
224
|
result: result,
|
|
236
225
|
resultType: typeof result,
|
|
237
226
|
duration: duration + 'ms'
|
|
@@ -239,14 +228,14 @@ if (typeof targetObject[methodName] === 'function') {
|
|
|
239
228
|
|
|
240
229
|
return result;
|
|
241
230
|
} catch (error) {
|
|
242
|
-
console.error(\`[Object Hook #\${callId}] ${
|
|
231
|
+
console.error(\`[Object Hook #\${callId}] ${e} error:\`, error);
|
|
243
232
|
throw error;
|
|
244
233
|
}
|
|
245
234
|
};
|
|
246
235
|
|
|
247
236
|
Object.setPrototypeOf(targetObject[methodName], originalMethod);
|
|
248
237
|
|
|
249
|
-
console.log('[Object Hook] Successfully hooked method: ${
|
|
238
|
+
console.log('[Object Hook] Successfully hooked method: ${e}');
|
|
250
239
|
}
|
|
251
240
|
else if (descriptor.get || descriptor.set) {
|
|
252
241
|
const originalGet = descriptor.get;
|
|
@@ -254,12 +243,12 @@ else if (descriptor.get || descriptor.set) {
|
|
|
254
243
|
|
|
255
244
|
Object.defineProperty(targetObject, methodName, {
|
|
256
245
|
get: function() {
|
|
257
|
-
console.log('[Object Hook] getter called: ${
|
|
246
|
+
console.log('[Object Hook] getter called: ${e}');
|
|
258
247
|
return originalGet ? originalGet.call(this) : undefined;
|
|
259
248
|
},
|
|
260
249
|
set: function(value) {
|
|
261
|
-
console.log('[Object Hook] setter called: ${
|
|
262
|
-
${
|
|
250
|
+
console.log('[Object Hook] setter called: ${e}', { value });
|
|
251
|
+
${t===`block`?`return;`:``}
|
|
263
252
|
if (originalSet) {
|
|
264
253
|
originalSet.call(this, value);
|
|
265
254
|
}
|
|
@@ -268,14 +257,10 @@ else if (descriptor.get || descriptor.set) {
|
|
|
268
257
|
enumerable: descriptor.enumerable
|
|
269
258
|
});
|
|
270
259
|
|
|
271
|
-
console.log('[Object Hook] Successfully hooked property: ${
|
|
260
|
+
console.log('[Object Hook] Successfully hooked property: ${e}');
|
|
272
261
|
}
|
|
273
262
|
})();
|
|
274
|
-
`.trim()
|
|
275
|
-
}
|
|
276
|
-
function generateAntiDebugBypass() {
|
|
277
|
-
return `
|
|
278
|
-
(function() {
|
|
263
|
+
`.trim()}function r(){return`(function() {
|
|
279
264
|
'use strict';
|
|
280
265
|
|
|
281
266
|
console.log('[Anti-Debug Bypass] Initializing...');
|
|
@@ -350,44 +335,39 @@ Object.defineProperty(window, 'devtools', {
|
|
|
350
335
|
});
|
|
351
336
|
|
|
352
337
|
console.log('[Anti-Debug Bypass] Successfully bypassed anti-debugging protections');
|
|
353
|
-
})()
|
|
354
|
-
`.trim();
|
|
355
|
-
}
|
|
356
|
-
function generateHookTemplate(targetName, targetType) {
|
|
357
|
-
if (targetType === "function") return `
|
|
338
|
+
})();`}function i(e,t){return t===`function`?`
|
|
358
339
|
(function() {
|
|
359
340
|
'use strict';
|
|
360
341
|
|
|
361
|
-
const original = ${
|
|
342
|
+
const original = ${e};
|
|
362
343
|
|
|
363
|
-
${
|
|
364
|
-
console.log('[Hook] ${
|
|
344
|
+
${e} = function(...args) {
|
|
345
|
+
console.log('[Hook] ${e} called:', args);
|
|
365
346
|
|
|
366
347
|
|
|
367
348
|
const result = original.apply(this, args);
|
|
368
|
-
console.log('[Hook] ${
|
|
349
|
+
console.log('[Hook] ${e} result:', result);
|
|
369
350
|
|
|
370
351
|
return result;
|
|
371
352
|
};
|
|
372
353
|
|
|
373
|
-
console.log('[Hook] Successfully hooked: ${
|
|
354
|
+
console.log('[Hook] Successfully hooked: ${e}');
|
|
374
355
|
})();
|
|
375
|
-
`.trim()
|
|
376
|
-
else if (targetType === "property") return `
|
|
356
|
+
`.trim():t===`property`?`
|
|
377
357
|
(function() {
|
|
378
358
|
'use strict';
|
|
379
359
|
|
|
380
|
-
const descriptor = Object.getOwnPropertyDescriptor(${
|
|
360
|
+
const descriptor = Object.getOwnPropertyDescriptor(${e.split(`.`).slice(0,-1).join(`.`)}, '${e.split(`.`).pop()}');
|
|
381
361
|
const originalGet = descriptor?.get;
|
|
382
362
|
const originalSet = descriptor?.set;
|
|
383
363
|
|
|
384
|
-
Object.defineProperty(${
|
|
364
|
+
Object.defineProperty(${e.split(`.`).slice(0,-1).join(`.`)}, '${e.split(`.`).pop()}', {
|
|
385
365
|
get: function() {
|
|
386
|
-
console.log('[Hook] ${
|
|
366
|
+
console.log('[Hook] ${e} get');
|
|
387
367
|
return originalGet ? originalGet.call(this) : undefined;
|
|
388
368
|
},
|
|
389
369
|
set: function(value) {
|
|
390
|
-
console.log('[Hook] ${
|
|
370
|
+
console.log('[Hook] ${e} set:', value);
|
|
391
371
|
if (originalSet) {
|
|
392
372
|
originalSet.call(this, value);
|
|
393
373
|
}
|
|
@@ -395,17 +375,16 @@ Object.defineProperty(${targetName.split(".").slice(0, -1).join(".")}, '${target
|
|
|
395
375
|
configurable: true
|
|
396
376
|
});
|
|
397
377
|
|
|
398
|
-
console.log('[Hook] Successfully hooked property: ${
|
|
378
|
+
console.log('[Hook] Successfully hooked property: ${e}');
|
|
399
379
|
})();
|
|
400
|
-
`.trim()
|
|
401
|
-
else return `
|
|
380
|
+
`.trim():`
|
|
402
381
|
(function() {
|
|
403
382
|
'use strict';
|
|
404
383
|
|
|
405
|
-
const original = ${
|
|
384
|
+
const original = ${e};
|
|
406
385
|
|
|
407
|
-
${
|
|
408
|
-
console.log('[Hook] ${
|
|
386
|
+
${e} = function(...args) {
|
|
387
|
+
console.log('[Hook] ${e} constructor called:', args);
|
|
409
388
|
|
|
410
389
|
const instance = new original(...args);
|
|
411
390
|
|
|
@@ -423,16 +402,11 @@ ${targetName} = function(...args) {
|
|
|
423
402
|
return instance;
|
|
424
403
|
};
|
|
425
404
|
|
|
426
|
-
${
|
|
405
|
+
${e}.prototype = original.prototype;
|
|
427
406
|
|
|
428
|
-
console.log('[Hook] Successfully hooked prototype: ${
|
|
407
|
+
console.log('[Hook] Successfully hooked prototype: ${e}');
|
|
429
408
|
})();
|
|
430
|
-
`.trim()
|
|
431
|
-
}
|
|
432
|
-
//#endregion
|
|
433
|
-
//#region src/modules/hook/HookGeneratorBuilders.core.generators.storage.ts
|
|
434
|
-
function generateLocalStorageHook(action, customCode, _condition, _performance = false) {
|
|
435
|
-
return `
|
|
409
|
+
`.trim()}function a(e,t,n,r=!1){return`
|
|
436
410
|
(function() {
|
|
437
411
|
'use strict';
|
|
438
412
|
|
|
@@ -453,8 +427,8 @@ Storage.prototype.setItem = function(key, value) {
|
|
|
453
427
|
stackTrace: stackTrace
|
|
454
428
|
});
|
|
455
429
|
|
|
456
|
-
${
|
|
457
|
-
${
|
|
430
|
+
${e===`block`?`return;`:``}
|
|
431
|
+
${t||``}
|
|
458
432
|
|
|
459
433
|
return originalSetItem.apply(this, arguments);
|
|
460
434
|
};
|
|
@@ -498,10 +472,7 @@ Storage.prototype.clear = function() {
|
|
|
498
472
|
|
|
499
473
|
console.log('[Storage Hook] Successfully hooked localStorage and sessionStorage');
|
|
500
474
|
})();
|
|
501
|
-
`.trim()
|
|
502
|
-
}
|
|
503
|
-
function generateCookieHook(action, customCode, _condition, _performance = false) {
|
|
504
|
-
return `
|
|
475
|
+
`.trim()}function o(e,t,n,r=!1){return`
|
|
505
476
|
(function() {
|
|
506
477
|
'use strict';
|
|
507
478
|
|
|
@@ -547,8 +518,8 @@ Object.defineProperty(document, 'cookie', {
|
|
|
547
518
|
stackTrace: stackTrace
|
|
548
519
|
});
|
|
549
520
|
|
|
550
|
-
${
|
|
551
|
-
${
|
|
521
|
+
${e===`block`?`return;`:``}
|
|
522
|
+
${t||``}
|
|
552
523
|
|
|
553
524
|
return originalSet.call(this, value);
|
|
554
525
|
},
|
|
@@ -557,10 +528,4 @@ Object.defineProperty(document, 'cookie', {
|
|
|
557
528
|
|
|
558
529
|
console.log('[Cookie Hook] Successfully hooked document.cookie');
|
|
559
530
|
})();
|
|
560
|
-
`.trim();
|
|
561
|
-
}
|
|
562
|
-
function getInjectionInstructions(type) {
|
|
563
|
-
return `This hook script monitors ${type} operations. Inject it into the target page via page_evaluate or console_execute to activate.`;
|
|
564
|
-
}
|
|
565
|
-
//#endregion
|
|
566
|
-
export { generateEvalHook as a, generateObjectMethodHook as c, generateAntiDebugBypass as i, 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{Ar as n,Cr as r,Dr as i,Er as a,Fr as o,Lr as s,Mr as c,Nr as l,Or as u,Pr as d,Sr as f,Tr as p,_r as m,a as h,ar as g,br as _,cr as v,dr as y,fr as b,gr as ee,hr as te,ir as x,kr as S,lr as C,mr as w,nr as ne,or as re,pr as ie,rr as ae,sr as T,tr as oe,ur as E,vr as se,wr as ce,xr as le,yr as ue}from"./constants-BYj8Xek8.mjs";import{r as D}from"./response-C7rKQst4.mjs";import{c as O,d as de,f as fe,i as pe,l as me,n as he,p as k,r as A,s as ge,t as j}from"./ToolCatalog-CYdD9F5f.mjs";import{n as M}from"./ServerRuntimeState-D2bWHqEE.mjs";import{o as N,t as P}from"./ExtensionManager.tools-oVMJgPcN.mjs";import{t as F}from"./ProcessRegistry-C-bN48oR.mjs";import{t as I}from"./search-defaults-lYBVn_3L.mjs";import{t as L}from"./RingBuffer-Dm54ELKT.mjs";import{Worker as _e}from"worker_threads";function R(e,t){return ge(e,t)}const ve=[[`navigate`,`go`,`open`,`visit`,`browse`,`load`],[`intercept`,`capture`,`monitor`,`sniff`,`collect`,`record`,`track`],[`request`,`fetch`,`xhr`,`ajax`,`http`,`api`],[`authenticate`,`auth`,`login`,`credential`,`token`,`jwt`,`session`],[`breakpoint`,`pause`,`halt`,`stop`,`break`],[`step`,`next`,`continue`,`resume`],[`deobfuscate`,`beautify`,`unminify`,`decode`,`transform`,`decompile`],[`screenshot`,`snapshot`,`image`,`picture`,`photo`],[`evaluate`,`execute`,`run`,`eval`,`invoke`,`call`],[`element`,`node`,`selector`,`dom`,`component`],[`click`,`tap`,`press`,`interact`,`trigger`],[`type`,`input`,`enter`,`fill`,`write`],[`cookie`,`localstorage`,`storage`,`cache`,`indexeddb`],[`websocket`,`ws`,`socket`,`realtime`],[`scroll`,`swipe`,`drag`],[`search`,`find`,`query`,`lookup`,`discover`,`locate`],[`hook`,`patch`,`override`,`replace`,`wrap`,`proxy`],[`script`,`code`,`source`,`javascript`,`js`],[`bundle`,`webpack`,`module`,`pack`,`chunk`],[`block`,`filter`,`deny`,`reject`,`prevent`],[`allow`,`permit`,`whitelist`,`accept`,`enable`],[`remove`,`delete`,`clear`,`clean`,`purge`,`erase`],[`list`,`show`,`display`,`enumerate`,`get`],[`set`,`configure`,`config`,`setup`,`assign`],[`stealth`,`antidetect`,`fingerprint`,`evasion`,`undetected`],[`mobile`,`device`,`emulate`,`responsive`,`phone`],[`performance`,`profile`,`benchmark`,`metric`,`vitals`],[`register`,`signup`,`account`,`enroll`,`join`],[`captcha`,`challenge`,`verification`,`verify`,`solve`],[`tab`,`window`,`page`],[`inspect`,`examine`,`analyze`,`analyse`,`debug`,`investigate`],[`wait`,`delay`,`sleep`,`timeout`,`poll`],[`close`,`disconnect`,`quit`,`exit`,`shutdown`,`terminate`],[`traffic`,`network`,`request`,`response`,`connection`],[`heap`,`memory`,`allocation`,`gc`,`garbage`],[`export`,`save`,`dump`,`download`,`extract`],[`replay`,`resend`,`repeat`,`redo`,`retry`],[`variable`,`scope`,`local`,`closure`,`context`],[`watch`,`observe`,`monitor`,`trace`,`track`],[`protobuf`,`proto`,`binary`,`msgpack`,`grpc`],[`wasm`,`webassembly`,`assembly`],[`sse`,`eventsource`,`stream`,`streaming`],[`graphql`,`gql`,`introspect`,`mutation`,`subscription`],[`v8`,`heap`,`snapshot`,`bytecode`,`jit`,`turbofan`,`ignition`,`hiddenclass`],[`tls`,`ssl`,`boringssl`,`cert`,`certificate`,`pinning`,`handshake`,`keylog`],[`skia`,`gpu`,`render`,`scenegraph`,`scene`,`draw`,`paint`,`raster`,`layer`],[`frida`,`ghidra`,`ida`,`unidbg`,`jadx`,`binary`,`disassemble`,`decompile`,`instrument`],[`mojo`,`ipc`,`chromium`,`interface`,`broker`,`message`],[`syscall`,`etw`,`strace`,`dtrace`,`kernel`,`systemcall`,`tracefs`],[`adb`,`android`,`webview`,`apk`,`dalvik`,`art`,`emulator`],[`extension`,`plugin`,`addon`,`webhook`,`c2`,`bluetooth`,`ble`,`hid`,`serial`,`registry`]];var ye=class e{reverseMap;constructor(){this.reverseMap=e.buildReverseMap(ve)}expand(e){let t=this.reverseMap.get(e.toLowerCase());return t?[...t]:[]}expandQuery(e){let t=new Set(e.map(e=>e.toLowerCase())),n=[],r=f;for(let i of e){let e=this.reverseMap.get(i.toLowerCase());if(!e)continue;let a=0;for(let i of e){if(a>=r)break;t.has(i)||(n.push(i),t.add(i),a++)}}return n}static buildReverseMap(e){let t=new Map;for(let n of e)for(let e of n){let r=e.toLowerCase(),i=t.get(r);i||(i=new Set,t.set(r,i));for(let e of n){let t=e.toLowerCase();t!==r&&i.add(t)}}return t}};const be=g,xe=x;var Se=class e{queryCategoryProfiles;cjkQueryAliases;synonymExpander;constructor(t){this.queryCategoryProfiles=t?.queryCategoryProfiles===void 0?e.compileQueryCategoryProfiles(I.queryCategoryProfiles):e.compileQueryCategoryProfiles(t.queryCategoryProfiles),this.cjkQueryAliases=t?.cjkQueryAliases===void 0?e.compileCjkQueryAliasRules(I.cjkQueryAliases):e.compileCjkQueryAliasRules(t.cjkQueryAliases),this.synonymExpander=new ye}static compileQueryCategoryProfiles(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.domainBoosts))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=new Map(e.domainBoosts.flatMap(e=>!e||typeof e.domain!=`string`||e.domain.length===0||typeof e.weight!=`number`||!Number.isFinite(e.weight)?[]:[[e.domain,e.weight]]));return[{pattern:t,domainBoosts:n}]})}static compileCjkQueryAliasRules(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.tokens))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=e.tokens.filter(e=>typeof e==`string`&&e.length>0);return[{pattern:t,tokens:n}]})}detectQueryCategoryBoosts(e){let t=new Map;for(let n of this.queryCategoryProfiles)if(n.pattern.test(e))for(let[e,r]of n.domainBoosts){let n=t.get(e)??1;t.set(e,Math.max(n,r))}return t}expandCjkAliasTokens(e){let t=e.toLowerCase(),n=new Set;for(let e of this.cjkQueryAliases)if(e.pattern.test(t))for(let t of e.tokens)n.add(t);return[...n]}tokenise(e,t){let n=e.replace(/[_-]/g,` `);n=n.replace(/([\u4e00-\u9fff])/g,` $1 `);let r=n.split(/[^a-zA-Z0-9\u4e00-\u9fff]+/).filter(Boolean),i=[];for(let e of r){let t=e.toLowerCase(),n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/\s+/);if(n.length>1){for(let e of n)i.push(e.toLowerCase());i.push(t)}else i.push(t)}return i.push(...this.expandCjkAliasTokens(e)),t?.expandSynonyms&&i.push(...this.synonymExpander.expandQuery(i)),i}getK1(){return be}getB(){return xe}},Ce=class{worker=null;ready=!1;nextId=0;pending=new Map;isReady(){return this.ready}async embed(e){this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed`,id:t,text:e})})}async embedBatch(e){if(e.length===0)return[];this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed_batch`,id:t,texts:e})})}async terminate(){if(this.worker){for(let[,e]of this.pending)e.reject(Error(`EmbeddingEngine terminated`));this.pending.clear(),await this.worker.terminate(),this.worker=null,this.ready=!1}}ensureWorker(){if(this.worker)return;let e=new URL(`./EmbeddingWorker.js`,import.meta.url);this.worker=new _e(e),typeof this.worker.unref==`function`&&this.worker.unref(),F.register(this.worker),this.worker.on(`message`,e=>{let t=this.pending.get(e.id);t&&(this.pending.delete(e.id),e.type===`result`?(this.ready=!0,t.resolve(e.embedding)):e.type===`error`&&t.reject(Error(e.message??`Unknown worker error`)))}),this.worker.on(`error`,e=>{for(let[,t]of this.pending)t.reject(e);this.pending.clear(),this.worker=null,this.ready=!1}),this.worker.on(`exit`,e=>{if(e!==0){let t=Error(`Embedding worker exited with code ${e}`);for(let[,e]of this.pending)e.reject(t);this.pending.clear()}this.worker=null,this.ready=!1})}},we=class e{compiledRules;constructor(t){this.compiledRules=t===void 0?e.compileIntentToolBoostRules(I.intentToolBoostRules):e.compileIntentToolBoostRules(t)}static compileIntentToolBoostRules(e){let t=[];for(let n of e){if(!n||typeof n.pattern!=`string`||!Array.isArray(n.boosts)||n.boosts.length===0)continue;let e;try{e=new RegExp(n.pattern,n.flags??`i`)}catch{continue}let r=n.boosts.filter(e=>e&&typeof e.tool==`string`&&e.tool.length>0).map(e=>({tool:e.tool,bonus:Number.isFinite(e.bonus)?e.bonus:0})).filter(e=>e.bonus>0);r.length!==0&&t.push({pattern:e,boosts:r})}return t}resolveIntentToolBonuses(e){let t=e.toLowerCase(),n=new Map;for(let e of this.compiledRules)if(e.pattern.test(t))for(let{tool:t,bonus:r}of e.boosts){let e=n.get(t)??0;n.set(t,Math.max(e,r))}return n}getCompiledRules(){return this.compiledRules}},Te=class e{trigramSets;constructor(t){this.trigramSets=t.map(t=>e.extractTrigrams(t))}search(t,n=i){let r=e.extractTrigrams(t);if(r.size===0)return new Map;let a=new Map;for(let t=0;t<this.trigramSets.length;t++){let i=this.trigramSets[t];if(i.size===0)continue;let o=e.jaccardSimilarity(r,i);o>=n&&a.set(t,o)}return a}static extractTrigrams(e){let t=e.toLowerCase().replace(/[_\-\s]+/g,``),n=new Set;for(let e=0;e<=t.length-3;e++)n.add(t.slice(e,e+3));return n}static jaccardSimilarity(e,t){let n=0,[r,i]=e.size<=t.size?[e,t]:[t,e];for(let e of r)i.has(e)&&n++;let a=e.size+t.size-n;return a===0?0:n/a}};const z=.1,B=.8;var Ee=class{vectorWeight;lastVectorRanking=null;topN;learnUp;learnDown;constructor(e){this.vectorWeight=e?.vectorCosineWeight??n,this.topN=Math.max(1,d),this.learnUp=Math.max(0,o),this.learnDown=Math.max(0,l)}getVectorWeight(){return this.vectorWeight}recordVectorRanking(e){this.lastVectorRanking=e}recordToolCallFeedback(e,t){if(!this.lastVectorRanking||!t)return!1;let n=this.lastVectorRanking.get(e),r=this.vectorWeight;return n===void 0?this.vectorWeight=Math.max(z,this.vectorWeight-this.learnDown):n<this.topN?this.vectorWeight=Math.min(B,this.vectorWeight+this.learnUp):n<this.topN*2?this.vectorWeight=Math.min(B,this.vectorWeight+this.learnUp*.3):this.vectorWeight=Math.max(z,this.vectorWeight-this.learnDown),this.vectorWeight!==r}};const De=new Set(`the.a.an.is.are.was.were.be.been.to.of.in.for.on.with.at.by.from.or.and.not.this.that.it.its.if.as.will.can.may.must.should.would.could.e.g.default.optional.required.when.set`.split(`.`)),V={extractParamTokens(e){let t=[];if(!e||typeof e!=`object`)return t;let n=e.properties;if(!n||typeof n!=`object`)return t;for(let[e,r]of Object.entries(n)){let n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[\s_-]+/);for(let e of n){let n=e.toLowerCase();n.length>1&&t.push(n)}if(r&&typeof r==`object`){let e=r.description;if(typeof e==`string`){let n=e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);for(let e of n)e.length>2&&!De.has(e)&&t.push(e)}}}return t},extractShortDescription(e){if(!e)return``;let t=e.match(/^[^.!?\n]+[.!?]?/);if(t){let e=t[0].trim();return e.length>120?e.slice(0,117)+`...`:e}return e.length>120?e.slice(0,117)+`...`:e},containsCJK(e){return/[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af]/.test(e)},normalizeToolName(e){return e.toLowerCase().replace(/[\s-]+/g,`_`)}},H={queryToolNameMatch:.35,descriptionKeywordOverlap:.25,domainRelevance:.2,intentAlignment:.2};function U(e){return e.toLowerCase().replace(/[\s-]+/g,`_`).replace(/[^a-z0-9_]/g,``)}function W(e){return e.toLowerCase().replace(/[_-]/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[^a-z0-9]+/).filter(e=>e.length>0)}function Oe(e,t){if(e===t)return 1;if(e.length===0||t.length===0)return 0;let n=e.length<=t.length?e:t,r=e.length<=t.length?t:e,i=new Float64Array(n.length+1),a=new Float64Array(n.length+1);for(let e=1;e<=r.length;e++){let t=r[e-1];for(let e=1;e<=n.length;e++){let r=i[e-1]??0;t===n[e-1]?a[e]=r+1:a[e]=Math.max(i[e]??0,a[e-1]??0)}let o=i;i=a,a=o,a.fill(0)}return(i[n.length]??0)/Math.max(e.length,t.length)}function ke(e,t){if(e.size===0)return 0;let n=W(t),r=0;for(let t of n)e.has(t)&&r++;return r/e.size}var Ae=class{weights;domainKeywords;constructor(e){this.weights=e?{...H,...e}:H,this.domainKeywords=new Map}buildFromTools(e){let t=new Map;for(let n of e){if(!n.domain)continue;let e=t.get(n.domain);e||(e=new Map,t.set(n.domain,e));let r=W(n.name);for(let t of r)e.set(t,(e.get(t)??0)+1);let i=W(n.description);for(let t of i)t.length>=3&&e.set(t,(e.get(t)??0)+1)}for(let[e,n]of t){let t=[...n.entries()].toSorted((e,t)=>t[1]-e[1]).slice(0,15);this.domainKeywords.set(e,new Set(t.map(([e])=>e)))}}reRank(e,t,n){if(t.length===0)return[];let r=n??t.length,i=U(e),a=W(e),o=new Set(a),s=this.inferTargetDomain(a),c=[];for(let e=0;e<t.length;e++){let n=t[e],r=Oe(i,U(n.toolName)),l=ke(o,n.description),u=0;s.size>0&&n.domain&&(u=+!!s.has(n.domain));let d=this.computeIntentAlignment(a,n.description),f=this.weights.queryToolNameMatch*r+this.weights.descriptionKeywordOverlap*l+this.weights.domainRelevance*u+this.weights.intentAlignment*d,p=n.score*.3+f*.7;c.push({result:n,originalRank:e,reRankScore:p})}return c.toSorted((e,t)=>t.reRankScore-e.reRankScore).slice(0,r).map(e=>({toolName:e.result.toolName,originalRank:e.originalRank,reRankedScore:Math.round(e.reRankScore*1e4)/1e4}))}inferTargetDomain(e){let t=new Set,n=new Set(e);for(let[e,r]of this.domainKeywords)for(let i of r)if(n.has(i)){t.add(e);break}return t}computeIntentAlignment(e,t){if(e.length===0||this.domainKeywords.size===0)return 0;let n=t.toLowerCase(),r=[];for(let e of this.domainKeywords.values())for(let t of e)r.push(t);let i=e.filter(e=>r.includes(e));if(i.length===0)return 0;let a=0;for(let e of i)n.includes(e)&&a++;return a/i.length}};let je=0;function Me(){return`sq-${Date.now()}-${++je}`}function G(e,t){if(e.length===0)return 0;let n=Math.ceil(t/100*e.length)-1;return e[Math.max(0,n)]??0}var K=class{MAX_HISTORY=1e3;records=new L(this.MAX_HISTORY);lastRecordId;recordSearch(e,t,n,r){let i=Me(),a={id:i,query:e,timestamp:Date.now(),returnedTools:t,returnedScores:n,latencyMs:r};return this.records.push(a),this.lastRecordId=i,i}recordToolUsed(e,t){let n=this.records.toArray();for(let r=n.length-1;r>=0;r--){let i=n[r];if(i.id===e){i.usedTool=t;let e=i.returnedTools.indexOf(t);i.usedToolRank=e>=0?e+1:void 0;return}}}associateLastSearch(e){if(!this.lastRecordId)return;let t=this.records.toArray();for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.id===this.lastRecordId){let t=r.returnedTools.indexOf(e);t>=0&&(r.usedTool=e,r.usedToolRank=t+1);return}}}computeMetrics(){let e=this.records.toArray(),t=e.length;if(t===0)return{totalQueries:0,avgLatencyMs:0,p50LatencyMs:0,p99LatencyMs:0,toolUsedRate:0,avgUsedRank:0,mrr:0,topKDistribution:{}};let n=e.map(e=>e.latencyMs).toSorted((e,t)=>e-t),r=n.reduce((e,t)=>e+t,0),i=e.filter(e=>e.usedTool!==void 0),a=i.length/t,o=0,s=0,c={};if(i.length>0){let e=0,t=0;for(let n of i){let r=n.usedToolRank;if(r!==void 0&&r>0){e+=r,t+=1/r;let n=String(r);c[n]=(c[n]??0)+1}}o=e/i.length,s=t/i.length}return{totalQueries:t,avgLatencyMs:r/t,p50LatencyMs:G(n,50),p99LatencyMs:G(n,99),toolUsedRate:a,avgUsedRank:o,mrr:s,topKDistribution:c}}getRecentRecords(e=10){return this.records.toArray().slice(-e)}getStats(){return this.computeMetrics()}getEnhancementSuggestions(e,t,n){if(t>=5&&n>=.5)return null;let r=[];return t===0?r.push(`No tools found for "${e}". Try broader terms or use search_tools with a different query.`):t<3&&r.push(`Only ${t} tools found. Consider using synonyms or breaking down the query.`),n<.3&&t>0&&r.push(`Low relevance scores. Try more specific tool names or domain prefixes (e.g., "page_", "hook_", "network_").`),r.length>0?r:null}};function q(e,t,n){if(!t)return-1;let r=e.indexOf(t);for(;r>=0;){let i=r>0?e[r-1]:null,a=r+t.length<e.length?e[r+t.length]:null,o=i===null||!n.test(i),s=a===null||!n.test(a);if(o&&s)return r;r=e.indexOf(t,r+1)}return-1}function Ne(e){let t=new Map,n=new Map;for(let t=0;t<e.length;t++){let r=e[t].name,i=r.indexOf(`_`);if(i<=0)continue;let a=r.slice(0,i),o=n.get(a)??[];o.push(t),n.set(a,o)}for(let[,e]of n){if(e.length<2||e.length>15)continue;let n=oe/Math.sqrt(e.length);for(let r of e){let i=t.get(r)??[];for(let t of e)t!==r&&i.push({docIndex:t,weight:n});t.set(r,i)}}return t}function Pe(e){let t=[];for(let n=0;n<e.length;n++)e[n]>0&&t.push({idx:n,score:e[n]});t.sort((e,t)=>t.score-e.score);let n=new Map;for(let e=0;e<t.length;e++)n.set(t[e].idx,e);return n}function J(e){let t=[...e.entries()].toSorted((e,t)=>t[1]-e[1]),n=new Map;for(let e=0;e<t.length;e++)n.set(t[e][0],e);return n}function Fe(e,t){for(let n=0;n<e.length;n++){let r=t[n];r<=0||(e[n]=e[n]+r*ue*m)}}function Ie(e){let{scores:t,docs:n,affinityGraph:r}=e,i=[];for(let e=0;e<t.length;e++)t[e]>0&&i.push({idx:e,score:t[e]});if(i.length!==0){if(i.sort((e,t)=>t.score-e.score),r.size>0){let e=Math.min(ae,i.length);for(let n=0;n<e;n++){let{idx:e,score:a}=i[n],o=r.get(e);if(!o)continue;let s=1/(1+n);for(let{docIndex:e,weight:n}of o)t[e]>0&&(t[e]+=a*n*s*ne)}}if(C>0&&i.length>=C){let e=i.slice(0,10),r=new Map;for(let{idx:t}of e){let e=n[t].domain;e&&r.set(e,(r.get(e)??0)+1)}for(let[e,i]of r)if(!(i<C))for(let r=0;r<n.length;r++)t[r]>0&&n[r].domain===e&&(t[r]*=v)}}}function Le(e,t,n,r){return`${`${e}\0${t}`}${!n||n.size===0?``:`\0${[...n].toSorted().join(`|`)}`}${r?`\0${r}`:``}`}var Re=class{capacity;map=new Map;constructor(e){this.capacity=Math.max(1,e)}get(e){let t=this.map.get(e);return t!==void 0&&(this.map.delete(e),this.map.set(e,t)),t}set(e,t){if(this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let e=this.map.keys().next().value;this.map.delete(e)}}clear(){this.map.clear()}},Y=class{docs=[];invertedIndex=new Map;sortedKeys;avgDocLength;docCount;domainOverrides;domainScoreMultipliers;toolScoreMultipliers;extensionEtag=``;docNameIndex=new Map;affinityGraph;queryCache;trigramIndex;embeddingEngine;toolEmbeddings=null;feedbackTracker;recencyTracker=new Map;bm25Scorer;intentBoost;reRanker;qualityTracker=new K;constructor(e,t,n,r,i,a){let o=e??j;this.domainOverrides=t,this.domainScoreMultipliers=n,this.toolScoreMultipliers=r,this.docCount=o.length,this.bm25Scorer=new Se(i);let s=i?.vectorEnabled??c;this.embeddingEngine=s?new Ce:null,this.feedbackTracker=new Ee(i),this.intentBoost=new we(i?.intentToolBoostRules);let l=0;for(let e=0;e<o.length;e++){let t=o[e],n=this.domainOverrides?.get(t.name)??A(t.name),r=t.description??``,i=V.extractShortDescription(r),s=this.bm25Scorer.tokenise(t.name),c=new Set(s),u=n?this.bm25Scorer.tokenise(n):[],d=this.bm25Scorer.tokenise(r),f=V.extractParamTokens(t.inputSchema),p=[...s,...u,...d,...f],m={name:t.name,domain:n,description:r,shortDescription:i,tokens:p,length:p.length,nameTokens:s,nameTokenSet:c,nameTokenCount:c.size};this.docs.push(m),this.docNameIndex.set(t.name,e),l+=m.length;let h=new Map;for(let e of s){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,3),h.set(e,t)}for(let e of u){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,2),h.set(e,t)}for(let e of d){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,1),h.set(e,t)}for(let e of f){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,y),h.set(e,t)}let g=a?.get(t.name);if(g)for(let e of g){let t=h.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,_),h.set(e,t)}for(let[t,{tf:n,weight:r}]of h){let i=this.invertedIndex.get(t);i||(i=[],this.invertedIndex.set(t,i)),i.push({docIndex:e,tf:n,weight:r})}}this.avgDocLength=this.docCount>0?l/this.docCount:1,this.sortedKeys=[...this.invertedIndex.keys()].toSorted(),this.reRanker=new Ae,this.reRanker.buildFromTools(this.docs.map(e=>({name:e.name,domain:e.domain??``,description:e.description}))),this.affinityGraph=Ne(this.docs),this.trigramIndex=new Te(this.docs.map(e=>e.name)),this.queryCache=new Re(ie)}async search(e,t=10,n,r,i){let a=performance.now(),o=this.bm25Scorer.tokenise(e);if(o.length===0)return[];if(le&&this.isSimpleQuery(e,o))return this.quickPathSearch(e,o,t,n);if(o.length>6){let e=o.filter(e=>this.invertedIndex.has(e));if(e.length>=3){let t=e.map(e=>{let t=this.invertedIndex.get(e).length;return{token:e,idf:Math.log((this.docCount-t+.5)/(t+.5)+1)}});t.sort((e,t)=>t.idf-e.idf);let n=new Set(t.slice(0,6).map(e=>e.token));o=o.filter(e=>n.has(e))}}let s=this.bm25Scorer.tokenise(o.join(` `),{expandSynonyms:!0}).filter(e=>!o.includes(e));o.push(...s);let c=(()=>{let t=e.toLowerCase();if(!/(?:\b(?:call|use|run|invoke|execute)\b|调用|执行|使用|运行)/i.test(t))return null;let n=/[a-z0-9_]/,r=/[a-z0-9]/,i=null,a=1/0;for(let e of this.docNameIndex.keys()){let o=q(t,e,n);o<0&&e.includes(`_`)&&(o=q(t,e.replace(/_/g,`-`),r),o<0&&(o=q(t,e.replace(/_/g,` `),r))),!(o<0)&&(o<a||o===a&&e.length>(i?.length??0))&&(i=e,a=o)}return i})(),l=Le(e,t,r,this.extensionEtag),u=this.queryCache.get(l);if(u&&this.isCachedEntryFresh(u)){let e=n??new Set;return u.results.map(t=>({...t,isActive:e.has(t.name)}))}let d=this.intentBoost.resolveIntentToolBonuses(e),f=new Float64Array(this.docCount);for(let e of o)if(this.scoreToken(e,f),e.length>=3){let t=this.findPrefixMatches(e);for(let n of t)if(n!==e){let e=this.invertedIndex.get(n);e&&this.scorePostings(e,this.docCount,f,b)}}await this.applyRRFFusion(o,e,f);let p=this.bm25Scorer.detectQueryCategoryBoosts(e),m=e.toLowerCase().replace(/[\s-]+/g,`_`),h=new Set(o);for(let e=0;e<this.docCount;e++){let t=this.docs[e],n=d.get(t.name)??0;if(f[e]<=0&&n<=0)continue;if(t.name===m){f[e]*=E;continue}let r=0;for(let e of o)t.nameTokenSet.has(e)&&r++;if(r>0&&t.nameTokenCount>0&&h.size>0){let n=r/t.nameTokenCount,i=r/h.size;f[e]*=1+T*n*i}let i=t.domain?this.domainScoreMultipliers?.get(t.domain)??1:1;if(i!==1&&(f[e]*=i),t.domain&&p.size>0){let n=p.get(t.domain);n!==void 0&&n>1&&(f[e]*=n)}let a=this.toolScoreMultipliers?.get(t.name)??1;a!==1&&(f[e]*=a)}if(this.applyIntentBonusBand(f,d),this.applyGraphExpansion(f),this.applyRecencyBoost(f),this.applyTierPenalty(f,r,i),c){let e=this.docNameIndex.get(c);if(e!==void 0){let t=0;for(let e=0;e<this.docCount;e++){let n=f[e];n>t&&(t=n)}let n=Math.max(1,t+1);f[e]+=n}}let g=n??new Set,_=[];for(let e=0;e<this.docCount;e++)if(f[e]>0){let t=this.docs[e];_.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(f[e]*1e3)/1e3,isActive:g.has(t.name)})}_.sort((e,t)=>t.score-e.score);let v=_.slice(0,t);if(v.length>1){let n=v.map(e=>({toolName:e.name,score:e.score,domain:e.domain??``,description:this.docs[this.docNameIndex.get(e.name)??0]?.description??``})),r=this.reRanker.reRank(e,n,t),i=new Map(r.map((e,t)=>[e.toolName,t]));v=v.slice().toSorted((e,t)=>(i.get(e.name)??0)-(i.get(t.name)??0))}this.queryCache.set(l,{results:v,vectorWeightAtCache:this.feedbackTracker.getVectorWeight(),cachedAtMs:Date.now()});let y=performance.now()-a;return this.qualityTracker.recordSearch(e,v.map(e=>e.name),v.map(e=>e.score),y),v}isCachedEntryFresh(e){let t=this.feedbackTracker.getVectorWeight();return Math.abs(t-e.vectorWeightAtCache)<=re}isSimpleQuery(e,t){let n=e.toLowerCase().replace(/[\s-]+/g,`_`);return!!(this.docNameIndex.has(n)||t.length===1)}quickPathSearch(e,t,n,r){let a=new Float64Array(this.docCount);for(let e of t)if(this.scoreToken(e,a),e.length>=3){let t=this.findPrefixMatches(e);for(let n of t)if(n!==e){let e=this.invertedIndex.get(n);e&&this.scorePostings(e,this.docCount,a,b)}}let o=this.trigramIndex.search(e,i),s=u;if(s>0)for(let[e,t]of o)t>0&&(a[e]+=t*s);let c=e.toLowerCase().replace(/[\s-]+/g,`_`);if(this.docNameIndex.has(c)){let e=this.docNameIndex.get(c);a[e]*=E}let l=r??new Set,d=[];for(let e=0;e<this.docCount;e++)if(a[e]>0){let t=this.docs[e];d.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(a[e]*1e3)/1e3,isActive:l.has(t.name)})}return d.sort((e,t)=>t.score-e.score),d.slice(0,n)}applyRecencyBoost(e){if(w<=0||this.recencyTracker.size===0)return;let t=ee;if(t<=0)return;let n=Date.now(),r=w;for(let[i,a]of this.recencyTracker){let o=n-a;if(o<0||o>t)continue;let s=this.docNameIndex.get(i);if(s===void 0||e[s]<=0)continue;let c=1+r*(1-o/t);e[s]*=c}}applyTierPenalty(e,t,n){if(!t||t.size===0)return;let i=n?n===`full`?ce:n===`workflow`?a:p:r;if(!(i>=1||i<=0))for(let n=0;n<this.docCount;n++){if(e[n]<=0)continue;let r=this.docs[n].domain;r&&(t.has(r)||(e[n]*=i))}}getDomainSummary(){let e=new Map;for(let t of this.docs){let n=e.get(t.domain)??[];n.push(t.name),e.set(t.domain,n)}return Array.from(e.entries()).map(([e,t])=>({domain:e,count:t.length,tools:t})).toSorted((e,t)=>t.count-e.count)}scoreToken(e,t){let n=this.invertedIndex.get(e);n&&this.scorePostings(n,this.docCount,t,1)}findPrefixMatches(e){let t=this.sortedKeys,n=0,r=t.length;for(;n<r;){let i=n+r>>>1;t[i]<e?n=i+1:r=i}let i=[];for(;n<t.length&&t[n].startsWith(e);)i.push(t[n]),n++;return i}scorePostings(e,t,n,r){let i=e.length,a=Math.log((this.docCount-i+.5)/(i+.5)+1),o=x,s=g;for(let{docIndex:t,tf:i,weight:c}of e){let e=this.docs[t],l=1-o+o*(e.length/this.avgDocLength),u=i*(s+1)/(i+s*l);n[t]+=a*u*c*r}}async applyRRFFusion(e,t,n){let r=se,a=u,o=Pe(n),s=J(this.trigramIndex.search(t,i)),c,l;if(S>0&&o.size>0){let e=[...o.entries()].find(([,e])=>e===0)?.[0];(e===void 0?0:n[e])>=S?(c=new Map,l=new Map):(c=await this.computeVectorCosineScores(t),l=J(c))}else c=await this.computeVectorCosineScores(t),l=J(c);let d=new Map;for(let[e,t]of l)d.set(this.docs[e].name,t);this.feedbackTracker.recordVectorRanking(d);let f=new Float64Array(this.docCount);for(let e=0;e<this.docCount;e++){let t=0,n=o.get(e);n!==void 0&&(t+=1/(r+n));let i=s.get(e);i!==void 0&&a>0&&(t+=a*(1/(r+i)));let c=l.get(e);c!==void 0&&this.feedbackTracker.getVectorWeight()>0&&(t+=this.feedbackTracker.getVectorWeight()*(1/(r+c))),f[e]=t}Fe(n,f)}async ensureToolEmbeddings(){if(this.toolEmbeddings||!this.embeddingEngine)return;let e=this.docs.map(e=>`${e.name.replace(/_/g,` `)}: ${e.description}`);this.toolEmbeddings=await this.embeddingEngine.embedBatch(e)}async computeVectorCosineScores(e){if(!this.embeddingEngine)return new Map;try{await this.ensureToolEmbeddings()}catch{return new Map}if(!this.toolEmbeddings)return new Map;let t;try{t=await this.embeddingEngine.embed(e)}catch{return new Map}let n=new Map;for(let e=0;e<this.toolEmbeddings.length;e++){let r=this.toolEmbeddings[e],i=0;for(let e=0;e<t.length;e++)i+=t[e]*r[e];i>0&&n.set(e,i)}return n}recordToolCallFeedback(e,t){for(this.feedbackTracker.recordToolCallFeedback(e,!!this.embeddingEngine),this.recencyTracker.delete(e),this.recencyTracker.set(e,Date.now());this.recencyTracker.size>te;){let e=this.recencyTracker.keys().next().value;if(e===void 0)break;this.recencyTracker.delete(e)}}associateLastSearch(e){this.qualityTracker.associateLastSearch(e)}getSearchQualityMetrics(){return this.qualityTracker.computeMetrics()}getSearchQualityTracker(){return this.qualityTracker}applyIntentBonusBand(e,t){if(t.size===0)return;let n=0;for(let t=0;t<this.docCount;t++)n=Math.max(n,e[t]);let r=0;for(let e of t.values())r=Math.max(r,e);if(r<=0)return;let i=Math.max(1,n+1),a=[...new Set([...t.values()].filter(e=>e>0))].toSorted((e,t)=>e-t),o=new Map;for(let e=0;e<a.length;e++)o.set(a[e],e+1);for(let[n,r]of t){if(r<=0)continue;let t=this.docNameIndex.get(n);if(t===void 0)continue;let a=o.get(r);a!==void 0&&(e[t]+=i*a)}}applyGraphExpansion(e){Ie({scores:e,docs:this.docs,affinityGraph:this.affinityGraph})}};function X(e){let t=new Set(e.selectedTools.map(e=>e.name));for(let n of e.activatedToolNames)t.add(n);return t}function ze(e){let t=new Set(he(e.baseTier));for(let n of e.enabledDomains)t.add(n);for(let n of e.extensionToolsByName.values())t.add(n.domain);for(let n of X(e)){let r=e.extensionToolsByName.get(n)?.domain;if(r){t.add(r);continue}let i=A(n);i&&t.add(i)}return t}function Be(e){return e.baseTier}function Ve(e){let t=new Map;for(let n of e.extensionToolsByName.values())t.set(n.name,n.domain);return t}async function Z(e){await O();let t=new Map(j.map(e=>[e.name,e]));for(let n of e.extensionToolsByName.values())t.set(n.name,n.tool);return[...t.values()]}async function He(e){return new Map((await Z(e)).map(e=>[e.name,e]))}const Q=new WeakMap;function Ue(){let e=new Map;for(let t of fe())if(t.sceneKeywords)for(let[n,r]of Object.entries(t.sceneKeywords))r.length>0&&e.set(n,r);return e}function We(e){let t=[];for(let[n,r]of e.extensionToolsByName)t.push(`${n}:${r.domain}`);return t.sort(),[e.extensionWorkflowRuntimeById.size,t.join(`|`)].join(`::`)}async function Ge(e){await O();let t=We(e),n=Q.get(e);if(n?.signature===t)return n.engine;let r=await Z(e),i=Ve(e),a=new Map,o=new Map;for(let t of e.extensionToolsByName.values())o.set(t.name,1.12);e.extensionWorkflowRuntimeById.size>0&&(a.set(`workflow`,s),o.set(`run_extension_workflow`,1.35),o.set(`list_extension_workflows`,1.25));let c=new Y(r,i,a,o,e.config.search,Ue());return c.extensionEtag=t,Q.set(e,{signature:t,engine:c}),c}function Ke(e){let t={};for(let e of k())t[e.domain]=(t[e.domain]??0)+1;for(let n of e.extensionToolsByName.values())t[n.domain]=(t[n.domain]??0)+1;let n=k().length,r=e.extensionToolsByName.size;return`Search ${n+r} tools across ${Object.keys(t).length} capability domains. This includes built-in tools plus any loaded plugin/workflow tools (${r} currently loaded). In search-tier sessions, call this before assuming a capability is unavailable. Use activate_tools for exact matches, activate_domain for an entire domain. Domains: ${Object.entries(t).toSorted((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} (${t})`).join(` | `)}. Query tip: before searching, distill your intent into key concepts (action verb + target + domain). Pass distilled keywords, not full sentences — the search engine works on token matching, not semantic understanding.`}var qe=e({handleActivateDomain:()=>$});async function $(e,n){let r=typeof n.domain==`string`?n.domain:``;if(!r)return D(JSON.stringify({success:!1,error:`domain must be a non-empty string`}));let i=new Set(de());for(let t of e.extensionToolsByName.values())i.add(t.domain);if(!i.has(r))return D(JSON.stringify({success:!1,error:`Unknown domain "${r}". Valid: ${[...i].join(`, `)}`}));await me(r);let a=typeof n.ttlMinutes==`number`?n.ttlMinutes:h,o=[...pe([r]),...[...e.extensionToolsByName.values()].filter(e=>e.domain===r).map(e=>e.tool)],s=X(e),c=[];e.enabledDomains.add(r);for(let t of o){if(s.has(t.name))continue;let n=e.extensionToolsByName.get(t.name);if(n)P(e,n,`activate_domain`);else{let n=e.registerSingleTool(t);e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,n)}c.push(t.name)}if(c.length>0){let n=new Set(c.filter(t=>!e.extensionToolsByName.has(t)));if(n.size>0){let t=R(e.handlerDeps,n);e.router.addHandlers(t)}for(let t of c){let n=e.extensionToolsByName.get(t);n?.handler&&e.router.addHandlers({[t]:n.handler})}N(e,r,a,c),M(e)?.setPendingDomainActivation(r,a,c);try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed:`,e)}}return t.info(`activate_domain: domain="${r}", activated ${c.length} tools, ttl=${a}min`),e.mcpLog.info(`jshookmcp`,{event:`domain_activated`,domain:r,toolCount:c.length}),D(JSON.stringify({success:!0,domain:r,activated:c.length,activatedTools:c,totalDomainTools:o.length,ttlMinutes:a>0?a:`no expiry`,hint:c.length>0?`Tools activated. If they do not appear in your tool list, use call_tool({ name: "<tool>", args: {...} }) to invoke them.`:void 0}))}export{Be as a,ze as c,X as i,K as l,$ as n,Ge as o,Ke as r,He as s,qe as t,R as u};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Si as e,pt as t}from"./constants-BYj8Xek8.mjs";import{_ as n,b as r,d as i,m as a,t as o,u as s}from"./Win32API-eUCF57l_.mjs";import{i as c}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{randomUUID as l}from"node:crypto";var u=class{freezes=new Map;writeHistory=[];undoneStack=[];async writeValue(t,u,d,f){let p=BigInt(u.startsWith(`0x`)?u:`0x${u}`),{patternBytes:m}=c(d,f),h=Buffer.from(m),g=r(t,!0);try{let r=i(g,p,h.length),{oldProtect:o}=a(g,p,h.length,s.READWRITE);n(g,p,h),a(g,p,h.length,o);let c={id:l(),pid:t,address:`0x${p.toString(16).toUpperCase()}`,oldValue:Array.from(r),newValue:Array.from(h),timestamp:Date.now(),undone:!1};return this.writeHistory.push(c),this.undoneStack=[],this.writeHistory.length>e&&(this.writeHistory=this.writeHistory.slice(-e)),c}finally{o(g)}}async undo(){for(let e=this.writeHistory.length-1;e>=0;e--){let t=this.writeHistory[e];if(!t.undone){let e=BigInt(t.address),i=Buffer.from(t.oldValue),c=r(t.pid,!0);try{let{oldProtect:t}=a(c,e,i.length,s.READWRITE);n(c,e,i),a(c,e,i.length,t)}finally{o(c)}return t.undone=!0,this.undoneStack.push(t),t}}return null}async redo(){let e=this.undoneStack.pop();if(!e)return null;let t=BigInt(e.address),i=Buffer.from(e.newValue),c=r(e.pid,!0);try{let{oldProtect:e}=a(c,t,i.length,s.READWRITE);n(c,t,i),a(c,t,i.length,e)}finally{o(c)}return e.undone=!1,e}async freeze(e,i,u,d,f){let p=BigInt(i.startsWith(`0x`)?i:`0x${i}`),{patternBytes:m}=c(u,d),h=Buffer.from(m),g=f??t,_={id:l(),pid:e,address:`0x${p.toString(16).toUpperCase()}`,value:Array.from(h),valueType:d,intervalMs:g,isActive:!0};return _.timer=setInterval(()=>{try{let t=r(e,!0);try{let{oldProtect:e}=a(t,p,h.length,s.READWRITE);n(t,p,h),a(t,p,h.length,e)}finally{o(t)}}catch{_.isActive=!1,_.timer&&clearInterval(_.timer),this.freezes.delete(_.id)}},g),typeof _.timer.unref==`function`&&_.timer.unref(),this.freezes.set(_.id,_),_}async unfreeze(e){let t=this.freezes.get(e);return t?(t.timer&&clearInterval(t.timer),t.isActive=!1,this.freezes.delete(e),!0):!1}async unfreezeAll(){let e=0;for(let[t]of this.freezes)await this.unfreeze(t),e++;return e}listFreezes(){return Array.from(this.freezes.values()).map(({timer:e,...t})=>t)}async dumpMemory(e,t,n){let a=BigInt(t.startsWith(`0x`)?t:`0x${t}`),s=r(e,!1);try{return i(s,a,n)}finally{o(s)}}async dumpMemoryHex(e,t,n){let r=await this.dumpMemory(e,t,n),i=[],a=BigInt(t.startsWith(`0x`)?t:`0x${t}`);for(let e=0;e<r.length;e+=16){let t=a+BigInt(e),n=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e.toString(16).padStart(2,`0`)).join(` `),o=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e>=32&&e<=126?String.fromCharCode(e):`.`).join(``);i.push(`${t.toString(16).padStart(12,`0`)} ${n.padEnd(47)} |${o}|`)}return i.join(`
|
|
2
|
+
`)}getWriteHistory(){return[...this.writeHistory]}};const d=new u;export{u as MemoryController,d as memoryController};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Qn as e,Zn as t}from"./constants-BYj8Xek8.mjs";import{n,t as r}from"./formatAddress-vLA_hOJt.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=t,r=e){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{$n as e,Jn as t,Xn as n,Yn as r,qn as i}from"./constants-BYj8Xek8.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{t as o}from"./factory-CKr4fAE1.mjs";import{i as s}from"./NativeMemoryManager.utils-BHy1P_jM.mjs";import{t as c}from"./NativeMemoryManager.impl-DniBe2wf.mjs";import{n as l,t as u}from"./formatAddress-vLA_hOJt.mjs";import{n as d,r as f,scanSessionManager as p,t as m}from"./MemoryScanSession-DG_F-PjE.mjs";var h=class{nmm;providerCache=null;get provider(){return this.providerCache||=o(),this.providerCache}set provider(e){this.providerCache=e}constructor(e){this.nmm=e}async firstScan(e,t,n){let o=performance.now(),c=n.valueType,l=f(c),m=n.alignment??d(c),h=n.maxResults??r;if(l===0)return this.patternFirstScan(e,t,c,n);let{patternBytes:g}=s(t,c===`pointer`?`uint64`:c);if(g.length===0)throw new a(`VALIDATION`,`Invalid pattern for type ${c}: "${t}"`);let _=Buffer.from(g),v=p.createSession(e,n),y=[],b=new Map,x=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(x,n),t=e.length,r=0;for(let i of e){if(n.onProgress&&n.onProgress(r,t),r++,y.length>=h)break;let e=i.baseAddress,a=i.size,o=16*1024*1024;for(let t=0;t<a&&y.length<h;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(x,r,n).data}catch{break}if(m===l&&l>0){let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(;t<=i.length-l&&y.length<h;){let n=i.indexOf(_,t);if(n===-1)break;if(!this.isAlignedAddress(r+BigInt(n),e)){t=n+1;continue}let a=r+BigInt(n);y.push(a),b.set(a,Buffer.from(i.subarray(n,n+l))),t=n+e}}else{let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(let n=t;n<=i.length-l;n+=e)if(Buffer.compare(i.subarray(n,n+l),_)===0){let e=r+BigInt(n);if(y.push(e),b.set(e,Buffer.from(i.subarray(n,n+l))),y.length>=h)break}}}}}finally{this.provider.closeProcess(x)}p.updateSession(v,y,b);let S=`${(performance.now()-o).toFixed(1)}ms`,C=y.slice(0,i).map(u);return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:C,totalMatches:y.length,truncated:y.length>i,elapsed:S}}async nextScan(e,t,n,r){let o=performance.now(),c=p.getSession(e),{pid:l,valueType:d,addresses:h,previousValues:g}=c,_=f(d);if(_===0)throw new a(`VALIDATION`,`Next-scan is not supported for variable-length types (hex/string)`);let v=null,y=null;if(n!==void 0){let{patternBytes:e}=s(n,d===`pointer`?`uint64`:d);v=Buffer.from(e)}if(r!==void 0){let{patternBytes:e}=s(r,d===`pointer`?`uint64`:d);y=Buffer.from(e)}let b=[],x=new Map,S=this.provider.openProcess(l,!1);try{for(let e of h){let n;try{n=this.provider.readMemory(S,e,_).data}catch{continue}let r=g.get(e)??null;m(n,r,v,y,t,d)&&(b.push(e),x.set(e,Buffer.from(n)))}}finally{this.provider.closeProcess(S)}p.updateSession(e,b,x);let C=`${(performance.now()-o).toFixed(1)}ms`,w=b.slice(0,i).map(u);return{sessionId:e,matchCount:b.length,scanNumber:c.scanCount,addresses:w,totalMatches:b.length,truncated:b.length>i,elapsed:C}}async unknownInitialScan(t,n){let r=performance.now(),o=n.valueType,s=f(o),c=n.alignment??d(o),l=n.maxResults??e;if(s===0)throw new a(`VALIDATION`,`Unknown initial scan is not supported for variable-length types`);let m=p.createSession(t,n),h=[],g=new Map,_=this.provider.openProcess(t,!1);try{let e=this.getFilteredRegions(_,n),t=e.length,r=0;for(let i of e){if(n.onProgress&&n.onProgress(r,t),r++,h.length>=l)break;let e=i.baseAddress,a=i.size,o=16*1024*1024;for(let t=0;t<a&&h.length<l;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(_,r,n).data}catch{break}let u=this.getAlignStep(c),d=this.getAlignedChunkStart(r,u);for(let e=d;e<=i.length-s;e+=u){let t=r+BigInt(e);if(h.push(t),g.set(t,Buffer.from(i.subarray(e,e+s))),h.length>=l)break}}}}finally{this.provider.closeProcess(_)}p.updateSession(m,h,g);let v=`${(performance.now()-r).toFixed(1)}ms`;return{sessionId:m,matchCount:h.length,scanNumber:1,addresses:h.slice(0,i).map(u),totalMatches:h.length,truncated:h.length>i,elapsed:v}}async pointerScan(e,t,r={}){let a=performance.now(),o=r.maxResults??n,s=l(t),c={valueType:`pointer`,alignment:8,regionFilter:{moduleOnly:r.moduleOnly}},d=p.createSession(e,c),f=[],m=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(m,c);for(let t of e){if(r.moduleOnly,f.length>=o)break;let e=t.baseAddress,n=t.size,i=16*1024*1024;for(let t=0;t<n&&f.length<o;t+=i){let r=Math.min(i,n-t),a=e+BigInt(t),c;try{c=this.provider.readMemory(m,a,r).data}catch{break}for(let e=0;e<=c.length-8;e+=8){let t=c.readBigUInt64LE(e);if(Number(t>s?t-s:s-t)<=4096){let n=a+BigInt(e),r=t>=s?Number(t-s):-Number(s-t);if(f.push({address:u(n),value:u(t),offsetFromTarget:r}),f.length>=o)break}}}}}finally{this.provider.closeProcess(m)}let h=f.map(e=>l(e.address));p.updateSession(d,h,new Map);let g=`${(performance.now()-a).toFixed(1)}ms`;return{sessionId:d,pointers:f.slice(0,i),totalFound:f.length,elapsed:g}}async groupScan(e,n,o){let c=performance.now();if(n.length===0)throw new a(`VALIDATION`,`Group scan requires at least one value pattern`);let l=Math.max(...n.map(e=>e.offset+f(e.type)));if(l>t)throw new a(`VALIDATION`,`Group pattern too large: ${l} bytes (max ${t})`);let d=Array.from({length:l},()=>0),m=Array.from({length:l},()=>0);for(let e of n){let t=e.type===`pointer`?`uint64`:e.type,{patternBytes:n,mask:r}=s(e.value,t);for(let t=0;t<n.length;t++)d[e.offset+t]=n[t],m[e.offset+t]=r[t]}let h=o?.alignment??4,g=o?.maxResults??r,_={valueType:`int32`,alignment:h},v=p.createSession(e,_),y=[],b=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(b,_);for(let t of e){if(y.length>=g)break;let e=t.baseAddress,n=t.size,r=16*1024*1024,i=l-1;for(let t=0;t<n&&y.length<g;t+=r){let a=Math.min(r+i,n-t),o=e+BigInt(t),s;try{s=this.provider.readMemory(b,o,a).data}catch{break}let c=this.getAlignStep(h),u=this.getAlignedChunkStart(o,c);for(let e=u;e<=s.length-l;e+=c){let t=!0;for(let n=0;n<l;n++)if(m[n]===1&&s[e+n]!==d[n]){t=!1;break}if(t){let t=o+BigInt(e);if(y.push(t),y.length>=g)break}}}}}finally{this.provider.closeProcess(b)}p.updateSession(v,y,new Map);let x=`${(performance.now()-c).toFixed(1)}ms`;return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:y.slice(0,i).map(u),totalMatches:y.length,truncated:y.length>i,elapsed:x}}getAlignStep(e){return e>0?e:1}getAlignedChunkStart(e,t){let n=BigInt(t),r=e%n;return r===0n?0:Number(n-r)}isAlignedAddress(e,t){return e%BigInt(t)===0n}async patternFirstScan(e,t,n,o){let s=performance.now(),c=n===`pointer`?`uint64`:n,d=await this.nmm.scanMemory(e,t,c);if(!d.success)throw new a(`RUNTIME`,d.error??`Scan failed`);let f=p.createSession(e,o),m=o.maxResults??r,h=d.addresses.slice(0,m).map(l);p.updateSession(f,h,new Map);let g=`${(performance.now()-s).toFixed(1)}ms`;return{sessionId:f,matchCount:h.length,scanNumber:1,addresses:h.slice(0,i).map(u),totalMatches:d.addresses.length,truncated:h.length>i,elapsed:g}}getFilteredRegions(e,t){let n=[],r=0n,i=BigInt(`0x7FFFFFFF0000`),a=t.regionFilter;for(;r<i;){let t=this.provider.queryRegion(e,r);if(!t)break;let i=t.size;if(t.isReadable&&i>0&&i<=2**53-1){let e=!0;a?.writable&&!t.isWritable&&(e=!1),a?.executable&&!t.isExecutable&&(e=!1),a?.moduleOnly&&t.type!==`image`&&(e=!1),e&&n.push({baseAddress:t.baseAddress,size:i})}r=t.baseAddress+BigInt(t.size)}return n}};const g=new h(c);export{h as MemoryScanner,g as memoryScanner};
|