@jshookmcp/jshook 0.2.2 → 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.
- package/LICENSE +661 -661
- package/README.md +15 -6
- package/README.zh.md +19 -4
- package/dist/native/scripts/linux/enum-windows.sh +12 -12
- package/dist/native/scripts/macos/enum-windows.applescript +22 -22
- package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
- package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
- package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
- package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
- package/dist/packages/extension-sdk/src/plugin.js +119 -33
- package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
- package/dist/packages/extension-sdk/src/workflow.js +236 -0
- package/dist/src/config/search-defaults.js +161 -0
- package/dist/src/constants.d.ts +3 -0
- package/dist/src/constants.js +4 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +13 -17
- package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
- package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
- package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
- package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
- package/dist/src/modules/analyzer/PatternDetector.js +3 -3
- package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
- package/dist/src/modules/browser/BrowserDiscovery.d.ts +6 -5
- package/dist/src/modules/browser/BrowserDiscovery.js +3 -3
- package/dist/src/modules/browser/BrowserModeManager.d.ts +1 -1
- package/dist/src/modules/browser/BrowserModeManager.js +11 -10
- package/dist/src/modules/browser/TabRegistry.js +2 -2
- package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
- package/dist/src/modules/browser/UnifiedBrowserManager.js +19 -4
- package/dist/src/modules/captcha/AICaptchaDetector.d.ts +14 -23
- package/dist/src/modules/captcha/AICaptchaDetector.js +8 -202
- package/dist/src/modules/captcha/CaptchaDetector.d.ts +31 -17
- package/dist/src/modules/captcha/CaptchaDetector.js +1 -1
- package/dist/src/modules/collector/CodeCache.d.ts +2 -2
- package/dist/src/modules/collector/CodeCollector.d.ts +12 -9
- package/dist/src/modules/collector/CodeCollector.js +5 -6
- package/dist/src/modules/collector/DOMInspector.d.ts +3 -2
- package/dist/src/modules/collector/DOMInspector.js +49 -59
- package/dist/src/modules/collector/PageController.d.ts +17 -4
- package/dist/src/modules/collector/PageController.js +2 -5
- package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
- package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
- package/dist/src/modules/crypto/CryptoDetector.js +2 -42
- package/dist/src/modules/crypto/CryptoRules.js +1 -1
- package/dist/src/modules/debugger/BlackboxManager.js +1 -1
- package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
- package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +5 -3
- package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
- package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
- package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +2 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +5 -57
- package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
- package/dist/src/modules/deobfuscator/PackerDeobfuscator.js +1 -1
- package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
- package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
- package/dist/src/modules/deobfuscator/webcrack.js +15 -2
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
- package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
- package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
- package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
- package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
- package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
- package/dist/src/modules/external/ExternalToolRunner.d.ts +1 -1
- package/dist/src/modules/external/ExternalToolRunner.js +26 -23
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
- package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
- package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
- package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
- package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
- package/dist/src/modules/process/LinuxProcessManager.js +4 -2
- package/dist/src/modules/process/MacProcessManager.js +1 -1
- package/dist/src/modules/process/MemoryManager.d.ts +1 -1
- package/dist/src/modules/process/MemoryManager.js +2 -2
- package/dist/src/modules/process/ProcessManager.impl.js +1 -1
- package/dist/src/modules/process/memory/AuditTrail.js +1 -1
- package/dist/src/modules/process/memory/reader.js +35 -3
- package/dist/src/modules/process/memory/regions.enumerate.js +1 -1
- package/dist/src/modules/process/memory/regions.protection.js +42 -9
- package/dist/src/modules/process/memory/scanner.d.ts +5 -1
- package/dist/src/modules/process/memory/scanner.darwin.js +57 -0
- package/dist/src/modules/process/memory/scanner.js +88 -4
- package/dist/src/modules/process/memory/writer.js +44 -4
- package/dist/src/modules/security/ExecutionSandbox.js +7 -8
- package/dist/src/modules/stealth/FingerprintManager.js +1 -1
- package/dist/src/modules/stealth/StealthScripts.d.ts +4 -2
- package/dist/src/modules/stealth/StealthScripts.js +53 -14
- package/dist/src/modules/stealth/StealthVerifier.d.ts +1 -1
- package/dist/src/modules/stealth/StealthVerifier.js +2 -4
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
- package/dist/src/modules/trace/TraceDB.js +12 -6
- package/dist/src/modules/trace/TraceRecorder.js +1 -5
- package/dist/src/native/AntiCheatDetector.js +67 -16
- package/dist/src/native/CodeInjector.js +4 -4
- package/dist/src/native/HardwareBreakpoint.js +25 -16
- package/dist/src/native/HeapAnalyzer.js +2 -2
- package/dist/src/native/MemoryController.js +1 -1
- package/dist/src/native/MemoryScanSession.js +2 -2
- package/dist/src/native/MemoryScanner.js +4 -8
- package/dist/src/native/NativeMemoryManager.impl.js +2 -2
- package/dist/src/native/PEAnalyzer.js +14 -15
- package/dist/src/native/PointerChainEngine.js +2 -4
- package/dist/src/native/ScriptLoader.js +4 -9
- package/dist/src/native/Speedhack.js +1 -1
- package/dist/src/native/StructureAnalyzer.js +52 -33
- package/dist/src/native/Win32API.d.ts +1 -0
- package/dist/src/native/Win32API.js +13 -0
- package/dist/src/native/Win32Debug.js +19 -19
- package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
- package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
- package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
- package/dist/src/server/MCPServer.context.d.ts +2 -1
- package/dist/src/server/MCPServer.d.ts +2 -1
- package/dist/src/server/MCPServer.domain.d.ts +1 -1
- package/dist/src/server/MCPServer.domain.js +81 -16
- package/dist/src/server/MCPServer.js +42 -14
- package/dist/src/server/MCPServer.resources.d.ts +2 -0
- package/dist/src/server/MCPServer.resources.js +91 -0
- package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
- package/dist/src/server/MCPServer.search.helpers.js +2 -2
- package/dist/src/server/MCPServer.tools.js +1 -1
- package/dist/src/server/MCPServer.transport.js +12 -0
- package/dist/src/server/ToolCallContextGuard.d.ts +5 -0
- package/dist/src/server/ToolCallContextGuard.js +85 -0
- package/dist/src/server/ToolRouter.d.ts +26 -10
- package/dist/src/server/ToolRouter.intent.d.ts +26 -0
- package/dist/src/server/ToolRouter.intent.js +77 -0
- package/dist/src/server/ToolRouter.js +103 -284
- package/dist/src/server/ToolRouter.policy.d.ts +22 -0
- package/dist/src/server/ToolRouter.policy.js +163 -0
- package/dist/src/server/ToolRouter.probe.d.ts +17 -0
- package/dist/src/server/ToolRouter.probe.js +103 -0
- package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
- package/dist/src/server/ToolRouter.renderer.js +52 -0
- package/dist/src/server/activation/ActivationController.js +15 -12
- package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
- package/dist/src/server/activation/PredictiveBooster.js +1 -3
- package/dist/src/server/domains/analysis/definitions.js +155 -655
- package/dist/src/server/domains/analysis/handlers.impl.d.ts +8 -8
- package/dist/src/server/domains/analysis/handlers.impl.js +34 -28
- package/dist/src/server/domains/analysis/handlers.web-tools.js +4 -3
- package/dist/src/server/domains/analysis/manifest.js +6 -4
- package/dist/src/server/domains/antidebug/definitions.js +25 -111
- package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
- package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
- package/dist/src/server/domains/browser/definitions.tools.page-core.js +157 -386
- package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
- package/dist/src/server/domains/browser/definitions.tools.runtime.js +61 -174
- package/dist/src/server/domains/browser/definitions.tools.security.js +92 -237
- package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
- package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
- package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
- package/dist/src/server/domains/browser/handlers/facade-initializer.d.ts +3 -3
- package/dist/src/server/domains/browser/handlers/facade-initializer.js +3 -3
- package/dist/src/server/domains/browser/handlers/framework-state.js +231 -3
- package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
- package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
- package/dist/src/server/domains/browser/handlers/stealth-injection.js +8 -2
- package/dist/src/server/domains/browser/handlers.impl.d.ts +15 -12
- package/dist/src/server/domains/browser/handlers.impl.js +5 -6
- package/dist/src/server/domains/browser/manifest.js +37 -13
- package/dist/src/server/domains/coordination/definitions.js +50 -149
- package/dist/src/server/domains/coordination/index.d.ts +20 -1
- package/dist/src/server/domains/coordination/index.js +133 -0
- package/dist/src/server/domains/coordination/manifest.js +15 -0
- package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
- package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
- package/dist/src/server/domains/debugger/manifest.js +9 -2
- package/dist/src/server/domains/encoding/definitions.js +43 -153
- package/dist/src/server/domains/encoding/handlers.base.js +2 -2
- package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
- package/dist/src/server/domains/evidence/definitions.js +42 -0
- package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
- package/dist/src/server/domains/evidence/handlers.js +60 -0
- package/dist/src/server/domains/evidence/index.d.ts +2 -0
- package/dist/src/server/domains/evidence/index.js +2 -0
- package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
- package/dist/src/server/domains/evidence/manifest.js +78 -0
- package/dist/src/server/domains/graphql/definitions.js +53 -141
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
- package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
- package/dist/src/server/domains/hooks/ai-handlers.js +4 -70
- package/dist/src/server/domains/hooks/definitions.js +69 -335
- package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
- package/dist/src/server/domains/hooks/manifest.js +1 -2
- package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/definitions.js +99 -0
- package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
- package/dist/src/server/domains/instrumentation/handlers.js +206 -0
- package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/index.js +2 -0
- package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
- package/dist/src/server/domains/instrumentation/manifest.js +114 -0
- package/dist/src/server/domains/macro/definitions.js +16 -43
- package/dist/src/server/domains/maintenance/definitions.js +60 -219
- package/dist/src/server/domains/maintenance/handlers.d.ts +2 -2
- package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
- package/dist/src/server/domains/maintenance/handlers.js +2 -2
- package/dist/src/server/domains/memory/definitions.js +387 -559
- package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
- package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
- package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
- package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
- package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
- package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
- package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
- package/dist/src/server/domains/memory/handlers/scan.js +97 -0
- package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
- package/dist/src/server/domains/memory/handlers/session.js +49 -0
- package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/structure.js +74 -0
- package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
- package/dist/src/server/domains/memory/handlers.impl.js +63 -494
- package/dist/src/server/domains/memory/manifest.js +236 -64
- package/dist/src/server/domains/native-bridge/definitions.js +54 -192
- package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
- package/dist/src/server/domains/native-bridge/index.js +2 -1
- package/dist/src/server/domains/network/auth-extractor.js +1 -1
- package/dist/src/server/domains/network/definitions.js +175 -578
- package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
- package/dist/src/server/domains/network/handlers.base.core.js +623 -0
- package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
- package/dist/src/server/domains/network/handlers.base.js +3 -878
- package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
- package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
- package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
- package/dist/src/server/domains/network/handlers.base.types.js +89 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
- package/dist/src/server/domains/network/manifest.js +15 -0
- package/dist/src/server/domains/network/replay.js +1 -4
- package/dist/src/server/domains/platform/definitions.js +121 -112
- package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +5 -1
- package/dist/src/server/domains/platform/handlers/bridge-handlers.js +194 -5
- package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.d.ts +1 -1
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +4 -4
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
- package/dist/src/server/domains/platform/handlers.d.ts +48 -0
- package/dist/src/server/domains/platform/handlers.js +29 -0
- package/dist/src/server/domains/platform/manifest.js +38 -0
- package/dist/src/server/domains/process/definitions.js +163 -647
- package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
- package/dist/src/server/domains/process/handlers.base.js +7 -462
- package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
- package/dist/src/server/domains/process/handlers.base.process.js +417 -0
- package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
- package/dist/src/server/domains/process/handlers.base.types.js +50 -0
- package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +19 -17
- package/dist/src/server/domains/process/manifest.js +6 -1
- package/dist/src/server/domains/sandbox/definitions.js +11 -33
- package/dist/src/server/domains/sandbox/handlers.js +8 -3
- package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
- package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
- package/dist/src/server/domains/shared/modules.d.ts +0 -2
- package/dist/src/server/domains/shared/modules.js +0 -1
- package/dist/src/server/domains/sourcemap/definitions.js +27 -111
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
- package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
- package/dist/src/server/domains/sourcemap/manifest.js +1 -1
- package/dist/src/server/domains/streaming/definitions.js +36 -148
- package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
- package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
- package/dist/src/server/domains/trace/TraceSummarizer.d.ts +60 -0
- package/dist/src/server/domains/trace/TraceSummarizer.js +112 -0
- package/dist/src/server/domains/trace/definitions.tools.js +51 -176
- package/dist/src/server/domains/trace/handlers.d.ts +2 -1
- package/dist/src/server/domains/trace/handlers.js +62 -9
- package/dist/src/server/domains/trace/index.d.ts +2 -1
- package/dist/src/server/domains/trace/index.js +2 -1
- package/dist/src/server/domains/trace/manifest.js +18 -4
- package/dist/src/server/domains/transform/definitions.js +50 -210
- package/dist/src/server/domains/transform/handlers.impl.transform-base.js +6 -6
- package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
- package/dist/src/server/domains/transform/manifest.d.ts +1 -1
- package/dist/src/server/domains/transform/manifest.js +1 -1
- package/dist/src/server/domains/wasm/definitions.js +55 -232
- package/dist/src/server/domains/wasm/handlers.js +3 -3
- package/dist/src/server/domains/workflow/definitions.js +144 -414
- package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +2 -2
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
- package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
- package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
- package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
- package/dist/src/server/evidence/index.d.ts +2 -0
- package/dist/src/server/evidence/index.js +1 -0
- package/dist/src/server/evidence/types.d.ts +22 -0
- package/dist/src/server/evidence/types.js +1 -0
- package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
- package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
- package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
- package/dist/src/server/extensions/ExtensionManager.js +193 -40
- package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
- package/dist/src/server/extensions/ExtensionManager.roots.js +19 -9
- package/dist/src/server/extensions/plugin-config.js +1 -1
- package/dist/src/server/extensions/plugin-env.d.ts +1 -1
- package/dist/src/server/extensions/plugin-env.js +10 -4
- package/dist/src/server/extensions/types.d.ts +17 -0
- package/dist/src/server/extensions/types.js +1 -1
- package/dist/src/server/http/HttpMiddleware.js +1 -1
- package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
- package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
- package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
- package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
- package/dist/src/server/instrumentation/index.d.ts +2 -0
- package/dist/src/server/instrumentation/index.js +2 -0
- package/dist/src/server/instrumentation/types.d.ts +62 -0
- package/dist/src/server/instrumentation/types.js +7 -0
- package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
- package/dist/src/server/macros/MacroConfigLoader.js +61 -59
- package/dist/src/server/macros/MacroRunner.js +6 -2
- package/dist/src/server/macros/builtins/index.d.ts +2 -3
- package/dist/src/server/macros/builtins/index.js +51 -7
- package/dist/src/server/plugins/PluginContract.d.ts +1 -1
- package/dist/src/server/registry/contracts.d.ts +7 -1
- package/dist/src/server/registry/discovery.js +5 -4
- package/dist/src/server/registry/ensure-browser-core.js +0 -3
- package/dist/src/server/registry/index.js +4 -4
- package/dist/src/server/registry/tool-builder.d.ts +46 -0
- package/dist/src/server/registry/tool-builder.js +105 -0
- package/dist/src/server/sandbox/MCPBridge.d.ts +9 -0
- package/dist/src/server/sandbox/MCPBridge.js +22 -0
- package/dist/src/server/sandbox/QuickJSSandbox.d.ts +4 -1
- package/dist/src/server/sandbox/QuickJSSandbox.js +162 -2
- package/dist/src/server/sandbox/types.d.ts +13 -0
- package/dist/src/server/search/AffinityGraph.d.ts +7 -1
- package/dist/src/server/search/AffinityGraph.js +24 -3
- package/dist/src/server/search/EmbeddingWorker.js +5 -3
- package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
- package/dist/src/server/search/FeedbackTracker.js +26 -0
- package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
- package/dist/src/server/search/QueryNormalizer.js +94 -0
- package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
- package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
- package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
- package/dist/src/server/workflows/WorkflowContract.js +12 -0
- package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
- package/dist/src/server/workflows/WorkflowEngine.js +136 -3
- package/dist/src/types/config.d.ts +0 -14
- package/dist/src/types/deobfuscator.d.ts +0 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/utils/DetailedDataManager.js +2 -0
- package/dist/src/utils/RingBuffer.js +5 -5
- package/dist/src/utils/TokenBudgetManager.js +1 -1
- package/dist/src/utils/UnifiedCacheManager.d.ts +1 -1
- package/dist/src/utils/UnifiedCacheManager.js +3 -3
- package/dist/src/utils/artifactRetention.js +2 -2
- package/dist/src/utils/betterSqlite3.d.ts +11 -0
- package/dist/src/utils/betterSqlite3.js +88 -0
- package/dist/src/utils/browserExecutable.js +2 -2
- package/dist/src/utils/cliFastPath.js +17 -6
- package/dist/src/utils/config.js +4 -26
- package/dist/src/utils/environmentDoctor.js +138 -11
- package/dist/src/utils/outputPaths.js +16 -9
- package/dist/src/utils/parallel.js +1 -3
- package/package.json +76 -72
- package/scripts/postinstall.cjs +37 -37
- package/src/native/scripts/linux/enum-windows.sh +12 -12
- package/src/native/scripts/macos/enum-windows.applescript +22 -22
- package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/src/native/scripts/windows/enum-windows.ps1 +44 -44
- package/src/native/scripts/windows/inject-dll.ps1 +21 -21
- package/workflows/.gitkeep +0 -0
- package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
- package/dist/src/modules/analyzer/AISummarizer.js +0 -122
- package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
- package/dist/src/modules/hook/AIHookGenerator.js +0 -360
- package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
- package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
- package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
- package/dist/src/services/LLMService.d.ts +0 -37
- package/dist/src/services/LLMService.js +0 -233
- package/dist/src/services/prompts/analysis.d.ts +0 -9
- package/dist/src/services/prompts/analysis.js +0 -158
- package/dist/src/services/prompts/crypto.d.ts +0 -2
- package/dist/src/services/prompts/crypto.js +0 -108
- package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
- package/dist/src/services/prompts/deobfuscation.js +0 -300
- package/dist/src/services/prompts/environment.d.ts +0 -16
- package/dist/src/services/prompts/environment.js +0 -372
- package/dist/src/services/prompts/intelligence.d.ts +0 -4
- package/dist/src/services/prompts/intelligence.js +0 -250
- package/dist/src/services/prompts/taint.d.ts +0 -2
- package/dist/src/services/prompts/taint.js +0 -54
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { logger } from '../../utils/logger.js';
|
|
2
|
-
import { VM_DEOBF_LLM_MAX_TOKENS } from '../../constants.js';
|
|
3
|
-
import { LLMService } from '../../services/LLMService.js';
|
|
4
2
|
import * as parser from '@babel/parser';
|
|
5
3
|
import traverse from '@babel/traverse';
|
|
6
4
|
import * as t from '@babel/types';
|
|
7
|
-
import { generateVMDeobfuscationMessages } from '../../services/prompts/deobfuscation.js';
|
|
8
5
|
export class VMDeobfuscator {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.llm = llm;
|
|
6
|
+
constructor(legacyDependency) {
|
|
7
|
+
void legacyDependency;
|
|
12
8
|
}
|
|
13
9
|
detectVMProtection(code) {
|
|
14
10
|
const vmPatterns = [
|
|
@@ -31,7 +27,7 @@ export class VMDeobfuscator {
|
|
|
31
27
|
const match = code.match(/case\s+\d+:/g);
|
|
32
28
|
return match ? match.length : 0;
|
|
33
29
|
}
|
|
34
|
-
async deobfuscateVM(code,
|
|
30
|
+
async deobfuscateVM(code, _vmInfo) {
|
|
35
31
|
logger.warn('VM deobfuscation is experimental and may fail');
|
|
36
32
|
try {
|
|
37
33
|
const vmStructure = this.analyzeVMStructure(code);
|
|
@@ -39,24 +35,6 @@ export class VMDeobfuscator {
|
|
|
39
35
|
logger.info(`Detected VM interpreter with ${vmStructure.instructionTypes.length} instruction types`);
|
|
40
36
|
}
|
|
41
37
|
const vmComponents = this.extractVMComponents(code);
|
|
42
|
-
if (this.llm) {
|
|
43
|
-
const prompt = this.buildVMDeobfuscationPrompt(code, vmInfo, vmStructure, vmComponents);
|
|
44
|
-
const response = await this.llm.chat(generateVMDeobfuscationMessages(prompt), {
|
|
45
|
-
temperature: 0.05,
|
|
46
|
-
maxTokens: VM_DEOBF_LLM_MAX_TOKENS,
|
|
47
|
-
});
|
|
48
|
-
const deobfuscatedCode = this.extractCodeFromLLMResponse(response.content);
|
|
49
|
-
if (this.isValidJavaScript(deobfuscatedCode)) {
|
|
50
|
-
logger.success('VM deobfuscation succeeded via LLM');
|
|
51
|
-
return {
|
|
52
|
-
success: true,
|
|
53
|
-
code: deobfuscatedCode,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
logger.warn('LLM output is not valid JavaScript, falling back to original');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
38
|
const simplifiedCode = this.simplifyVMCode(code, vmComponents);
|
|
61
39
|
return {
|
|
62
40
|
success: simplifiedCode !== code,
|
|
@@ -134,91 +112,6 @@ export class VMDeobfuscator {
|
|
|
134
112
|
}
|
|
135
113
|
return components;
|
|
136
114
|
}
|
|
137
|
-
buildVMDeobfuscationPrompt(code, vmInfo, vmStructure, vmComponents) {
|
|
138
|
-
const codeSnippet = code.length > 2000 ? code.slice(0, 2000) + '\n...(truncated)' : code;
|
|
139
|
-
return `# VM Deobfuscation Analysis
|
|
140
|
-
|
|
141
|
-
## VM Profile
|
|
142
|
-
- **Architecture**: ${vmInfo.type}
|
|
143
|
-
- **Instruction Count**: ${vmInfo.instructionCount}
|
|
144
|
-
- **Interpreter Loop**: ${vmStructure.hasInterpreter ? 'Detected' : 'Not detected'}
|
|
145
|
-
- **Stack Operations**: ${vmStructure.hasStack ? 'Present' : 'Absent'}
|
|
146
|
-
- **Register Usage**: ${vmStructure.hasRegisters ? 'Present' : 'Absent'}
|
|
147
|
-
- **Instruction Variety**: ${vmStructure.instructionTypes.length} distinct types
|
|
148
|
-
|
|
149
|
-
## Identified Components
|
|
150
|
-
${vmComponents.instructionArray ? ` Instruction Array: Found at ${vmComponents.instructionArray}` : ' Instruction Array: Not found'}
|
|
151
|
-
${vmComponents.dataArray ? ` Data Array: Found at ${vmComponents.dataArray}` : ' Data Array: Not found'}
|
|
152
|
-
${vmComponents.interpreterFunction ? ` Interpreter Function: Found at ${vmComponents.interpreterFunction}` : ' Interpreter Function: Not found'}
|
|
153
|
-
|
|
154
|
-
## VM-Protected Code
|
|
155
|
-
\`\`\`javascript
|
|
156
|
-
${codeSnippet}
|
|
157
|
-
\`\`\`
|
|
158
|
-
|
|
159
|
-
## Deobfuscation Instructions (Chain-of-Thought)
|
|
160
|
-
|
|
161
|
-
### Step 1: VM Structure Analysis
|
|
162
|
-
Examine the code to identify:
|
|
163
|
-
- Instruction array (usually a large array of numbers/strings)
|
|
164
|
-
- Interpreter loop (while/for loop processing instructions)
|
|
165
|
-
- Stack/register variables
|
|
166
|
-
- Opcode handlers (switch-case or if-else chains)
|
|
167
|
-
|
|
168
|
-
### Step 2: Instruction Decoding
|
|
169
|
-
For each instruction type, determine:
|
|
170
|
-
- What JavaScript operation it represents (e.g., opcode 0x01 = addition)
|
|
171
|
-
- How it manipulates the stack/registers
|
|
172
|
-
- What side effects it has (function calls, property access, etc.)
|
|
173
|
-
|
|
174
|
-
### Step 3: Control Flow Reconstruction
|
|
175
|
-
- Map VM jumps/branches to JavaScript if/while/for statements
|
|
176
|
-
- Identify function calls and returns
|
|
177
|
-
- Reconstruct try-catch blocks if present
|
|
178
|
-
|
|
179
|
-
### Step 4: Code Generation
|
|
180
|
-
- Replace VM instruction sequences with equivalent JavaScript
|
|
181
|
-
- Use meaningful variable names based on usage context
|
|
182
|
-
- Remove VM overhead (interpreter loop, stack management)
|
|
183
|
-
- Preserve all side effects and program behavior
|
|
184
|
-
|
|
185
|
-
### Step 5: Validation
|
|
186
|
-
- Ensure output is syntactically valid JavaScript
|
|
187
|
-
- Verify no functionality is lost
|
|
188
|
-
- Add comments for complex patterns
|
|
189
|
-
|
|
190
|
-
## Example Transformation (Few-shot Learning)
|
|
191
|
-
|
|
192
|
-
**VM Code (Before)**:
|
|
193
|
-
\`\`\`javascript
|
|
194
|
-
var vm = [0x01, 0x05, 0x02, 0x03, 0x10];
|
|
195
|
-
var stack = [];
|
|
196
|
-
for(var i=0; i<vm.length; i++) {
|
|
197
|
-
switch(vm[i]) {
|
|
198
|
-
case 0x01: stack.push(5); break;
|
|
199
|
-
case 0x02: stack.push(3); break;
|
|
200
|
-
case 0x10: var b=stack.pop(), a=stack.pop(); stack.push(a+b); break;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
console.log(stack[0]);
|
|
204
|
-
\`\`\`
|
|
205
|
-
|
|
206
|
-
**Deobfuscated Code (After)**:
|
|
207
|
-
\`\`\`javascript
|
|
208
|
-
var result = 5 + 3;
|
|
209
|
-
console.log(result);
|
|
210
|
-
\`\`\`
|
|
211
|
-
|
|
212
|
-
## Critical Requirements
|
|
213
|
-
1. Output ONLY the deobfuscated JavaScript code
|
|
214
|
-
2. NO markdown code blocks, NO explanations, NO comments outside the code
|
|
215
|
-
3. Code must be syntactically valid and executable
|
|
216
|
-
4. Preserve exact program logic and side effects
|
|
217
|
-
5. If full deobfuscation is impossible, return the best partial result
|
|
218
|
-
|
|
219
|
-
## Output Format
|
|
220
|
-
Return clean JavaScript code starting immediately (no preamble).`;
|
|
221
|
-
}
|
|
222
115
|
simplifyVMCode(code, vmComponents) {
|
|
223
116
|
try {
|
|
224
117
|
let simplified = code;
|
|
@@ -237,22 +130,4 @@ Return clean JavaScript code starting immediately (no preamble).`;
|
|
|
237
130
|
return code;
|
|
238
131
|
}
|
|
239
132
|
}
|
|
240
|
-
extractCodeFromLLMResponse(response) {
|
|
241
|
-
let code = response.trim();
|
|
242
|
-
code = code.replace(/^```(?:javascript|js)?\s*\n/i, '');
|
|
243
|
-
code = code.replace(/\n```\s*$/i, '');
|
|
244
|
-
return code.trim();
|
|
245
|
-
}
|
|
246
|
-
isValidJavaScript(code) {
|
|
247
|
-
try {
|
|
248
|
-
parser.parse(code, {
|
|
249
|
-
sourceType: 'module',
|
|
250
|
-
plugins: ['jsx', 'typescript'],
|
|
251
|
-
});
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
return false;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
133
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readdir, rm, stat } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import vm from 'node:vm';
|
|
3
4
|
import { logger } from '../../utils/logger.js';
|
|
4
5
|
const DEFAULT_OPTIONS = {
|
|
5
6
|
jsx: true,
|
|
@@ -60,7 +61,7 @@ function applyBundleMappings(bundle, mappings) {
|
|
|
60
61
|
function summarizeBundle(bundle, options, remapped) {
|
|
61
62
|
const maxBundleModules = options.maxBundleModules ?? MAX_BUNDLE_MODULES;
|
|
62
63
|
const modules = Array.from(bundle.modules.values())
|
|
63
|
-
.
|
|
64
|
+
.toSorted((left, right) => {
|
|
64
65
|
if (left.isEntry !== right.isEntry) {
|
|
65
66
|
return left.isEntry ? -1 : 1;
|
|
66
67
|
}
|
|
@@ -103,7 +104,7 @@ async function collectSavedArtifacts(rootDir, currentDir = rootDir) {
|
|
|
103
104
|
type: 'file',
|
|
104
105
|
});
|
|
105
106
|
}
|
|
106
|
-
return artifacts.
|
|
107
|
+
return artifacts.toSorted((left, right) => left.path.localeCompare(right.path));
|
|
107
108
|
}
|
|
108
109
|
export async function runWebcrack(code, options) {
|
|
109
110
|
const optionsUsed = normalizeOptions(options);
|
|
@@ -117,6 +118,17 @@ export async function runWebcrack(code, options) {
|
|
|
117
118
|
reason,
|
|
118
119
|
};
|
|
119
120
|
}
|
|
121
|
+
let sandboxOption;
|
|
122
|
+
try {
|
|
123
|
+
await import('isolated-vm');
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
logger.warn('isolated-vm is unavailable (likely Node 24 incompatibility). Falling back to native node:vm for deobfuscation sandbox.');
|
|
127
|
+
sandboxOption = async (evalCode) => {
|
|
128
|
+
const context = vm.createContext(Object.create(null));
|
|
129
|
+
return vm.runInContext(evalCode, context, { timeout: 8000 });
|
|
130
|
+
};
|
|
131
|
+
}
|
|
120
132
|
try {
|
|
121
133
|
const { webcrack } = (await import('webcrack'));
|
|
122
134
|
const result = await webcrack(code, {
|
|
@@ -125,6 +137,7 @@ export async function runWebcrack(code, options) {
|
|
|
125
137
|
deobfuscate: true,
|
|
126
138
|
unminify: optionsUsed.unminify,
|
|
127
139
|
mangle: optionsUsed.mangle,
|
|
140
|
+
...(sandboxOption ? { sandbox: sandboxOption } : {}),
|
|
128
141
|
});
|
|
129
142
|
const remapped = result.bundle
|
|
130
143
|
? applyBundleMappings(result.bundle, options.mappings)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { LLMService } from '../../services/LLMService.js';
|
|
2
1
|
import type { DetectedEnvironmentVariables, MissingAPI } from '../../types/index.js';
|
|
3
2
|
import type { BrowserType } from '../emulator/BrowserEnvironmentRules.js';
|
|
4
3
|
export interface AIAnalysisResult {
|
|
@@ -18,13 +17,11 @@ export interface AIAnalysisResult {
|
|
|
18
17
|
confidence: number;
|
|
19
18
|
}
|
|
20
19
|
export declare class AIEnvironmentAnalyzer {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
analyze(code: string, detected: DetectedEnvironmentVariables, missing: MissingAPI[], browserType?: BrowserType): Promise<AIAnalysisResult>;
|
|
24
|
-
private parseAIResponse;
|
|
20
|
+
constructor(legacyDependency?: unknown);
|
|
21
|
+
analyze(_code: string, _detected: DetectedEnvironmentVariables, _missing: MissingAPI[], _browserType?: BrowserType): Promise<AIAnalysisResult>;
|
|
25
22
|
private getEmptyResult;
|
|
26
|
-
analyzeAntiCrawl(
|
|
27
|
-
inferAPIImplementation(
|
|
28
|
-
generateSuggestions(detected: DetectedEnvironmentVariables, missing: MissingAPI[],
|
|
23
|
+
analyzeAntiCrawl(_code: string): Promise<AIAnalysisResult['antiCrawlFeatures']>;
|
|
24
|
+
inferAPIImplementation(_apiPath: string, _context: string): Promise<string | null>;
|
|
25
|
+
generateSuggestions(detected: DetectedEnvironmentVariables, missing: MissingAPI[], _browserType: BrowserType): Promise<string[]>;
|
|
29
26
|
private getDefaultSuggestions;
|
|
30
27
|
}
|
|
@@ -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
|
-
|
|
5
|
-
|
|
6
|
-
this.llm = llm;
|
|
2
|
+
constructor(legacyDependency) {
|
|
3
|
+
void legacyDependency;
|
|
7
4
|
}
|
|
8
|
-
async analyze(
|
|
9
|
-
|
|
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(
|
|
57
|
-
|
|
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(
|
|
76
|
-
|
|
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 && 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,
|
|
97
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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 =
|
|
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])).
|
|
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])).
|
|
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();
|