@jshookmcp/jshook 0.2.3 → 0.2.5

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 (385) hide show
  1. package/README.md +14 -5
  2. package/README.zh.md +18 -3
  3. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  4. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  5. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  6. package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +236 -0
  8. package/dist/src/config/search-defaults.js +161 -0
  9. package/dist/src/constants.d.ts +3 -0
  10. package/dist/src/constants.js +4 -1
  11. package/dist/src/index.d.ts +1 -1
  12. package/dist/src/index.js +13 -17
  13. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  14. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  15. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  16. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  17. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  18. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  19. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  20. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  21. package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
  22. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  23. package/dist/src/modules/browser/TabRegistry.js +2 -2
  24. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  25. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  26. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  27. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  28. package/dist/src/modules/collector/CodeCollector.js +4 -5
  29. package/dist/src/modules/collector/DOMInspector.js +48 -58
  30. package/dist/src/modules/collector/PageController.d.ts +17 -4
  31. package/dist/src/modules/collector/PageController.js +2 -5
  32. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  33. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  34. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  35. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  36. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  37. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  38. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  39. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  40. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  41. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  42. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  43. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  44. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  45. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  46. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  47. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  48. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  49. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  50. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  51. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  52. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  53. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  54. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  55. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  56. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  57. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  58. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  59. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  60. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  61. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  62. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  63. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  64. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  65. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  66. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  67. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  68. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  69. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  70. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  71. package/dist/src/modules/process/MacProcessManager.js +25 -25
  72. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  73. package/dist/src/modules/process/MemoryManager.js +2 -2
  74. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  75. package/dist/src/modules/process/memory/availability.js +49 -49
  76. package/dist/src/modules/process/memory/injector.js +185 -185
  77. package/dist/src/modules/process/memory/reader.js +85 -53
  78. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  79. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  80. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  81. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  82. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  83. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  84. package/dist/src/modules/process/memory/scanner.js +88 -4
  85. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  86. package/dist/src/modules/process/memory/writer.js +98 -58
  87. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  88. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  89. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  90. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  91. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  92. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  93. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  94. package/dist/src/modules/trace/TraceDB.js +75 -69
  95. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  96. package/dist/src/native/AntiCheatDetector.js +67 -16
  97. package/dist/src/native/CodeInjector.js +3 -3
  98. package/dist/src/native/HardwareBreakpoint.js +24 -15
  99. package/dist/src/native/HeapAnalyzer.js +2 -2
  100. package/dist/src/native/MemoryController.js +1 -1
  101. package/dist/src/native/MemoryScanSession.js +2 -2
  102. package/dist/src/native/MemoryScanner.js +4 -8
  103. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  104. package/dist/src/native/PEAnalyzer.js +14 -15
  105. package/dist/src/native/PointerChainEngine.js +2 -4
  106. package/dist/src/native/ScriptLoader.js +4 -9
  107. package/dist/src/native/Speedhack.js +1 -1
  108. package/dist/src/native/StructureAnalyzer.js +52 -33
  109. package/dist/src/native/Win32API.d.ts +1 -0
  110. package/dist/src/native/Win32API.js +13 -0
  111. package/dist/src/native/Win32Debug.js +19 -19
  112. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  113. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  114. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  115. package/dist/src/server/MCPServer.context.d.ts +2 -1
  116. package/dist/src/server/MCPServer.d.ts +2 -1
  117. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  118. package/dist/src/server/MCPServer.domain.js +81 -16
  119. package/dist/src/server/MCPServer.js +41 -14
  120. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  121. package/dist/src/server/MCPServer.resources.js +91 -0
  122. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  123. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  124. package/dist/src/server/MCPServer.transport.js +12 -0
  125. package/dist/src/server/ToolCallContextGuard.js +8 -0
  126. package/dist/src/server/ToolRouter.d.ts +25 -9
  127. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  128. package/dist/src/server/ToolRouter.intent.js +77 -0
  129. package/dist/src/server/ToolRouter.js +103 -284
  130. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  131. package/dist/src/server/ToolRouter.policy.js +163 -0
  132. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  133. package/dist/src/server/ToolRouter.probe.js +103 -0
  134. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  135. package/dist/src/server/ToolRouter.renderer.js +52 -0
  136. package/dist/src/server/activation/ActivationController.js +15 -12
  137. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  138. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  139. package/dist/src/server/domains/analysis/definitions.js +155 -655
  140. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  141. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  142. package/dist/src/server/domains/analysis/manifest.js +6 -4
  143. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  144. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  145. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  146. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  147. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  148. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  149. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  150. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  151. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  152. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  153. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  154. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  155. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  156. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  157. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  158. package/dist/src/server/domains/browser/manifest.js +37 -13
  159. package/dist/src/server/domains/coordination/definitions.js +50 -216
  160. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  161. package/dist/src/server/domains/coordination/index.js +1 -0
  162. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  163. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  164. package/dist/src/server/domains/debugger/manifest.js +9 -2
  165. package/dist/src/server/domains/encoding/definitions.js +43 -153
  166. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  167. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  168. package/dist/src/server/domains/evidence/definitions.js +42 -0
  169. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  170. package/dist/src/server/domains/evidence/handlers.js +60 -0
  171. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  172. package/dist/src/server/domains/evidence/index.js +2 -0
  173. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  174. package/dist/src/server/domains/evidence/manifest.js +78 -0
  175. package/dist/src/server/domains/graphql/definitions.js +53 -141
  176. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  177. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  178. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  179. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  180. package/dist/src/server/domains/hooks/definitions.js +69 -335
  181. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  182. package/dist/src/server/domains/hooks/manifest.js +1 -2
  183. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  184. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  185. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  186. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  187. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  188. package/dist/src/server/domains/instrumentation/index.js +2 -0
  189. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  190. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  191. package/dist/src/server/domains/macro/definitions.js +16 -43
  192. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  193. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  194. package/dist/src/server/domains/memory/definitions.js +387 -559
  195. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  196. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  197. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  198. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  199. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  200. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  201. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  202. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  203. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  204. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  205. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  206. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  207. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  208. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  209. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  210. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  211. package/dist/src/server/domains/memory/manifest.js +236 -64
  212. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  213. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  214. package/dist/src/server/domains/native-bridge/index.js +2 -1
  215. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  216. package/dist/src/server/domains/network/definitions.js +175 -578
  217. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  218. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  219. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  220. package/dist/src/server/domains/network/handlers.base.js +3 -878
  221. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  222. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  223. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  224. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  225. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  226. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  227. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  228. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  229. package/dist/src/server/domains/network/manifest.js +15 -0
  230. package/dist/src/server/domains/network/replay.js +1 -4
  231. package/dist/src/server/domains/platform/definitions.js +121 -112
  232. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  233. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  234. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  235. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  236. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  237. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  238. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  239. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  240. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  241. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  242. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  243. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  244. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  245. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  246. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  247. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  248. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  249. package/dist/src/server/domains/platform/handlers.js +29 -0
  250. package/dist/src/server/domains/platform/manifest.js +38 -0
  251. package/dist/src/server/domains/process/definitions.js +163 -647
  252. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  253. package/dist/src/server/domains/process/handlers.base.js +7 -462
  254. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  255. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  256. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  257. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  258. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  259. package/dist/src/server/domains/process/manifest.js +6 -1
  260. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  261. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  262. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  263. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  264. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  265. package/dist/src/server/domains/shared/modules.js +0 -1
  266. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  267. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  268. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  269. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  270. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  271. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  272. package/dist/src/server/domains/streaming/definitions.js +36 -148
  273. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  274. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  275. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  276. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  277. package/dist/src/server/domains/trace/handlers.js +10 -12
  278. package/dist/src/server/domains/trace/index.d.ts +2 -1
  279. package/dist/src/server/domains/trace/index.js +2 -1
  280. package/dist/src/server/domains/trace/manifest.js +15 -3
  281. package/dist/src/server/domains/transform/definitions.js +50 -210
  282. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  283. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  284. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/transform/manifest.js +1 -1
  286. package/dist/src/server/domains/wasm/definitions.js +55 -232
  287. package/dist/src/server/domains/wasm/handlers.js +1 -1
  288. package/dist/src/server/domains/workflow/definitions.js +144 -414
  289. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  290. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  291. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  292. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  293. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  294. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  295. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  296. package/dist/src/server/evidence/index.d.ts +2 -0
  297. package/dist/src/server/evidence/index.js +1 -0
  298. package/dist/src/server/evidence/types.d.ts +22 -0
  299. package/dist/src/server/evidence/types.js +1 -0
  300. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  301. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  302. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  303. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  304. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  305. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  306. package/dist/src/server/extensions/plugin-config.js +1 -1
  307. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  308. package/dist/src/server/extensions/plugin-env.js +10 -4
  309. package/dist/src/server/extensions/types.d.ts +17 -0
  310. package/dist/src/server/extensions/types.js +1 -1
  311. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  312. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  313. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  314. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  315. package/dist/src/server/instrumentation/index.d.ts +2 -0
  316. package/dist/src/server/instrumentation/index.js +2 -0
  317. package/dist/src/server/instrumentation/types.d.ts +62 -0
  318. package/dist/src/server/instrumentation/types.js +7 -0
  319. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  320. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  321. package/dist/src/server/macros/MacroRunner.js +6 -2
  322. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  323. package/dist/src/server/macros/builtins/index.js +51 -7
  324. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  325. package/dist/src/server/registry/contracts.d.ts +1 -1
  326. package/dist/src/server/registry/discovery.js +5 -4
  327. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  328. package/dist/src/server/registry/index.js +4 -4
  329. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  330. package/dist/src/server/registry/tool-builder.js +105 -0
  331. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  332. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  333. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  334. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  335. package/dist/src/server/search/FeedbackTracker.js +26 -0
  336. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  337. package/dist/src/server/search/QueryNormalizer.js +94 -0
  338. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  339. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  340. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  341. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  342. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  343. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  344. package/dist/src/types/config.d.ts +0 -14
  345. package/dist/src/types/deobfuscator.d.ts +0 -1
  346. package/dist/src/types/index.d.ts +1 -1
  347. package/dist/src/utils/DetailedDataManager.js +2 -0
  348. package/dist/src/utils/RingBuffer.js +5 -5
  349. package/dist/src/utils/TokenBudgetManager.js +1 -1
  350. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  351. package/dist/src/utils/artifactRetention.js +2 -2
  352. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  353. package/dist/src/utils/betterSqlite3.js +88 -0
  354. package/dist/src/utils/browserExecutable.js +2 -2
  355. package/dist/src/utils/cliFastPath.js +5 -8
  356. package/dist/src/utils/config.js +4 -26
  357. package/dist/src/utils/environmentDoctor.js +138 -11
  358. package/dist/src/utils/outputPaths.js +16 -9
  359. package/dist/src/utils/parallel.js +1 -3
  360. package/package.json +74 -72
  361. package/workflows/.gitkeep +0 -0
  362. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  363. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  364. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  365. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  366. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  367. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  368. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  369. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  370. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  371. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  372. package/dist/src/services/LLMService.d.ts +0 -37
  373. package/dist/src/services/LLMService.js +0 -233
  374. package/dist/src/services/prompts/analysis.d.ts +0 -9
  375. package/dist/src/services/prompts/analysis.js +0 -158
  376. package/dist/src/services/prompts/crypto.d.ts +0 -2
  377. package/dist/src/services/prompts/crypto.js +0 -108
  378. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  379. package/dist/src/services/prompts/deobfuscation.js +0 -300
  380. package/dist/src/services/prompts/environment.d.ts +0 -16
  381. package/dist/src/services/prompts/environment.js +0 -372
  382. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  383. package/dist/src/services/prompts/intelligence.js +0 -250
  384. package/dist/src/services/prompts/taint.d.ts +0 -2
  385. package/dist/src/services/prompts/taint.js +0 -54
