@jshookmcp/jshook 0.2.9 → 0.3.0
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 +2 -2
- package/README.zh.md +2 -2
- package/dist/{AntiCheatDetector-BNk-EoBt.mjs → AntiCheatDetector-CqGDXmfc.mjs} +159 -53
- package/dist/{CodeInjector-Cq8q01kp.mjs → CodeInjector-BdjRfNx7.mjs} +5 -5
- package/dist/{ConsoleMonitor-CPVQW1Y-.mjs → ConsoleMonitor-DykL3IAw.mjs} +85 -17
- package/dist/{DetailedDataManager-BQQcxh64.mjs → DetailedDataManager-HT49OrvF.mjs} +1 -1
- package/dist/{ExtensionManager-CWYgw0YW.mjs → ExtensionManager-BDMsY2Dz.mjs} +15 -8
- package/dist/{HardwareBreakpoint-B9gZCdFP.mjs → HardwareBreakpoint-Cc2AFq1Y.mjs} +3 -3
- package/dist/{HeapAnalyzer-BLDH0dCv.mjs → HeapAnalyzer-DruMgsgj.mjs} +20 -20
- package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs} +1 -74
- package/dist/{InstrumentationSession-CvPC7Jwy.mjs → InstrumentationSession-DLH0vd-z.mjs} +2 -2
- package/dist/{MemoryController-CbVdCIJF.mjs → MemoryController-CMtviNW_.mjs} +3 -3
- package/dist/{MemoryScanSession-BsDZbLYm.mjs → MemoryScanSession-ITgb_NMi.mjs} +2 -2
- package/dist/{MemoryScanner-Bcpml6II.mjs → MemoryScanner-CiL7Z3ey.mjs} +12 -9
- package/dist/{NativeMemoryManager.impl-dZtA1ZGn.mjs → NativeMemoryManager.impl-D9Lkovvn.mjs} +13 -10
- package/dist/{NativeMemoryManager.utils-B-FjA2mJ.mjs → NativeMemoryManager.utils-BBlAixF5.mjs} +1 -1
- package/dist/{PEAnalyzer-D1lzJ_VG.mjs → PEAnalyzer-DMQ44gen.mjs} +15 -15
- package/dist/{PageController-Bqm2kZ_X.mjs → PageController-BPJNqqBN.mjs} +18 -4
- package/dist/{PointerChainEngine-BOhyVsjx.mjs → PointerChainEngine-K7wN8Z-w.mjs} +10 -7
- package/dist/ProcessRegistry-zGg12QbE.mjs +74 -0
- package/dist/{ResponseBuilder-D3iFYx2N.mjs → ResponseBuilder-CJXWmWNw.mjs} +10 -10
- package/dist/{ScriptManager-aHHq0X7U.mjs → ScriptManager-ZuWD-0Jg.mjs} +195 -192
- package/dist/{Speedhack-CqdIFlQl.mjs → Speedhack-D-z0umeT.mjs} +2 -2
- package/dist/{StructureAnalyzer-DhFaPvRO.mjs → StructureAnalyzer-Cav5AVSL.mjs} +9 -6
- package/dist/{ToolCatalog-C0JGZoOm.mjs → ToolCatalog-5OJdMiF0.mjs} +81 -81
- package/dist/{ToolProbe-oC7aPrkv.mjs → ToolProbe-DbCFGyrg.mjs} +1 -1
- package/dist/{ToolRegistry-BjaF4oNz.mjs → ToolRegistry-B9krbTtI.mjs} +51 -2
- package/dist/{ToolRouter.policy-BWV67ZK-.mjs → ToolRouter.policy-BGDAGyeH.mjs} +60 -20
- package/dist/TraceRecorder-B41Z5XBj.mjs +1286 -0
- package/dist/{Win32API-CePkipZY.mjs → Win32API-C2kjj0ze.mjs} +18 -12
- package/dist/{Win32Debug-BvKs-gxc.mjs → Win32Debug-CKrGOTpo.mjs} +2 -2
- package/dist/{WorkflowEngine-CuvkZtWu.mjs → WorkflowEngine-DJ6M4opp.mjs} +226 -255
- package/dist/analysis-BHeJW2Nb.mjs +1234 -0
- package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BRKeyt27.mjs} +3 -3
- package/dist/{artifactRetention-CFEprwPw.mjs → artifactRetention-CPXkUJXp.mjs} +13 -6
- package/dist/{artifacts-Bk2-_uPq.mjs → artifacts-DkfosXH3.mjs} +1 -1
- package/dist/authorization-schema-DRqyJMSk.mjs +31 -0
- package/dist/{binary-instrument-CXfpx6fT.mjs → binary-instrument--V3MAhJ4.mjs} +19 -27
- package/dist/bind-helpers-ClV34xdn.mjs +42 -0
- package/dist/{boringssl-inspector-BH2D3VKc.mjs → boringssl-inspector-Bo_LOLaS.mjs} +1 -1
- package/dist/{browser-BpOr5PEx.mjs → browser-Dx3_S2cG.mjs} +324 -37
- package/dist/capabilities-CcHlvWgK.mjs +33 -0
- package/dist/{constants-B0OANIBL.mjs → constants-CDZLOoVv.mjs} +18 -3
- package/dist/{coordination-qUbyF8KU.mjs → coordination-DgItD9DL.mjs} +2 -2
- package/dist/{debugger-gnKxRSN0.mjs → debugger-RS3RSAqs.mjs} +30 -13
- package/dist/definitions-BEoYofW5.mjs +47 -0
- package/dist/{definitions-bAhHQJq9.mjs → definitions-BRaefg3u.mjs} +11 -5
- package/dist/{definitions-DVGfrn7y.mjs → definitions-BbkvZkiv.mjs} +2 -2
- package/dist/definitions-BtWSHJ3o.mjs +17 -0
- package/dist/{definitions-BMfYXoNC.mjs → definitions-C1gCHO0i.mjs} +1 -1
- package/dist/{definitions-C1UvM5Iy.mjs → definitions-CDOg_b-l.mjs} +14 -2
- package/dist/definitions-CVPD9hzZ.mjs +54 -0
- package/dist/{definitions-Cke7zEb8.mjs → definitions-Cea8Lgl7.mjs} +1 -1
- package/dist/definitions-DAgIyjxM.mjs +10 -0
- package/dist/{definitions-B4rAvHNZ.mjs → definitions-DJA27nsL.mjs} +12 -9
- package/dist/{definitions-ClJLzsJQ.mjs → definitions-DKPFU3LW.mjs} +1 -1
- package/dist/{definitions-D3VsGcvz.mjs → definitions-DPRpZQ96.mjs} +7 -7
- package/dist/{definitions-B18eyf0B.mjs → definitions-DUE5gmdn.mjs} +1 -1
- package/dist/definitions-DYVjOtxa.mjs +26 -0
- package/dist/{definitions-BB_4jnmy.mjs → definitions-DcYLVLCo.mjs} +1 -1
- package/dist/{definitions-Beid2EB3.mjs → definitions-Pp5LI2H4.mjs} +1 -1
- package/dist/definitions-j9KdHVNR.mjs +14 -0
- package/dist/definitions-uzkjBwa7.mjs +258 -0
- package/dist/{definitions-Cq-zroAU.mjs → definitions-va-AnLuQ.mjs} +4 -4
- package/dist/{encoding-Bvz5jLRv.mjs → encoding-DJeqHmpd.mjs} +18 -4
- package/dist/{evidence-graph-bridge-C_fv9PuC.mjs → evidence-graph-bridge-DcYizFk2.mjs} +1 -0
- package/dist/{factory-DxlGh9Xf.mjs → factory-C90tBff6.mjs} +6 -6
- package/dist/flat-target-session-Dgax2Cy3.mjs +29 -0
- package/dist/{graphql-DYWzJ29s.mjs → graphql-CoHrhweh.mjs} +205 -34
- package/dist/{handlers-C67ktuRN.mjs → handlers-4jmR0nMs.mjs} +220 -32
- package/dist/{handlers-DlCJN4Td.mjs → handlers-BAHPxcch.mjs} +122 -90
- package/dist/{handlers-9sAbfIg-.mjs → handlers-BOs9b907.mjs} +849 -801
- package/dist/{handlers-DxGIq15_2.mjs → handlers-BWXEy6ef.mjs} +16 -16
- package/dist/{handlers-tB9Mp9ZK.mjs → handlers-Bndn6QvE.mjs} +31 -4
- package/dist/{handlers-CTsDAO6p.mjs → handlers-BqC4bD4s.mjs} +1 -1
- package/dist/{handlers-C87g8oCe.mjs → handlers-BtYq60bM2.mjs} +1 -1
- package/dist/{handlers-DeLOCd5m.mjs → handlers-BzgcB4iv.mjs} +17 -17
- package/dist/{handlers-Cgyg6c0U.mjs → handlers-CRyRWj2b.mjs} +237 -23
- package/dist/{handlers-U6L4xhuF.mjs → handlers-CVv2H1uq.mjs} +24 -17
- package/dist/{handlers-tiy7EIBp.mjs → handlers-Dl5a7JS4.mjs} +3 -3
- package/dist/{handlers-D6j6yka7.mjs → handlers-Dx2d7jt7.mjs} +1893 -1480
- package/dist/{handlers-Bl8zkwz1.mjs → handlers-Dz9PYsCa.mjs} +95 -6
- package/dist/handlers-HujRKC3b.mjs +661 -0
- package/dist/{handlers.impl-DS0d9fUw.mjs → handlers.impl-XWXkQfyi.mjs} +70 -24
- package/dist/{hooks-CzCWByww.mjs → hooks-B1B8NRHL.mjs} +3 -3
- package/dist/index.mjs +154 -144
- package/dist/{maintenance-P7ePRXQC.mjs → maintenance-PRMkLVRW.mjs} +35 -30
- package/dist/manifest-67Bok-Si.mjs +58 -0
- package/dist/{manifest-B3QVVeBS.mjs → manifest-6lNTMZAB2.mjs} +33 -28
- package/dist/manifest-B2duEHiH.mjs +90 -0
- package/dist/manifest-B6EY9Vm8.mjs +57 -0
- package/dist/{manifest-gZ4s_UtG.mjs → manifest-B6nKSbyY.mjs} +32 -33
- package/dist/{manifest-2ToTpjv8.mjs → manifest-BL8AQNPF.mjs} +31 -31
- package/dist/{manifest-DzwvxPJX.mjs → manifest-BSZvJJmV.mjs} +23 -14
- package/dist/{manifest-Sc_0JQ13.mjs → manifest-BU7qzUyX.mjs} +23 -23
- package/dist/{manifest-CT7zZBV1.mjs → manifest-Bl62e8WK.mjs} +24 -23
- package/dist/manifest-Bo5cXjdt.mjs +82 -0
- package/dist/manifest-BpS4gtUK.mjs +1347 -0
- package/dist/manifest-Bv65_e2W.mjs +101 -0
- package/dist/manifest-BytNIF4Z.mjs +117 -0
- package/dist/{manifest-BqrQ4Tpj.mjs → manifest-C-xtsjS3.mjs} +23 -23
- package/dist/{manifest-NXctwWQq.mjs → manifest-CDYl7OhA.mjs} +36 -38
- package/dist/manifest-CRZ3xmkD.mjs +61 -0
- package/dist/manifest-CoW6u4Tp.mjs +132 -0
- package/dist/manifest-Cq5zN_8A.mjs +50 -0
- package/dist/{manifest-CAhOuvSl.mjs → manifest-D7YZM_2e.mjs} +75 -85
- package/dist/{manifest-DCyjf4n2.mjs → manifest-DE_VrAeQ.mjs} +27 -7
- package/dist/manifest-DGsXSCpT.mjs +39 -0
- package/dist/{manifest-BB2J8IMJ.mjs → manifest-DJ2vfEuW.mjs} +48 -41
- package/dist/{manifest-3g71z6Bg.mjs → manifest-DPXDYhEu.mjs} +26 -25
- package/dist/manifest-Dd4fQb0a.mjs +322 -0
- package/dist/{manifest-CXsRWjjI.mjs → manifest-Deq6opGg.mjs} +95 -96
- package/dist/{manifest-C9RT5nk32.mjs → manifest-DfJTafJK.mjs} +14 -11
- package/dist/manifest-DgOdgN_j.mjs +50 -0
- package/dist/{manifest-BmtZzQiQ2.mjs → manifest-DlbMW4v4.mjs} +17 -15
- package/dist/{manifest-DrbmZcFl2.mjs → manifest-DmVfbH0w.mjs} +212 -91
- package/dist/manifest-Dog6Ddjr.mjs +109 -0
- package/dist/manifest-DvgU5FWb.mjs +58 -0
- package/dist/manifest-HsfDBs7j.mjs +50 -0
- package/dist/manifest-I8oQHvCG.mjs +186 -0
- package/dist/manifest-NvH_a-av.mjs +786 -0
- package/dist/{manifest-Dh8WBmEW.mjs → manifest-cEJU1v0Z.mjs} +24 -24
- package/dist/manifest-wOl5XLB12.mjs +112 -0
- package/dist/{modules-C184v-S9.mjs → modules-tZozf0LQ.mjs} +130 -860
- package/dist/{mojo-ipc-B_H61Afw.mjs → mojo-ipc-DXNEXEqb.mjs} +141 -26
- package/dist/{network-671Cw6hV.mjs → network-CPVvwvFg.mjs} +1329 -823
- package/dist/{outputPaths-B1uGmrWZ.mjs → outputPaths-um7lCRY3.mjs} +4 -8
- package/dist/{platform-WmNn8Sxb.mjs → platform-CYeFoTWp.mjs} +101 -10
- package/dist/{process-QcbIy5Zq.mjs → process-BTbgcVc6.mjs} +251 -346
- package/dist/{proxy-DqNs0bAd.mjs → proxy-r8YN6nP1.mjs} +30 -8
- package/dist/{registry-D-6e18lB.mjs → registry-Bl8ZQW61.mjs} +3 -3
- package/dist/{response-BQVP-xUn.mjs → response-CWhh2aLo.mjs} +7 -1
- package/dist/{shared-state-board-DV-dpHFJ.mjs → shared-state-board-BoZnSoj-.mjs} +2 -2
- package/dist/{sourcemap-Dq8ez8vS.mjs → sourcemap-BIDHUVXy.mjs} +350 -66
- package/dist/{streaming-BUQ0VJsg.mjs → streaming-Dal6utPp.mjs} +13 -13
- package/dist/{tool-builder-DCbIC5Eo.mjs → tool-builder-BHJp32mV.mjs} +1 -1
- package/dist/{transform-CiYJfNX0.mjs → transform-DRVgGG90.mjs} +18 -14
- package/dist/wasm-BYx5UOeG.mjs +1044 -0
- package/dist/webcrack-Be0_FccV.mjs +747 -0
- package/dist/{workflow-f3xJOcjx.mjs → workflow-BpuKEtvn.mjs} +8 -8
- package/package.json +76 -43
- package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
- package/dist/analysis-CL9uACt9.mjs +0 -463
- package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
- package/dist/definitions-6M-eejaT.mjs +0 -53
- package/dist/definitions-B3QdlrHv.mjs +0 -34
- package/dist/definitions-CXEI7QC72.mjs +0 -216
- package/dist/definitions-C_4r7Fo-2.mjs +0 -14
- package/dist/definitions-CkFDALoa.mjs +0 -26
- package/dist/definitions-Cy3Sl6gV.mjs +0 -34
- package/dist/definitions-LKpC3-nL.mjs +0 -9
- package/dist/handlers-DdFzXLvF.mjs +0 -446
- package/dist/manifest-82baTv4U.mjs +0 -45
- package/dist/manifest-BKbgbSiY.mjs +0 -60
- package/dist/manifest-Bcf-TJzH.mjs +0 -848
- package/dist/manifest-Bnd7kqEY.mjs +0 -55
- package/dist/manifest-BqQX6OQC2.mjs +0 -65
- package/dist/manifest-Br4RPFt5.mjs +0 -370
- package/dist/manifest-C5qDjysN.mjs +0 -107
- package/dist/manifest-CBYWCUBJ.mjs +0 -51
- package/dist/manifest-CFADCRa1.mjs +0 -37
- package/dist/manifest-CQVhavRF.mjs +0 -114
- package/dist/manifest-CV12bcrF.mjs +0 -121
- package/dist/manifest-CZLUCfG02.mjs +0 -95
- package/dist/manifest-D6phHKFd.mjs +0 -131
- package/dist/manifest-DHsnKgP6.mjs +0 -60
- package/dist/manifest-Df_dliIe.mjs +0 -55
- package/dist/manifest-DhKRAT8_.mjs +0 -92
- package/dist/manifest-DlpTj4ic2.mjs +0 -193
- package/dist/manifest-DuwHjUa5.mjs +0 -70
- package/dist/manifest-qSleDqdO.mjs +0 -1023
- package/dist/wasm-DQTnHDs4.mjs +0 -531
- /package/dist/{CacheAdapters-CDe5WPSV.mjs → CacheAdapters-jJFy20G-.mjs} +0 -0
- /package/dist/{DarwinAPI-BNPxu0RH.mjs → DarwinAPI-ETyy0xyo.mjs} +0 -0
- /package/dist/{EventBus-DgPmwpeu.mjs → EventBus-DFKvADm3.mjs} +0 -0
- /package/dist/{EvidenceGraphBridge-SFesNera.mjs → EvidenceGraphBridge-318Oi0Lf.mjs} +0 -0
- /package/dist/{FingerprintManager-gzWtkKuf.mjs → FingerprintManager-BN4UQWnX.mjs} +0 -0
- /package/dist/{PrerequisiteError-Dl33Svkz.mjs → PrerequisiteError-TuyZIs6n.mjs} +0 -0
- /package/dist/{ReverseEvidenceGraph-Dlsk94LC.mjs → ReverseEvidenceGraph-C02-gXOh.mjs} +0 -0
- /package/dist/{StealthVerifier-Bo4T3bz8.mjs → StealthVerifier-BWmPgQsv.mjs} +0 -0
- /package/dist/{VersionDetector-CwVLVdDM.mjs → VersionDetector-K3V4vGsw.mjs} +0 -0
- /package/dist/{betterSqlite3-0pqusHHH.mjs → betterSqlite3-DLSBZodi.mjs} +0 -0
- /package/dist/{concurrency-Bt0yv1kJ.mjs → concurrency-Drev_Vz9.mjs} +0 -0
- /package/dist/{formatAddress-DVkj9kpI.mjs → formatAddress-nnMvEohD.mjs} +0 -0
- /package/dist/{parse-args-BlRjqlkL.mjs → parse-args-B4cY5Vx5.mjs} +0 -0
- /package/dist/{ssrf-policy-ZaUfvhq7.mjs → ssrf-policy-Dsqd-DTX.mjs} +0 -0
- /package/dist/{types-CPhOReNX.mjs → types-DDBWs9UP.mjs} +0 -0
package/README.md
CHANGED
|
@@ -80,8 +80,8 @@ JSHookMCP exposes **360+ atomic tools** across 36 domains, empowering AI orchest
|
|
|
80
80
|
The built-in surface below is generated from the runtime registry and checked in CI.
|
|
81
81
|
|
|
82
82
|
<!-- metadata-sync:start -->
|
|
83
|
-
- Package version: `0.
|
|
84
|
-
- Built-in Tools: `
|
|
83
|
+
- Package version: `0.3.0`
|
|
84
|
+
- Built-in Tools: `386`
|
|
85
85
|
- Domains: `adb-bridge`, `antidebug`, `binary-instrument`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
|
|
86
86
|
- Note: this snapshot is generated from the runtime registry; do not edit the counts by hand.
|
|
87
87
|
<!-- metadata-sync:end -->
|
package/README.zh.md
CHANGED
|
@@ -80,8 +80,8 @@ JSHookMCP 跨 36 个技术域提供了 **360+ 个内置原子工具**,赋予 A
|
|
|
80
80
|
下面的内置能力快照由运行时 registry 动态生成,并在 CI 中校验。
|
|
81
81
|
|
|
82
82
|
<!-- metadata-sync:start -->
|
|
83
|
-
- 包版本:`0.
|
|
84
|
-
- 内置工具数:`
|
|
83
|
+
- 包版本:`0.3.0`
|
|
84
|
+
- 内置工具数:`386`
|
|
85
85
|
- 域列表:`adb-bridge`, `antidebug`, `binary-instrument`, `boringssl-inspector`, `browser`, `canvas`, `coordination`, `core`, `cross-domain`, `debugger`, `encoding`, `evidence`, `extension-registry`, `graphql`, `hooks`, `instrumentation`, `macro`, `maintenance`, `memory`, `mojo-ipc`, `network`, `platform`, `process`, `protocol-analysis`, `proxy`, `sandbox`, `shared-state-board`, `skia-capture`, `sourcemap`, `streaming`, `syscall-hook`, `trace`, `transform`, `v8-inspector`, `wasm`, `workflow`
|
|
86
86
|
- 说明:以上数据由运行时 registry 动态生成,不要手改计数。
|
|
87
87
|
<!-- metadata-sync:end -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as logger } from "./logger-Dh_xb7_2.mjs";
|
|
2
|
-
import { a as GetModuleFileNameEx, b as openProcessForMemory, d as ReadProcessMemory, h as VirtualQueryEx, i as GetModuleBaseName, n as EnumProcessModules, s as GetModuleInformation, t as CloseHandle, u as PAGE } from "./Win32API-
|
|
3
|
-
import { PEAnalyzer } from "./PEAnalyzer-
|
|
2
|
+
import { a as GetModuleFileNameEx, b as openProcessForMemory, d as ReadProcessMemory, h as VirtualQueryEx, i as GetModuleBaseName, n as EnumProcessModules, s as GetModuleInformation, t as CloseHandle, u as PAGE } from "./Win32API-C2kjj0ze.mjs";
|
|
3
|
+
import { PEAnalyzer } from "./PEAnalyzer-DMQ44gen.mjs";
|
|
4
4
|
import { createHash } from "node:crypto";
|
|
5
5
|
import { promises } from "node:fs";
|
|
6
6
|
//#region src/native/AntiCheatDetector.ts
|
|
@@ -82,8 +82,24 @@ const ANTI_DEBUG_IMPORTS = [{
|
|
|
82
82
|
]
|
|
83
83
|
}];
|
|
84
84
|
const DR_CHECK_IMPORTS = ["GetThreadContext", "SetThreadContext"];
|
|
85
|
+
const DEFAULT_LIMITS = {
|
|
86
|
+
guardPageMaxRegions: 2e4,
|
|
87
|
+
guardPageTimeoutMs: 2e3,
|
|
88
|
+
integrityMaxModules: 32,
|
|
89
|
+
integrityMaxSections: 128,
|
|
90
|
+
integrityMaxBytes: 16 * 1024 * 1024,
|
|
91
|
+
integrityMaxSectionBytes: 2 * 1024 * 1024,
|
|
92
|
+
integrityTimeoutMs: 3e3
|
|
93
|
+
};
|
|
85
94
|
var AntiCheatDetector = class {
|
|
86
95
|
peAnalyzer = new PEAnalyzer();
|
|
96
|
+
options;
|
|
97
|
+
constructor(options = {}) {
|
|
98
|
+
this.options = {
|
|
99
|
+
...DEFAULT_LIMITS,
|
|
100
|
+
...options
|
|
101
|
+
};
|
|
102
|
+
}
|
|
87
103
|
/**
|
|
88
104
|
* Scan process for anti-debug / anti-cheat mechanisms by analyzing imports.
|
|
89
105
|
*/
|
|
@@ -91,7 +107,7 @@ var AntiCheatDetector = class {
|
|
|
91
107
|
const detections = [];
|
|
92
108
|
const hProcess = openProcessForMemory(pid);
|
|
93
109
|
try {
|
|
94
|
-
const modules = this.
|
|
110
|
+
const modules = this.enumerateModules(hProcess);
|
|
95
111
|
for (const mod of modules) try {
|
|
96
112
|
const imports = await this.peAnalyzer.parseImports(pid, mod.base);
|
|
97
113
|
for (const imp of imports) {
|
|
@@ -127,82 +143,166 @@ var AntiCheatDetector = class {
|
|
|
127
143
|
* Find all guard page regions in the process.
|
|
128
144
|
*/
|
|
129
145
|
async findGuardPages(pid) {
|
|
146
|
+
return (await this.scanGuardPages(pid)).guardPages;
|
|
147
|
+
}
|
|
148
|
+
async scanGuardPages(pid) {
|
|
130
149
|
const guardPages = [];
|
|
131
150
|
const hProcess = openProcessForMemory(pid);
|
|
151
|
+
const startedAt = Date.now();
|
|
152
|
+
const stats = {
|
|
153
|
+
scannedRegions: 0,
|
|
154
|
+
queryFailures: 0,
|
|
155
|
+
durationMs: 0,
|
|
156
|
+
timedOut: false,
|
|
157
|
+
truncated: false,
|
|
158
|
+
maxRegions: this.options.guardPageMaxRegions,
|
|
159
|
+
timeoutMs: this.options.guardPageTimeoutMs
|
|
160
|
+
};
|
|
132
161
|
try {
|
|
133
|
-
const modules = this.
|
|
162
|
+
const modules = this.enumerateModules(hProcess);
|
|
134
163
|
let address = 0n;
|
|
135
164
|
const maxAddress = 140737488355327n;
|
|
136
|
-
while (address < maxAddress)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
165
|
+
while (address < maxAddress) {
|
|
166
|
+
if (this.isTimedOut(startedAt, stats.timeoutMs)) {
|
|
167
|
+
stats.timedOut = true;
|
|
168
|
+
stats.truncated = true;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
if (stats.scannedRegions >= stats.maxRegions) {
|
|
172
|
+
stats.truncated = true;
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const result = VirtualQueryEx(hProcess, address);
|
|
177
|
+
if (!result.success) break;
|
|
178
|
+
const mbi = result.info;
|
|
179
|
+
const nextAddress = mbi.BaseAddress + mbi.RegionSize;
|
|
180
|
+
stats.scannedRegions += 1;
|
|
181
|
+
if ((mbi.Protect & PAGE.GUARD) !== 0) {
|
|
182
|
+
let moduleName = null;
|
|
183
|
+
for (const mod of modules) {
|
|
184
|
+
const modBase = BigInt(mod.base);
|
|
185
|
+
if (mbi.BaseAddress >= modBase && mbi.BaseAddress < modBase + BigInt(mod.size)) {
|
|
186
|
+
moduleName = mod.name;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
147
189
|
}
|
|
190
|
+
guardPages.push({
|
|
191
|
+
address: `0x${mbi.BaseAddress.toString(16)}`,
|
|
192
|
+
size: Number(mbi.RegionSize),
|
|
193
|
+
moduleName,
|
|
194
|
+
nearbySymbol: null
|
|
195
|
+
});
|
|
148
196
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
197
|
+
if (mbi.RegionSize <= 0n || nextAddress <= address || nextAddress <= mbi.BaseAddress) {
|
|
198
|
+
stats.truncated = true;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
address = nextAddress;
|
|
202
|
+
} catch {
|
|
203
|
+
stats.queryFailures += 1;
|
|
204
|
+
address += 4096n;
|
|
155
205
|
}
|
|
156
|
-
address = mbi.BaseAddress + mbi.RegionSize;
|
|
157
|
-
if (address <= mbi.BaseAddress) break;
|
|
158
|
-
} catch {
|
|
159
|
-
address += 4096n;
|
|
160
206
|
}
|
|
161
207
|
} finally {
|
|
208
|
+
stats.durationMs = Date.now() - startedAt;
|
|
162
209
|
CloseHandle(hProcess);
|
|
163
210
|
}
|
|
164
|
-
return
|
|
211
|
+
return {
|
|
212
|
+
guardPages,
|
|
213
|
+
stats
|
|
214
|
+
};
|
|
165
215
|
}
|
|
166
216
|
/**
|
|
167
217
|
* Check code section integrity by comparing disk vs memory hashes.
|
|
168
218
|
*/
|
|
169
219
|
async checkIntegrity(pid, moduleName) {
|
|
220
|
+
return (await this.scanIntegrity(pid, moduleName)).sections;
|
|
221
|
+
}
|
|
222
|
+
async scanIntegrity(pid, moduleName) {
|
|
170
223
|
const results = [];
|
|
171
224
|
const hProcess = openProcessForMemory(pid);
|
|
225
|
+
const startedAt = Date.now();
|
|
226
|
+
const stats = {
|
|
227
|
+
scannedModules: 0,
|
|
228
|
+
scannedSections: 0,
|
|
229
|
+
hashedBytes: 0,
|
|
230
|
+
skippedModules: 0,
|
|
231
|
+
skippedSections: 0,
|
|
232
|
+
durationMs: 0,
|
|
233
|
+
timedOut: false,
|
|
234
|
+
truncated: false,
|
|
235
|
+
maxModules: this.options.integrityMaxModules,
|
|
236
|
+
maxSections: this.options.integrityMaxSections,
|
|
237
|
+
maxBytes: this.options.integrityMaxBytes,
|
|
238
|
+
timeoutMs: this.options.integrityTimeoutMs
|
|
239
|
+
};
|
|
240
|
+
let stopScan = false;
|
|
172
241
|
try {
|
|
173
|
-
const modules = this.
|
|
242
|
+
const modules = this.enumerateModules(hProcess);
|
|
174
243
|
const targets = moduleName ? modules.filter((m) => m.name.toLowerCase().includes(moduleName.toLowerCase())) : modules;
|
|
175
|
-
for (const mod of targets)
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const secRva = parseInt(sec.virtualAddress, 16);
|
|
181
|
-
const secSize = Math.min(sec.virtualSize, sec.rawSize);
|
|
182
|
-
if (secSize <= 0) continue;
|
|
183
|
-
const memBytes = ReadProcessMemory(hProcess, BigInt(mod.base) + BigInt(secRva), secSize);
|
|
184
|
-
const diskOffset = this._rvaToFileOffset(diskData, secRva);
|
|
185
|
-
if (diskOffset < 0 || diskOffset + secSize > diskData.length) continue;
|
|
186
|
-
const diskBytes = diskData.subarray(diskOffset, diskOffset + secSize);
|
|
187
|
-
const memoryHash = createHash("sha256").update(memBytes).digest("hex");
|
|
188
|
-
const diskHash = createHash("sha256").update(diskBytes).digest("hex");
|
|
189
|
-
results.push({
|
|
190
|
-
sectionName: sec.name,
|
|
191
|
-
moduleName: mod.name,
|
|
192
|
-
diskHash,
|
|
193
|
-
memoryHash,
|
|
194
|
-
isModified: memoryHash !== diskHash
|
|
195
|
-
});
|
|
244
|
+
for (const mod of targets) {
|
|
245
|
+
if (this.shouldStopIntegrityScan(stats, startedAt)) {
|
|
246
|
+
if (this.isTimedOut(startedAt, stats.timeoutMs)) stats.timedOut = true;
|
|
247
|
+
stats.truncated = true;
|
|
248
|
+
break;
|
|
196
249
|
}
|
|
197
|
-
|
|
198
|
-
|
|
250
|
+
stats.scannedModules += 1;
|
|
251
|
+
try {
|
|
252
|
+
const diskData = await promises.readFile(mod.path);
|
|
253
|
+
const sections = await this.peAnalyzer.listSections(pid, mod.base);
|
|
254
|
+
for (const sec of sections) {
|
|
255
|
+
if (this.shouldStopIntegrityScan(stats, startedAt)) {
|
|
256
|
+
if (this.isTimedOut(startedAt, stats.timeoutMs)) stats.timedOut = true;
|
|
257
|
+
stats.truncated = true;
|
|
258
|
+
stopScan = true;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
if (!sec.isExecutable) continue;
|
|
262
|
+
const secRva = parseInt(sec.virtualAddress, 16);
|
|
263
|
+
const secSize = Math.min(sec.virtualSize, sec.rawSize);
|
|
264
|
+
if (secSize <= 0) continue;
|
|
265
|
+
if (secSize > this.options.integrityMaxSectionBytes) {
|
|
266
|
+
stats.skippedSections += 1;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (stats.hashedBytes + secSize > stats.maxBytes) {
|
|
270
|
+
stats.truncated = true;
|
|
271
|
+
stopScan = true;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
const memBytes = ReadProcessMemory(hProcess, BigInt(mod.base) + BigInt(secRva), secSize);
|
|
275
|
+
const diskOffset = this.rvaToFileOffset(diskData, secRva);
|
|
276
|
+
if (diskOffset < 0 || diskOffset + secSize > diskData.length) continue;
|
|
277
|
+
const diskBytes = diskData.subarray(diskOffset, diskOffset + secSize);
|
|
278
|
+
const memoryHash = createHash("sha256").update(memBytes).digest("hex");
|
|
279
|
+
const diskHash = createHash("sha256").update(diskBytes).digest("hex");
|
|
280
|
+
results.push({
|
|
281
|
+
sectionName: sec.name,
|
|
282
|
+
moduleName: mod.name,
|
|
283
|
+
diskHash,
|
|
284
|
+
memoryHash,
|
|
285
|
+
isModified: memoryHash !== diskHash
|
|
286
|
+
});
|
|
287
|
+
stats.scannedSections += 1;
|
|
288
|
+
stats.hashedBytes += secSize;
|
|
289
|
+
}
|
|
290
|
+
} catch (e) {
|
|
291
|
+
stats.skippedModules += 1;
|
|
292
|
+
logger.debug(`Integrity check skipped for ${mod.name}: ${e}`);
|
|
293
|
+
}
|
|
294
|
+
if (stopScan) break;
|
|
199
295
|
}
|
|
200
296
|
} finally {
|
|
297
|
+
stats.durationMs = Date.now() - startedAt;
|
|
201
298
|
CloseHandle(hProcess);
|
|
202
299
|
}
|
|
203
|
-
return
|
|
300
|
+
return {
|
|
301
|
+
sections: results,
|
|
302
|
+
stats
|
|
303
|
+
};
|
|
204
304
|
}
|
|
205
|
-
|
|
305
|
+
enumerateModules(hProcess) {
|
|
206
306
|
const modules = [];
|
|
207
307
|
try {
|
|
208
308
|
const { modules: modHandles, count } = EnumProcessModules(hProcess);
|
|
@@ -223,7 +323,7 @@ var AntiCheatDetector = class {
|
|
|
223
323
|
}
|
|
224
324
|
return modules;
|
|
225
325
|
}
|
|
226
|
-
|
|
326
|
+
rvaToFileOffset(peData, rva) {
|
|
227
327
|
const e_lfanew = peData.readUInt32LE(60);
|
|
228
328
|
const numSections = peData.readUInt16LE(e_lfanew + 6);
|
|
229
329
|
const sizeOfOptionalHeader = peData.readUInt16LE(e_lfanew + 20);
|
|
@@ -238,6 +338,12 @@ var AntiCheatDetector = class {
|
|
|
238
338
|
}
|
|
239
339
|
return -1;
|
|
240
340
|
}
|
|
341
|
+
isTimedOut(startedAt, timeoutMs) {
|
|
342
|
+
return Date.now() - startedAt >= timeoutMs;
|
|
343
|
+
}
|
|
344
|
+
shouldStopIntegrityScan(stats, startedAt) {
|
|
345
|
+
return this.isTimedOut(startedAt, stats.timeoutMs) || stats.scannedModules >= stats.maxModules || stats.scannedSections >= stats.maxSections || stats.hashedBytes >= stats.maxBytes;
|
|
346
|
+
}
|
|
241
347
|
};
|
|
242
348
|
const antiCheatDetector = new AntiCheatDetector();
|
|
243
349
|
//#endregion
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { _ as WriteProcessMemory, b as openProcessForMemory, d as ReadProcessMemory, f as VirtualAllocEx, h as VirtualQueryEx, l as MEM, m as VirtualProtectEx, p as VirtualFreeEx, t as CloseHandle, u as PAGE } from "./Win32API-
|
|
3
|
-
import { l as FlushInstructionCache } from "./Win32Debug-
|
|
4
|
-
import { n as isExecutable } from "./NativeMemoryManager.utils-
|
|
5
|
-
import { t as nativeMemoryManager } from "./NativeMemoryManager.impl-
|
|
1
|
+
import { A as CODE_CAVE_MIN_SIZE } from "./constants-CDZLOoVv.mjs";
|
|
2
|
+
import { _ as WriteProcessMemory, b as openProcessForMemory, d as ReadProcessMemory, f as VirtualAllocEx, h as VirtualQueryEx, l as MEM, m as VirtualProtectEx, p as VirtualFreeEx, t as CloseHandle, u as PAGE } from "./Win32API-C2kjj0ze.mjs";
|
|
3
|
+
import { l as FlushInstructionCache } from "./Win32Debug-CKrGOTpo.mjs";
|
|
4
|
+
import { n as isExecutable } from "./NativeMemoryManager.utils-BBlAixF5.mjs";
|
|
5
|
+
import { t as nativeMemoryManager } from "./NativeMemoryManager.impl-D9Lkovvn.mjs";
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
7
7
|
//#region src/native/CodeInjector.ts
|
|
8
8
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-CjcI7cDX.mjs";
|
|
2
2
|
import { t as logger } from "./logger-Dh_xb7_2.mjs";
|
|
3
|
-
import { t as PrerequisiteError } from "./PrerequisiteError-
|
|
3
|
+
import { t as PrerequisiteError } from "./PrerequisiteError-TuyZIs6n.mjs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/modules/monitor/NetworkMonitor.interceptors.ts
|
|
6
6
|
function buildXHRInterceptorCode(maxRecords) {
|
|
@@ -267,6 +267,7 @@ var NetworkMonitor = class {
|
|
|
267
267
|
postData: params.request.postData,
|
|
268
268
|
timestamp: params.timestamp,
|
|
269
269
|
type: params.type,
|
|
270
|
+
httpVersion: params.request.httpVersion,
|
|
270
271
|
initiator: params.initiator
|
|
271
272
|
};
|
|
272
273
|
this.requests.set(params.requestId, request);
|
|
@@ -672,6 +673,21 @@ var PlaywrightNetworkMonitor = class {
|
|
|
672
673
|
const candidate = value;
|
|
673
674
|
return typeof candidate.request === "function" && typeof candidate.url === "function" && typeof candidate.status === "function" && typeof candidate.statusText === "function" && typeof candidate.headers === "function";
|
|
674
675
|
}
|
|
676
|
+
normalizeHttpVersion(value) {
|
|
677
|
+
if (typeof value !== "string") return void 0;
|
|
678
|
+
const normalized = value.trim().toLowerCase();
|
|
679
|
+
if (normalized === "http/1.0" || normalized === "1.0") return "1.0";
|
|
680
|
+
if (normalized === "http/1.1" || normalized === "1.1") return "1.1";
|
|
681
|
+
if (normalized === "http/2" || normalized === "2" || normalized === "2.0" || normalized === "h2") return "h2";
|
|
682
|
+
if (normalized === "http/3" || normalized === "3" || normalized === "3.0" || normalized === "h3") return "h3";
|
|
683
|
+
}
|
|
684
|
+
detectHttpVersion(res) {
|
|
685
|
+
const fromHttpVersion = typeof res.httpVersion === "function" ? res.httpVersion() : void 0;
|
|
686
|
+
const normalizedHttpVersion = this.normalizeHttpVersion(fromHttpVersion);
|
|
687
|
+
if (normalizedHttpVersion) return normalizedHttpVersion;
|
|
688
|
+
const fromProtocol = typeof res.protocol === "function" ? res.protocol() : void 0;
|
|
689
|
+
return this.normalizeHttpVersion(fromProtocol);
|
|
690
|
+
}
|
|
675
691
|
async enable() {
|
|
676
692
|
if (this.networkEnabled) {
|
|
677
693
|
logger.warn("PlaywrightNetworkMonitor already enabled");
|
|
@@ -701,6 +717,9 @@ var PlaywrightNetworkMonitor = class {
|
|
|
701
717
|
const req = res.request();
|
|
702
718
|
const fallbackRequestId = `pw-res-${Date.now()}-${Math.random()}`;
|
|
703
719
|
const requestId = this.isPlaywrightLikeRequest(req) ? this.requestIdMap.get(req) ?? fallbackRequestId : fallbackRequestId;
|
|
720
|
+
const observedHttpVersion = this.detectHttpVersion(res);
|
|
721
|
+
const request = this.requests.get(requestId);
|
|
722
|
+
if (request && observedHttpVersion) request.httpVersion = observedHttpVersion;
|
|
704
723
|
const response = {
|
|
705
724
|
requestId,
|
|
706
725
|
url: res.url(),
|
|
@@ -886,24 +905,73 @@ var PlaywrightNetworkMonitor = class {
|
|
|
886
905
|
const origFetch = window.__pwOriginalFetch || window.fetch;
|
|
887
906
|
window.__pwOriginalFetch = origFetch;
|
|
888
907
|
if (!window.__fetchRequests) window.__fetchRequests = [];
|
|
908
|
+
const normalizeHeaders = (value) => {
|
|
909
|
+
if (!value) return {};
|
|
910
|
+
try {
|
|
911
|
+
if (typeof Headers !== 'undefined' && value instanceof Headers) {
|
|
912
|
+
return Object.fromEntries(value.entries());
|
|
913
|
+
}
|
|
914
|
+
} catch {}
|
|
915
|
+
if (Array.isArray(value)) {
|
|
916
|
+
try {
|
|
917
|
+
return Object.fromEntries(value);
|
|
918
|
+
} catch {
|
|
919
|
+
return {};
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
return typeof value === 'object' ? value : {};
|
|
923
|
+
};
|
|
889
924
|
window.fetch = function(...args) {
|
|
890
|
-
const [
|
|
891
|
-
const
|
|
925
|
+
const [resource, opts = {}] = args;
|
|
926
|
+
const requestLike = resource && typeof resource === 'object' ? resource : null;
|
|
927
|
+
const url =
|
|
928
|
+
typeof resource === 'string'
|
|
929
|
+
? resource
|
|
930
|
+
: typeof resource?.url === 'string'
|
|
931
|
+
? resource.url
|
|
932
|
+
: String(resource);
|
|
933
|
+
const method = opts?.method || requestLike?.method || 'GET';
|
|
934
|
+
const headers = normalizeHeaders(opts?.headers || requestLike?.headers);
|
|
935
|
+
const bodySource = opts?.body;
|
|
936
|
+
const body =
|
|
937
|
+
bodySource === undefined || bodySource === null
|
|
938
|
+
? null
|
|
939
|
+
: String(bodySource).slice(0, 2048);
|
|
940
|
+
const entry = {
|
|
941
|
+
url,
|
|
942
|
+
method,
|
|
943
|
+
headers,
|
|
944
|
+
body,
|
|
945
|
+
timestamp: Date.now(),
|
|
946
|
+
response: null,
|
|
947
|
+
status: 0,
|
|
948
|
+
};
|
|
892
949
|
return origFetch.apply(this, args).then(res => {
|
|
893
950
|
entry.status = res.status;
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
951
|
+
return res.clone().text().then(
|
|
952
|
+
(text) => {
|
|
953
|
+
entry.response = text.slice(0, 2048);
|
|
954
|
+
return res;
|
|
955
|
+
},
|
|
956
|
+
() => {
|
|
957
|
+
entry.response = '[Unable to read response]';
|
|
958
|
+
return res;
|
|
959
|
+
},
|
|
960
|
+
).then((response) => {
|
|
961
|
+
window.__fetchRequests.push(entry);
|
|
962
|
+
if (window.__fetchRequests.length > maxRecords) {
|
|
963
|
+
window.__fetchRequests.splice(0, window.__fetchRequests.length - maxRecords);
|
|
964
|
+
}
|
|
965
|
+
// Auto-persist compact summary so data survives context compression
|
|
966
|
+
try {
|
|
967
|
+
const s = { url: entry.url, method: entry.method, status: entry.status, ts: entry.timestamp };
|
|
968
|
+
const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
|
|
969
|
+
prev.push(s);
|
|
970
|
+
if (prev.length > 500) prev.splice(0, prev.length - 500);
|
|
971
|
+
localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
|
|
972
|
+
} catch(e) {}
|
|
973
|
+
return response;
|
|
974
|
+
});
|
|
907
975
|
});
|
|
908
976
|
};
|
|
909
977
|
console.log('[PlaywrightFetch] Fetch interceptor injected');
|
|
@@ -2198,4 +2266,4 @@ var ConsoleMonitor = class {
|
|
|
2198
2266
|
//#region src/modules/monitor/ConsoleMonitor.ts
|
|
2199
2267
|
var ConsoleMonitor_exports = /* @__PURE__ */ __exportAll({ ConsoleMonitor: () => ConsoleMonitor });
|
|
2200
2268
|
//#endregion
|
|
2201
|
-
export { ConsoleMonitor_exports as t };
|
|
2269
|
+
export { ConsoleMonitor as n, ConsoleMonitor_exports as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as logger } from "./logger-Dh_xb7_2.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { L as DETAILED_DATA_DEFAULT_TTL_MS, R as DETAILED_DATA_MAX_TTL_MS, z as DETAILED_DATA_SMART_THRESHOLD_BYTES } from "./constants-CDZLOoVv.mjs";
|
|
3
3
|
//#region src/utils/DetailedDataManager.ts
|
|
4
4
|
var DetailedDataManager = class DetailedDataManager {
|
|
5
5
|
static instance;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-CjcI7cDX.mjs";
|
|
2
2
|
import { t as logger } from "./logger-Dh_xb7_2.mjs";
|
|
3
|
-
import { t as allTools } from "./ToolCatalog-
|
|
3
|
+
import { t as allTools } from "./ToolCatalog-5OJdMiF0.mjs";
|
|
4
4
|
import { t as INSTALLED_EXTENSION_METADATA_FILENAME } from "./types-Bx92KJfT.mjs";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -154,6 +154,12 @@ function isWorkflowContract(value) {
|
|
|
154
154
|
* Extension file discovery — prefers installed registry metadata, then falls back
|
|
155
155
|
* to scanning plugin/workflow roots for legacy manifest files.
|
|
156
156
|
*/
|
|
157
|
+
function isJavaScriptLikeFile(file) {
|
|
158
|
+
return file.endsWith(".js") || file.endsWith(".mjs") || file.endsWith(".cjs");
|
|
159
|
+
}
|
|
160
|
+
function isTypeScriptLikeFile(file) {
|
|
161
|
+
return file.endsWith(".ts") || file.endsWith(".mts") || file.endsWith(".cts");
|
|
162
|
+
}
|
|
157
163
|
async function collectMatchingFiles(roots, matcher) {
|
|
158
164
|
const files = /* @__PURE__ */ new Set();
|
|
159
165
|
for (const root of roots) {
|
|
@@ -163,6 +169,7 @@ async function collectMatchingFiles(roots, matcher) {
|
|
|
163
169
|
cwd: root,
|
|
164
170
|
absolute: true,
|
|
165
171
|
onlyFiles: true,
|
|
172
|
+
dot: true,
|
|
166
173
|
ignore: [
|
|
167
174
|
"**/node_modules/**",
|
|
168
175
|
"**/.git/**",
|
|
@@ -215,8 +222,8 @@ async function collectInstalledEntryCandidates(roots, kind) {
|
|
|
215
222
|
candidates.push({
|
|
216
223
|
file,
|
|
217
224
|
key: normalizeExtensionCandidateKey(root, file),
|
|
218
|
-
isJs: file
|
|
219
|
-
isTs: file
|
|
225
|
+
isJs: isJavaScriptLikeFile(file),
|
|
226
|
+
isTs: isTypeScriptLikeFile(file),
|
|
220
227
|
rootIndex,
|
|
221
228
|
priority: 0
|
|
222
229
|
});
|
|
@@ -249,8 +256,8 @@ async function discoverPluginFiles(pluginRoots) {
|
|
|
249
256
|
for (const file of files) candidates.push({
|
|
250
257
|
file,
|
|
251
258
|
key: normalizeExtensionCandidateKey(root, file),
|
|
252
|
-
isJs: file
|
|
253
|
-
isTs: file
|
|
259
|
+
isJs: isJavaScriptLikeFile(file),
|
|
260
|
+
isTs: isTypeScriptLikeFile(file),
|
|
254
261
|
rootIndex,
|
|
255
262
|
priority: 1
|
|
256
263
|
});
|
|
@@ -260,12 +267,12 @@ async function discoverPluginFiles(pluginRoots) {
|
|
|
260
267
|
async function discoverWorkflowFiles(workflowRoots) {
|
|
261
268
|
const candidates = await collectInstalledEntryCandidates(workflowRoots, "workflow");
|
|
262
269
|
for (const [rootIndex, root] of workflowRoots.entries()) {
|
|
263
|
-
const files = await collectMatchingFiles([root], (filename) => filename.endsWith(".workflow.js") || filename.endsWith(".workflow.ts") || filename === "workflow.js" || filename === "workflow.ts");
|
|
270
|
+
const files = await collectMatchingFiles([root], (filename) => filename.endsWith(".workflow.js") || filename.endsWith(".workflow.mjs") || filename.endsWith(".workflow.cjs") || filename.endsWith(".workflow.ts") || filename.endsWith(".workflow.mts") || filename.endsWith(".workflow.cts") || filename === "workflow.js" || filename === "workflow.mjs" || filename === "workflow.cjs" || filename === "workflow.ts" || filename === "workflow.mts" || filename === "workflow.cts");
|
|
264
271
|
for (const file of files) candidates.push({
|
|
265
272
|
file,
|
|
266
273
|
key: normalizeExtensionCandidateKey(root, file),
|
|
267
|
-
isJs: file
|
|
268
|
-
isTs: file
|
|
274
|
+
isJs: isJavaScriptLikeFile(file),
|
|
275
|
+
isTs: isTypeScriptLikeFile(file),
|
|
269
276
|
rootIndex,
|
|
270
277
|
priority: 1
|
|
271
278
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
import { t as CloseHandle } from "./Win32API-
|
|
3
|
-
import { _ as openThreadForDebug, a as DebugActiveProcessStop, c as EnumerateProcessThreads, d as ResumeThread, f as SetThreadContext, g as encodeDR7, h as WaitForDebugEvent, i as DebugActiveProcess, n as ContinueDebugEvent, o as DebugSetProcessKillOnExit, p as SuspendThread, r as DBG, s as EXCEPTION_CODE, t as CONTEXT_FLAGS, u as GetThreadContext, v as parseContext, y as writeContext } from "./Win32Debug-
|
|
1
|
+
import { _ as BREAKPOINT_HIT_TIMEOUT_MS, v as BREAKPOINT_TRACE_MAX_HITS } from "./constants-CDZLOoVv.mjs";
|
|
2
|
+
import { t as CloseHandle } from "./Win32API-C2kjj0ze.mjs";
|
|
3
|
+
import { _ as openThreadForDebug, a as DebugActiveProcessStop, c as EnumerateProcessThreads, d as ResumeThread, f as SetThreadContext, g as encodeDR7, h as WaitForDebugEvent, i as DebugActiveProcess, n as ContinueDebugEvent, o as DebugSetProcessKillOnExit, p as SuspendThread, r as DBG, s as EXCEPTION_CODE, t as CONTEXT_FLAGS, u as GetThreadContext, v as parseContext, y as writeContext } from "./Win32Debug-CKrGOTpo.mjs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/native/HardwareBreakpoint.ts
|
|
6
6
|
/**
|