@jshookmcp/jshook 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -50
- package/README.zh.md +25 -48
- package/dist/AntiCheatDetector-CGVGNfy5.mjs +1 -0
- package/dist/CacheAdapters-CdAxBmVW.mjs +1 -0
- package/dist/CodeInjector-BlgyqTOk.mjs +1 -0
- package/dist/ConsoleMonitor-Dkqc0HNi.mjs +490 -0
- package/dist/DOMInspector-BYY_EJ0C.mjs +95 -0
- package/dist/DarwinAPI-DC4HGGLl.mjs +1 -0
- package/dist/DetailedDataManager-BniBJlVv.mjs +1 -0
- package/dist/EventBus-DgciURGg.mjs +1 -0
- package/dist/EvidenceGraphBridge-BIfgB7HP.mjs +1 -0
- package/dist/ExtensionManager-erMpqcLk.mjs +1 -0
- package/dist/FingerprintManager-N7BZqjxP.mjs +1 -0
- package/dist/HardwareBreakpoint-OcJqNFVc.mjs +1 -0
- package/dist/HeapAnalyzer-CqAxZzeS.mjs +1 -0
- package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-Bf1fbrNK.mjs} +66 -101
- package/dist/InstrumentationSession-DxXs0sCp.mjs +1 -0
- package/dist/MCPServer.search.handlers.domain-DVbWL1bT.mjs +1 -0
- package/dist/MemoryController-BaqstM5w.mjs +2 -0
- package/dist/MemoryScanSession-CaxAjZJf.mjs +1 -0
- package/dist/MemoryScanner-BLYnMJy6.mjs +1 -0
- package/dist/NativeMemoryManager.impl-CI554XbY.mjs +1 -0
- package/dist/NativeMemoryManager.utils-DM4NC3FE.mjs +1 -0
- package/dist/PEAnalyzer-DJyaJTQJ.mjs +1 -0
- package/dist/PageController-D9jVkH0i.mjs +1 -0
- package/dist/PointerChainEngine-5nF9eNlu.mjs +1 -0
- package/dist/PrerequisiteError-Bl3dK8XA.mjs +1 -0
- package/dist/ProcessRegistry-Hf12LlR9.mjs +1 -0
- package/dist/ResponseBuilder-B2lu4KEl.mjs +1 -0
- package/dist/ReverseEvidenceGraph-B931HeoW.mjs +2 -0
- package/dist/ScriptManager-fgqiALgj.mjs +7 -0
- package/dist/Speedhack-l6s8L2Qw.mjs +1 -0
- package/dist/StealthVerifier-Dhbj4B4P.mjs +1 -0
- package/dist/StructureAnalyzer-A-WamfYE.mjs +2 -0
- package/dist/ToolCatalog-D_IKl1Hu.mjs +1 -0
- package/dist/ToolError-DWU_z7gp.mjs +1 -0
- package/dist/ToolProbe-xsfALmN3.mjs +1 -0
- package/dist/ToolRegistry-B0Zs-phN.mjs +1 -0
- package/dist/ToolRouter.policy-CFHoN_Lw.mjs +4 -0
- package/dist/TraceRecorder-Dd8jLXpi.mjs +272 -0
- package/dist/VersionDetector-DMoUWyNm.mjs +9 -0
- package/dist/Win32API-Bhi5xFBe.mjs +1 -0
- package/dist/Win32Debug-CQteFL4F.mjs +1 -0
- package/dist/WorkflowEngine-CxEp2WXH.mjs +1 -0
- package/dist/analysis-BuR-NgX8.mjs +5 -0
- package/dist/{antidebug-BRKeyt27.mjs → antidebug-BOTZH6-0.mjs} +8 -259
- package/dist/artifactRetention-NBdncOEW.mjs +1 -0
- package/dist/artifacts-B5xQuEa_.mjs +1 -0
- package/dist/authorization-schema-B40obG1A.mjs +1 -0
- package/dist/betterSqlite3-CGaxz4AX.mjs +1 -0
- package/dist/binary-instrument-Cf9qqLlM.mjs +7 -0
- package/dist/bind-helpers-BlAOQrFQ.mjs +1 -0
- package/dist/boringssl-inspector-BST5vtKx.mjs +2 -0
- package/dist/browser-C4Le3xqA.mjs +11 -0
- package/dist/capabilities-DbYCv-HF.mjs +1 -0
- package/dist/chunk-C_pMuVsO.mjs +1 -0
- package/dist/collector-CKO8RPK8.mjs +1 -0
- package/dist/concurrency-CcK46d0h.mjs +1 -0
- package/dist/constants-Cp6hBrrx.mjs +1 -0
- package/dist/coordination-BbijHEHH.mjs +1 -0
- package/dist/debugger-CRJq_krh.mjs +1 -0
- package/dist/definitions-BGobEDQa.mjs +1 -0
- package/dist/definitions-BGwNSkVm.mjs +1 -0
- package/dist/definitions-BbxOUiP-.mjs +1 -0
- package/dist/definitions-CCP9gphV.mjs +1 -0
- package/dist/definitions-CIO9O-Sw.mjs +1 -0
- package/dist/definitions-CYFbewnd.mjs +1 -0
- package/dist/definitions-CdWEuIkI.mjs +1 -0
- package/dist/definitions-CoQFbggH.mjs +1 -0
- package/dist/definitions-CuJRsJ6N.mjs +1 -0
- package/dist/definitions-DI9YXsJk.mjs +1 -0
- package/dist/definitions-DJklW2sS.mjs +1 -0
- package/dist/definitions-DZ8uKusP.mjs +1 -0
- package/dist/definitions-Dds_zrWx.mjs +1 -0
- package/dist/definitions-Dgrg7f3D.mjs +1 -0
- package/dist/definitions-DtE0XLrT.mjs +1 -0
- package/dist/definitions-LaYTuwQd.mjs +26 -0
- package/dist/definitions-NoVp_9Pm.mjs +1 -0
- package/dist/definitions-OvGsfxdt.mjs +1 -0
- package/dist/definitions-jXPaVy4P.mjs +1 -0
- package/dist/encoding-DGcr6Aj_.mjs +2 -0
- package/dist/ensure-browser-core-Buls24LQ.mjs +1 -0
- package/dist/evidence-graph-bridge-B0yhGPcs.mjs +1 -0
- package/dist/factory-Cx_1LorX.mjs +1 -0
- package/dist/flat-target-session-CO5g78k3.mjs +1 -0
- package/dist/formatAddress-C7j2fDlM.mjs +1 -0
- package/dist/graphql-HLf3MS8H.mjs +62 -0
- package/dist/handlers-BLMa4X7l.mjs +54 -0
- package/dist/handlers-BP12ZsWc.mjs +4 -0
- package/dist/handlers-BZoPla6E.mjs +1 -0
- package/dist/handlers-BggKiVx9.mjs +2 -0
- package/dist/handlers-D3iev8g1.mjs +1 -0
- package/dist/handlers-D49r1-1P.mjs +1 -0
- package/dist/handlers-DCE45Ww8.mjs +2 -0
- package/dist/handlers-DW5AbYs5.mjs +5 -0
- package/dist/handlers-De5u62Ga2.mjs +1 -0
- package/dist/handlers-DmQzIc44.mjs +31 -0
- package/dist/handlers-DnJRGp7t.mjs +302 -0
- package/dist/handlers-Dv_runVv.mjs +2 -0
- package/dist/handlers-S9Ws0IGy.mjs +2 -0
- package/dist/{handlers-Dz9PYsCa.mjs → handlers-pVNpaw4A.mjs} +118 -904
- package/dist/handlers.impl-CD2_kOcC.mjs +1 -0
- package/dist/hooks-DDKppogd.mjs +600 -0
- package/dist/index.mjs +12 -5235
- package/dist/logger-sBC6IdRT.mjs +1 -0
- package/dist/maintenance-CutEO84j.mjs +1 -0
- package/dist/manifest-BFGxlDRh.mjs +123 -0
- package/dist/manifest-BPuE6oH2.mjs +1 -0
- package/dist/manifest-BXry5N09.mjs +1 -0
- package/dist/manifest-BeP_zJGb2.mjs +1 -0
- package/dist/manifest-C0g67k6U.mjs +1 -0
- package/dist/manifest-C1nZkTkO.mjs +1 -0
- package/dist/manifest-C7qV1z7F.mjs +1 -0
- package/dist/manifest-CDeUZGUZ.mjs +1 -0
- package/dist/manifest-CDiCtaQT.mjs +1 -0
- package/dist/manifest-CFn0359q2.mjs +1 -0
- package/dist/manifest-CGq4NpqH2.mjs +1 -0
- package/dist/manifest-CJMGt7Qy.mjs +1 -0
- package/dist/manifest-CRIJq4Hs.mjs +1 -0
- package/dist/manifest-C_hEIjSx.mjs +1 -0
- package/dist/manifest-CeQmtQOY.mjs +1 -0
- package/dist/manifest-Cq0j7GZt.mjs +1 -0
- package/dist/manifest-CtPmHAdn.mjs +1 -0
- package/dist/manifest-Cx2IVMUY.mjs +1 -0
- package/dist/manifest-D16xPXro.mjs +1 -0
- package/dist/manifest-D44TaRJU.mjs +1 -0
- package/dist/manifest-D610kxZr.mjs +2 -0
- package/dist/manifest-DC-SMF6b.mjs +1 -0
- package/dist/manifest-DD3rtxvV.mjs +1 -0
- package/dist/manifest-DKUorv5M.mjs +1 -0
- package/dist/manifest-DMJlcsTR.mjs +1 -0
- package/dist/manifest-DWUUWBz0.mjs +1 -0
- package/dist/manifest-De-6Wf2R.mjs +1 -0
- package/dist/manifest-Dgh0uDW-.mjs +1 -0
- package/dist/manifest-Dm0o3i2U.mjs +1 -0
- package/dist/manifest-DsVh7Y4U.mjs +1 -0
- package/dist/manifest-DtEFSRaq.mjs +1 -0
- package/dist/manifest-H-EpAyZQ.mjs +1 -0
- package/dist/manifest-ais9Afrw.mjs +1 -0
- package/dist/manifest-tmb54wmA.mjs +1 -0
- package/dist/manifest-yu2xiQqe.mjs +1 -0
- package/dist/manifest-zrbrpKCC.mjs +1 -0
- package/dist/matchesWildcardPattern-BGqLSmEs.mjs +1 -0
- package/dist/modules-p-PUNv9r.mjs +332 -0
- package/dist/mojo-ipc-VGlv3Qyp.mjs +9 -0
- package/dist/network-BjZ1Y-GB.mjs +7 -0
- package/dist/outputPaths-BonGThuc.mjs +2 -0
- package/dist/parse-args-Cuk7-xUt.mjs +1 -0
- package/dist/platform-C446Lf97.mjs +93 -0
- package/dist/playwright-cdp-fallback-BwVR-_T3.mjs +1 -0
- package/dist/process-C9f2A5zk.mjs +962 -0
- package/dist/proxy-CvRepxgV.mjs +1 -0
- package/dist/registry-DUHIPE-v.mjs +1 -0
- package/dist/response-C7rKQst4.mjs +1 -0
- package/dist/search-defaults-D2bY-rzH.mjs +1 -0
- package/dist/server/plugin-api.mjs +1 -293
- package/dist/shared-state-board-Cyg-xh_k.mjs +1 -0
- package/dist/sourcemap-D6Q1UuAp.mjs +1 -0
- package/dist/ssrf-policy-T96MR3r6.mjs +1 -0
- package/dist/streaming-CTX58tbb.mjs +1 -0
- package/dist/tool-builder-CI9914Tf.mjs +1 -0
- package/dist/transform-Cv9P2vVD.mjs +103 -0
- package/dist/types-CuyefmGT.mjs +1 -0
- package/dist/types-DtThH00r.mjs +1 -0
- package/dist/wasm-DaJa8J0V.mjs +174 -0
- package/dist/webcrack-CsLLJIs9.mjs +46 -0
- package/dist/workflow-CYIXtrWD.mjs +101 -0
- package/package.json +50 -78
- 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
|
@@ -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{$n as n,Bn as r,Fn as i,Gn as a,Hn as o,In as s,Jn as c,Kn as l,Ln as u,Pn as d,Qn as f,Rn as p,Un as m,Vn as h,Wn as g,Xn as _,Yn as v,Zn as y,a as b,ar as x,cr as S,dr as C,er as ee,fr as te,hr as ne,ir as re,nr as ie,or as ae,pr as w,qn as T,rr as oe,sr as E,tr as D,ur as O,zn as se}from"./constants-Cp6hBrrx.mjs";import{r as k}from"./response-C7rKQst4.mjs";import{c as A,d as ce,f as le,i as ue,l as de,n as j,p as M,r as N,s as P,t as F}from"./ToolCatalog-D_IKl1Hu.mjs";import{t as I}from"./ProcessRegistry-Hf12LlR9.mjs";import{t as L}from"./search-defaults-D2bY-rzH.mjs";import{Worker as R}from"worker_threads";function z(e,t){return P(e,t)}function B(e,n,r,i){if(fe(e,n),r<=0)return;let a=r*60*1e3,o=new Set(i),s=setTimeout(()=>{t.info(`Domain "${n}" TTL expired (${r}min) — auto-deactivating ${o.size} tools`),U(e,n).catch(e=>{t.error(`Failed to deactivate domain "${n}" on TTL expiry:`,e)})},a);e.domainTtlEntries.set(n,{timer:s,ttlMs:a,toolNames:o})}function V(e,n){let r=e.domainTtlEntries.get(n);if(!r)return;clearTimeout(r.timer);let i=r.ttlMs/6e4;r.timer=setTimeout(()=>{t.info(`Domain "${n}" TTL expired (${i}min) — auto-deactivating`),U(e,n).catch(e=>{t.error(`Failed to deactivate domain "${n}" on TTL expiry:`,e)})},r.ttlMs)}function H(e,t){let n=N(t);if(!n){let r=e.extensionToolsByName.get(t);r&&(n=r.domain)}n&&e.domainTtlEntries.has(n)&&V(e,n)}function fe(e,t){let n=e.domainTtlEntries.get(t);n&&(clearTimeout(n.timer),e.domainTtlEntries.delete(t))}async function U(e,n){let r=e.domainTtlEntries.get(n);if(!r)return;let i=r.toolNames;e.domainTtlEntries.delete(n);let a=0;for(let n of i){if(!e.activatedToolNames.has(n))continue;let r=e.activatedRegisteredTools.get(n);if(r)try{r.remove()}catch(e){t.warn(`Failed to remove tool "${n}" on domain TTL expiry:`,e)}e.router.removeHandler(n),e.activatedToolNames.delete(n),e.activatedRegisteredTools.delete(n);let i=e.extensionToolsByName.get(n);i&&(i.registeredTool=void 0),a++}if(a>0){e.enabledDomains.delete(n);for(let t of e.activatedToolNames)if(N(t)===n){e.enabledDomains.add(n);break}for(let t of e.selectedTools)if(N(t.name)===n){e.enabledDomains.add(n);break}try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed after domain TTL expiry:`,e)}t.info(`Domain "${n}" deactivated: removed ${a} tools`)}}const pe=[[`navigate`,`go`,`open`,`visit`,`browse`,`load`],[`intercept`,`capture`,`monitor`,`sniff`,`collect`,`record`,`track`],[`request`,`fetch`,`xhr`,`ajax`,`http`,`api`],[`authenticate`,`auth`,`login`,`credential`,`token`,`jwt`,`session`],[`breakpoint`,`pause`,`halt`,`stop`,`break`],[`step`,`next`,`continue`,`resume`],[`deobfuscate`,`beautify`,`unminify`,`decode`,`transform`,`decompile`],[`screenshot`,`snapshot`,`image`,`picture`,`photo`],[`evaluate`,`execute`,`run`,`eval`,`invoke`,`call`],[`element`,`node`,`selector`,`dom`,`component`],[`click`,`tap`,`press`,`interact`,`trigger`],[`type`,`input`,`enter`,`fill`,`write`],[`cookie`,`localstorage`,`storage`,`cache`,`indexeddb`],[`websocket`,`ws`,`socket`,`realtime`],[`scroll`,`swipe`,`drag`],[`search`,`find`,`query`,`lookup`,`discover`,`locate`],[`hook`,`patch`,`override`,`replace`,`wrap`,`proxy`],[`script`,`code`,`source`,`javascript`,`js`],[`bundle`,`webpack`,`module`,`pack`,`chunk`],[`block`,`filter`,`deny`,`reject`,`prevent`],[`allow`,`permit`,`whitelist`,`accept`,`enable`],[`remove`,`delete`,`clear`,`clean`,`purge`,`erase`],[`list`,`show`,`display`,`enumerate`,`get`],[`set`,`configure`,`config`,`setup`,`assign`],[`stealth`,`antidetect`,`fingerprint`,`evasion`,`undetected`],[`mobile`,`device`,`emulate`,`responsive`,`phone`],[`performance`,`profile`,`benchmark`,`metric`,`vitals`],[`register`,`signup`,`account`,`enroll`,`join`],[`captcha`,`challenge`,`verification`,`verify`,`solve`],[`tab`,`window`,`page`],[`inspect`,`examine`,`analyze`,`analyse`,`debug`,`investigate`],[`wait`,`delay`,`sleep`,`timeout`,`poll`],[`close`,`disconnect`,`quit`,`exit`,`shutdown`,`terminate`],[`traffic`,`network`,`request`,`response`,`connection`],[`heap`,`memory`,`allocation`,`gc`,`garbage`],[`export`,`save`,`dump`,`download`,`extract`],[`replay`,`resend`,`repeat`,`redo`,`retry`],[`variable`,`scope`,`local`,`closure`,`context`],[`watch`,`observe`,`monitor`,`trace`,`track`],[`protobuf`,`proto`,`binary`,`msgpack`,`grpc`],[`wasm`,`webassembly`,`assembly`],[`sse`,`eventsource`,`stream`,`streaming`],[`graphql`,`gql`,`introspect`,`mutation`,`subscription`],[`v8`,`heap`,`snapshot`,`bytecode`,`jit`,`turbofan`,`ignition`,`hiddenclass`],[`tls`,`ssl`,`boringssl`,`cert`,`certificate`,`pinning`,`handshake`,`keylog`],[`skia`,`gpu`,`render`,`scenegraph`,`scene`,`draw`,`paint`,`raster`,`layer`],[`frida`,`ghidra`,`ida`,`unidbg`,`jadx`,`binary`,`disassemble`,`decompile`,`instrument`],[`mojo`,`ipc`,`chromium`,`interface`,`broker`,`message`],[`syscall`,`etw`,`strace`,`dtrace`,`kernel`,`systemcall`,`tracefs`],[`adb`,`android`,`webview`,`apk`,`dalvik`,`art`,`emulator`],[`extension`,`plugin`,`addon`,`webhook`,`c2`,`bluetooth`,`ble`,`hid`,`serial`,`registry`]];var me=class e{reverseMap;constructor(){this.reverseMap=e.buildReverseMap(pe)}expand(e){let t=this.reverseMap.get(e.toLowerCase());return t?[...t]:[]}expandQuery(e){let t=new Set(e.map(e=>e.toLowerCase())),n=[],r=ee;for(let i of e){let e=this.reverseMap.get(i.toLowerCase());if(!e)continue;let a=0;for(let i of e){if(a>=r)break;t.has(i)||(n.push(i),t.add(i),a++)}}return n}static buildReverseMap(e){let t=new Map;for(let n of e)for(let e of n){let r=e.toLowerCase(),i=t.get(r);i||(i=new Set,t.set(r,i));for(let e of n){let t=e.toLowerCase();t!==r&&i.add(t)}}return t}};const he=p,ge=u;var _e=class e{queryCategoryProfiles;cjkQueryAliases;synonymExpander;constructor(t){this.queryCategoryProfiles=t?.queryCategoryProfiles===void 0?e.compileQueryCategoryProfiles(L.queryCategoryProfiles):e.compileQueryCategoryProfiles(t.queryCategoryProfiles),this.cjkQueryAliases=t?.cjkQueryAliases===void 0?e.compileCjkQueryAliasRules(L.cjkQueryAliases):e.compileCjkQueryAliasRules(t.cjkQueryAliases),this.synonymExpander=new me}static compileQueryCategoryProfiles(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.domainBoosts))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=new Map(e.domainBoosts.flatMap(e=>!e||typeof e.domain!=`string`||e.domain.length===0||typeof e.weight!=`number`||!Number.isFinite(e.weight)?[]:[[e.domain,e.weight]]));return[{pattern:t,domainBoosts:n}]})}static compileCjkQueryAliasRules(e){return e.flatMap(e=>{if(!e||typeof e.pattern!=`string`||!Array.isArray(e.tokens))return[];let t;try{t=new RegExp(e.pattern,e.flags)}catch{return[]}let n=e.tokens.filter(e=>typeof e==`string`&&e.length>0);return[{pattern:t,tokens:n}]})}detectQueryCategoryBoosts(e){let t=new Map;for(let n of this.queryCategoryProfiles)if(n.pattern.test(e))for(let[e,r]of n.domainBoosts){let n=t.get(e)??1;t.set(e,Math.max(n,r))}return t}expandCjkAliasTokens(e){let t=e.toLowerCase(),n=new Set;for(let e of this.cjkQueryAliases)if(e.pattern.test(t))for(let t of e.tokens)n.add(t);return[...n]}tokenise(e,t){let n=e.replace(/[_-]/g,` `);n=n.replace(/([\u4e00-\u9fff])/g,` $1 `);let r=n.split(/[^a-zA-Z0-9\u4e00-\u9fff]+/).filter(Boolean),i=[];for(let e of r){let t=e.toLowerCase(),n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/\s+/);if(n.length>1){for(let e of n)i.push(e.toLowerCase());i.push(t)}else i.push(t)}return i.push(...this.expandCjkAliasTokens(e)),t?.expandSynonyms&&i.push(...this.synonymExpander.expandQuery(i)),i}getK1(){return he}getB(){return ge}},ve=class{worker=null;ready=!1;nextId=0;pending=new Map;isReady(){return this.ready}async embed(e){this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed`,id:t,text:e})})}async embedBatch(e){if(e.length===0)return[];this.ensureWorker();let t=this.nextId++;return new Promise((n,r)=>{this.pending.set(t,{resolve:n,reject:r}),this.worker.postMessage({type:`embed_batch`,id:t,texts:e})})}async terminate(){if(this.worker){for(let[,e]of this.pending)e.reject(Error(`EmbeddingEngine terminated`));this.pending.clear(),await this.worker.terminate(),this.worker=null,this.ready=!1}}ensureWorker(){if(this.worker)return;let e=new URL(`./EmbeddingWorker.js`,import.meta.url);this.worker=new R(e),typeof this.worker.unref==`function`&&this.worker.unref(),I.register(this.worker),this.worker.on(`message`,e=>{let t=this.pending.get(e.id);t&&(this.pending.delete(e.id),e.type===`result`?(this.ready=!0,t.resolve(e.embedding)):e.type===`error`&&t.reject(Error(e.message??`Unknown worker error`)))}),this.worker.on(`error`,e=>{for(let[,t]of this.pending)t.reject(e);this.pending.clear(),this.worker=null,this.ready=!1}),this.worker.on(`exit`,e=>{if(e!==0){let t=Error(`Embedding worker exited with code ${e}`);for(let[,e]of this.pending)e.reject(t);this.pending.clear()}this.worker=null,this.ready=!1})}},W=class e{compiledRules;constructor(t){this.compiledRules=t===void 0?e.compileIntentToolBoostRules(L.intentToolBoostRules):e.compileIntentToolBoostRules(t)}static compileIntentToolBoostRules(e){let t=[];for(let n of e){if(!n||typeof n.pattern!=`string`||!Array.isArray(n.boosts)||n.boosts.length===0)continue;let e;try{e=new RegExp(n.pattern,n.flags??`i`)}catch{continue}let r=n.boosts.filter(e=>e&&typeof e.tool==`string`&&e.tool.length>0).map(e=>({tool:e.tool,bonus:Number.isFinite(e.bonus)?e.bonus:0})).filter(e=>e.bonus>0);r.length!==0&&t.push({pattern:e,boosts:r})}return t}resolveIntentToolBonuses(e){let t=e.toLowerCase(),n=new Map;for(let e of this.compiledRules)if(e.pattern.test(t))for(let{tool:t,bonus:r}of e.boosts){let e=n.get(t)??0;n.set(t,Math.max(e,r))}return n}getCompiledRules(){return this.compiledRules}},ye=class e{trigramSets;constructor(t){this.trigramSets=t.map(t=>e.extractTrigrams(t))}search(t,n=x){let r=e.extractTrigrams(t);if(r.size===0)return new Map;let i=new Map;for(let t=0;t<this.trigramSets.length;t++){let a=this.trigramSets[t];if(a.size===0)continue;let o=e.jaccardSimilarity(r,a);o>=n&&i.set(t,o)}return i}static extractTrigrams(e){let t=e.toLowerCase().replace(/[_\-\s]+/g,``),n=new Set;for(let e=0;e<=t.length-3;e++)n.add(t.slice(e,e+3));return n}static jaccardSimilarity(e,t){let n=0,[r,i]=e.size<=t.size?[e,t]:[t,e];for(let e of r)i.has(e)&&n++;let a=e.size+t.size-n;return a===0?0:n/a}};const G=.1,K=.8;var be=class{vectorWeight;lastVectorRanking=null;topN;learnUp;learnDown;constructor(e){this.vectorWeight=e?.vectorCosineWeight??S,this.topN=Math.max(1,te),this.learnUp=Math.max(0,w),this.learnDown=Math.max(0,C)}getVectorWeight(){return this.vectorWeight}recordVectorRanking(e){this.lastVectorRanking=e}recordToolCallFeedback(e,t){if(!this.lastVectorRanking||!t)return!1;let n=this.lastVectorRanking.get(e),r=this.vectorWeight;return n===void 0?this.vectorWeight=Math.max(G,this.vectorWeight-this.learnDown):n<this.topN?this.vectorWeight=Math.min(K,this.vectorWeight+this.learnUp):n<this.topN*2?this.vectorWeight=Math.min(K,this.vectorWeight+this.learnUp*.3):this.vectorWeight=Math.max(G,this.vectorWeight-this.learnDown),this.vectorWeight!==r}};const xe=new Set(`the.a.an.is.are.was.were.be.been.to.of.in.for.on.with.at.by.from.or.and.not.this.that.it.its.if.as.will.can.may.must.should.would.could.e.g.default.optional.required.when.set`.split(`.`)),q={extractParamTokens(e){let t=[];if(!e||typeof e!=`object`)return t;let n=e.properties;if(!n||typeof n!=`object`)return t;for(let[e,r]of Object.entries(n)){let n=e.replace(/([a-z])([A-Z])/g,`$1 $2`).split(/[\s_-]+/);for(let e of n){let n=e.toLowerCase();n.length>1&&t.push(n)}if(r&&typeof r==`object`){let e=r.description;if(typeof e==`string`){let n=e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);for(let e of n)e.length>2&&!xe.has(e)&&t.push(e)}}}return t},extractShortDescription(e){if(!e)return``;let t=e.match(/^[^.!?\n]+[.!?]?/);if(t){let e=t[0].trim();return e.length>120?e.slice(0,117)+`...`:e}return e.length>120?e.slice(0,117)+`...`:e},containsCJK(e){return/[\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af]/.test(e)},normalizeToolName(e){return e.toLowerCase().replace(/[\s-]+/g,`_`)}};function J(e,t,n){if(!t)return-1;let r=e.indexOf(t);for(;r>=0;){let i=r>0?e[r-1]:null,a=r+t.length<e.length?e[r+t.length]:null,o=i===null||!n.test(i),s=a===null||!n.test(a);if(o&&s)return r;r=e.indexOf(t,r+1)}return-1}function Se(e){let t=new Map,n=new Map;for(let t=0;t<e.length;t++){let r=e[t].name,i=r.indexOf(`_`);if(i<=0)continue;let a=r.slice(0,i),o=n.get(a)??[];o.push(t),n.set(a,o)}for(let[,e]of n){if(e.length<2||e.length>15)continue;let n=d/Math.sqrt(e.length);for(let r of e){let i=t.get(r)??[];for(let t of e)t!==r&&i.push({docIndex:t,weight:n});t.set(r,i)}}return t}function Ce(e){let t=[];for(let n=0;n<e.length;n++)e[n]>0&&t.push({idx:n,score:e[n]});t.sort((e,t)=>t.score-e.score);let n=new Map;for(let e=0;e<t.length;e++)n.set(t[e].idx,e);return n}function Y(e){let t=[...e.entries()].toSorted((e,t)=>t[1]-e[1]),n=new Map;for(let e=0;e<t.length;e++)n.set(t[e][0],e);return n}function we(e,t){for(let n=0;n<e.length;n++){let r=t[n];r<=0||(e[n]=e[n]+r*f*_)}}function Te(e){let{scores:t,docs:n,affinityGraph:r}=e,a=[];for(let e=0;e<t.length;e++)t[e]>0&&a.push({idx:e,score:t[e]});if(a.length!==0){if(a.sort((e,t)=>t.score-e.score),r.size>0){let e=Math.min(s,a.length);for(let n=0;n<e;n++){let{idx:e,score:o}=a[n],s=r.get(e);if(!s)continue;let c=1/(1+n);for(let{docIndex:e,weight:n}of s)t[e]>0&&(t[e]+=o*n*c*i)}}if(o>0&&a.length>=o){let e=a.slice(0,10),r=new Map;for(let{idx:t}of e){let e=n[t].domain;e&&r.set(e,(r.get(e)??0)+1)}for(let[e,i]of r)if(!(i<o))for(let r=0;r<n.length;r++)t[r]>0&&n[r].domain===e&&(t[r]*=h)}}}function Ee(e,t,n,r){return`${`${e}\0${t}`}${!n||n.size===0?``:`\0${[...n].toSorted().join(`|`)}`}${r?`\0${r}`:``}`}var De=class{capacity;map=new Map;constructor(e){this.capacity=Math.max(1,e)}get(e){let t=this.map.get(e);return t!==void 0&&(this.map.delete(e),this.map.set(e,t)),t}set(e,t){if(this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let e=this.map.keys().next().value;this.map.delete(e)}}clear(){this.map.clear()}},Oe=class{docs=[];invertedIndex=new Map;sortedKeys;avgDocLength;docCount;domainOverrides;domainScoreMultipliers;toolScoreMultipliers;extensionEtag=``;docNameIndex=new Map;affinityGraph;queryCache;trigramIndex;embeddingEngine;toolEmbeddings=null;feedbackTracker;recencyTracker=new Map;bm25Scorer;intentBoost;constructor(e,t,r,i,a,o){let s=e??F;this.domainOverrides=t,this.domainScoreMultipliers=r,this.toolScoreMultipliers=i,this.docCount=s.length,this.bm25Scorer=new _e(a);let c=a?.vectorEnabled??O;this.embeddingEngine=c?new ve:null,this.feedbackTracker=new be(a),this.intentBoost=new W(a?.intentToolBoostRules);let u=0;for(let e=0;e<s.length;e++){let t=s[e],r=this.domainOverrides?.get(t.name)??N(t.name),i=t.description??``,a=q.extractShortDescription(i),c=this.bm25Scorer.tokenise(t.name),l=new Set(c),d=r?this.bm25Scorer.tokenise(r):[],f=this.bm25Scorer.tokenise(i),p=q.extractParamTokens(t.inputSchema),m=[...c,...d,...f,...p],h={name:t.name,domain:r,description:i,shortDescription:a,tokens:m,length:m.length,nameTokens:c,nameTokenSet:l,nameTokenCount:l.size};this.docs.push(h),this.docNameIndex.set(t.name,e),u+=h.length;let _=new Map;for(let e of c){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,3),_.set(e,t)}for(let e of d){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,2),_.set(e,t)}for(let e of f){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,1),_.set(e,t)}for(let e of p){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,g),_.set(e,t)}let v=o?.get(t.name);if(v)for(let e of v){let t=_.get(e)??{tf:0,weight:0};t.tf++,t.weight=Math.max(t.weight,n),_.set(e,t)}for(let[t,{tf:n,weight:r}]of _){let i=this.invertedIndex.get(t);i||(i=[],this.invertedIndex.set(t,i)),i.push({docIndex:e,tf:n,weight:r})}}this.avgDocLength=this.docCount>0?u/this.docCount:1,this.sortedKeys=[...this.invertedIndex.keys()].toSorted(),this.affinityGraph=Se(this.docs),this.trigramIndex=new ye(this.docs.map(e=>e.name)),this.queryCache=new De(l)}async search(e,t=10,n,i,o){let s=this.bm25Scorer.tokenise(e);if(s.length===0)return[];if(s.length>6){let e=s.filter(e=>this.invertedIndex.has(e));if(e.length>=3){let t=e.map(e=>{let t=this.invertedIndex.get(e).length;return{token:e,idf:Math.log((this.docCount-t+.5)/(t+.5)+1)}});t.sort((e,t)=>t.idf-e.idf);let n=new Set(t.slice(0,6).map(e=>e.token));s=s.filter(e=>n.has(e))}}let c=this.bm25Scorer.tokenise(s.join(` `),{expandSynonyms:!0}).filter(e=>!s.includes(e));s.push(...c);let l=(()=>{let t=e.toLowerCase();if(!/(?:\b(?:call|use|run|invoke|execute)\b|调用|执行|使用|运行)/i.test(t))return null;let n=/[a-z0-9_]/,r=/[a-z0-9]/,i=null,a=1/0;for(let e of this.docNameIndex.keys()){let o=J(t,e,n);o<0&&e.includes(`_`)&&(o=J(t,e.replace(/_/g,`-`),r),o<0&&(o=J(t,e.replace(/_/g,` `),r))),!(o<0)&&(o<a||o===a&&e.length>(i?.length??0))&&(i=e,a=o)}return i})(),u=Ee(e,t,i,this.extensionEtag),d=this.queryCache.get(u);if(d&&this.isCachedEntryFresh(d)){let e=n??new Set;return d.results.map(t=>({...t,isActive:e.has(t.name)}))}let f=this.intentBoost.resolveIntentToolBonuses(e),p=new Float64Array(this.docCount);for(let e of s)if(this.scoreToken(e,p),e.length>=3){let t=this.findPrefixMatches(e);for(let n of t)if(n!==e){let e=this.invertedIndex.get(n);e&&this.scorePostings(e,this.docCount,p,a)}}await this.applyRRFFusion(s,e,p);let h=this.bm25Scorer.detectQueryCategoryBoosts(e),g=e.toLowerCase().replace(/[\s-]+/g,`_`),_=new Set(s);for(let e=0;e<this.docCount;e++){let t=this.docs[e],n=f.get(t.name)??0;if(p[e]<=0&&n<=0)continue;if(t.name===g){p[e]*=m;continue}let i=0;for(let e of s)t.nameTokenSet.has(e)&&i++;if(i>0&&t.nameTokenCount>0&&_.size>0){let n=i/t.nameTokenCount,a=i/_.size;p[e]*=1+r*n*a}let a=t.domain?this.domainScoreMultipliers?.get(t.domain)??1:1;if(a!==1&&(p[e]*=a),t.domain&&h.size>0){let n=h.get(t.domain);n!==void 0&&n>1&&(p[e]*=n)}let o=this.toolScoreMultipliers?.get(t.name)??1;o!==1&&(p[e]*=o)}if(this.applyIntentBonusBand(p,f),this.applyGraphExpansion(p),this.applyRecencyBoost(p),this.applyTierPenalty(p,i,o),l){let e=this.docNameIndex.get(l);if(e!==void 0){let t=0;for(let e=0;e<this.docCount;e++){let n=p[e];n>t&&(t=n)}let n=Math.max(1,t+1);p[e]+=n}}let v=n??new Set,y=[];for(let e=0;e<this.docCount;e++)if(p[e]>0){let t=this.docs[e];y.push({name:t.name,domain:t.domain,shortDescription:t.shortDescription,score:Math.round(p[e]*1e3)/1e3,isActive:v.has(t.name)})}y.sort((e,t)=>t.score-e.score);let b=y.slice(0,t);return this.queryCache.set(u,{results:b,vectorWeightAtCache:this.feedbackTracker.getVectorWeight(),cachedAtMs:Date.now()}),b}isCachedEntryFresh(e){let t=this.feedbackTracker.getVectorWeight();return Math.abs(t-e.vectorWeightAtCache)<=se}applyRecencyBoost(e){if(T<=0||this.recencyTracker.size===0)return;let t=v;if(t<=0)return;let n=Date.now(),r=T;for(let[i,a]of this.recencyTracker){let o=n-a;if(o<0||o>t)continue;let s=this.docNameIndex.get(i);if(s===void 0||e[s]<=0)continue;let c=1+r*(1-o/t);e[s]*=c}}applyTierPenalty(e,t,n){if(!t||t.size===0)return;let r=n?n===`full`?ie:n===`workflow`?re:oe:D;if(!(r>=1||r<=0))for(let n=0;n<this.docCount;n++){if(e[n]<=0)continue;let i=this.docs[n].domain;i&&(t.has(i)||(e[n]*=r))}}getDomainSummary(){let e=new Map;for(let t of this.docs){let n=e.get(t.domain)??[];n.push(t.name),e.set(t.domain,n)}return Array.from(e.entries()).map(([e,t])=>({domain:e,count:t.length,tools:t})).toSorted((e,t)=>t.count-e.count)}scoreToken(e,t){let n=this.invertedIndex.get(e);n&&this.scorePostings(n,this.docCount,t,1)}findPrefixMatches(e){let t=this.sortedKeys,n=0,r=t.length;for(;n<r;){let i=n+r>>>1;t[i]<e?n=i+1:r=i}let i=[];for(;n<t.length&&t[n].startsWith(e);)i.push(t[n]),n++;return i}scorePostings(e,t,n,r){let i=e.length,a=Math.log((this.docCount-i+.5)/(i+.5)+1),o=u,s=p;for(let{docIndex:t,tf:i,weight:c}of e){let e=this.docs[t],l=1-o+o*(e.length/this.avgDocLength),u=i*(s+1)/(i+s*l);n[t]+=a*u*c*r}}async applyRRFFusion(e,t,n){let r=y,i=ae,a=Ce(n),o=Y(this.trigramIndex.search(t,x)),s,c;if(E>0&&a.size>0){let e=[...a.entries()].find(([,e])=>e===0)?.[0];(e===void 0?0:n[e])>=E?(s=new Map,c=new Map):(s=await this.computeVectorCosineScores(t),c=Y(s))}else s=await this.computeVectorCosineScores(t),c=Y(s);let l=new Map;for(let[e,t]of c)l.set(this.docs[e].name,t);this.feedbackTracker.recordVectorRanking(l);let u=new Float64Array(this.docCount);for(let e=0;e<this.docCount;e++){let t=0,n=a.get(e);n!==void 0&&(t+=1/(r+n));let s=o.get(e);s!==void 0&&i>0&&(t+=i*(1/(r+s)));let l=c.get(e);l!==void 0&&this.feedbackTracker.getVectorWeight()>0&&(t+=this.feedbackTracker.getVectorWeight()*(1/(r+l))),u[e]=t}we(n,u)}async ensureToolEmbeddings(){if(this.toolEmbeddings||!this.embeddingEngine)return;let e=this.docs.map(e=>`${e.name.replace(/_/g,` `)}: ${e.description}`);this.toolEmbeddings=await this.embeddingEngine.embedBatch(e)}async computeVectorCosineScores(e){if(!this.embeddingEngine)return new Map;try{await this.ensureToolEmbeddings()}catch{return new Map}if(!this.toolEmbeddings)return new Map;let t;try{t=await this.embeddingEngine.embed(e)}catch{return new Map}let n=new Map;for(let e=0;e<this.toolEmbeddings.length;e++){let r=this.toolEmbeddings[e],i=0;for(let e=0;e<t.length;e++)i+=t[e]*r[e];i>0&&n.set(e,i)}return n}recordToolCallFeedback(e,t){for(this.feedbackTracker.recordToolCallFeedback(e,!!this.embeddingEngine),this.recencyTracker.delete(e),this.recencyTracker.set(e,Date.now());this.recencyTracker.size>c;){let e=this.recencyTracker.keys().next().value;if(e===void 0)break;this.recencyTracker.delete(e)}}applyIntentBonusBand(e,t){if(t.size===0)return;let n=0;for(let t=0;t<this.docCount;t++)n=Math.max(n,e[t]);let r=0;for(let e of t.values())r=Math.max(r,e);if(r<=0)return;let i=Math.max(1,n+1),a=[...new Set([...t.values()].filter(e=>e>0))].toSorted((e,t)=>e-t),o=new Map;for(let e=0;e<a.length;e++)o.set(a[e],e+1);for(let[n,r]of t){if(r<=0)continue;let t=this.docNameIndex.get(n);if(t===void 0)continue;let a=o.get(r);a!==void 0&&(e[t]+=i*a)}}applyGraphExpansion(e){Te({scores:e,docs:this.docs,affinityGraph:this.affinityGraph})}};function X(e){let t=new Set(e.selectedTools.map(e=>e.name));for(let n of e.activatedToolNames)t.add(n);return t}function ke(e){let t=new Set(j(e.baseTier));for(let n of e.enabledDomains)t.add(n);for(let n of e.extensionToolsByName.values())t.add(n.domain);for(let n of X(e)){let r=e.extensionToolsByName.get(n)?.domain;if(r){t.add(r);continue}let i=N(n);i&&t.add(i)}return t}function Ae(e){return e.baseTier}function je(e){let t=new Map;for(let n of e.extensionToolsByName.values())t.set(n.name,n.domain);return t}async function Z(e){await A();let t=new Map(F.map(e=>[e.name,e]));for(let n of e.extensionToolsByName.values())t.set(n.name,n.tool);return[...t.values()]}async function Me(e){return new Map((await Z(e)).map(e=>[e.name,e]))}const Q=new WeakMap;function Ne(){let e=new Map;for(let t of le())if(t.sceneKeywords)for(let[n,r]of Object.entries(t.sceneKeywords))r.length>0&&e.set(n,r);return e}function Pe(e){let t=[];for(let[n,r]of e.extensionToolsByName)t.push(`${n}:${r.domain}`);return t.sort(),[e.extensionWorkflowRuntimeById.size,t.join(`|`)].join(`::`)}async function Fe(e){await A();let t=Pe(e),n=Q.get(e);if(n?.signature===t)return n.engine;let r=await Z(e),i=je(e),a=new Map,o=new Map;for(let t of e.extensionToolsByName.values())o.set(t.name,1.12);e.extensionWorkflowRuntimeById.size>0&&(a.set(`workflow`,ne),o.set(`run_extension_workflow`,1.35),o.set(`list_extension_workflows`,1.25));let s=new Oe(r,i,a,o,e.config.search,Ne());return s.extensionEtag=t,Q.set(e,{signature:t,engine:s}),s}function Ie(e){let t={};for(let e of M())t[e.domain]=(t[e.domain]??0)+1;for(let n of e.extensionToolsByName.values())t[n.domain]=(t[n.domain]??0)+1;let n=M().length,r=e.extensionToolsByName.size;return`Search ${n+r} tools across ${Object.keys(t).length} capability domains. This includes built-in tools plus any loaded plugin/workflow tools (${r} currently loaded). In search-tier sessions, call this before assuming a capability is unavailable. Use activate_tools for exact matches, activate_domain for an entire domain. Domains: ${Object.entries(t).toSorted((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} (${t})`).join(` | `)}. Query tip: before searching, distill your intent into key concepts (action verb + target + domain). Pass distilled keywords, not full sentences — the search engine works on token matching, not semantic understanding.`}var Le=e({handleActivateDomain:()=>$});async function $(e,n){let r=typeof n.domain==`string`?n.domain:``;if(!r)return k(JSON.stringify({success:!1,error:`domain must be a non-empty string`}));let i=new Set(ce());for(let t of e.extensionToolsByName.values())i.add(t.domain);if(!i.has(r))return k(JSON.stringify({success:!1,error:`Unknown domain "${r}". Valid: ${[...i].join(`, `)}`}));await de(r);let a=typeof n.ttlMinutes==`number`?n.ttlMinutes:b,o=[...ue([r]),...[...e.extensionToolsByName.values()].filter(e=>e.domain===r).map(e=>e.tool)],s=X(e),c=[];e.enabledDomains.add(r);for(let t of o){if(s.has(t.name))continue;let n=e.registerSingleTool(t);e.activatedToolNames.add(t.name),e.activatedRegisteredTools.set(t.name,n);let r=e.extensionToolsByName.get(t.name);r&&(r.registeredTool=n),c.push(t.name)}if(c.length>0){let n=new Set(c.filter(t=>!e.extensionToolsByName.has(t)));if(n.size>0){let t=z(e.handlerDeps,n);e.router.addHandlers(t)}for(let t of c){let n=e.extensionToolsByName.get(t);n?.handler&&e.router.addHandlers({[t]:n.handler})}B(e,r,a,c);try{await e.server.sendToolListChanged()}catch(e){t.warn(`sendToolListChanged failed:`,e)}}return t.info(`activate_domain: domain="${r}", activated ${c.length} tools, ttl=${a}min`),k(JSON.stringify({success:!0,domain:r,activated:c.length,activatedTools:c,totalDomainTools:o.length,ttlMinutes:a>0?a:`no expiry`,hint:c.length>0?`Tools activated. If they do not appear in your tool list, use call_tool({ name: "<tool>", args: {...} }) to invoke them.`:void 0}))}export{Ae as a,ke as c,X as i,H as l,$ as n,Fe as o,Ie as r,Me as s,Le as t,z as u};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Z as e,Zr as t}from"./constants-Cp6hBrrx.mjs";import{_ as n,b as r,d as i,m as a,t as o,u as s}from"./Win32API-Bhi5xFBe.mjs";import{i as c}from"./NativeMemoryManager.utils-DM4NC3FE.mjs";import{randomUUID as l}from"node:crypto";var u=class{freezes=new Map;writeHistory=[];undoneStack=[];async writeValue(e,u,d,f){let p=BigInt(u.startsWith(`0x`)?u:`0x${u}`),{patternBytes:m}=c(d,f),h=Buffer.from(m),g=r(e,!0);try{let r=i(g,p,h.length),{oldProtect:o}=a(g,p,h.length,s.READWRITE);n(g,p,h),a(g,p,h.length,o);let c={id:l(),pid:e,address:`0x${p.toString(16).toUpperCase()}`,oldValue:Array.from(r),newValue:Array.from(h),timestamp:Date.now(),undone:!1};return this.writeHistory.push(c),this.undoneStack=[],this.writeHistory.length>t&&(this.writeHistory=this.writeHistory.slice(-t)),c}finally{o(g)}}async undo(){for(let e=this.writeHistory.length-1;e>=0;e--){let t=this.writeHistory[e];if(!t.undone){let e=BigInt(t.address),i=Buffer.from(t.oldValue),c=r(t.pid,!0);try{let{oldProtect:t}=a(c,e,i.length,s.READWRITE);n(c,e,i),a(c,e,i.length,t)}finally{o(c)}return t.undone=!0,this.undoneStack.push(t),t}}return null}async redo(){let e=this.undoneStack.pop();if(!e)return null;let t=BigInt(e.address),i=Buffer.from(e.newValue),c=r(e.pid,!0);try{let{oldProtect:e}=a(c,t,i.length,s.READWRITE);n(c,t,i),a(c,t,i.length,e)}finally{o(c)}return e.undone=!1,e}async freeze(t,i,u,d,f){let p=BigInt(i.startsWith(`0x`)?i:`0x${i}`),{patternBytes:m}=c(u,d),h=Buffer.from(m),g=f??e,_={id:l(),pid:t,address:`0x${p.toString(16).toUpperCase()}`,value:Array.from(h),valueType:d,intervalMs:g,isActive:!0};return _.timer=setInterval(()=>{try{let e=r(t,!0);try{let{oldProtect:t}=a(e,p,h.length,s.READWRITE);n(e,p,h),a(e,p,h.length,t)}finally{o(e)}}catch{_.isActive=!1,_.timer&&clearInterval(_.timer),this.freezes.delete(_.id)}},g),typeof _.timer.unref==`function`&&_.timer.unref(),this.freezes.set(_.id,_),_}async unfreeze(e){let t=this.freezes.get(e);return t?(t.timer&&clearInterval(t.timer),t.isActive=!1,this.freezes.delete(e),!0):!1}async unfreezeAll(){let e=0;for(let[t]of this.freezes)await this.unfreeze(t),e++;return e}listFreezes(){return Array.from(this.freezes.values()).map(({timer:e,...t})=>t)}async dumpMemory(e,t,n){let a=BigInt(t.startsWith(`0x`)?t:`0x${t}`),s=r(e,!1);try{return i(s,a,n)}finally{o(s)}}async dumpMemoryHex(e,t,n){let r=await this.dumpMemory(e,t,n),i=[],a=BigInt(t.startsWith(`0x`)?t:`0x${t}`);for(let e=0;e<r.length;e+=16){let t=a+BigInt(e),n=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e.toString(16).padStart(2,`0`)).join(` `),o=Array.from(r.subarray(e,Math.min(e+16,r.length))).map(e=>e>=32&&e<=126?String.fromCharCode(e):`.`).join(``);i.push(`${t.toString(16).padStart(12,`0`)} ${n.padEnd(47)} |${o}|`)}return i.join(`
|
|
2
|
+
`)}getWriteHistory(){return[...this.writeHistory]}};const d=new u;export{u as MemoryController,d as memoryController};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{An as e,jn as t}from"./constants-Cp6hBrrx.mjs";import{n,t as r}from"./formatAddress-C7j2fDlM.mjs";import{randomUUID as i}from"node:crypto";function a(e){switch(e){case`byte`:case`int8`:return 1;case`int16`:case`uint16`:return 2;case`int32`:case`uint32`:case`float`:return 4;case`int64`:case`uint64`:case`double`:case`pointer`:return 8;case`hex`:case`string`:return 0;default:return 4}}function o(e){switch(e){case`byte`:case`int8`:return 1;case`int16`:case`uint16`:return 2;case`int32`:case`uint32`:case`float`:return 4;case`int64`:case`uint64`:case`double`:case`pointer`:return 8;default:return 1}}function s(e){switch(e){case`byte`:return e=>e.readUInt8(0);case`int8`:return e=>e.readInt8(0);case`int16`:return e=>e.readInt16LE(0);case`uint16`:return e=>e.readUInt16LE(0);case`int32`:return e=>e.readInt32LE(0);case`uint32`:return e=>e.readUInt32LE(0);case`int64`:return e=>e.readBigInt64LE(0);case`uint64`:case`pointer`:return e=>e.readBigUInt64LE(0);case`float`:return e=>e.readFloatLE(0);case`double`:return e=>e.readDoubleLE(0);default:return e=>e.readInt32LE(0)}}function c(e){return e===`float`?(e,t)=>Math.abs(Number(e)-Number(t))<1e-6:e===`double`?(e,t)=>Math.abs(Number(e)-Number(t))<1e-12:e===`int64`||e===`uint64`||e===`pointer`?(e,t)=>e===t:(e,t)=>Number(e)===Number(t)}function l(e,t){let n=s(t),r=c(t),i=t===`int64`||t===`uint64`||t===`pointer`?(e,t)=>{let n=BigInt(e),r=BigInt(t);return n<r?-1:+(n>r)}:(e,t)=>Number(e)-Number(t);switch(e){case`exact`:return(e,t,i,a)=>i?r(n(e),n(i)):!1;case`unknown_initial`:return()=>!0;case`changed`:return(e,t,i,a)=>t?!r(n(e),n(t)):!1;case`unchanged`:return(e,t,i,a)=>t?r(n(e),n(t)):!0;case`increased`:return(e,t,r,a)=>t?i(n(e),n(t))>0:!1;case`decreased`:return(e,t,r,a)=>t?i(n(e),n(t))<0:!1;case`greater_than`:return(e,t,r,a)=>r?i(n(e),n(r))>0:!1;case`less_than`:return(e,t,r,a)=>r?i(n(e),n(r))<0:!1;case`between`:return(e,t,r,a)=>!r||!a?!1:i(n(e),n(r))>=0&&i(n(e),n(a))<=0;case`not_equal`:return(e,t,i,a)=>i?!r(n(e),n(i)):!1;default:return()=>!1}}const u=new Map;function d(e,t){let n=`${e}:${t}`,r=u.get(n);return r||(r=l(e,t),u.set(n,r)),r}function f(e,t,n,r,i,a){return d(i,a)(e,t,n,r)}var p=class{sessions=new Map;maxSessions;sessionTtlMs;constructor(n=e,r=t){this.maxSessions=n,this.sessionTtlMs=r}createSession(e,t){if(this.cleanup(),this.sessions.size>=this.maxSessions){let e=null,t=1/0;for(let[n,r]of this.sessions)r.createdAt<t&&(t=r.createdAt,e=n);e&&this.sessions.delete(e)}let n=i(),r=t.alignment??o(t.valueType),a=Date.now(),s={id:n,pid:e,valueType:t.valueType,alignment:r,createdAt:a,lastScanAt:a,scanCount:0,addresses:[],previousValues:new Map};return this.sessions.set(n,s),n}getSession(e){let t=this.sessions.get(e);if(!t)throw Error(`Scan session not found: ${e}`);if(Date.now()-t.lastScanAt>this.sessionTtlMs)throw this.sessions.delete(e),Error(`Scan session expired: ${e}`);return t}updateSession(e,t,n){let r=this.getSession(e);r.addresses=t,r.previousValues=n,r.lastScanAt=Date.now(),r.scanCount++}listSessions(){this.cleanup();let e=[],t=Date.now();for(let n of this.sessions.values()){let r=t-n.createdAt,i=Math.floor(r/6e4),a=Math.floor(r%6e4/1e3);e.push({id:n.id,pid:n.pid,valueType:n.valueType,addressCount:n.addresses.length,scanCount:n.scanCount,age:i>0?`${i}m${a}s`:`${a}s`})}return e}deleteSession(e){return this.sessions.delete(e)}cleanup(){let e=Date.now(),t=0;for(let[n,r]of this.sessions)e-r.lastScanAt>this.sessionTtlMs&&(this.sessions.delete(n),t++);return t}exportSession(e){let t=this.getSession(e),n={...t,addresses:t.addresses.map(e=>r(e)),previousValues:Array.from(t.previousValues.entries()).map(([e,t])=>[r(e),t.toString(`hex`)])};return JSON.stringify(n)}importSession(e){let t=JSON.parse(e),r=i(),a=Date.now(),o=new Map;if(Array.isArray(t.previousValues))for(let[e,r]of t.previousValues)typeof e==`string`&&typeof r==`string`&&o.set(n(e),Buffer.from(r,`hex`));let s=[];if(Array.isArray(t.addresses))for(let e of t.addresses)typeof e==`string`&&s.push(n(e));let c={id:r,pid:t.pid,valueType:t.valueType,alignment:t.alignment??4,createdAt:a,lastScanAt:a,scanCount:t.scanCount??0,addresses:s,previousValues:o};return this.sessions.set(r,c),r}};const m=new p;export{p as MemoryScanSessionManager,o as n,a as r,m as scanSessionManager,f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Dn as e,En as t,Mn as n,On as r,kn as i}from"./constants-Cp6hBrrx.mjs";import{t as a}from"./ToolError-DWU_z7gp.mjs";import{t as o}from"./factory-Cx_1LorX.mjs";import{i as s}from"./NativeMemoryManager.utils-DM4NC3FE.mjs";import{t as c}from"./NativeMemoryManager.impl-CI554XbY.mjs";import{n as l,t as u}from"./formatAddress-C7j2fDlM.mjs";import{n as d,r as f,scanSessionManager as p,t as m}from"./MemoryScanSession-CaxAjZJf.mjs";var h=class{nmm;providerCache=null;get provider(){return this.providerCache||=o(),this.providerCache}set provider(e){this.providerCache=e}constructor(e){this.nmm=e}async firstScan(e,n,i){let o=performance.now(),c=i.valueType,l=f(c),m=i.alignment??d(c),h=i.maxResults??r;if(l===0)return this.patternFirstScan(e,n,c,i);let{patternBytes:g}=s(n,c===`pointer`?`uint64`:c);if(g.length===0)throw new a(`VALIDATION`,`Invalid pattern for type ${c}: "${n}"`);let _=Buffer.from(g),v=p.createSession(e,i),y=[],b=new Map,x=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(x,i),t=e.length,n=0;for(let r of e){if(i.onProgress&&i.onProgress(n,t),n++,y.length>=h)break;let e=r.baseAddress,a=r.size,o=16*1024*1024;for(let t=0;t<a&&y.length<h;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(x,r,n).data}catch{break}if(m===l&&l>0){let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(;t<=i.length-l&&y.length<h;){let n=i.indexOf(_,t);if(n===-1)break;if(!this.isAlignedAddress(r+BigInt(n),e)){t=n+1;continue}let a=r+BigInt(n);y.push(a),b.set(a,Buffer.from(i.subarray(n,n+l))),t=n+e}}else{let e=this.getAlignStep(m),t=this.getAlignedChunkStart(r,e);for(let n=t;n<=i.length-l;n+=e)if(Buffer.compare(i.subarray(n,n+l),_)===0){let e=r+BigInt(n);if(y.push(e),b.set(e,Buffer.from(i.subarray(n,n+l))),y.length>=h)break}}}}}finally{this.provider.closeProcess(x)}p.updateSession(v,y,b);let S=`${(performance.now()-o).toFixed(1)}ms`,C=y.slice(0,t).map(u);return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:C,totalMatches:y.length,truncated:y.length>t,elapsed:S}}async nextScan(e,n,r,i){let o=performance.now(),c=p.getSession(e),{pid:l,valueType:d,addresses:h,previousValues:g}=c,_=f(d);if(_===0)throw new a(`VALIDATION`,`Next-scan is not supported for variable-length types (hex/string)`);let v=null,y=null;if(r!==void 0){let{patternBytes:e}=s(r,d===`pointer`?`uint64`:d);v=Buffer.from(e)}if(i!==void 0){let{patternBytes:e}=s(i,d===`pointer`?`uint64`:d);y=Buffer.from(e)}let b=[],x=new Map,S=this.provider.openProcess(l,!1);try{for(let e of h){let t;try{t=this.provider.readMemory(S,e,_).data}catch{continue}let r=g.get(e)??null;m(t,r,v,y,n,d)&&(b.push(e),x.set(e,Buffer.from(t)))}}finally{this.provider.closeProcess(S)}p.updateSession(e,b,x);let C=`${(performance.now()-o).toFixed(1)}ms`,w=b.slice(0,t).map(u);return{sessionId:e,matchCount:b.length,scanNumber:c.scanCount,addresses:w,totalMatches:b.length,truncated:b.length>t,elapsed:C}}async unknownInitialScan(e,r){let i=performance.now(),o=r.valueType,s=f(o),c=r.alignment??d(o),l=r.maxResults??n;if(s===0)throw new a(`VALIDATION`,`Unknown initial scan is not supported for variable-length types`);let m=p.createSession(e,r),h=[],g=new Map,_=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(_,r),t=e.length,n=0;for(let i of e){if(r.onProgress&&r.onProgress(n,t),n++,h.length>=l)break;let e=i.baseAddress,a=i.size,o=16*1024*1024;for(let t=0;t<a&&h.length<l;t+=o){let n=Math.min(o,a-t),r=e+BigInt(t),i;try{i=this.provider.readMemory(_,r,n).data}catch{break}let u=this.getAlignStep(c),d=this.getAlignedChunkStart(r,u);for(let e=d;e<=i.length-s;e+=u){let t=r+BigInt(e);if(h.push(t),g.set(t,Buffer.from(i.subarray(e,e+s))),h.length>=l)break}}}}finally{this.provider.closeProcess(_)}p.updateSession(m,h,g);let v=`${(performance.now()-i).toFixed(1)}ms`;return{sessionId:m,matchCount:h.length,scanNumber:1,addresses:h.slice(0,t).map(u),totalMatches:h.length,truncated:h.length>t,elapsed:v}}async pointerScan(e,n,r={}){let a=performance.now(),o=r.maxResults??i,s=l(n),c={valueType:`pointer`,alignment:8,regionFilter:{moduleOnly:r.moduleOnly}},d=p.createSession(e,c),f=[],m=this.provider.openProcess(e,!1);try{let e=this.getFilteredRegions(m,c);for(let t of e){if(r.moduleOnly,f.length>=o)break;let e=t.baseAddress,n=t.size,i=16*1024*1024;for(let t=0;t<n&&f.length<o;t+=i){let r=Math.min(i,n-t),a=e+BigInt(t),c;try{c=this.provider.readMemory(m,a,r).data}catch{break}for(let e=0;e<=c.length-8;e+=8){let t=c.readBigUInt64LE(e);if(Number(t>s?t-s:s-t)<=4096){let n=a+BigInt(e),r=t>=s?Number(t-s):-Number(s-t);if(f.push({address:u(n),value:u(t),offsetFromTarget:r}),f.length>=o)break}}}}}finally{this.provider.closeProcess(m)}let h=f.map(e=>l(e.address));p.updateSession(d,h,new Map);let g=`${(performance.now()-a).toFixed(1)}ms`;return{sessionId:d,pointers:f.slice(0,t),totalFound:f.length,elapsed:g}}async groupScan(n,i,o){let c=performance.now();if(i.length===0)throw new a(`VALIDATION`,`Group scan requires at least one value pattern`);let l=Math.max(...i.map(e=>e.offset+f(e.type)));if(l>e)throw new a(`VALIDATION`,`Group pattern too large: ${l} bytes (max ${e})`);let d=Array.from({length:l},()=>0),m=Array.from({length:l},()=>0);for(let e of i){let t=e.type===`pointer`?`uint64`:e.type,{patternBytes:n,mask:r}=s(e.value,t);for(let t=0;t<n.length;t++)d[e.offset+t]=n[t],m[e.offset+t]=r[t]}let h=o?.alignment??4,g=o?.maxResults??r,_={valueType:`int32`,alignment:h},v=p.createSession(n,_),y=[],b=this.provider.openProcess(n,!1);try{let e=this.getFilteredRegions(b,_);for(let t of e){if(y.length>=g)break;let e=t.baseAddress,n=t.size,r=16*1024*1024,i=l-1;for(let t=0;t<n&&y.length<g;t+=r){let a=Math.min(r+i,n-t),o=e+BigInt(t),s;try{s=this.provider.readMemory(b,o,a).data}catch{break}let c=this.getAlignStep(h),u=this.getAlignedChunkStart(o,c);for(let e=u;e<=s.length-l;e+=c){let t=!0;for(let n=0;n<l;n++)if(m[n]===1&&s[e+n]!==d[n]){t=!1;break}if(t){let t=o+BigInt(e);if(y.push(t),y.length>=g)break}}}}}finally{this.provider.closeProcess(b)}p.updateSession(v,y,new Map);let x=`${(performance.now()-c).toFixed(1)}ms`;return{sessionId:v,matchCount:y.length,scanNumber:1,addresses:y.slice(0,t).map(u),totalMatches:y.length,truncated:y.length>t,elapsed:x}}getAlignStep(e){return e>0?e:1}getAlignedChunkStart(e,t){let n=BigInt(t),r=e%n;return r===0n?0:Number(n-r)}isAlignedAddress(e,t){return e%BigInt(t)===0n}async patternFirstScan(e,n,i,o){let s=performance.now(),c=i===`pointer`?`uint64`:i,d=await this.nmm.scanMemory(e,n,c);if(!d.success)throw new a(`RUNTIME`,d.error??`Scan failed`);let f=p.createSession(e,o),m=o.maxResults??r,h=d.addresses.slice(0,m).map(l);p.updateSession(f,h,new Map);let g=`${(performance.now()-s).toFixed(1)}ms`;return{sessionId:f,matchCount:h.length,scanNumber:1,addresses:h.slice(0,t).map(u),totalMatches:d.addresses.length,truncated:h.length>t,elapsed:g}}getFilteredRegions(e,t){let n=[],r=0n,i=BigInt(`0x7FFFFFFF0000`),a=t.regionFilter;for(;r<i;){let t=this.provider.queryRegion(e,r);if(!t)break;let i=t.size;if(t.isReadable&&i>0&&i<=2**53-1){let e=!0;a?.writable&&!t.isWritable&&(e=!1),a?.executable&&!t.isExecutable&&(e=!1),a?.moduleOnly&&t.type!==`image`&&(e=!1),e&&n.push({baseAddress:t.baseAddress,size:i})}r=t.baseAddress+BigInt(t.size)}return n}};const g=new h(c);export{h as MemoryScanner,g as memoryScanner};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{v as t,y as n}from"./Win32API-Bhi5xFBe.mjs";import{n as r}from"./concurrency-CcK46d0h.mjs";import{t as i}from"./factory-Cx_1LorX.mjs";import{i as a,t as o}from"./NativeMemoryManager.utils-DM4NC3FE.mjs";import{exec as s}from"node:child_process";import{promisify as c}from"node:util";async function l(e){if(process.platform===`darwin`)return u(e);if(!n())return{available:!1,reason:`Native memory operations require Windows or macOS. Current platform: ${process.platform}`};if(!t())return{available:!1,reason:`koffi library not available. Install with: pnpm add koffi`};try{let{stdout:t}=await e(`powershell.exe -NoProfile -Command "([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)"`,{timeout:5e3});if(t.trim().toLowerCase()!==`true`)return{available:!1,reason:`Native memory operations require Administrator privileges. Run as Administrator.`}}catch{return{available:!1,reason:`Failed to check Administrator privileges.`}}return{available:!0}}async function u(e){try{(await import(`koffi`)).default.load(`/usr/lib/libSystem.B.dylib`).unload()}catch{return{available:!1,reason:`koffi library cannot load libSystem.B.dylib. Install koffi with: pnpm add koffi`}}let t=``;try{let{stdout:n}=await e(`csrutil status 2>&1 || true`,{timeout:5e3});t=n.trim()}catch{}return process.getuid&&process.getuid()!==0?{available:!1,reason:`macOS memory operations require root privileges for task_for_pid. Run with: sudo node <your-script>.${t?` SIP status: ${t}`:``}`}:{available:!0}}const d=c(s);function f(e,t,n,r,i=16777216){if(t.length===0||e.regionSize<t.length||i<=0)return[];let a=Math.max(t.length-1,0),s=Buffer.alloc(0),c=[];for(let l=0;l<e.regionSize;l+=i){let u=Math.min(i,e.regionSize-l),d=r(e.baseAddress+BigInt(l),u),f=s.length>0?Buffer.concat([s,d]):d,p=o(f,t,n);for(let t of p){let n=l+t-s.length;c.push(e.baseAddress+BigInt(n))}if(a===0||l+u>=e.regionSize){s=Buffer.alloc(0);continue}let m=Math.min(a,f.length);s=f.subarray(f.length-m)}return c}var p=class{providerCache=null;get provider(){return this.providerCache||=i(),this.providerCache}set provider(e){this.providerCache=e}async checkAvailability(){return l(d)}async readMemory(t,n,r){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),i=this.provider.openProcess(t,!1);try{let{data:t}=this.provider.readMemory(i,e,r);return{success:!0,data:t.toString(`hex`).toUpperCase().match(/.{2}/g)?.join(` `)||``}}finally{this.provider.closeProcess(i)}}catch(i){return e.error(`Native memory read failed`,{pid:t,address:n,size:r,error:i instanceof Error?i.message:String(i)}),{success:!1,error:i instanceof Error?i.message:String(i)}}}async writeMemory(t,n,r,i=`hex`){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),a;a=i===`base64`?Buffer.from(r,`base64`):Buffer.from(r.replace(/\s/g,``),`hex`);let o=this.provider.openProcess(t,!0);try{let{bytesWritten:t}=this.provider.writeMemory(o,e,a);return{success:!0,bytesWritten:t}}finally{this.provider.closeProcess(o)}}catch(a){return e.error(`Native memory write failed`,{pid:t,address:n,encoding:i,dataLength:r.length,error:a instanceof Error?a.message:String(a)}),{success:!1,error:a instanceof Error?a.message:String(a)}}}async enumerateRegions(t){try{let e=this.provider.openProcess(t,!1),n=[];try{let t=0n,r=BigInt(`0x7FFFFFFF0000`);for(;t<r;){let r=this.provider.queryRegion(e,t);if(!r)break;n.push(m(r)),t=r.baseAddress+BigInt(r.size)}return{success:!0,regions:n}}finally{this.provider.closeProcess(e)}}catch(n){return e.error(`Native region enumeration failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}async checkMemoryProtection(t,n){try{let e=BigInt(n.startsWith(`0x`)?n:`0x${n}`),r=this.provider.openProcess(t,!1);try{let t=this.provider.queryRegion(r,e);return t?{success:!0,protection:h(t.protection),isWritable:t.isWritable,isReadable:t.isReadable,isExecutable:t.isExecutable,regionStart:`0x${t.baseAddress.toString(16).toUpperCase()}`,regionSize:t.size}:{success:!1,error:`Failed to query memory region`}}finally{this.provider.closeProcess(r)}}catch(r){return e.error(`Native protection check failed`,{pid:t,address:n,error:r instanceof Error?r.message:String(r)}),{success:!1,error:r instanceof Error?r.message:String(r)}}}async scanMemory(t,n,i=`hex`){try{let{patternBytes:e,mask:o}=a(n,i);if(e.length===0)return{success:!1,addresses:[],error:`Invalid pattern`};let s=1e4,c=[],l=this.provider.openProcess(t,!1),u=[];try{let t=0n,n=BigInt(`0x7FFFFFFF0000`);for(;t<n;){let e=this.provider.queryRegion(l,t);if(!e)break;e.isReadable&&e.size>0&&e.size<=2**53-1&&c.push({baseAddress:e.baseAddress,regionSize:e.size}),t=e.baseAddress+BigInt(e.size)}let i=this.provider;u=await Promise.all(c.map(t=>r(async()=>{try{return f(t,e,o,(e,t)=>i.readMemory(l,e,t).data)}catch{return[]}})))}finally{this.provider.closeProcess(l)}let d=[];for(let e of u){for(let t of e)if(d.push(`0x${t.toString(16).toUpperCase()}`),d.length>=s)break;if(d.length>=s)break}return{success:!0,addresses:d,stats:{patternLength:e.length,resultsFound:d.length}}}catch(r){return e.error(`Native memory scan failed`,{pid:t,patternType:i,patternLength:n.length,error:r instanceof Error?r.message:String(r)}),{success:!1,addresses:[],error:r instanceof Error?r.message:String(r)}}}async enumerateModules(t){try{let e=this.provider.openProcess(t,!1);try{return{success:!0,modules:this.provider.enumerateModules(e).map(e=>({name:e.name,baseAddress:`0x${e.baseAddress.toString(16).toUpperCase()}`,size:e.size}))}}finally{this.provider.closeProcess(e)}}catch(n){return e.error(`Native module enumeration failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}async injectDll(t,n){if(process.platform!==`win32`)return{success:!1,error:`DLL injection is only supported on Windows`};try{let{openProcessForMemory:e,CloseHandle:r,WriteProcessMemory:i,VirtualAllocEx:a,CreateRemoteThread:o,GetModuleHandle:s,GetProcAddress:c,PAGE:l,MEM:u}=await import(`./Win32API-Bhi5xFBe.mjs`).then(e=>e.g),d=e(t,!0);try{let e=c(s(`kernel32.dll`),`LoadLibraryA`);if(!e)return{success:!1,error:`Failed to get LoadLibraryA address`};let t=Buffer.from(n+`\0`,`ascii`),f=a(d,0n,t.length,u.COMMIT|u.RESERVE,l.READWRITE);if(!f)return{success:!1,error:`Failed to allocate remote memory`};i(d,f,t);let{handle:p,threadId:m}=o(d,e,f);return p?(r(p),{success:!0,remoteThreadId:m}):{success:!1,error:`Failed to create remote thread`}}finally{r(d)}}catch(r){return e.error(`Native DLL injection failed`,{pid:t,dllPath:n,error:r instanceof Error?r.message:String(r)}),{success:!1,error:r instanceof Error?r.message:String(r)}}}async injectShellcode(t,n,r=`hex`){if(process.platform!==`win32`)return{success:!1,error:`Shellcode injection is only supported on Windows`};try{let e;e=r===`base64`?Buffer.from(n,`base64`):Buffer.from(n.replace(/\s/g,``),`hex`);let{openProcessForMemory:i,CloseHandle:a,WriteProcessMemory:o,VirtualAllocEx:s,VirtualProtectEx:c,CreateRemoteThread:l,PAGE:u,MEM:d}=await import(`./Win32API-Bhi5xFBe.mjs`).then(e=>e.g),f=i(t,!0);try{let t=s(f,0n,e.length,d.COMMIT|d.RESERVE,u.READWRITE);if(!t)return{success:!1,error:`Failed to allocate remote memory`};o(f,t,e);let{success:n}=c(f,t,e.length,u.EXECUTE_READWRITE);if(!n)return{success:!1,error:`Failed to change memory protection`};let{handle:r,threadId:i}=l(f,t,0n);return r?(a(r),{success:!0,remoteThreadId:i}):{success:!1,error:`Failed to create remote thread`}}finally{a(f)}}catch(i){return e.error(`Native shellcode injection failed`,{pid:t,encoding:r,shellcodeLength:n.length,error:i instanceof Error?i.message:String(i)}),{success:!1,error:i instanceof Error?i.message:String(i)}}}async checkDebugPort(t){if(process.platform!==`win32`)return{success:!1,error:`Debug port check is only supported on Windows`};try{let{openProcessForMemory:e,CloseHandle:n,NtQueryInformationProcess:r}=await import(`./Win32API-Bhi5xFBe.mjs`).then(e=>e.g),i=e(t,!1);try{let{status:e,debugPort:t}=r(i,7);return e===0?{success:!0,isDebugged:t!==0}:{success:!1,error:`NtQueryInformationProcess failed with status 0x${e.toString(16)}`}}finally{n(i)}}catch(n){return e.error(`Native debug port check failed`,{pid:t,error:n instanceof Error?n.message:String(n)}),{success:!1,error:n instanceof Error?n.message:String(n)}}}};function m(e){return{baseAddress:`0x${e.baseAddress.toString(16).toUpperCase()}`,size:e.size,state:e.state.toUpperCase(),protection:h(e.protection),isReadable:e.isReadable,isWritable:e.isWritable,isExecutable:e.isExecutable,type:e.type.toUpperCase()}}function h(e){if(e===0)return`NOACCESS`;let t=[],n=(e&1)!=0,r=(e&2)!=0,i=(e&4)!=0,a=(e&8)!=0;return n&&r&&i?t.push(`RWX`):n&&i?t.push(`RX`):n&&r?t.push(`RW`):n?t.push(`R`):i&&t.push(`X`),a&&t.push(`GUARD`),t.join(` `)||`UNKNOWN`}const g=new p;export{g as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as e,v as t}from"./Win32API-Bhi5xFBe.mjs";function n(){return t()}function r(e,t){let n=[],r=[];switch(t){case`hex`:{let t=e.trim().split(/\s+/);for(let e of t)if(e===`??`||e===`**`||e===`?`)n.push(0),r.push(0);else{let t=parseInt(e,16);isNaN(t)||(n.push(t),r.push(1))}break}case`int32`:{let t=parseInt(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(4);e.writeInt32LE(t,0),n.push(...e),r.push(1,1,1,1)}break}case`int64`:{let t=BigInt(e),i=Buffer.allocUnsafe(8);i.writeBigInt64LE(t,0),n.push(...i),r.push(1,1,1,1,1,1,1,1);break}case`float`:{let t=parseFloat(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(4);e.writeFloatLE(t,0),n.push(...e),r.push(1,1,1,1)}break}case`double`:{let t=parseFloat(e);if(!isNaN(t)){let e=Buffer.allocUnsafe(8);e.writeDoubleLE(t,0),n.push(...e),r.push(1,1,1,1,1,1,1,1)}break}case`string`:{let t=Buffer.from(e,`utf8`);n.push(...t),r.push(...t.map(()=>1));break}case`byte`:{let t=parseInt(e)&255;n.push(t),r.push(1);break}case`int8`:{let t=parseInt(e),i=Buffer.allocUnsafe(1);i.writeInt8(t,0),n.push(...i),r.push(1);break}case`int16`:{let t=parseInt(e),i=Buffer.allocUnsafe(2);i.writeInt16LE(t,0),n.push(...i),r.push(1,1);break}case`uint16`:{let t=parseInt(e),i=Buffer.allocUnsafe(2);i.writeUInt16LE(t,0),n.push(...i),r.push(1,1);break}case`uint32`:{let t=parseInt(e)>>>0,i=Buffer.allocUnsafe(4);i.writeUInt32LE(t,0),n.push(...i),r.push(1,1,1,1);break}case`uint64`:case`pointer`:{let t=BigInt(e),i=Buffer.allocUnsafe(8);i.writeBigUInt64LE(t,0),n.push(...i),r.push(1,1,1,1,1,1,1,1);break}}return{patternBytes:n,mask:r}}function i(e,t){let n=[],r=t.length;if(r===0||e.length<r)return n;let i=r-1,a=new Uint32Array(256);a.fill(r);for(let e=0;e<i;e++){let n=t[e];n!==void 0&&(a[n]=i-e)}let o=0;for(;o<=e.length-r;){let s=i;for(;s>=0&&e[o+s]===t[s];)s--;if(s<0){n.push(o),o+=1;continue}let c=e[o+i];if(c===void 0)break;o+=a[c]??r}return n}function a(e,t,n){if(t.length===0)return[];if(n.every(e=>e===1))return i(e,t);let r=[];for(let i=0;i<=e.length-t.length;i++){let a=!0;for(let r=0;r<t.length;r++)if(n[r]===1&&e[i+r]!==t[r]){a=!1;break}a&&r.push(i)}return r}function o(t){return(t&e.EXECUTE)!==0||(t&e.EXECUTE_READ)!==0||(t&e.EXECUTE_READWRITE)!==0}export{r as i,o as n,n as r,a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{a as t,b as n,d as r,i,n as a,s as o,t as s}from"./Win32API-Bhi5xFBe.mjs";import{promises as c}from"node:fs";const l={CNT_CODE:32,CNT_INITIALIZED_DATA:64,CNT_UNINITIALIZED_DATA:128,MEM_EXECUTE:536870912,MEM_READ:1073741824,MEM_WRITE:2147483648},u={EXPORT:0,IMPORT:1,RESOURCE:2,EXCEPTION:3,IAT:12,DELAY_IMPORT:13};var d=class{async parseHeaders(e,t){let i=BigInt(t),a=n(e);try{let e=r(a,i,64),t=e.readUInt16LE(0);if(t!==23117)throw Error(`Invalid DOS header: expected 0x5A4D, got 0x${t.toString(16)}`);let n=e.readUInt32LE(60),o=r(a,i+BigInt(n),264),s=o.readUInt32LE(0);if(s!==17744)throw Error(`Invalid PE signature: expected 0x4550, got 0x${s.toString(16)}`);let c=o.readUInt16LE(4),l=o.readUInt16LE(6),u=o.readUInt32LE(8),d=o.readUInt16LE(22),f=o.readUInt16LE(24),p=f===523,m,h,g,_;return p?(h=o.readUInt32LE(40),m=o.readBigUInt64LE(48),g=o.readUInt32LE(80),_=o.readUInt32LE(132)):(h=o.readUInt32LE(40),m=BigInt(o.readUInt32LE(52)),g=o.readUInt32LE(80),_=o.readUInt32LE(116)),{dosHeader:{e_magic:t,e_lfanew:n},ntSignature:s,fileHeader:{machine:c,numberOfSections:l,timeDateStamp:u,characteristics:d},optionalHeader:{magic:f,imageBase:`0x${m.toString(16)}`,entryPoint:`0x${h.toString(16)}`,sizeOfImage:g,numberOfRvaAndSizes:_}}}finally{s(a)}}async listSections(e,t){let i=BigInt(t),a=n(e);try{let e=await this.readCoreHeaders(a,i),t=[];for(let n=0;n<e.numSections;n++){let o=e.firstSectionOffset+n*40,s=r(a,i+BigInt(o),40),c=s.indexOf(0),u=s.subarray(0,c>0&&c<=8?c:8).toString(`ascii`),d=s.readUInt32LE(8),f=s.readUInt32LE(12),p=s.readUInt32LE(16),m=s.readUInt32LE(36);t.push({name:u,virtualAddress:`0x${f.toString(16)}`,virtualSize:d,rawSize:p,characteristics:m,isExecutable:(m&l.MEM_EXECUTE)!==0,isWritable:(m&l.MEM_WRITE)!==0,isReadable:(m&l.MEM_READ)!==0})}return t}finally{s(a)}}async parseImports(e,t){let i=BigInt(t),a=n(e);try{let e=await this.readCoreHeaders(a,i),t=e.dataDirectories[u.IMPORT];if(!t||t.rva===0)return[];let n=[],o=t.rva;for(let t=0;t<500;t++){let t=r(a,i+BigInt(o),20),s=t.readUInt32LE(12);if(s===0)break;let c=r(a,i+BigInt(s),256),l=c.indexOf(0),u=c.subarray(0,l>0?l:256).toString(`ascii`),d=t.readUInt32LE(0)||t.readUInt32LE(16),f=this.readThunkArray(a,i,d,e.isPE32Plus);n.push({dllName:u,functions:f}),o+=20}return n}finally{s(a)}}async parseExports(e,t){let i=BigInt(t),a=n(e);try{let e=(await this.readCoreHeaders(a,i)).dataDirectories[u.EXPORT];if(!e||e.rva===0)return[];let t=r(a,i+BigInt(e.rva),40),n=t.readUInt32LE(24),o=t.readUInt32LE(28),s=t.readUInt32LE(32),c=t.readUInt32LE(36),l=t.readUInt32LE(16),d=[],f=r(a,i+BigInt(s),n*4),p=r(a,i+BigInt(c),n*2);for(let t=0;t<Math.min(n,2e3);t++){let n=f.readUInt32LE(t*4),s=p.readUInt16LE(t*2),c=r(a,i+BigInt(n),256),u=c.indexOf(0),m=c.subarray(0,u>0?u:256).toString(`ascii`),h=r(a,i+BigInt(o+s*4),4).readUInt32LE(0),g=null;if(h>=e.rva&&h<e.rva+e.size){let e=r(a,i+BigInt(h),256),t=e.indexOf(0);g=e.subarray(0,t>0?t:256).toString(`ascii`)}d.push({name:m,ordinal:l+s,rva:`0x${h.toString(16)}`,forwardedTo:g})}return d}finally{s(a)}}async detectInlineHooks(t,i){let a=n(t),o=[];try{let n=this.enumerateModulesInternal(a),s=i?n.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())):n;for(let n of s)try{let e=await c.readFile(n.path),i=await this.parseExports(t,n.base);for(let t of i){let i=parseInt(t.rva,16);if(i===0||t.forwardedTo)continue;let s=r(a,BigInt(n.base)+BigInt(i),16),c=this.rvaToFileOffset(e,i);if(c<0||c+16>e.length)continue;let l=e.subarray(c,c+16);if(!s.equals(l)){let e=this.classifyHook(s),r=this.decodeJumpTarget(s,BigInt(n.base)+BigInt(i));o.push({address:`0x${(BigInt(n.base)+BigInt(i)).toString(16)}`,moduleName:n.name,functionName:t.name,originalBytes:Array.from(l),currentBytes:Array.from(s),hookType:e,jumpTarget:r})}}}catch(t){e.debug(`Hook check skipped for ${n.name}: ${t}`)}}finally{s(a)}return o}async analyzeSections(e,t){let n=await this.listSections(e,t),r=[];for(let e of n)e.isReadable&&e.isWritable&&e.isExecutable?r.push({sectionName:e.name,anomalyType:`rwx`,severity:`high`,details:`Section ${e.name} has Read+Write+Execute permissions — unusual and potentially malicious`}):e.isWritable&&e.isExecutable?r.push({sectionName:e.name,anomalyType:`writable_code`,severity:`high`,details:`Section ${e.name} is writable and executable — code may be self-modifying or packed`}):e.isExecutable&&!e.name.startsWith(`.text`)&&!e.name.startsWith(`.code`)&&(e.characteristics&l.CNT_INITIALIZED_DATA)!==0&&r.push({sectionName:e.name,anomalyType:`executable_data`,severity:`medium`,details:`Data section ${e.name} has execute permission`});return r}async readCoreHeaders(e,t){let n=r(e,t,64).readUInt32LE(60),i=r(e,t+BigInt(n),264),a=i.readUInt16LE(6),o=i.readUInt16LE(20),s=i.readUInt16LE(24)===523,c=s?i.readUInt32LE(132):i.readUInt32LE(116),l=s?136:120,u=[];for(let e=0;e<Math.min(c,16);e++){let t=l+e*8;t+8<=i.length&&u.push({rva:i.readUInt32LE(t),size:i.readUInt32LE(t+4)})}return{numSections:a,isPE32Plus:s,firstSectionOffset:n+4+20+o,dataDirectories:u}}readThunkArray(e,t,n,i){let a=i?8:4,o=[],s=i?9223372036854775808n:2147483648n;for(let c=0;c<2e3;c++){let l=r(e,t+BigInt(n+c*a),a),u=i?l.readBigUInt64LE(0):BigInt(l.readUInt32LE(0));if(u===0n)break;if((u&s)!==0n)o.push({name:`Ordinal#${Number(u&65535n)}`,ordinal:Number(u&65535n),hint:0,thunkRva:`0x${(n+c*a).toString(16)}`});else{let i=Number(u),s=r(e,t+BigInt(i),258),l=s.readUInt16LE(0),d=s.indexOf(0,2),f=s.subarray(2,d>2?d:258).toString(`ascii`);o.push({name:f,ordinal:0,hint:l,thunkRva:`0x${(n+c*a).toString(16)}`})}}return o}enumerateModulesInternal(n){let r=[];try{let{modules:e,count:s}=a(n);for(let a=0;a<s;a++){let s=e[a],c=i(n,s),l=o(n,s),u=t(n,s)??c;l.success&&r.push({name:c,base:`0x${l.info.lpBaseOfDll.toString(16)}`,path:u,size:l.info.SizeOfImage})}}catch(t){e.debug(`Module enumeration failed: ${t}`)}return r}rvaToFileOffset(e,t){let n=e.readUInt32LE(60),r=e.readUInt16LE(n+6),i=e.readUInt16LE(n+20),a=n+24+i;for(let n=0;n<r;n++){let r=a+n*40;if(r+40>e.length)break;let i=e.readUInt32LE(r+12),o=e.readUInt32LE(r+8),s=e.readUInt32LE(r+20);if(t>=i&&t<i+o)return s+(t-i)}return-1}classifyHook(e){return e[0]===233?`jmp_rel32`:e[0]===255&&e[1]===37?`jmp_abs64`:e[0]===104&&e[5]===195?`push_ret`:`unknown`}decodeJumpTarget(e,t){if(e[0]===233){let n=e.readInt32LE(1);return`0x${(t+5n+BigInt(n)).toString(16)}`}return e[0]===255&&e[1]===37&&e.length>=14?`0x${e.readBigUInt64LE(6).toString(16)}`:e[0]===104?`0x${e.readUInt32LE(1).toString(16)}`:`0x0`}};const f=new d;export{d as PEAnalyzer,f as peAnalyzer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{Jt as t,qt as n}from"./constants-Cp6hBrrx.mjs";import{setTimeout as r}from"node:timers/promises";const i=[`load`,`domcontentloaded`,`networkidle`,`commit`];function a(e=`networkidle`){return e===`networkidle`?`networkidle2`:e===`commit`?`load`:e}var o=class{collector;constructor(e){this.collector=e}getChromeNavigationWaitUntil(e=`networkidle`){return a(e)}async getBrowser(){return this.collector.getBrowser()}hasAttachedTargetSession(){return this.collector.getAttachedTargetSession()!==null}getAttachedTargetInfo(){return this.collector.getAttachedTargetInfo()}async evaluateAttachedTarget(e,t){return await this.collector.getBrowserTargetSessionManager().evaluate(e,t)}async addScriptToAttachedTarget(e){return await this.collector.getBrowserTargetSessionManager().addScriptToEvaluateOnNewDocument(e)}async navigate(t,n){let r=await this.collector.getActivePage(),i=Date.now();await r.goto(t,{waitUntil:this.getChromeNavigationWaitUntil(n?.waitUntil),timeout:n?.timeout||3e4});let a=Date.now()-i,o=await r.title(),s=r.url();return e.info(`Navigated to: ${t}`),{url:s,title:o,loadTime:a}}async reload(t){await(await this.collector.getActivePage()).reload({waitUntil:this.getChromeNavigationWaitUntil(t?.waitUntil),timeout:t?.timeout||3e4}),e.info(`Page reloaded`)}async goBack(t=1e4){await(await this.collector.getActivePage()).goBack({waitUntil:`domcontentloaded`,timeout:t}),e.info(`Navigated back`)}async goForward(t=1e4){await(await this.collector.getActivePage()).goForward({waitUntil:`domcontentloaded`,timeout:t}),e.info(`Navigated forward`)}async click(t,n,r){let i=await this.collector.getActivePage(),a=await this.resolveFrame(i,r),o=n?.timeout,s={button:n?.button||`left`,clickCount:n?.clickCount||1,delay:n?.delay};if(n?.offset&&(s.offset=n.offset),typeof o==`number`&&Number.isFinite(o)&&o>0){i.setDefaultTimeout(o);try{await a.click(t,s)}finally{i.setDefaultTimeout(this.collector.config?.timeout??3e4)}}else await a.click(t,s);e.info(`Clicked: ${t}${r?.frameUrl||r?.frameSelector?` (in frame)`:``}`)}async type(t,n,r,i){let a=await this.collector.getActivePage();await(await this.resolveFrame(a,i)).type(t,n,{delay:r?.delay}),e.info(`Typed into ${t}: ${n.substring(0,20)}...`)}async select(t,n,r){let i=await this.collector.getActivePage();await(await this.resolveFrame(i,r)).select(t,...n),e.info(`Selected in ${t}: ${n.join(`, `)}`)}async hover(t,n){let r=await this.collector.getActivePage();await(await this.resolveFrame(r,n)).hover(t),e.info(`Hovered: ${t}`)}async scroll(t){await(await this.collector.getActivePage()).evaluate(e=>{window.scrollTo(e.x||0,e.y||0)},t),e.info(`Scrolled to: x=${t.x||0}, y=${t.y||0}`)}async waitForSelector(t,n){try{let r=await this.collector.getActivePage();await r.waitForSelector(t,{timeout:n||3e4});let i=await r.evaluate(e=>{let t=document.querySelector(e);return t?{tagName:t.tagName.toLowerCase(),id:t.id||void 0,className:t.className||void 0,textContent:t.textContent?.trim().substring(0,100)||void 0,attributes:Array.from(t.attributes).reduce((e,t)=>(e[t.name]=t.value,e),{})}:null},t);return e.info(`Selector appeared: ${t}`),{success:!0,element:i,message:`Selector appeared: ${t}`}}catch(n){return e.error(`waitForSelector timeout for ${t}:`,n),{success:!1,message:`Timeout waiting for selector: ${t}`}}}async waitForNavigation(t){await(await this.collector.getActivePage()).waitForNavigation({waitUntil:this.getChromeNavigationWaitUntil(),timeout:t||3e4}),e.info(`Navigation completed`)}async evaluate(t,n){let r=await this.collector.getActivePage();if(n?.frameUrl||n?.frameSelector){let i=await c(r,await this.resolveFrame(r,n),t);return e.info(`JavaScript executed (in frame)`),i}let i=await l(r,t);return e.info(`JavaScript executed`),i}async resolveFrame(e,t){if(!t)return e.mainFrame();if(t.frameUrl){let n=e.frames(),r=n.find(e=>e.url().includes(t.frameUrl));if(!r){let e=n.map(e=>e.url()).filter(e=>e&&e!==`about:blank`);throw Error(`No frame matching URL substring "${t.frameUrl}". Available frames: ${e.join(`, `)||`(none)`}`)}return r}if(t.frameSelector){await e.waitForSelector(t.frameSelector,{timeout:n}).catch(()=>null);let r=await e.$(t.frameSelector);if(!r)throw Error(`No element found for iframe selector: ${t.frameSelector}`);let i=await r.contentFrame();if(!i)throw Error(`Element "${t.frameSelector}" exists but has no content frame (not an iframe or not yet loaded).`);return i}return e.mainFrame()}async listFrames(){let e=await this.collector.getActivePage(),t=e.mainFrame(),n=e.frames(),r=d(t.url());return n.map(e=>{let n=e._id||e.url(),i=e.parentFrame(),a=i?i._id||i.url():null,o=d(e.url());return{frameId:n,url:e.url(),name:e.name()||``,parentFrameId:a,parentUrl:i?.url()||null,isMainFrame:e===t,crossOrigin:!!(e!==t&&o&&r&&o!==r)}})}async getURL(){return(await this.collector.getActivePage()).url()}async getTitle(){return await(await this.collector.getActivePage()).title()}async getContent(){return await(await this.collector.getActivePage()).content()}async screenshot(t){if(this.hasAttachedTargetSession()){let n=this.collector.getBrowserTargetSessionManager();if(n){let r=await n.captureScreenshot({format:t?.type??`png`,quality:t?.quality,clip:t?.clip});return e.info(`Screenshot taken via CDP${t?.path?`: ${t.path}`:``}`),r}}let n=await this.collector.getActivePage(),r={path:t?.path,type:t?.type||`png`,quality:t?.quality,fullPage:t?.fullPage||!1};t?.clip&&(r.clip=t.clip,r.fullPage=!1);let i=await n.screenshot(r);return e.info(`Screenshot taken${t?.path?`: ${t.path}`:``}`),i}async getPerformanceMetrics(){let t=await l(await this.collector.getActivePage(),()=>{let e=performance.getEntriesByType(`navigation`)[0];return{domContentLoaded:e.domContentLoadedEventEnd-e.domContentLoadedEventStart,loadComplete:e.loadEventEnd-e.loadEventStart,dns:e.domainLookupEnd-e.domainLookupStart,tcp:e.connectEnd-e.connectStart,request:e.responseStart-e.requestStart,response:e.responseEnd-e.responseStart,total:e.loadEventEnd-e.fetchStart,resources:performance.getEntriesByType(`resource`).length}});return e.info(`Performance metrics retrieved`),t}async injectScript(t){await l(await this.collector.getActivePage(),e=>{let t=document.createElement(`script`);t.textContent=e,document.head.appendChild(t)},t),e.info(`Script injected into page`)}async setCookies(t){await(await this.collector.getActivePage()).setCookie(...t),e.info(`Set ${t.length} cookies`)}async getCookies(){let t=await(await this.collector.getActivePage()).cookies();return e.info(`Retrieved ${t.length} cookies`),t}async clearCookies(){if(this.collector.isExistingBrowserConnection())throw Error(`Cannot clear cookies on an attached browser. This operation is restricted to browsers launched by jshook to prevent accidental modification of user data.`);let t=await this.collector.getActivePage(),n=await t.cookies();await t.deleteCookie(...n),e.info(`All cookies cleared`)}async setViewport(t,n){await(await this.collector.getActivePage()).setViewport({width:t,height:n}),e.info(`Viewport set to ${t}x${n}`)}async emulateDevice(t){let n=await this.collector.getActivePage(),r={iPhone:{viewport:{width:375,height:812,isMobile:!0},userAgent:`Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15`},iPad:{viewport:{width:768,height:1024,isMobile:!0},userAgent:`Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15`},Android:{viewport:{width:360,height:640,isMobile:!0},userAgent:`Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/91.0.4472.120`}},i=String(t||``).trim().toLowerCase(),a=null;if(i.includes(`iphone`)?a=`iPhone`:i.includes(`ipad`)?a=`iPad`:(i.includes(`android`)||i.includes(`pixel`))&&(a=`Android`),!a)throw Error(`Unsupported device "${t}". Supported values include: iPhone, iPad, Android (aliases like "iPhone 13" are accepted).`);let o=r[a];return await n.setViewport(o.viewport),await n.setUserAgent(o.userAgent),e.info(`Emulating ${a} (input: ${t})`),a}async waitForNetworkIdle(n=t){await(await this.collector.getActivePage()).waitForNetworkIdle({timeout:n}),e.info(`Network is idle`)}async getLocalStorage(){let t=await(await this.collector.getActivePage()).evaluate(()=>{let e={};for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&(e[n]=localStorage.getItem(n)||``)}return e});return e.info(`Retrieved ${Object.keys(t).length} localStorage items`),t}async setLocalStorage(t,n){await(await this.collector.getActivePage()).evaluate((e,t)=>{localStorage.setItem(e,t)},t,n),e.info(`Set localStorage: ${t}`)}async clearLocalStorage(){if(this.collector.isExistingBrowserConnection())throw Error(`Cannot clear localStorage on an attached browser. This operation is restricted to browsers launched by jshook to prevent accidental modification of user data.`);await(await this.collector.getActivePage()).evaluate(()=>{localStorage.clear()}),e.info(`LocalStorage cleared`)}async pressKey(t){await(await this.collector.getActivePage()).keyboard.press(t),e.info(`Pressed key: ${t}`)}async uploadFile(t,n,r){let i=await this.collector.getActivePage(),a=await(r?await this.resolveFrame(i,r):i).$(t);if(!a)throw Error(`File input not found: ${t}`);let o=Array.isArray(n)?n:[n];await a.uploadFile(...o),e.info(`File uploaded: ${o.join(`, `)}`)}async getAllLinks(){let t=await(await this.collector.getActivePage()).evaluate(()=>{let e=document.querySelectorAll(`a[href]`),t=[];for(let n=0;n<e.length;n++){let r=e[n];t.push({text:r.textContent?.trim()||``,href:r.href})}return t});return e.info(`Found ${t.length} links`),t}async getPage(){return await this.collector.getActivePage()}};async function s(e,t=500){let n=new AbortController,i=r(t,void 0,{signal:n.signal}).then(()=>{throw Error(`cdp_unreachable`)}),a=null;try{a=await Promise.race([e.createCDPSession(),i]),await Promise.race([a.send(`Runtime.evaluate`,{expression:`1`,returnByValue:!0}),i])}catch(e){throw(e instanceof Error?e.message:String(e))===`cdp_unreachable`?Error(`CDP session unresponsive — the debugger may be blocking page evaluation. Call debugger_lifecycle({ action: 'disable' })() before this tool, or run it before debugger_lifecycle({ action: 'enable' })().`,{cause:e}):e}finally{if(n.abort(),a)try{await a.detach()}catch{}}}async function c(e,t,n,...r){let i=3e4;await s(e);let a;try{return await Promise.race([t.evaluate(n,...r),new Promise((e,t)=>{a=setTimeout(()=>t(Error(`page.evaluate timed out after ${i}ms`)),i)})])}finally{a!==void 0&&clearTimeout(a)}}async function l(e,t,...n){return c(e,e,t,...n)}async function u(e,t,...n){let r=3e4;return await s(e),Promise.race([e.evaluateOnNewDocument(t,...n),new Promise((e,t)=>setTimeout(()=>t(Error(`page.evaluateOnNewDocument timed out after ${r}ms`)),r))])}function d(e){try{return new URL(e).origin}catch{return null}}async function f(e,t){let n=3e4;return Promise.race([e.coverage.startJSCoverage(t),new Promise((e,t)=>setTimeout(()=>t(Error(`coverage.startJSCoverage timed out after ${n}ms`)),n))])}async function p(e,t){let n=3e4;return Promise.race([e.coverage.startCSSCoverage(t),new Promise((e,t)=>setTimeout(()=>t(Error(`coverage.startCSSCoverage timed out after ${n}ms`)),n))])}async function m(e){let t=3e4;return Promise.race([e.coverage.stopJSCoverage(),new Promise((e,n)=>setTimeout(()=>n(Error(`coverage.stopJSCoverage timed out after ${t}ms`)),t))])}async function h(e){let t=3e4;return Promise.race([e.coverage.stopCSSCoverage(),new Promise((e,n)=>setTimeout(()=>n(Error(`coverage.stopCSSCoverage timed out after ${t}ms`)),t))])}export{m as a,i as c,h as i,a as l,p as n,u as o,f as r,l as s,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Qt as e,Xt as t,Yt as n,Zt as r}from"./constants-Cp6hBrrx.mjs";import{t as i}from"./factory-Cx_1LorX.mjs";import{t as a}from"./NativeMemoryManager.impl-CI554XbY.mjs";import{n as o,t as s}from"./formatAddress-C7j2fDlM.mjs";import{randomUUID as c}from"node:crypto";var l=class{providerCache=null;get provider(){return this.providerCache||=i(),this.providerCache}set provider(e){this.providerCache=e}async scan(e,i,a){let c=performance.now(),l=Math.min(a?.maxDepth??4,n),u=a?.maxOffset??t,d=a?.maxResults??r,f=a?.alignment??8,p=a?.staticOnly??!1,m=o(i),h=this.provider.openProcess(e,!1);try{let t=await this.getModuleMap(e),n=[],r=new Set([m]);for(let e=0;e<l&&r.size!==0;e++){let e=this.scanLevel(h,r,u,f,a?.modules?{modules:a.modules}:void 0);if(e.length===0)break;n.push(e),r=new Set;for(let t of e)if(r.add(t.pointerAddress),r.size>5e4)break}let i=this.buildChains(n,m,t,d,p),o=`${(performance.now()-c).toFixed(1)}ms`;return{pid:e,targetAddress:s(m),chains:i,totalFound:i.length,maxDepth:l,elapsed:o}}finally{this.provider.closeProcess(h)}}async validateChain(e,t){let n=this.provider.openProcess(e,!1);try{let e=o(t.baseAddress);for(let r=0;r<t.links.length;r++){let i=t.links[r],a;try{a=this.provider.readMemory(n,e,8).data.readBigUInt64LE(0)}catch{return{chainId:t.id,isValid:!1,resolvedAddress:null,expectedAddress:t.targetAddress,brokenAt:r}}e=a+BigInt(i.offset)}let r=s(e),i=o(t.targetAddress),a=e===i;return{chainId:t.id,isValid:a,resolvedAddress:r,expectedAddress:t.targetAddress,brokenAt:a?void 0:t.links.length-1}}finally{this.provider.closeProcess(n)}}async validateChains(e,t){let n=[];for(let r of t)n.push(await this.validateChain(e,r));return n}async resolveChain(e,t){let n=this.provider.openProcess(e,!1);try{let e=o(t.baseAddress);for(let r of t.links){let t;try{t=this.provider.readMemory(n,e,8).data.readBigUInt64LE(0)}catch{return null}e=t+BigInt(r.offset)}return s(e)}finally{this.provider.closeProcess(n)}}exportChains(e){return JSON.stringify(e,null,2)}importChains(e){let t=JSON.parse(e);if(!Array.isArray(t))throw Error(`Invalid chain data: expected array`);return t}async getModuleMap(e){let t=new Map;try{let n=await a.enumerateModules(e);if(n.success&&n.modules)for(let e of n.modules){let n=o(e.baseAddress);t.set(e.name.toLowerCase(),{name:e.name,base:n,size:e.size})}}catch{}return t}resolveToModule(e,t){for(let n of t.values())if(e>=n.base&&e<n.base+BigInt(n.size))return{module:n.name,offset:Number(e-n.base)};return null}scanLevel(t,n,r,i,a){let o=[],s=e,c=Array.from(n).toSorted((e,t)=>e<t?-1:+(e>t));if(c.length===0)return o;let l=BigInt(r),u=c[0]-l,d=c[c.length-1]+l,f=0n,p=BigInt(`0x7FFFFFFF0000`);for(;f<p;){let e=this.provider.queryRegion(t,f);if(!e)break;let n=e.size;if(e.isReadable&&n>0&&n<=2**53-1){let a=e.baseAddress;for(let e=0;e<n&&o.length<1e5;e+=s){let f=Math.min(s,n-e),p=a+BigInt(e),m;try{m=this.provider.readMemory(t,p,f).data}catch{break}for(let e=0;e<=m.length-8;e+=i){let t=m.readBigUInt64LE(e);if(t<u||t>d)continue;let n=t-l,i=t+l,a=0,s=c.length;for(;a<s;){let e=a+s>>>1;c[e]<n?a=e+1:s=e}for(let n=a;n<c.length&&c[n]<=i;n++){let i=c[n];if(Number(t>i?t-i:i-t)<=r){let n=p+BigInt(e),r=Number(i-t);o.push({pointerAddress:n,pointsTo:t,offset:r});break}}}}}f=e.baseAddress+BigInt(e.size)}return o}buildChains(e,n,r,i,a){if(e.length===0)return[];let o=[],l=s(n);for(let n=0;n<e.length&&o.length<i;n++){let u=e[n];if(n===0)for(let e of u){if(o.length>=i)break;let t=s(e.pointerAddress),n=this.resolveToModule(e.pointerAddress,r),u=n!==null;if(a&&!u)continue;let d={address:t,module:n?.module,moduleOffset:n?.offset,offset:e.offset};o.push({id:c(),links:[d],targetAddress:l,baseAddress:t,isStatic:u,depth:1,lastValidated:Date.now(),isValid:!0})}else{let d=e[n-1],f=new Map;for(let e of d)f.set(e.pointerAddress,e);let p=BigInt(t);for(let e of u){if(o.length>=i)break;let t;if(t=f.get(e.pointsTo),!t){for(let n of d)if((e.pointsTo>n.pointerAddress?e.pointsTo-n.pointerAddress:n.pointerAddress-e.pointsTo)<=p){t=n;break}}if(!t)continue;let n=s(e.pointerAddress),u=this.resolveToModule(e.pointerAddress,r),m=u!==null;if(a&&!m)continue;let h=[{address:n,module:u?.module,moduleOffset:u?.offset,offset:Number(t.pointerAddress-e.pointsTo)},{address:s(t.pointerAddress),offset:t.offset}];o.push({id:c(),links:h,targetAddress:l,baseAddress:n,isStatic:m,depth:h.length,lastValidated:Date.now(),isValid:!0})}}}return o.sort((e,t)=>e.isStatic===t.isStatic?e.depth-t.depth:e.isStatic?-1:1),o.slice(0,i)}};const u=new l;export{l as PointerChainEngine,u as pointerChainEngine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./ToolError-DWU_z7gp.mjs";var t=class extends e{constructor(e){super(`PREREQUISITE`,e),this.name=`PrerequisiteError`}};export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-sBC6IdRT.mjs";import{G as t}from"./constants-Cp6hBrrx.mjs";const n=new class{processes=new Set;register(e){e&&(this.processes.add(e),`kill`in e?e.once(`close`,()=>this.unregister(e)):`terminate`in e&&(typeof e.once==`function`?e.once(`exit`,()=>this.unregister(e)):typeof e.on==`function`&&e.on(`exit`,()=>this.unregister(e))))}unregister(e){e&&this.processes.delete(e)}async terminateAll(){if(this.processes.size===0)return;e.debug(`[ProcessRegistry] Attempting to terminate ${this.processes.size} active processes/workers...`);let n=[];for(let r of this.processes)`terminate`in r?n.push(r.terminate().then(()=>{this.processes.delete(r)}).catch(t=>{e.warn(`[ProcessRegistry] Error terminating worker: ${t.message}`)})):`kill`in r&&n.push(new Promise(n=>{if(r.killed||r.exitCode!==null||r.signalCode!==null)return this.processes.delete(r),n();r.kill(`SIGTERM`);let i=!1,a=()=>{i||(i=!0,this.processes.delete(r),n())};r.once(`exit`,a),r.once(`close`,a),setTimeout(()=>{if(!i&&!r.killed&&r.exitCode===null){e.debug(`[ProcessRegistry] Force killing child process PID ${r.pid}`);try{r.kill(`SIGKILL`)}catch{}a()}},t).unref()}));await Promise.race([Promise.all(n),new Promise(e=>setTimeout(e,t+1e3).unref())]),this.processes.clear(),e.debug(`[ProcessRegistry] Termination sweep complete.`)}};export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{payload={};hasMcpError=!1;additionalContent=[];useStructuredContent=!1;ok(){return this.payload.success=!0,this}fail(e){this.payload.success=!1;let t=e instanceof Error?e.message:String(e);return this.payload.error=t,this.payload.message=t,this}set(e,t){return this.payload[e]=t,this}merge(e){return Object.assign(this.payload,e),this}mcpError(){return this.hasMcpError=!0,this}image(e,t){return this.additionalContent.push({type:`image`,data:e,mimeType:t}),this}embeddedResource(e,t,n=`text/plain`){return this.additionalContent.push({type:`resource`,resource:{uri:e,text:t,mimeType:n}}),this}structured(){return this.useStructuredContent=!0,this}json(e){return e&&this.merge(e),{content:[{type:`text`,text:JSON.stringify(this.payload,null,2)},...this.additionalContent],...this.hasMcpError?{isError:!0}:{},...this.useStructuredContent?{structuredContent:this.payload}:{}}}build(e){return this.json(e)}static raw(e){return{content:[{type:`text`,text:JSON.stringify(e,null,2)}]}}static text(e,t=!1){return{content:[{type:`text`,text:e}],...t?{isError:!0}:{}}}static parse(e){if(!e.content||e.content.length===0)throw Error(`ToolResponse has no content`);let t=e.content.find(e=>e.type===`text`);if(!t||!(`text`in t))throw Error(`ToolResponse has no text content block`);try{return JSON.parse(t.text)}catch(e){throw Error(`Failed to parse tool result as JSON: ${String(e)}\nRaw text: ${t.text.substring(0,500)}`,{cause:e})}}};const t={ok:()=>new e().ok(),fail:t=>new e().fail(t),raw:t=>e.raw(t),text:(t,n=!1)=>e.text(t,n),parse:t=>e.parse(t)};export{t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./chunk-C_pMuVsO.mjs";var t=e({ReverseEvidenceGraph:()=>i});let n=1;function r(e){return`${e}-${n++}`}var i=class{nodes=new Map;edges=new Map;eventBus;isDirty=!1;mutationSeq=0;lastPersistedSeq=0;persistNotifier;setEventBus(e){this.eventBus=e}setPersistNotifier(e){this.persistNotifier=e}markDirty(){this.isDirty=!0,this.mutationSeq++,this.persistNotifier?.()}commit(){this.isDirty&&this.eventBus&&(this.isDirty=!1,this.eventBus.emit(`evidence:updated`,{timestamp:new Date().toISOString(),reason:`Tool execution committed changes`}))}addNode(e,t,n={}){let i={id:r(e),type:e,label:t,metadata:n,createdAt:Date.now()};return this.nodes.set(i.id,i),this.markDirty(),i}addEdge(e,t,n,i){if(!this.nodes.has(e))throw Error(`Source node "${e}" not found`);if(!this.nodes.has(t))throw Error(`Target node "${t}" not found`);let a={id:r(`edge`),source:e,target:t,type:n,metadata:i};return this.edges.set(a.id,a),this.markDirty(),a}getNode(e){return this.nodes.get(e)}removeNode(e){if(!this.nodes.has(e))return!1;this.nodes.delete(e);for(let[t,n]of this.edges)(n.source===e||n.target===e)&&this.edges.delete(t);return this.markDirty(),!0}getEdgesFrom(e){return[...this.edges.values()].filter(t=>t.source===e)}getEdgesTo(e){return[...this.edges.values()].filter(t=>t.target===e)}get nodeCount(){return this.nodes.size}get edgeCount(){return this.edges.size}getEvidenceChain(e,t=`forward`){if(!this.nodes.get(e))return[];let n=new Set,r=[e],i=[];for(;r.length>0;){let e=r.shift();if(n.has(e))continue;n.add(e);let a=this.nodes.get(e);a&&i.push(a);let o=t===`forward`?this.getEdgesFrom(e):this.getEdgesTo(e);for(let e of o){let i=t===`forward`?e.target:e.source;n.has(i)||r.push(i)}}return i}queryByUrl(e){let t=[...this.nodes.values()].filter(t=>t.type===`request`&&typeof t.metadata.url==`string`||typeof t.metadata.url==`string`?t.metadata.url.includes(e):!1),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}queryByFunction(e){let t=[...this.nodes.values()].filter(t=>t.type===`function`&&typeof t.metadata.functionName==`string`?t.metadata.functionName.includes(e):!!(t.label.includes(e)&&(t.type===`function`||t.type===`breakpoint-hook`))),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}queryByScriptId(e){let t=[...this.nodes.values()].filter(t=>t.type===`script`&&t.metadata.scriptId===e),n=new Set;for(let e of t){for(let t of this.getEvidenceChain(e.id,`forward`))n.add(t.id);for(let t of this.getEvidenceChain(e.id,`backward`))n.add(t.id)}return[...n].map(e=>this.nodes.get(e)).filter(Boolean)}exportJson(){return{version:1,nodes:[...this.nodes.values()],edges:[...this.edges.values()],exportedAt:new Date().toISOString()}}exportMarkdown(){let e=[];e.push(`# Reverse Evidence Graph Report`),e.push(``),e.push(`**Exported:** ${new Date().toISOString()}`),e.push(`**Nodes:** ${this.nodes.size} | **Edges:** ${this.edges.size}`),e.push(``);let t=new Map;for(let e of this.nodes.values()){let n=t.get(e.type)??[];n.push(e),t.set(e.type,n)}for(let n of[`request`,`initiator-stack`,`script`,`function`,`breakpoint-hook`,`captured-data`,`replay-artifact`,`v8-heap-object`,`v8-hidden-class`,`network-request`,`network-response`,`canvas-scene-node`,`canvas-render-node`,`skia-draw-call`,`syscall-event`,`mojo-message`,`mojo-interface`,`binary-symbol`,`binary-function`,`binary-module`,`proto-message`,`proto-state`]){let r=t.get(n);if(!(!r||r.length===0)){e.push(`## ${n} (${r.length})`),e.push(``);for(let t of r){e.push(`### ${t.label}`),e.push(`- **ID:** \`${t.id}\``),e.push(`- **Created:** ${new Date(t.createdAt).toISOString()}`);let n=Object.keys(t.metadata);if(n.length>0)for(let r of n){let n=t.metadata[r],i=typeof n==`string`?n:JSON.stringify(n);e.push(`- **${r}:** ${i}`)}let r=this.getEdgesFrom(t.id),i=this.getEdgesTo(t.id);r.length>0&&e.push(`- **→ Out:** ${r.map(e=>`${e.type} → \`${e.target}\``).join(`, `)}`),i.length>0&&e.push(`- **← In:** ${i.map(e=>`\`${e.source}\` ${e.type} →`).join(`, `)}`),e.push(``)}}}return e.join(`
|
|
2
|
+
`)}getSnapshotSeq(){return this.mutationSeq}getLastPersistedSeq(){return this.lastPersistedSeq}markPersisted(){this.lastPersistedSeq=this.mutationSeq}isPersistDirty(){return this.mutationSeq!==this.lastPersistedSeq}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),graph:this.exportJson()}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1||!t.graph)return;let{nodes:n,edges:r}=t.graph;this.nodes.clear(),this.edges.clear();for(let e of n)this.nodes.set(e.id,e);for(let e of r)this.edges.set(e.id,e);this.mutationSeq=n.length+r.length,this.lastPersistedSeq=this.mutationSeq,this.isDirty=!1}};export{t};
|