@@ -1,6 +1,6 @@
1
1
  import { logger } from '../utils/logger.js';
2
2
  import koffi from 'koffi';
3
- import { openProcessForMemory, CloseHandle, ReadProcessMemory, } from './Win32API.js';
3
+ import { openProcessForMemory, CloseHandle, ReadProcessMemory } from './Win32API.js';
4
4
  import { HEAP_ENUMERATE_MAX_BLOCKS, HEAP_SPRAY_THRESHOLD, HEAP_SPRAY_SIZE_TOLERANCE, HEAP_SUSPICIOUS_BLOCK_SIZE, } from '../constants.js';
5
5
  import { LF32, HF32 } from './HeapAnalyzer.types.js';
6
6
  import { TH32CS } from './Win32Debug.js';
@@ -208,7 +208,7 @@ export class HeapAnalyzer {
208
208
  }
209
209
  }
210
210
  async _detectPossibleUAF(pid, blocks, heapId, anomalies) {
211
- const freeBlocks = blocks.filter(b => b.isFree && b.size >= 8);
211
+ const freeBlocks = blocks.filter((b) => b.isFree && b.size >= 8);
212
212
  const sampled = freeBlocks.slice(0, 100);
213
213
  let hProcess = null;
214
214
  try {
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { FREEZE_DEFAULT_INTERVAL_MS, WRITE_HISTORY_MAX, } from '../constants.js';
2
+ import { FREEZE_DEFAULT_INTERVAL_MS, WRITE_HISTORY_MAX } from '../constants.js';
3
3
  import { openProcessForMemory, CloseHandle, ReadProcessMemory, WriteProcessMemory, VirtualProtectEx, PAGE, } from './Win32API.js';
4
4
  import { parsePattern } from './NativeMemoryManager.utils.js';
5
5
  export class MemoryController {
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { SCAN_SESSION_MAX_COUNT, SCAN_SESSION_TTL_MS, } from '../constants.js';
2
+ import { SCAN_SESSION_MAX_COUNT, SCAN_SESSION_TTL_MS } from '../constants.js';
3
3
  import { getDefaultAlignment } from './ScanComparators.js';
4
4
  import { formatAddress, parseAddress } from './formatAddress.js';
5
5
  export class MemoryScanSessionManager {
@@ -97,7 +97,7 @@ export class MemoryScanSessionManager {
97
97
  const session = this.getSession(sessionId);
98
98
  const serializable = {
99
99
  ...session,
100
- addresses: session.addresses.map(addr => formatAddress(addr)),
100
+ addresses: session.addresses.map((addr) => formatAddress(addr)),
101
101
  previousValues: Array.from(session.previousValues.entries()).map(([addr, buf]) => [formatAddress(addr), buf.toString('hex')]),
102
102
  };
103
103
  return JSON.stringify(serializable);
@@ -229,9 +229,7 @@ export class MemoryScanner {
229
229
  }
230
230
  for (let i = 0; i <= chunk.length - 8; i += 8) {
231
231
  const ptrValue = chunk.readBigUInt64LE(i);
232
- const diff = ptrValue > targetAddr
233
- ? Number(ptrValue - targetAddr)
234
- : Number(targetAddr - ptrValue);
232
+ const diff = ptrValue > targetAddr ? Number(ptrValue - targetAddr) : Number(targetAddr - ptrValue);
235
233
  if (diff <= 4096) {
236
234
  const addr = chunkAddr + BigInt(i);
237
235
  const offsetFromTarget = ptrValue >= targetAddr
@@ -271,8 +269,8 @@ export class MemoryScanner {
271
269
  if (maxOffset > SCAN_GROUP_MAX_PATTERN_SIZE) {
272
270
  throw new Error(`Group pattern too large: ${maxOffset} bytes (max ${SCAN_GROUP_MAX_PATTERN_SIZE})`);
273
271
  }
274
- const compositePattern = new Array(maxOffset).fill(0);
275
- const compositeMask = new Array(maxOffset).fill(0);
272
+ const compositePattern = Array.from({ length: maxOffset }, () => 0);
273
+ const compositeMask = Array.from({ length: maxOffset }, () => 0);
276
274
  for (const entry of pattern) {
277
275
  const effectiveType = entry.type === 'pointer' ? 'uint64' : entry.type;
278
276
  const { patternBytes, mask } = parsePattern(entry.value, effectiveType);
@@ -372,9 +370,7 @@ export class MemoryScanner {
372
370
  if (!regionInfo)
373
371
  break;
374
372
  const regionSize = regionInfo.size;
375
- if (regionInfo.isReadable &&
376
- regionSize > 0 &&
377
- regionSize <= Number.MAX_SAFE_INTEGER) {
373
+ if (regionInfo.isReadable && regionSize > 0 && regionSize <= Number.MAX_SAFE_INTEGER) {
378
374
  let include = true;
379
375
  if (filter?.writable && !regionInfo.isWritable)
380
376
  include = false;
@@ -4,7 +4,7 @@ import { promisify } from 'node:util';
4
4
  import { cpuLimit } from '../utils/concurrency.js';
5
5
  import { createPlatformProvider } from './platform/factory.js';
6
6
  import { MemoryProtection } from './platform/types.js';
7
- import { findPatternInBuffer, parsePattern, } from './NativeMemoryManager.utils.js';
7
+ import { findPatternInBuffer, parsePattern } from './NativeMemoryManager.utils.js';
8
8
  import { checkNativeMemoryAvailability } from './NativeMemoryManager.availability.js';
9
9
  const execAsync = promisify(exec);
10
10
  const SCAN_CHUNK_SIZE = 16 * 1024 * 1024;
@@ -374,7 +374,7 @@ export class NativeMemoryManager {
374
374
  return { success: false, error: 'Debug port check is only supported on Windows' };
375
375
  }
376
376
  try {
377
- const { openProcessForMemory, CloseHandle, NtQueryInformationProcess, } = await import('./Win32API.js');
377
+ const { openProcessForMemory, CloseHandle, NtQueryInformationProcess } = await import('./Win32API.js');
378
378
  const handle = openProcessForMemory(pid, false);
379
379
  try {
380
380
  const { status, debugPort } = NtQueryInformationProcess(handle, 7);
@@ -1,6 +1,6 @@
1
- import { readFileSync } from 'node:fs';
1
+ import { promises as fs } from 'node:fs';
2
2
  import { logger } from '../utils/logger.js';
3
- import { openProcessForMemory, CloseHandle, ReadProcessMemory, EnumProcessModules, GetModuleBaseName, GetModuleInformation, } from './Win32API.js';
3
+ import { openProcessForMemory, CloseHandle, ReadProcessMemory, EnumProcessModules, GetModuleBaseName, GetModuleFileNameEx, GetModuleInformation, } from './Win32API.js';
4
4
  import { IMAGE_SCN, IMAGE_DIRECTORY_ENTRY } from './PEAnalyzer.types.js';
5
5
  const MZ_MAGIC = 0x5a4d;
6
6
  const PE_SIGNATURE = 0x00004550;
@@ -73,7 +73,9 @@ export class PEAnalyzer {
73
73
  const off = headers.firstSectionOffset + i * SECTION_HEADER_SIZE;
74
74
  const secData = ReadProcessMemory(hProcess, base + BigInt(off), SECTION_HEADER_SIZE);
75
75
  const nameEnd = secData.indexOf(0);
76
- const name = secData.subarray(0, nameEnd > 0 && nameEnd <= 8 ? nameEnd : 8).toString('ascii');
76
+ const name = secData
77
+ .subarray(0, nameEnd > 0 && nameEnd <= 8 ? nameEnd : 8)
78
+ .toString('ascii');
77
79
  const virtualSize = secData.readUInt32LE(8);
78
80
  const virtualAddress = secData.readUInt32LE(12);
79
81
  const rawSize = secData.readUInt32LE(16);
@@ -114,7 +116,7 @@ export class PEAnalyzer {
114
116
  const nullIdx = nameData.indexOf(0);
115
117
  const dllName = nameData.subarray(0, nullIdx > 0 ? nullIdx : 256).toString('ascii');
116
118
  const originalFirstThunkRva = desc.readUInt32LE(0) || desc.readUInt32LE(16);
117
- const functions = await this._readThunkArray(hProcess, base, originalFirstThunkRva, headers.isPE32Plus);
119
+ const functions = this._readThunkArray(hProcess, base, originalFirstThunkRva, headers.isPE32Plus);
118
120
  imports.push({ dllName, functions });
119
121
  descOffset += IMPORT_DESCRIPTOR_SIZE;
120
122
  }
@@ -147,8 +149,7 @@ export class PEAnalyzer {
147
149
  const nameBuf = ReadProcessMemory(hProcess, base + BigInt(nameRva), 256);
148
150
  const nullIdx = nameBuf.indexOf(0);
149
151
  const name = nameBuf.subarray(0, nullIdx > 0 ? nullIdx : 256).toString('ascii');
150
- const funcRva = ReadProcessMemory(hProcess, base + BigInt(addressOfFunctionsRva + ordIndex * 4), 4)
151
- .readUInt32LE(0);
152
+ const funcRva = ReadProcessMemory(hProcess, base + BigInt(addressOfFunctionsRva + ordIndex * 4), 4).readUInt32LE(0);
152
153
  let forwardedTo = null;
153
154
  if (funcRva >= exportDir.rva && funcRva < exportDir.rva + exportDir.size) {
154
155
  const fwdBuf = ReadProcessMemory(hProcess, base + BigInt(funcRva), 256);
@@ -174,11 +175,11 @@ export class PEAnalyzer {
174
175
  try {
175
176
  const modules = this._enumerateModulesInternal(hProcess);
176
177
  const targets = moduleName
177
- ? modules.filter(m => m.name.toLowerCase().includes(moduleName.toLowerCase()))
178
+ ? modules.filter((m) => m.name.toLowerCase().includes(moduleName.toLowerCase()))
178
179
  : modules;
179
180
  for (const mod of targets) {
180
181
  try {
181
- const diskData = readFileSync(mod.path);
182
+ const diskData = await fs.readFile(mod.path);
182
183
  const exports = await this.parseExports(pid, mod.base);
183
184
  for (const exp of exports) {
184
185
  const funcRva = parseInt(exp.rva, 16);
@@ -271,13 +272,15 @@ export class PEAnalyzer {
271
272
  const firstSectionOffset = e_lfanew + 4 + 20 + sizeOfOptionalHeader;
272
273
  return { numSections, isPE32Plus, firstSectionOffset, dataDirectories };
273
274
  }
274
- async _readThunkArray(hProcess, base, thunkRva, isPE32Plus) {
275
+ _readThunkArray(hProcess, base, thunkRva, isPE32Plus) {
275
276
  const thunkSize = isPE32Plus ? 8 : 4;
276
277
  const functions = [];
277
278
  const IMAGE_ORDINAL_FLAG = isPE32Plus ? 0x8000000000000000n : 0x80000000n;
278
279
  for (let i = 0; i < 2000; i++) {
279
280
  const thunkData = ReadProcessMemory(hProcess, base + BigInt(thunkRva + i * thunkSize), thunkSize);
280
- const thunkValue = isPE32Plus ? thunkData.readBigUInt64LE(0) : BigInt(thunkData.readUInt32LE(0));
281
+ const thunkValue = isPE32Plus
282
+ ? thunkData.readBigUInt64LE(0)
283
+ : BigInt(thunkData.readUInt32LE(0));
281
284
  if (thunkValue === 0n)
282
285
  break;
283
286
  if ((thunkValue & IMAGE_ORDINAL_FLAG) !== 0n) {
@@ -312,11 +315,7 @@ export class PEAnalyzer {
312
315
  const hMod = modHandles[i];
313
316
  const name = GetModuleBaseName(hProcess, hMod);
314
317
  const info = GetModuleInformation(hProcess, hMod);
315
- let modulePath = name;
316
- try {
317
- modulePath = `C:\\Windows\\System32\\${name}`;
318
- }
319
- catch { }
318
+ const modulePath = GetModuleFileNameEx(hProcess, hMod) ?? name;
320
319
  if (info.success) {
321
320
  modules.push({
322
321
  name,
@@ -156,7 +156,7 @@ export class PointerChainEngine {
156
156
  scanLevel(handle, targetAddresses, maxOffset, alignment, _filter) {
157
157
  const matches = [];
158
158
  const chunkSize = POINTER_CHAIN_SCAN_CHUNK_SIZE;
159
- const targets = Array.from(targetAddresses).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
159
+ const targets = Array.from(targetAddresses).toSorted((a, b) => (a < b ? -1 : a > b ? 1 : 0));
160
160
  if (targets.length === 0)
161
161
  return matches;
162
162
  const maxOffsetBig = BigInt(maxOffset);
@@ -198,9 +198,7 @@ export class PointerChainEngine {
198
198
  }
199
199
  for (let t = lo; t < targets.length && targets[t] <= searchMax; t++) {
200
200
  const target = targets[t];
201
- const diff = ptrValue > target
202
- ? Number(ptrValue - target)
203
- : Number(target - ptrValue);
201
+ const diff = ptrValue > target ? Number(ptrValue - target) : Number(target - ptrValue);
204
202
  if (diff <= maxOffset) {
205
203
  const pointerAddr = chunkAddr + BigInt(i);
206
204
  const matchOffset = Number(target - ptrValue);
@@ -1,18 +1,13 @@
1
1
  import { promises as fs, existsSync } from 'fs';
2
- import { join, dirname, resolve } from 'path';
2
+ import { join, resolve } from 'path';
3
3
  import { platform } from 'os';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  let _scriptsBaseDir = null;
6
6
  function tryGetEsmBaseDir() {
7
7
  try {
8
- const readImportMetaPath = new Function('try { return import.meta.dirname ?? import.meta.url ?? null; } catch { return null; }');
9
- const metaPath = readImportMetaPath();
10
- if (!metaPath)
11
- return null;
12
- if (metaPath.startsWith('file://')) {
13
- return dirname(fileURLToPath(metaPath));
14
- }
15
- return metaPath;
8
+ const readImportMetaUrl = new Function('try { return import.meta.url ?? null; } catch { return null; }');
9
+ const metaUrl = readImportMetaUrl();
10
+ return metaUrl ? fileURLToPath(new URL('.', metaUrl)) : null;
16
11
  }
17
12
  catch {
18
13
  return null;
@@ -149,7 +149,7 @@ export class Speedhack {
149
149
  }
150
150
  buildAbsoluteJump(target) {
151
151
  const buf = Buffer.alloc(14);
152
- buf[0] = 0xFF;
152
+ buf[0] = 0xff;
153
153
  buf[1] = 0x25;
154
154
  buf.writeUInt32LE(0, 2);
155
155
  buf.writeBigUInt64LE(target, 6);
@@ -1,4 +1,4 @@
1
- import { STRUCT_ANALYZE_DEFAULT_SIZE, STRUCT_VTABLE_MAX_FUNCTIONS, STRUCT_RTTI_MAX_STRING_LEN, STRUCT_CSTRING_MAX_LEN, } from '../constants.js';
1
+ import { STRUCT_ANALYZE_DEFAULT_SIZE, STRUCT_VTABLE_MAX_FUNCTIONS, STRUCT_RTTI_MAX_STRING_LEN, } from '../constants.js';
2
2
  import { createPlatformProvider } from './platform/factory.js';
3
3
  import { nativeMemoryManager } from './NativeMemoryManager.impl.js';
4
4
  export class StructureAnalyzer {
@@ -126,7 +126,7 @@ export class StructureAnalyzer {
126
126
  const signature = colBuf.readUInt32LE(0);
127
127
  if (signature !== 1)
128
128
  return null;
129
- const typeDescRVA = colBuf.readUInt32LE(0x0C);
129
+ const typeDescRVA = colBuf.readUInt32LE(0x0c);
130
130
  const classDescRVA = colBuf.readUInt32LE(0x10);
131
131
  const objectLocRVA = colBuf.readUInt32LE(0x14);
132
132
  const moduleBase = colAddr - BigInt(objectLocRVA);
@@ -140,7 +140,7 @@ export class StructureAnalyzer {
140
140
  const classDescAddr = moduleBase + BigInt(classDescRVA);
141
141
  const classDescBuf = this.provider.readMemory(handle, classDescAddr, 0x10).data;
142
142
  const numBaseClasses = classDescBuf.readUInt32LE(0x08);
143
- const baseClassArrayRVA = classDescBuf.readUInt32LE(0x0C);
143
+ const baseClassArrayRVA = classDescBuf.readUInt32LE(0x0c);
144
144
  if (numBaseClasses > 0 && numBaseClasses < 20) {
145
145
  const baseArrayAddr = moduleBase + BigInt(baseClassArrayRVA);
146
146
  const baseArrayBuf = this.provider.readMemory(handle, baseArrayAddr, numBaseClasses * 4).data;
@@ -280,15 +280,13 @@ export class StructureAnalyzer {
280
280
  for (let i = offset; i < buf.length && buf[i] === 0; i++)
281
281
  zeroLen++;
282
282
  const padSize = Math.min(zeroLen, remaining);
283
- const alignedPad = padSize >= 8 ? (padSize & ~7) : (padSize >= 4 ? (padSize & ~3) : padSize);
284
- if (alignedPad > 0) {
285
- return {
286
- type: 'padding',
287
- size: alignedPad,
288
- value: `0x${'00'.repeat(Math.min(alignedPad, 8))}`,
289
- confidence: 0.6,
290
- };
291
- }
283
+ const alignedPad = padSize & ~7;
284
+ return {
285
+ type: 'padding',
286
+ size: alignedPad,
287
+ value: `0x${'00'.repeat(Math.min(alignedPad, 8))}`,
288
+ confidence: 0.6,
289
+ };
292
290
  }
293
291
  if (val32u === 0) {
294
292
  return {
@@ -308,7 +306,10 @@ export class StructureAnalyzer {
308
306
  notes: 'value is 1 — could be boolean',
309
307
  };
310
308
  }
311
- if (isFinite(valFloat) && !isNaN(valFloat) && Math.abs(valFloat) > 1e-10 && Math.abs(valFloat) < 1e8) {
309
+ if (isFinite(valFloat) &&
310
+ !isNaN(valFloat) &&
311
+ Math.abs(valFloat) > 1e-10 &&
312
+ Math.abs(valFloat) < 1e8) {
312
313
  const intLooksReasonable = val32u > 0 && val32u < 100_000;
313
314
  const floatHasDecimals = Math.abs(valFloat - Math.round(valFloat)) > 0.001;
314
315
  if (floatHasDecimals || (!intLooksReasonable && Math.abs(valFloat) < 10000)) {
@@ -317,7 +318,9 @@ export class StructureAnalyzer {
317
318
  size: 4,
318
319
  value: valFloat.toFixed(6),
319
320
  confidence: floatHasDecimals ? 0.8 : 0.5,
320
- notes: floatHasDecimals ? 'IEEE 754 float with fractional part' : 'could be float or int',
321
+ notes: floatHasDecimals
322
+ ? 'IEEE 754 float with fractional part'
323
+ : 'could be float or int',
321
324
  };
322
325
  }
323
326
  }
@@ -376,9 +379,8 @@ export class StructureAnalyzer {
376
379
  }
377
380
  }
378
381
  readCString(handle, address, maxLen) {
379
- const len = maxLen ?? STRUCT_CSTRING_MAX_LEN;
380
382
  try {
381
- const buf = this.provider.readMemory(handle, address, len).data;
383
+ const buf = this.provider.readMemory(handle, address, maxLen).data;
382
384
  const nullIdx = buf.indexOf(0);
383
385
  if (nullIdx < 0)
384
386
  return null;
@@ -403,23 +405,40 @@ export class StructureAnalyzer {
403
405
  }
404
406
  fieldTypeToCType(type, size) {
405
407
  switch (type) {
406
- case 'int8': return 'int8_t';
407
- case 'uint8': return 'uint8_t';
408
- case 'int16': return 'int16_t';
409
- case 'uint16': return 'uint16_t';
410
- case 'int32': return 'int32_t';
411
- case 'uint32': return 'uint32_t';
412
- case 'int64': return 'int64_t';
413
- case 'uint64': return 'uint64_t';
414
- case 'float': return 'float';
415
- case 'double': return 'double';
416
- case 'pointer': return 'void*';
417
- case 'vtable_ptr': return 'void**';
418
- case 'string_ptr': return 'char*';
419
- case 'bool': return 'bool';
420
- case 'padding': return `uint8_t[${size}]`;
421
- case 'unknown': return `uint8_t[${size}]`;
422
- default: return `uint8_t[${size}]`;
408
+ case 'int8':
409
+ return 'int8_t';
410
+ case 'uint8':
411
+ return 'uint8_t';
412
+ case 'int16':
413
+ return 'int16_t';
414
+ case 'uint16':
415
+ return 'uint16_t';
416
+ case 'int32':
417
+ return 'int32_t';
418
+ case 'uint32':
419
+ return 'uint32_t';
420
+ case 'int64':
421
+ return 'int64_t';
422
+ case 'uint64':
423
+ return 'uint64_t';
424
+ case 'float':
425
+ return 'float';
426
+ case 'double':
427
+ return 'double';
428
+ case 'pointer':
429
+ return 'void*';
430
+ case 'vtable_ptr':
431
+ return 'void**';
432
+ case 'string_ptr':
433
+ return 'char*';
434
+ case 'bool':
435
+ return 'bool';
436
+ case 'padding':
437
+ return `uint8_t[${size}]`;
438
+ case 'unknown':
439
+ return `uint8_t[${size}]`;
440
+ default:
441
+ return `uint8_t[${size}]`;
423
442
  }
424
443
  }
425
444
  async getModuleEntries(pid) {
@@ -93,6 +93,7 @@ export declare function EnumProcessModules(hProcess: bigint, maxModules?: number
93
93
  count: number;
94
94
  };
95
95
  export declare function GetModuleBaseName(hProcess: bigint, hModule: bigint, maxSize?: number): string;
96
+ export declare function GetModuleFileNameEx(hProcess: bigint, hModule: bigint, maxSize?: number): string | null;
96
97
  export declare function GetModuleInformation(hProcess: bigint, hModule: bigint): {
97
98
  success: boolean;
98
99
  info: ModuleInfoType;
@@ -213,6 +213,19 @@ export function GetModuleBaseName(hProcess, hModule, maxSize = 260) {
213
213
  }
214
214
  return buffer.toString('utf8', 0, len);
215
215
  }
216
+ export function GetModuleFileNameEx(hProcess, hModule, maxSize = 32_768) {
217
+ const fn = getPsapi().func('uint32 GetModuleFileNameExA(void *, void *, _Out_ char[], uint32)');
218
+ const buffer = Buffer.alloc(maxSize);
219
+ const result = fn(hProcess, hModule, buffer, maxSize);
220
+ if (typeof result !== 'number' || result <= 0) {
221
+ return null;
222
+ }
223
+ let len = 0;
224
+ while (len < maxSize && buffer[len] !== 0) {
225
+ len++;
226
+ }
227
+ return len > 0 ? buffer.toString('utf8', 0, len) : null;
228
+ }
216
229
  export function GetModuleInformation(hProcess, hModule) {
217
230
  const fn = getPsapi().func('int GetModuleInformation(void *, void *, _Out_ uint8_t[24], uint32)');
218
231
  const buffer = Buffer.alloc(24);
@@ -1,6 +1,6 @@
1
1
  import koffi from 'koffi';
2
2
  import { logger } from '../utils/logger.js';
3
- import { GetLastError } from './Win32API.js';
3
+ import { GetLastError, CloseHandle } from './Win32API.js';
4
4
  export const THREAD_ACCESS = {
5
5
  TERMINATE: 0x0001,
6
6
  SUSPEND_RESUME: 0x0002,
@@ -70,18 +70,18 @@ export function parseContext(buf) {
70
70
  rdx: buf.readBigUInt64LE(0x88),
71
71
  rbx: buf.readBigUInt64LE(0x90),
72
72
  rsp: buf.readBigUInt64LE(0x98),
73
- rbp: buf.readBigUInt64LE(0xA0),
74
- rsi: buf.readBigUInt64LE(0xA8),
75
- rdi: buf.readBigUInt64LE(0xB0),
76
- r8: buf.readBigUInt64LE(0xB8),
77
- r9: buf.readBigUInt64LE(0xC0),
78
- r10: buf.readBigUInt64LE(0xC8),
79
- r11: buf.readBigUInt64LE(0xD0),
80
- r12: buf.readBigUInt64LE(0xD8),
81
- r13: buf.readBigUInt64LE(0xE0),
82
- r14: buf.readBigUInt64LE(0xE8),
83
- r15: buf.readBigUInt64LE(0xF0),
84
- rip: buf.readBigUInt64LE(0xF8),
73
+ rbp: buf.readBigUInt64LE(0xa0),
74
+ rsi: buf.readBigUInt64LE(0xa8),
75
+ rdi: buf.readBigUInt64LE(0xb0),
76
+ r8: buf.readBigUInt64LE(0xb8),
77
+ r9: buf.readBigUInt64LE(0xc0),
78
+ r10: buf.readBigUInt64LE(0xc8),
79
+ r11: buf.readBigUInt64LE(0xd0),
80
+ r12: buf.readBigUInt64LE(0xd8),
81
+ r13: buf.readBigUInt64LE(0xe0),
82
+ r14: buf.readBigUInt64LE(0xe8),
83
+ r15: buf.readBigUInt64LE(0xf0),
84
+ rip: buf.readBigUInt64LE(0xf8),
85
85
  };
86
86
  }
87
87
  export function writeContext(buf, ctx) {
@@ -102,7 +102,7 @@ export function writeContext(buf, ctx) {
102
102
  if (ctx.dr7 !== undefined)
103
103
  buf.writeBigUInt64LE(ctx.dr7, 0x70);
104
104
  if (ctx.rip !== undefined)
105
- buf.writeBigUInt64LE(ctx.rip, 0xF8);
105
+ buf.writeBigUInt64LE(ctx.rip, 0xf8);
106
106
  }
107
107
  let kernel32Debug = null;
108
108
  function getKernel32() {
@@ -119,7 +119,7 @@ export function OpenThread(dwDesiredAccess, bInheritHandle, dwThreadId) {
119
119
  export function SuspendThread(hThread) {
120
120
  const fn = getKernel32().func('uint32 SuspendThread(void *)');
121
121
  const result = fn(hThread);
122
- if (result === 0xFFFFFFFF) {
122
+ if (result === 0xffffffff) {
123
123
  throw new Error(`SuspendThread failed. Error: 0x${GetLastError().toString(16)}`);
124
124
  }
125
125
  return result;
@@ -127,7 +127,7 @@ export function SuspendThread(hThread) {
127
127
  export function ResumeThread(hThread) {
128
128
  const fn = getKernel32().func('uint32 ResumeThread(void *)');
129
129
  const result = fn(hThread);
130
- if (result === 0xFFFFFFFF) {
130
+ if (result === 0xffffffff) {
131
131
  throw new Error(`ResumeThread failed. Error: 0x${GetLastError().toString(16)}`);
132
132
  }
133
133
  return result;
@@ -209,10 +209,9 @@ export function EnumerateProcessThreads(pid) {
209
209
  const entry = Buffer.alloc(28);
210
210
  entry.writeUInt32LE(28, 0);
211
211
  try {
212
- const { CloseHandle } = require('./Win32API.js');
213
212
  if (fnFirst(snapshot, entry) !== 0) {
214
213
  do {
215
- const ownerPid = entry.readUInt32LE(0x0C);
214
+ const ownerPid = entry.readUInt32LE(0x0c);
216
215
  if (ownerPid === pid) {
217
216
  threads.push(entry.readUInt32LE(0x08));
218
217
  }
@@ -221,7 +220,8 @@ export function EnumerateProcessThreads(pid) {
221
220
  }
222
221
  CloseHandle(snapshot);
223
222
  }
224
- catch {
223
+ catch (e) {
224
+ console.error('[EnumerateProcessThreads] cleanup error:', e);
225
225
  }
226
226
  return threads;
227
227
  }
@@ -115,6 +115,8 @@ export declare function machVmAllocate(task: number, size: bigint, flags: number
115
115
  address: bigint;
116
116
  };
117
117
  export declare function machVmDeallocate(task: number, address: bigint, size: bigint): number;
118
+ export declare function taskSuspend(task: number): number;
119
+ export declare function taskResume(task: number): number;
118
120
  export declare function dyldImageCount(): number;
119
121
  export declare function dyldGetImageName(index: number): string;
120
122
  export declare function dyldGetImageVmaddrSlide(index: number): bigint;
@@ -198,6 +198,14 @@ export function machVmDeallocate(task, address, size) {
198
198
  const fn = getLibSystem().func('int32 mach_vm_deallocate(uint32, uint64, uint64)');
199
199
  return fn(task, address, size);
200
200
  }
201
+ export function taskSuspend(task) {
202
+ const fn = getLibSystem().func('int32 task_suspend(uint32)');
203
+ return fn(task);
204
+ }
205
+ export function taskResume(task) {
206
+ const fn = getLibSystem().func('int32 task_resume(uint32)');
207
+ return fn(task);
208
+ }
201
209
  export function dyldImageCount() {
202
210
  const fn = getLibSystem().func('uint32 _dyld_image_count()');
203
211
  return fn();
@@ -68,9 +68,14 @@ export class DarwinMemoryProvider {
68
68
  }
69
69
  }
70
70
  catch (err) {
71
+ const message = err instanceof Error ? err.message : String(err);
72
+ const isCrash = /signal|bus error|segfault|abort/i.test(message);
71
73
  return {
72
74
  available: false,
73
- reason: `task_for_pid permission check failed: ${err instanceof Error ? err.message : String(err)}`,
75
+ reason: isCrash
76
+ ? `Mach API call crashed (${message}). This may be caused by SIP (System Integrity Protection) on ARM64 macOS. ` +
77
+ 'Disable SIP or use a code-signed binary with com.apple.security.cs.debugger entitlement.'
78
+ : `task_for_pid permission check failed: ${message}. Run with sudo or add debugger entitlement.`,
74
79
  platform: 'darwin',
75
80
  };
76
81
  }
@@ -61,7 +61,6 @@ export interface DomainInstances {
61
61
  debuggerManager?: import('../modules/debugger/DebuggerManager.js').DebuggerManager;
62
62
  runtimeInspector?: import('../modules/debugger/RuntimeInspector.js').RuntimeInspector;
63
63
  consoleMonitor?: import('../modules/monitor/ConsoleMonitor.js').ConsoleMonitor;
64
- llm?: import('../services/LLMService.js').LLMService;
65
64
  browserHandlers?: import('./domains/browser/index.js').BrowserToolHandlers;
66
65
  debuggerHandlers?: import('./domains/debugger/index.js').DebuggerToolHandlers;
67
66
  advancedHandlers?: import('./domains/network/index.js').AdvancedToolHandlers;
@@ -90,6 +89,8 @@ export interface DomainInstances {
90
89
  coordinationHandlers?: import('./domains/coordination/index.js').CoordinationHandlers;
91
90
  traceRecorder?: import('../modules/trace/TraceRecorder.js').TraceRecorder;
92
91
  traceHandlers?: import('./domains/trace/index.js').TraceToolHandlers;
92
+ evidenceHandlers?: import('./domains/evidence/index.js').EvidenceHandlers;
93
+ instrumentationHandlers?: import('./domains/instrumentation/index.js').InstrumentationHandlers | undefined;
93
94
  }
94
95
  export interface ServerMethods {
95
96
  registerCaches(): Promise<void>;
@@ -55,7 +55,6 @@ export declare class MCPServer implements MCPServerContext {
55
55
  debuggerManager: import('../modules/debugger/DebuggerManager.js').DebuggerManager | undefined;
56
56
  runtimeInspector: import('../modules/debugger/RuntimeInspector.js').RuntimeInspector | undefined;
57
57
  consoleMonitor: import('../modules/monitor/ConsoleMonitor.js').ConsoleMonitor | undefined;
58
- llm: import('../services/LLMService.js').LLMService | undefined;
59
58
  browserHandlers: import('./domains/browser/index.js').BrowserToolHandlers | undefined;
60
59
  debuggerHandlers: import('./domains/debugger/index.js').DebuggerToolHandlers | undefined;
61
60
  advancedHandlers: import('./domains/network/index.js').AdvancedToolHandlers | undefined;
@@ -82,6 +81,8 @@ export declare class MCPServer implements MCPServerContext {
82
81
  sourcemapHandlers: import('./domains/sourcemap/index.js').SourcemapToolHandlers | undefined;
83
82
  transformHandlers: import('./domains/transform/index.js').TransformToolHandlers | undefined;
84
83
  coordinationHandlers: import('./domains/coordination/index.js').CoordinationHandlers | undefined;
84
+ evidenceHandlers: import('./domains/evidence/index.js').EvidenceHandlers | undefined;
85
+ instrumentationHandlers: import('./domains/instrumentation/index.js').InstrumentationHandlers | undefined;
85
86
  constructor(config: Config);
86
87
  resolveEnabledDomains(tools: Tool[]): Set<string>;
87
88
  registerSingleTool(toolDef: Tool): RegisteredTool;
@@ -1,4 +1,4 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
2
  import type { MCPServerContext } from './MCPServer.context.js';
3
3
  export declare function resolveEnabledDomains(tools: Tool[]): Set<string>;
4
- export declare function createDomainProxy<T extends object>(ctx: MCPServerContext, domain: string, label: string, factory: () => T): T;
4
+ export declare function createDomainProxy<T extends object>(ctx: MCPServerContext, domain: string, label: string, factory: () => T | Promise<T>): T;