@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,48 +1,9 @@
1
- import { logger } from '../../utils/logger.js';
2
- import { generateBrowserEnvAnalysisMessages, generateAntiCrawlAnalysisMessages, generateAPIImplementationMessages, generateEnvironmentSuggestionsMessages, } from '../../services/prompts/environment.js';
3
1
  export class AIEnvironmentAnalyzer {
4
- llm;
5
- constructor(llm) {
6
- this.llm = llm;
2
+ constructor(legacyDependency) {
3
+ void legacyDependency;
7
4
  }
8
- async analyze(code, detected, missing, browserType = 'chrome') {
9
- if (!this.llm) {
10
- logger.warn('LLM service unavailable, skipping AI environment analysis');
11
- return this.getEmptyResult();
12
- }
13
- try {
14
- logger.info(' AI...');
15
- const response = await this.llm.chat(generateBrowserEnvAnalysisMessages(code, detected, missing, browserType));
16
- const result = this.parseAIResponse(response.content);
17
- logger.info(`AI environment analysis complete, confidence: ${(result.confidence * 100).toFixed(1)}%`);
18
- return result;
19
- }
20
- catch (error) {
21
- logger.error('AI', error);
22
- return this.getEmptyResult();
23
- }
24
- }
25
- parseAIResponse(response) {
26
- try {
27
- const jsonMatch = response.match(/```json\s*([\s\S]*?)\s*```/) || response.match(/\{[\s\S]*\}/);
28
- if (!jsonMatch) {
29
- logger.warn('AIJSON');
30
- return this.getEmptyResult();
31
- }
32
- const jsonStr = jsonMatch[1] || jsonMatch[0];
33
- const parsed = JSON.parse(jsonStr);
34
- return {
35
- recommendedVariables: parsed.recommendedVariables || {},
36
- recommendedAPIs: parsed.recommendedAPIs || [],
37
- antiCrawlFeatures: parsed.antiCrawlFeatures || [],
38
- suggestions: parsed.suggestions || [],
39
- confidence: parsed.confidence || 0.5,
40
- };
41
- }
42
- catch (error) {
43
- logger.error('AI', error);
44
- return this.getEmptyResult();
45
- }
5
+ async analyze(_code, _detected, _missing, _browserType = 'chrome') {
6
+ return this.getEmptyResult();
46
7
  }
47
8
  getEmptyResult() {
48
9
  return {
@@ -53,67 +14,14 @@ export class AIEnvironmentAnalyzer {
53
14
  confidence: 0,
54
15
  };
55
16
  }
56
- async analyzeAntiCrawl(code) {
57
- if (!this.llm) {
58
- return [];
59
- }
60
- try {
61
- const response = await this.llm.chat(generateAntiCrawlAnalysisMessages(code));
62
- const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
63
- response.content.match(/\[[\s\S]*\]/);
64
- if (jsonMatch) {
65
- const jsonStr = jsonMatch[1] || jsonMatch[0];
66
- return JSON.parse(jsonStr);
67
- }
68
- return [];
69
- }
70
- catch (error) {
71
- logger.error('', error);
72
- return [];
73
- }
17
+ async analyzeAntiCrawl(_code) {
18
+ return [];
74
19
  }
75
- async inferAPIImplementation(apiPath, context) {
76
- if (!this.llm) {
77
- return null;
78
- }
79
- try {
80
- const response = await this.llm.chat(generateAPIImplementationMessages(apiPath, context));
81
- const codeMatch = response.content.match(/```(?:javascript|js)?\s*([\s\S]*?)\s*```/);
82
- if (codeMatch?.[1]) {
83
- return codeMatch[1].trim();
84
- }
85
- const trimmed = response.content.trim();
86
- if (trimmed.includes('function') || trimmed.includes('const') || trimmed.includes('var')) {
87
- return trimmed;
88
- }
89
- return null;
90
- }
91
- catch (error) {
92
- logger.error('API', error);
93
- return null;
94
- }
20
+ async inferAPIImplementation(_apiPath, _context) {
21
+ return null;
95
22
  }
96
- async generateSuggestions(detected, missing, browserType) {
97
- if (!this.llm) {
98
- return this.getDefaultSuggestions(detected, missing);
99
- }
100
- try {
101
- const response = await this.llm.chat(generateEnvironmentSuggestionsMessages(detected, missing, browserType));
102
- const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
103
- response.content.match(/\[[\s\S]*\]/);
104
- if (jsonMatch) {
105
- const jsonStr = jsonMatch[1] || jsonMatch[0];
106
- const suggestions = JSON.parse(jsonStr);
107
- if (Array.isArray(suggestions) && suggestions.every((s) => typeof s === 'string')) {
108
- return suggestions;
109
- }
110
- }
111
- return this.getDefaultSuggestions(detected, missing);
112
- }
113
- catch (error) {
114
- logger.error('', error);
115
- return this.getDefaultSuggestions(detected, missing);
116
- }
23
+ async generateSuggestions(detected, missing, _browserType) {
24
+ return this.getDefaultSuggestions(detected, missing);
117
25
  }
118
26
  getDefaultSuggestions(detected, missing) {
119
27
  const suggestions = [];
@@ -1,9 +1,7 @@
1
1
  import type { EnvironmentEmulatorOptions, EnvironmentEmulatorResult } from '../../types/index.js';
2
- import type { LLMService } from '../../services/LLMService.js';
3
2
  export declare class EnvironmentEmulator {
4
3
  private browser?;
5
- private llm?;
6
- constructor(llm?: LLMService);
4
+ constructor(legacyDependency?: unknown);
7
5
  analyze(options: EnvironmentEmulatorOptions): Promise<EnvironmentEmulatorResult>;
8
6
  private detectEnvironmentVariables;
9
7
  private getMemberExpressionPath;
@@ -14,8 +12,6 @@ export declare class EnvironmentEmulator {
14
12
  private resolveExecutablePath;
15
13
  private identifyMissingAPIs;
16
14
  private getSuggestionForMissingAPI;
17
- private generateMissingAPIImplementationsWithAI;
18
- private inferMissingVariablesWithAI;
19
15
  cleanup(): Promise<void>;
20
16
  private isRecord;
21
17
  private isIdentifierNode;
@@ -3,18 +3,13 @@ import traverse from '@babel/traverse';
3
3
  import { existsSync } from 'fs';
4
4
  import { logger } from '../../utils/logger.js';
5
5
  import { chromeEnvironmentTemplate } from '../emulator/templates/chrome-env.js';
6
- import { generateMissingAPIImplementationsMessages, generateMissingVariablesMessages, } from '../../services/prompts/environment.js';
7
6
  import { generateEmulationCode, generateRecommendations } from '../emulator/EmulatorCodeGen.js';
8
7
  import { findBrowserExecutable } from '../../utils/browserExecutable.js';
9
8
  import { fetchRealEnvironmentData } from '../emulator/EnvironmentEmulatorFetch.js';
10
9
  export class EnvironmentEmulator {
11
10
  browser;
12
- llm;
13
- constructor(llm) {
14
- this.llm = llm;
15
- if (!llm) {
16
- logger.debug('LLM service unavailable, skipping AI environment analysis');
17
- }
11
+ constructor(legacyDependency) {
12
+ void legacyDependency;
18
13
  }
19
14
  async analyze(options) {
20
15
  const startTime = Date.now();
@@ -31,16 +26,7 @@ export class EnvironmentEmulator {
31
26
  else {
32
27
  variableManifest = this.buildManifestFromTemplate(detectedVariables, browserType);
33
28
  }
34
- if (this.llm) {
35
- logger.info(' AI...');
36
- const aiInferredVars = await this.inferMissingVariablesWithAI(code, detectedVariables, variableManifest, browserType);
37
- Object.assign(variableManifest, { ...aiInferredVars, ...variableManifest });
38
- }
39
29
  const missingAPIs = this.identifyMissingAPIs(detectedVariables, variableManifest);
40
- if (this.llm && missingAPIs.length > 0) {
41
- logger.info(` AI ${missingAPIs.length} API...`);
42
- await this.generateMissingAPIImplementationsWithAI(missingAPIs, code, variableManifest);
43
- }
44
30
  logger.info(' ...');
45
31
  const emulationCode = generateEmulationCode(variableManifest, targetRuntime, includeComments);
46
32
  const recommendations = generateRecommendations(detectedVariables, missingAPIs);
@@ -84,15 +70,14 @@ export class EnvironmentEmulator {
84
70
  sourceType: 'unambiguous',
85
71
  plugins: ['jsx', 'typescript'],
86
72
  });
87
- const self = this;
88
73
  traverse(ast, {
89
- MemberExpression(path) {
90
- const fullPath = self.getMemberExpressionPath(path.node);
74
+ MemberExpression: (path) => {
75
+ const fullPath = this.getMemberExpressionPath(path.node);
91
76
  if (fullPath) {
92
77
  accessedPaths.add(fullPath);
93
78
  }
94
79
  },
95
- Identifier(path) {
80
+ Identifier: (path) => {
96
81
  const name = path.node.name;
97
82
  if ([
98
83
  'window',
@@ -132,7 +117,7 @@ export class EnvironmentEmulator {
132
117
  }
133
118
  }
134
119
  for (const key of Object.keys(detected)) {
135
- detected[key] = Array.from(new Set(detected[key])).sort();
120
+ detected[key] = Array.from(new Set(detected[key])).toSorted();
136
121
  }
137
122
  }
138
123
  catch (error) {
@@ -182,7 +167,7 @@ export class EnvironmentEmulator {
182
167
  detected[category].push(...matches);
183
168
  }
184
169
  for (const key of Object.keys(detected)) {
185
- detected[key] = Array.from(new Set(detected[key])).sort();
170
+ detected[key] = Array.from(new Set(detected[key])).toSorted();
186
171
  }
187
172
  }
188
173
  buildManifestFromTemplate(detected, _browserType) {
@@ -307,75 +292,6 @@ export class EnvironmentEmulator {
307
292
  return `null: ${path} = null`;
308
293
  }
309
294
  }
310
- async generateMissingAPIImplementationsWithAI(missingAPIs, code, manifest) {
311
- if (!this.llm || missingAPIs.length === 0) {
312
- return;
313
- }
314
- try {
315
- const apisToGenerate = missingAPIs.slice(0, 10);
316
- const response = await this.llm.chat(generateMissingAPIImplementationsMessages(apisToGenerate, code));
317
- const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
318
- response.content.match(/\{[\s\S]*\}/);
319
- if (jsonMatch) {
320
- const jsonStr = jsonMatch[1] || jsonMatch[0];
321
- const implementations = JSON.parse(jsonStr);
322
- if (!this.isRecord(implementations)) {
323
- return;
324
- }
325
- let addedCount = 0;
326
- for (const [path, impl] of Object.entries(implementations)) {
327
- if (typeof impl === 'string' && impl.trim()) {
328
- manifest[path] = impl;
329
- addedCount++;
330
- }
331
- }
332
- logger.info(` AI ${addedCount} API`);
333
- }
334
- }
335
- catch (error) {
336
- logger.error('AIAPI', error);
337
- }
338
- }
339
- async inferMissingVariablesWithAI(code, detected, existingManifest, browserType) {
340
- if (!this.llm) {
341
- return {};
342
- }
343
- try {
344
- const allDetectedPaths = [
345
- ...detected.window,
346
- ...detected.document,
347
- ...detected.navigator,
348
- ...detected.location,
349
- ...detected.screen,
350
- ...detected.other,
351
- ];
352
- const missingPaths = allDetectedPaths.filter((path) => !(path in existingManifest));
353
- if (missingPaths.length === 0) {
354
- logger.info('Environment analysis complete, AI suggestions applied');
355
- return {};
356
- }
357
- logger.info(` AI ${missingPaths.length} ...`);
358
- const response = await this.llm.chat(generateMissingVariablesMessages(browserType, missingPaths, code, existingManifest));
359
- const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
360
- response.content.match(/\{[\s\S]*\}/);
361
- if (jsonMatch) {
362
- const jsonStr = jsonMatch[1] || jsonMatch[0];
363
- const inferredVars = JSON.parse(jsonStr);
364
- if (!this.isRecord(inferredVars)) {
365
- logger.warn('AIJSON');
366
- return {};
367
- }
368
- logger.info(` AI ${Object.keys(inferredVars).length} `);
369
- return inferredVars;
370
- }
371
- logger.warn('AIJSON');
372
- return {};
373
- }
374
- catch (error) {
375
- logger.error('AI', error);
376
- return {};
377
- }
378
- }
379
295
  async cleanup() {
380
296
  if (this.browser) {
381
297
  await this.browser.close();
@@ -1,5 +1,6 @@
1
1
  import puppeteer from 'rebrowser-puppeteer-core';
2
2
  import { logger } from '../../utils/logger.js';
3
+ const launchBrowser = Reflect.get(puppeteer, 'launch');
3
4
  export async function fetchRealEnvironmentData(params) {
4
5
  const { url, detected, depth, resolveExecutablePath, buildManifestFromTemplate } = params;
5
6
  const manifest = {};
@@ -26,67 +27,64 @@ export async function fetchRealEnvironmentData(params) {
26
27
  if (executablePath) {
27
28
  launchOptions.executablePath = executablePath;
28
29
  }
29
- browser = await puppeteer.launch(launchOptions);
30
+ browser = await launchBrowser(launchOptions);
30
31
  }
31
32
  page = await browser.newPage();
32
33
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
33
34
  await page.evaluateOnNewDocument(() => {
34
35
  const typedWindow = window;
35
- const setChromeObject = (target) => {
36
- target.chrome = {
37
- runtime: {
38
- connect: () => { },
39
- sendMessage: () => { },
40
- onMessage: {
41
- addListener: () => { },
42
- removeListener: () => { },
43
- },
44
- },
45
- loadTimes: function () {
46
- return {
47
- commitLoadTime: Date.now() / 1000 - Math.random() * 10,
48
- connectionInfo: 'http/1.1',
49
- finishDocumentLoadTime: Date.now() / 1000 - Math.random() * 5,
50
- finishLoadTime: Date.now() / 1000 - Math.random() * 3,
51
- firstPaintAfterLoadTime: 0,
52
- firstPaintTime: Date.now() / 1000 - Math.random() * 8,
53
- navigationType: 'Other',
54
- npnNegotiatedProtocol: 'http/1.1',
55
- requestTime: Date.now() / 1000 - Math.random() * 15,
56
- startLoadTime: Date.now() / 1000 - Math.random() * 12,
57
- wasAlternateProtocolAvailable: false,
58
- wasFetchedViaSpdy: false,
59
- wasNpnNegotiated: true,
60
- };
61
- },
62
- csi: function () {
63
- return {
64
- onloadT: Date.now(),
65
- pageT: Math.random() * 1000,
66
- startE: Date.now() - Math.random() * 5000,
67
- tran: 15,
68
- };
69
- },
70
- app: {
71
- isInstalled: false,
72
- InstallState: {
73
- DISABLED: 'disabled',
74
- INSTALLED: 'installed',
75
- NOT_INSTALLED: 'not_installed',
76
- },
77
- RunningState: {
78
- CANNOT_RUN: 'cannot_run',
79
- READY_TO_RUN: 'ready_to_run',
80
- RUNNING: 'running',
81
- },
82
- },
83
- };
84
- };
85
36
  Object.defineProperty(navigator, 'webdriver', {
86
37
  get: () => undefined,
87
38
  configurable: true,
88
39
  });
89
- setChromeObject(typedWindow);
40
+ typedWindow.chrome = {
41
+ runtime: {
42
+ connect: () => { },
43
+ sendMessage: () => { },
44
+ onMessage: {
45
+ addListener: () => { },
46
+ removeListener: () => { },
47
+ },
48
+ },
49
+ loadTimes: function () {
50
+ return {
51
+ commitLoadTime: Date.now() / 1000 - Math.random() * 10,
52
+ connectionInfo: 'http/1.1',
53
+ finishDocumentLoadTime: Date.now() / 1000 - Math.random() * 5,
54
+ finishLoadTime: Date.now() / 1000 - Math.random() * 3,
55
+ firstPaintAfterLoadTime: 0,
56
+ firstPaintTime: Date.now() / 1000 - Math.random() * 8,
57
+ navigationType: 'Other',
58
+ npnNegotiatedProtocol: 'http/1.1',
59
+ requestTime: Date.now() / 1000 - Math.random() * 15,
60
+ startLoadTime: Date.now() / 1000 - Math.random() * 12,
61
+ wasAlternateProtocolAvailable: false,
62
+ wasFetchedViaSpdy: false,
63
+ wasNpnNegotiated: true,
64
+ };
65
+ },
66
+ csi: function () {
67
+ return {
68
+ onloadT: Date.now(),
69
+ pageT: Math.random() * 1000,
70
+ startE: Date.now() - Math.random() * 5000,
71
+ tran: 15,
72
+ };
73
+ },
74
+ app: {
75
+ isInstalled: false,
76
+ InstallState: {
77
+ DISABLED: 'disabled',
78
+ INSTALLED: 'installed',
79
+ NOT_INSTALLED: 'not_installed',
80
+ },
81
+ RunningState: {
82
+ CANNOT_RUN: 'cannot_run',
83
+ READY_TO_RUN: 'ready_to_run',
84
+ RUNNING: 'running',
85
+ },
86
+ },
87
+ };
90
88
  Object.defineProperty(navigator, 'plugins', {
91
89
  get: () => {
92
90
  const pluginArray = [
@@ -170,13 +168,12 @@ export async function fetchRealEnvironmentData(params) {
170
168
  const extractedValues = await page.evaluate((paths, maxDepth) => {
171
169
  const result = {};
172
170
  const seen = new WeakSet();
173
- const isObjectLike = (value) => typeof value === 'object' && value !== null;
174
171
  function extractValue(path) {
175
172
  try {
176
173
  const parts = path.split('.');
177
174
  let current = window;
178
175
  for (const part of parts) {
179
- if (isObjectLike(current) && part in current) {
176
+ if (typeof current === 'object' && current !== null && part in current) {
180
177
  current = current[part];
181
178
  }
182
179
  else {
@@ -189,8 +186,8 @@ export async function fetchRealEnvironmentData(params) {
189
186
  return `[Error: ${error.message}]`;
190
187
  }
191
188
  }
192
- function serializeValue(value, depth, seenObjects) {
193
- if (depth <= 0)
189
+ function serializeValue(value, recurseDepth, seenObjects) {
190
+ if (recurseDepth <= 0)
194
191
  return '[Max Depth]';
195
192
  if (value === null)
196
193
  return null;
@@ -213,20 +210,20 @@ export async function fetchRealEnvironmentData(params) {
213
210
  return '[Function]';
214
211
  }
215
212
  }
216
- if (isObjectLike(value) && seenObjects.has(value)) {
213
+ if (typeof value === 'object' && value !== null && seenObjects.has(value)) {
217
214
  return '[Circular Reference]';
218
215
  }
219
216
  if (Array.isArray(value)) {
220
217
  seenObjects.add(value);
221
218
  const arr = value
222
219
  .slice(0, 20)
223
- .map((item) => serializeValue(item, depth - 1, seenObjects));
220
+ .map((item) => serializeValue(item, recurseDepth - 1, seenObjects));
224
221
  if (value.length > 20) {
225
222
  arr.push(`[... ${value.length - 20} more items]`);
226
223
  }
227
224
  return arr;
228
225
  }
229
- if (isObjectLike(value)) {
226
+ if (typeof value === 'object' && value !== null) {
230
227
  seenObjects.add(value);
231
228
  const serialized = {};
232
229
  const allKeys = Object.getOwnPropertyNames(value);
@@ -237,14 +234,14 @@ export async function fetchRealEnvironmentData(params) {
237
234
  if (descriptor) {
238
235
  if (descriptor.get) {
239
236
  try {
240
- serialized[key] = serializeValue(value[key], depth - 1, seenObjects);
237
+ serialized[key] = serializeValue(value[key], recurseDepth - 1, seenObjects);
241
238
  }
242
239
  catch {
243
240
  serialized[key] = '[Getter Error]';
244
241
  }
245
242
  }
246
243
  else if (descriptor.value !== undefined) {
247
- serialized[key] = serializeValue(descriptor.value, depth - 1, seenObjects);
244
+ serialized[key] = serializeValue(descriptor.value, recurseDepth - 1, seenObjects);
248
245
  }
249
246
  }
250
247
  }
@@ -162,17 +162,21 @@ export declare const chromeEnvironmentTemplate: {
162
162
  };
163
163
  };
164
164
  WebSocket: {
165
- new (_url: string): {
165
+ new (): {
166
166
  send(): void;
167
167
  close(): void;
168
168
  addEventListener(): void;
169
169
  };
170
170
  };
171
171
  Blob: {
172
- new (_parts: unknown[], _options?: unknown): {};
172
+ new (): {
173
+ size: number;
174
+ type: string;
175
+ };
173
176
  };
174
177
  File: {
175
- new (parts: BlobPart[], _name: string, options?: BlobPropertyBag): {
178
+ new (parts: BlobPart[], name: string, options?: BlobPropertyBag): {
179
+ name: string;
176
180
  readonly size: number;
177
181
  readonly type: string;
178
182
  arrayBuffer(): Promise<ArrayBuffer>;
@@ -202,16 +206,22 @@ export declare const chromeEnvironmentTemplate: {
202
206
  };
203
207
  };
204
208
  Request: {
205
- new (_input: unknown, _init?: unknown): {};
209
+ new (): {
210
+ clone(): any;
211
+ };
206
212
  };
207
213
  Response: {
208
- new (_body?: unknown, _init?: unknown): {};
214
+ new (): {
215
+ clone(): any;
216
+ };
209
217
  };
210
218
  URL: {
211
- new (_url: string, _base?: string): {};
219
+ new (): {
220
+ toString(): string;
221
+ };
212
222
  };
213
223
  URLSearchParams: {
214
- new (_init?: unknown): {
224
+ new (): {
215
225
  append(): void;
216
226
  delete(): void;
217
227
  get(): void;
@@ -161,17 +161,19 @@ export const chromeEnvironmentTemplate = {
161
161
  addEventListener() { }
162
162
  },
163
163
  WebSocket: class WebSocket {
164
- constructor(_url) { }
165
164
  send() { }
166
165
  close() { }
167
166
  addEventListener() { }
168
167
  },
169
168
  Blob: class Blob {
170
- constructor(_parts, _options) { }
169
+ size = 0;
170
+ type = '';
171
171
  },
172
172
  File: class File extends Blob {
173
- constructor(parts, _name, options) {
173
+ name = '';
174
+ constructor(parts, name, options) {
174
175
  super(parts, options);
176
+ this.name = name;
175
177
  }
176
178
  },
177
179
  FormData: class FormData {
@@ -190,16 +192,21 @@ export const chromeEnvironmentTemplate = {
190
192
  set() { }
191
193
  },
192
194
  Request: class Request {
193
- constructor(_input, _init) { }
195
+ clone() {
196
+ return this;
197
+ }
194
198
  },
195
199
  Response: class Response {
196
- constructor(_body, _init) { }
200
+ clone() {
201
+ return this;
202
+ }
197
203
  },
198
204
  URL: class URL {
199
- constructor(_url, _base) { }
205
+ toString() {
206
+ return '';
207
+ }
200
208
  },
201
209
  URLSearchParams: class URLSearchParams {
202
- constructor(_init) { }
203
210
  append() { }
204
211
  delete() { }
205
212
  get() { }
@@ -1,5 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { resolve, relative, sep } from 'node:path';
2
+ import { resolve, relative, sep, isAbsolute } from 'node:path';
3
3
  import { getProjectRoot } from '../../utils/outputPaths.js';
4
4
  import { logger } from '../../utils/logger.js';
5
5
  import { ioLimit } from '../../utils/concurrency.js';
@@ -37,9 +37,16 @@ export class ExternalToolRunner {
37
37
  const args = [...(spec.defaultArgs || []), ...request.args];
38
38
  const env = { PATH: process.env.PATH || '' };
39
39
  if (process.platform === 'win32') {
40
- env.SYSTEMROOT = process.env.SYSTEMROOT || 'C:\\Windows';
41
- env.TEMP = process.env.TEMP || '';
42
- env.TMP = process.env.TMP || '';
40
+ const systemRoot = process.env.SYSTEMROOT || process.env.SystemRoot || process.env.WINDIR;
41
+ if (systemRoot) {
42
+ env.SYSTEMROOT = systemRoot;
43
+ }
44
+ if (process.env.TEMP) {
45
+ env.TEMP = process.env.TEMP;
46
+ }
47
+ if (process.env.TMP) {
48
+ env.TMP = process.env.TMP;
49
+ }
43
50
  }
44
51
  if (spec.envAllowlist) {
45
52
  for (const key of spec.envAllowlist) {
@@ -66,13 +73,23 @@ export class ExternalToolRunner {
66
73
  let stdoutTruncated = false;
67
74
  let stderrTruncated = false;
68
75
  let settled = false;
69
- let timeoutHandle;
76
+ const timeoutHandle = setTimeout(() => {
77
+ if (!settled) {
78
+ child.kill('SIGTERM');
79
+ setTimeout(() => {
80
+ if (!settled) {
81
+ child.kill('SIGKILL');
82
+ finish(null, 'SIGKILL');
83
+ }
84
+ }, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS);
85
+ request.onProgress?.({ phase: 'timeout', ts: Date.now() });
86
+ }
87
+ }, timeoutMs);
70
88
  const finish = (exitCode, signal) => {
71
89
  if (settled)
72
90
  return;
73
91
  settled = true;
74
- if (timeoutHandle)
75
- clearTimeout(timeoutHandle);
92
+ clearTimeout(timeoutHandle);
76
93
  const durationMs = Date.now() - startTime;
77
94
  const result = {
78
95
  ok: exitCode === 0,
@@ -91,18 +108,6 @@ export class ExternalToolRunner {
91
108
  }
92
109
  resolvePromise(result);
93
110
  };
94
- timeoutHandle = setTimeout(() => {
95
- if (!settled) {
96
- child.kill('SIGTERM');
97
- setTimeout(() => {
98
- if (!settled) {
99
- child.kill('SIGKILL');
100
- finish(null, 'SIGKILL');
101
- }
102
- }, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS);
103
- request.onProgress?.({ phase: 'timeout', ts: Date.now() });
104
- }
105
- }, timeoutMs);
106
111
  if (request.stdin) {
107
112
  child.stdin.write(request.stdin);
108
113
  child.stdin.end();
@@ -153,13 +158,11 @@ export class ExternalToolRunner {
153
158
  const resolved = resolve(requestedCwd);
154
159
  const projectRoot = getProjectRoot();
155
160
  const rel = relative(projectRoot, resolved);
156
- if (rel && !rel.startsWith('..') && !resolve(rel).startsWith(sep)) {
161
+ if (rel && !rel.startsWith('..') && !isAbsolute(rel) && !resolve(rel).startsWith(sep)) {
157
162
  return resolved;
158
163
  }
159
164
  const tmpDirs = [process.env.TEMP, process.env.TMP, '/tmp', '/var/tmp'].filter(Boolean);
160
165
  for (const tmp of tmpDirs) {
161
- if (!tmp)
162
- continue;
163
166
  const resolvedTmp = resolve(tmp);
164
167
  if (resolved === resolvedTmp || resolved.startsWith(resolvedTmp + sep)) {
165
168
  return resolved;