@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.
Files changed (187) hide show
  1. package/README.md +2 -2
  2. package/README.zh.md +2 -2
  3. package/dist/{AntiCheatDetector-BNk-EoBt.mjs → AntiCheatDetector-CqGDXmfc.mjs} +159 -53
  4. package/dist/{CodeInjector-Cq8q01kp.mjs → CodeInjector-BdjRfNx7.mjs} +5 -5
  5. package/dist/{ConsoleMonitor-CPVQW1Y-.mjs → ConsoleMonitor-DykL3IAw.mjs} +85 -17
  6. package/dist/{DetailedDataManager-BQQcxh64.mjs → DetailedDataManager-HT49OrvF.mjs} +1 -1
  7. package/dist/{ExtensionManager-CWYgw0YW.mjs → ExtensionManager-BDMsY2Dz.mjs} +15 -8
  8. package/dist/{HardwareBreakpoint-B9gZCdFP.mjs → HardwareBreakpoint-Cc2AFq1Y.mjs} +3 -3
  9. package/dist/{HeapAnalyzer-BLDH0dCv.mjs → HeapAnalyzer-DruMgsgj.mjs} +20 -20
  10. package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs} +1 -74
  11. package/dist/{InstrumentationSession-CvPC7Jwy.mjs → InstrumentationSession-DLH0vd-z.mjs} +2 -2
  12. package/dist/{MemoryController-CbVdCIJF.mjs → MemoryController-CMtviNW_.mjs} +3 -3
  13. package/dist/{MemoryScanSession-BsDZbLYm.mjs → MemoryScanSession-ITgb_NMi.mjs} +2 -2
  14. package/dist/{MemoryScanner-Bcpml6II.mjs → MemoryScanner-CiL7Z3ey.mjs} +12 -9
  15. package/dist/{NativeMemoryManager.impl-dZtA1ZGn.mjs → NativeMemoryManager.impl-D9Lkovvn.mjs} +13 -10
  16. package/dist/{NativeMemoryManager.utils-B-FjA2mJ.mjs → NativeMemoryManager.utils-BBlAixF5.mjs} +1 -1
  17. package/dist/{PEAnalyzer-D1lzJ_VG.mjs → PEAnalyzer-DMQ44gen.mjs} +15 -15
  18. package/dist/{PageController-Bqm2kZ_X.mjs → PageController-BPJNqqBN.mjs} +18 -4
  19. package/dist/{PointerChainEngine-BOhyVsjx.mjs → PointerChainEngine-K7wN8Z-w.mjs} +10 -7
  20. package/dist/ProcessRegistry-zGg12QbE.mjs +74 -0
  21. package/dist/{ResponseBuilder-D3iFYx2N.mjs → ResponseBuilder-CJXWmWNw.mjs} +10 -10
  22. package/dist/{ScriptManager-aHHq0X7U.mjs → ScriptManager-ZuWD-0Jg.mjs} +195 -192
  23. package/dist/{Speedhack-CqdIFlQl.mjs → Speedhack-D-z0umeT.mjs} +2 -2
  24. package/dist/{StructureAnalyzer-DhFaPvRO.mjs → StructureAnalyzer-Cav5AVSL.mjs} +9 -6
  25. package/dist/{ToolCatalog-C0JGZoOm.mjs → ToolCatalog-5OJdMiF0.mjs} +81 -81
  26. package/dist/{ToolProbe-oC7aPrkv.mjs → ToolProbe-DbCFGyrg.mjs} +1 -1
  27. package/dist/{ToolRegistry-BjaF4oNz.mjs → ToolRegistry-B9krbTtI.mjs} +51 -2
  28. package/dist/{ToolRouter.policy-BWV67ZK-.mjs → ToolRouter.policy-BGDAGyeH.mjs} +60 -20
  29. package/dist/TraceRecorder-B41Z5XBj.mjs +1286 -0
  30. package/dist/{Win32API-CePkipZY.mjs → Win32API-C2kjj0ze.mjs} +18 -12
  31. package/dist/{Win32Debug-BvKs-gxc.mjs → Win32Debug-CKrGOTpo.mjs} +2 -2
  32. package/dist/{WorkflowEngine-CuvkZtWu.mjs → WorkflowEngine-DJ6M4opp.mjs} +226 -255
  33. package/dist/analysis-BHeJW2Nb.mjs +1234 -0
  34. package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BRKeyt27.mjs} +3 -3
  35. package/dist/{artifactRetention-CFEprwPw.mjs → artifactRetention-CPXkUJXp.mjs} +13 -6
  36. package/dist/{artifacts-Bk2-_uPq.mjs → artifacts-DkfosXH3.mjs} +1 -1
  37. package/dist/authorization-schema-DRqyJMSk.mjs +31 -0
  38. package/dist/{binary-instrument-CXfpx6fT.mjs → binary-instrument--V3MAhJ4.mjs} +19 -27
  39. package/dist/bind-helpers-ClV34xdn.mjs +42 -0
  40. package/dist/{boringssl-inspector-BH2D3VKc.mjs → boringssl-inspector-Bo_LOLaS.mjs} +1 -1
  41. package/dist/{browser-BpOr5PEx.mjs → browser-Dx3_S2cG.mjs} +324 -37
  42. package/dist/capabilities-CcHlvWgK.mjs +33 -0
  43. package/dist/{constants-B0OANIBL.mjs → constants-CDZLOoVv.mjs} +18 -3
  44. package/dist/{coordination-qUbyF8KU.mjs → coordination-DgItD9DL.mjs} +2 -2
  45. package/dist/{debugger-gnKxRSN0.mjs → debugger-RS3RSAqs.mjs} +30 -13
  46. package/dist/definitions-BEoYofW5.mjs +47 -0
  47. package/dist/{definitions-bAhHQJq9.mjs → definitions-BRaefg3u.mjs} +11 -5
  48. package/dist/{definitions-DVGfrn7y.mjs → definitions-BbkvZkiv.mjs} +2 -2
  49. package/dist/definitions-BtWSHJ3o.mjs +17 -0
  50. package/dist/{definitions-BMfYXoNC.mjs → definitions-C1gCHO0i.mjs} +1 -1
  51. package/dist/{definitions-C1UvM5Iy.mjs → definitions-CDOg_b-l.mjs} +14 -2
  52. package/dist/definitions-CVPD9hzZ.mjs +54 -0
  53. package/dist/{definitions-Cke7zEb8.mjs → definitions-Cea8Lgl7.mjs} +1 -1
  54. package/dist/definitions-DAgIyjxM.mjs +10 -0
  55. package/dist/{definitions-B4rAvHNZ.mjs → definitions-DJA27nsL.mjs} +12 -9
  56. package/dist/{definitions-ClJLzsJQ.mjs → definitions-DKPFU3LW.mjs} +1 -1
  57. package/dist/{definitions-D3VsGcvz.mjs → definitions-DPRpZQ96.mjs} +7 -7
  58. package/dist/{definitions-B18eyf0B.mjs → definitions-DUE5gmdn.mjs} +1 -1
  59. package/dist/definitions-DYVjOtxa.mjs +26 -0
  60. package/dist/{definitions-BB_4jnmy.mjs → definitions-DcYLVLCo.mjs} +1 -1
  61. package/dist/{definitions-Beid2EB3.mjs → definitions-Pp5LI2H4.mjs} +1 -1
  62. package/dist/definitions-j9KdHVNR.mjs +14 -0
  63. package/dist/definitions-uzkjBwa7.mjs +258 -0
  64. package/dist/{definitions-Cq-zroAU.mjs → definitions-va-AnLuQ.mjs} +4 -4
  65. package/dist/{encoding-Bvz5jLRv.mjs → encoding-DJeqHmpd.mjs} +18 -4
  66. package/dist/{evidence-graph-bridge-C_fv9PuC.mjs → evidence-graph-bridge-DcYizFk2.mjs} +1 -0
  67. package/dist/{factory-DxlGh9Xf.mjs → factory-C90tBff6.mjs} +6 -6
  68. package/dist/flat-target-session-Dgax2Cy3.mjs +29 -0
  69. package/dist/{graphql-DYWzJ29s.mjs → graphql-CoHrhweh.mjs} +205 -34
  70. package/dist/{handlers-C67ktuRN.mjs → handlers-4jmR0nMs.mjs} +220 -32
  71. package/dist/{handlers-DlCJN4Td.mjs → handlers-BAHPxcch.mjs} +122 -90
  72. package/dist/{handlers-9sAbfIg-.mjs → handlers-BOs9b907.mjs} +849 -801
  73. package/dist/{handlers-DxGIq15_2.mjs → handlers-BWXEy6ef.mjs} +16 -16
  74. package/dist/{handlers-tB9Mp9ZK.mjs → handlers-Bndn6QvE.mjs} +31 -4
  75. package/dist/{handlers-CTsDAO6p.mjs → handlers-BqC4bD4s.mjs} +1 -1
  76. package/dist/{handlers-C87g8oCe.mjs → handlers-BtYq60bM2.mjs} +1 -1
  77. package/dist/{handlers-DeLOCd5m.mjs → handlers-BzgcB4iv.mjs} +17 -17
  78. package/dist/{handlers-Cgyg6c0U.mjs → handlers-CRyRWj2b.mjs} +237 -23
  79. package/dist/{handlers-U6L4xhuF.mjs → handlers-CVv2H1uq.mjs} +24 -17
  80. package/dist/{handlers-tiy7EIBp.mjs → handlers-Dl5a7JS4.mjs} +3 -3
  81. package/dist/{handlers-D6j6yka7.mjs → handlers-Dx2d7jt7.mjs} +1893 -1480
  82. package/dist/{handlers-Bl8zkwz1.mjs → handlers-Dz9PYsCa.mjs} +95 -6
  83. package/dist/handlers-HujRKC3b.mjs +661 -0
  84. package/dist/{handlers.impl-DS0d9fUw.mjs → handlers.impl-XWXkQfyi.mjs} +70 -24
  85. package/dist/{hooks-CzCWByww.mjs → hooks-B1B8NRHL.mjs} +3 -3
  86. package/dist/index.mjs +154 -144
  87. package/dist/{maintenance-P7ePRXQC.mjs → maintenance-PRMkLVRW.mjs} +35 -30
  88. package/dist/manifest-67Bok-Si.mjs +58 -0
  89. package/dist/{manifest-B3QVVeBS.mjs → manifest-6lNTMZAB2.mjs} +33 -28
  90. package/dist/manifest-B2duEHiH.mjs +90 -0
  91. package/dist/manifest-B6EY9Vm8.mjs +57 -0
  92. package/dist/{manifest-gZ4s_UtG.mjs → manifest-B6nKSbyY.mjs} +32 -33
  93. package/dist/{manifest-2ToTpjv8.mjs → manifest-BL8AQNPF.mjs} +31 -31
  94. package/dist/{manifest-DzwvxPJX.mjs → manifest-BSZvJJmV.mjs} +23 -14
  95. package/dist/{manifest-Sc_0JQ13.mjs → manifest-BU7qzUyX.mjs} +23 -23
  96. package/dist/{manifest-CT7zZBV1.mjs → manifest-Bl62e8WK.mjs} +24 -23
  97. package/dist/manifest-Bo5cXjdt.mjs +82 -0
  98. package/dist/manifest-BpS4gtUK.mjs +1347 -0
  99. package/dist/manifest-Bv65_e2W.mjs +101 -0
  100. package/dist/manifest-BytNIF4Z.mjs +117 -0
  101. package/dist/{manifest-BqrQ4Tpj.mjs → manifest-C-xtsjS3.mjs} +23 -23
  102. package/dist/{manifest-NXctwWQq.mjs → manifest-CDYl7OhA.mjs} +36 -38
  103. package/dist/manifest-CRZ3xmkD.mjs +61 -0
  104. package/dist/manifest-CoW6u4Tp.mjs +132 -0
  105. package/dist/manifest-Cq5zN_8A.mjs +50 -0
  106. package/dist/{manifest-CAhOuvSl.mjs → manifest-D7YZM_2e.mjs} +75 -85
  107. package/dist/{manifest-DCyjf4n2.mjs → manifest-DE_VrAeQ.mjs} +27 -7
  108. package/dist/manifest-DGsXSCpT.mjs +39 -0
  109. package/dist/{manifest-BB2J8IMJ.mjs → manifest-DJ2vfEuW.mjs} +48 -41
  110. package/dist/{manifest-3g71z6Bg.mjs → manifest-DPXDYhEu.mjs} +26 -25
  111. package/dist/manifest-Dd4fQb0a.mjs +322 -0
  112. package/dist/{manifest-CXsRWjjI.mjs → manifest-Deq6opGg.mjs} +95 -96
  113. package/dist/{manifest-C9RT5nk32.mjs → manifest-DfJTafJK.mjs} +14 -11
  114. package/dist/manifest-DgOdgN_j.mjs +50 -0
  115. package/dist/{manifest-BmtZzQiQ2.mjs → manifest-DlbMW4v4.mjs} +17 -15
  116. package/dist/{manifest-DrbmZcFl2.mjs → manifest-DmVfbH0w.mjs} +212 -91
  117. package/dist/manifest-Dog6Ddjr.mjs +109 -0
  118. package/dist/manifest-DvgU5FWb.mjs +58 -0
  119. package/dist/manifest-HsfDBs7j.mjs +50 -0
  120. package/dist/manifest-I8oQHvCG.mjs +186 -0
  121. package/dist/manifest-NvH_a-av.mjs +786 -0
  122. package/dist/{manifest-Dh8WBmEW.mjs → manifest-cEJU1v0Z.mjs} +24 -24
  123. package/dist/manifest-wOl5XLB12.mjs +112 -0
  124. package/dist/{modules-C184v-S9.mjs → modules-tZozf0LQ.mjs} +130 -860
  125. package/dist/{mojo-ipc-B_H61Afw.mjs → mojo-ipc-DXNEXEqb.mjs} +141 -26
  126. package/dist/{network-671Cw6hV.mjs → network-CPVvwvFg.mjs} +1329 -823
  127. package/dist/{outputPaths-B1uGmrWZ.mjs → outputPaths-um7lCRY3.mjs} +4 -8
  128. package/dist/{platform-WmNn8Sxb.mjs → platform-CYeFoTWp.mjs} +101 -10
  129. package/dist/{process-QcbIy5Zq.mjs → process-BTbgcVc6.mjs} +251 -346
  130. package/dist/{proxy-DqNs0bAd.mjs → proxy-r8YN6nP1.mjs} +30 -8
  131. package/dist/{registry-D-6e18lB.mjs → registry-Bl8ZQW61.mjs} +3 -3
  132. package/dist/{response-BQVP-xUn.mjs → response-CWhh2aLo.mjs} +7 -1
  133. package/dist/{shared-state-board-DV-dpHFJ.mjs → shared-state-board-BoZnSoj-.mjs} +2 -2
  134. package/dist/{sourcemap-Dq8ez8vS.mjs → sourcemap-BIDHUVXy.mjs} +350 -66
  135. package/dist/{streaming-BUQ0VJsg.mjs → streaming-Dal6utPp.mjs} +13 -13
  136. package/dist/{tool-builder-DCbIC5Eo.mjs → tool-builder-BHJp32mV.mjs} +1 -1
  137. package/dist/{transform-CiYJfNX0.mjs → transform-DRVgGG90.mjs} +18 -14
  138. package/dist/wasm-BYx5UOeG.mjs +1044 -0
  139. package/dist/webcrack-Be0_FccV.mjs +747 -0
  140. package/dist/{workflow-f3xJOcjx.mjs → workflow-BpuKEtvn.mjs} +8 -8
  141. package/package.json +76 -43
  142. package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
  143. package/dist/analysis-CL9uACt9.mjs +0 -463
  144. package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
  145. package/dist/definitions-6M-eejaT.mjs +0 -53
  146. package/dist/definitions-B3QdlrHv.mjs +0 -34
  147. package/dist/definitions-CXEI7QC72.mjs +0 -216
  148. package/dist/definitions-C_4r7Fo-2.mjs +0 -14
  149. package/dist/definitions-CkFDALoa.mjs +0 -26
  150. package/dist/definitions-Cy3Sl6gV.mjs +0 -34
  151. package/dist/definitions-LKpC3-nL.mjs +0 -9
  152. package/dist/handlers-DdFzXLvF.mjs +0 -446
  153. package/dist/manifest-82baTv4U.mjs +0 -45
  154. package/dist/manifest-BKbgbSiY.mjs +0 -60
  155. package/dist/manifest-Bcf-TJzH.mjs +0 -848
  156. package/dist/manifest-Bnd7kqEY.mjs +0 -55
  157. package/dist/manifest-BqQX6OQC2.mjs +0 -65
  158. package/dist/manifest-Br4RPFt5.mjs +0 -370
  159. package/dist/manifest-C5qDjysN.mjs +0 -107
  160. package/dist/manifest-CBYWCUBJ.mjs +0 -51
  161. package/dist/manifest-CFADCRa1.mjs +0 -37
  162. package/dist/manifest-CQVhavRF.mjs +0 -114
  163. package/dist/manifest-CV12bcrF.mjs +0 -121
  164. package/dist/manifest-CZLUCfG02.mjs +0 -95
  165. package/dist/manifest-D6phHKFd.mjs +0 -131
  166. package/dist/manifest-DHsnKgP6.mjs +0 -60
  167. package/dist/manifest-Df_dliIe.mjs +0 -55
  168. package/dist/manifest-DhKRAT8_.mjs +0 -92
  169. package/dist/manifest-DlpTj4ic2.mjs +0 -193
  170. package/dist/manifest-DuwHjUa5.mjs +0 -70
  171. package/dist/manifest-qSleDqdO.mjs +0 -1023
  172. package/dist/wasm-DQTnHDs4.mjs +0 -531
  173. /package/dist/{CacheAdapters-CDe5WPSV.mjs → CacheAdapters-jJFy20G-.mjs} +0 -0
  174. /package/dist/{DarwinAPI-BNPxu0RH.mjs → DarwinAPI-ETyy0xyo.mjs} +0 -0
  175. /package/dist/{EventBus-DgPmwpeu.mjs → EventBus-DFKvADm3.mjs} +0 -0
  176. /package/dist/{EvidenceGraphBridge-SFesNera.mjs → EvidenceGraphBridge-318Oi0Lf.mjs} +0 -0
  177. /package/dist/{FingerprintManager-gzWtkKuf.mjs → FingerprintManager-BN4UQWnX.mjs} +0 -0
  178. /package/dist/{PrerequisiteError-Dl33Svkz.mjs → PrerequisiteError-TuyZIs6n.mjs} +0 -0
  179. /package/dist/{ReverseEvidenceGraph-Dlsk94LC.mjs → ReverseEvidenceGraph-C02-gXOh.mjs} +0 -0
  180. /package/dist/{StealthVerifier-Bo4T3bz8.mjs → StealthVerifier-BWmPgQsv.mjs} +0 -0
  181. /package/dist/{VersionDetector-CwVLVdDM.mjs → VersionDetector-K3V4vGsw.mjs} +0 -0
  182. /package/dist/{betterSqlite3-0pqusHHH.mjs → betterSqlite3-DLSBZodi.mjs} +0 -0
  183. /package/dist/{concurrency-Bt0yv1kJ.mjs → concurrency-Drev_Vz9.mjs} +0 -0
  184. /package/dist/{formatAddress-DVkj9kpI.mjs → formatAddress-nnMvEohD.mjs} +0 -0
  185. /package/dist/{parse-args-BlRjqlkL.mjs → parse-args-B4cY5Vx5.mjs} +0 -0
  186. /package/dist/{ssrf-policy-ZaUfvhq7.mjs → ssrf-policy-Dsqd-DTX.mjs} +0 -0
  187. /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.2.9`
84
- - Built-in Tools: `364`
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.2.9`
84
- - 内置工具数:`364`
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-CePkipZY.mjs";
3
- import { PEAnalyzer } from "./PEAnalyzer-D1lzJ_VG.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-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._enumerateModules(hProcess);
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._enumerateModules(hProcess);
162
+ const modules = this.enumerateModules(hProcess);
134
163
  let address = 0n;
135
164
  const maxAddress = 140737488355327n;
136
- while (address < maxAddress) try {
137
- const result = VirtualQueryEx(hProcess, address);
138
- if (!result.success) break;
139
- const mbi = result.info;
140
- if ((mbi.Protect & PAGE.GUARD) !== 0) {
141
- let moduleName = null;
142
- for (const mod of modules) {
143
- const modBase = BigInt(mod.base);
144
- if (mbi.BaseAddress >= modBase && mbi.BaseAddress < modBase + BigInt(mod.size)) {
145
- moduleName = mod.name;
146
- break;
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
- guardPages.push({
150
- address: `0x${mbi.BaseAddress.toString(16)}`,
151
- size: Number(mbi.RegionSize),
152
- moduleName,
153
- nearbySymbol: null
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 guardPages;
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._enumerateModules(hProcess);
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) try {
176
- const diskData = await promises.readFile(mod.path);
177
- const sections = await this.peAnalyzer.listSections(pid, mod.base);
178
- for (const sec of sections) {
179
- if (!sec.isExecutable) continue;
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
- } catch (e) {
198
- logger.debug(`Integrity check skipped for ${mod.name}: ${e}`);
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 results;
300
+ return {
301
+ sections: results,
302
+ stats
303
+ };
204
304
  }
205
- _enumerateModules(hProcess) {
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
- _rvaToFileOffset(peData, rva) {
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 { k as CODE_CAVE_MIN_SIZE } from "./constants-B0OANIBL.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-CePkipZY.mjs";
3
- import { l as FlushInstructionCache } from "./Win32Debug-BvKs-gxc.mjs";
4
- import { n as isExecutable } from "./NativeMemoryManager.utils-B-FjA2mJ.mjs";
5
- import { t as nativeMemoryManager } from "./NativeMemoryManager.impl-dZtA1ZGn.mjs";
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-Dl33Svkz.mjs";
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 [url, opts] = args;
891
- const entry = { url: String(url), method: opts?.method || 'GET', timestamp: Date.now() };
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
- window.__fetchRequests.push(entry);
895
- if (window.__fetchRequests.length > maxRecords) {
896
- window.__fetchRequests.splice(0, window.__fetchRequests.length - maxRecords);
897
- }
898
- // Auto-persist compact summary so data survives context compression
899
- try {
900
- const s = { url: entry.url, method: entry.method, status: entry.status, ts: entry.timestamp };
901
- const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
902
- prev.push(s);
903
- if (prev.length > 500) prev.splice(0, prev.length - 500);
904
- localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
905
- } catch(e) {}
906
- return res;
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 { I as DETAILED_DATA_DEFAULT_TTL_MS, L as DETAILED_DATA_MAX_TTL_MS, R as DETAILED_DATA_SMART_THRESHOLD_BYTES } from "./constants-B0OANIBL.mjs";
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-C0JGZoOm.mjs";
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.endsWith(".js"),
219
- isTs: file.endsWith(".ts"),
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.endsWith(".js"),
253
- isTs: file.endsWith(".ts"),
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.endsWith(".js"),
268
- isTs: file.endsWith(".ts"),
274
+ isJs: isJavaScriptLikeFile(file),
275
+ isTs: isTypeScriptLikeFile(file),
269
276
  rootIndex,
270
277
  priority: 1
271
278
  });
@@ -1,6 +1,6 @@
1
- import { _ as BREAKPOINT_TRACE_MAX_HITS, g as BREAKPOINT_HIT_TIMEOUT_MS } from "./constants-B0OANIBL.mjs";
2
- import { t as CloseHandle } from "./Win32API-CePkipZY.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-BvKs-gxc.mjs";
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
  /**